Dharmamitra OCR for Tibetan / Sanskrit / Devanagari images; writes extracted text to a file.
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx mcp-dharmamitra
MCP client config
{
"mcpServers": {
"dharmamitra": {
"command": "uvx",
"args": [
"mcp-dharmamitra"
]
}
}
}MCP server that runs OCR on an image via the public Dharmamitra OCR endpoint and writes the extracted text to a local file. Optimised for Tibetan / Sanskrit / Devanagari input.
ocr_image| Argument | Type | Default | Notes |
|---|---|---|---|
image_path | str | — | Absolute path to a local image (png/jpg/…). |
output_path | str | — | File to write UTF-8 text into. Parent dirs are created. |
transliterate_devanagari_to_iast | bool | false | Passed to the API. |
transliterate_tibetan_to_wylie | bool | false | Passed to the API. |
instruction | str | "" | Optional model instruction. |
model | str | "auto" | OCR model id. |
poll_interval_seconds | float | 2.0 | Delay between status polls. |
timeout_seconds | float | 300.0 | Overall polling deadline. |
Returns a small JSON summary — the extracted text is written to output_path,
not returned to the client.
{
"job_id": "b8b26984b3ca49199c28303cad6a144d",
"output_path": "/abs/path/out.txt",
"pages": 1,
"processing_time_seconds": 3.957,
"chars": 1234
}
Listed as io.github.alex-deus/mcp-dharmamitra
on the official Model Context Protocol registry. The package ships to PyPI as
mcp-dharmamitra and is meant to
be run with uvx — no clone, no manual install.
~/Library/Application Support/Claude/claude_desktop_config.json (or the
equivalent mcp block in Claude Code):
{
"mcpServers": {
"dharmamitra": {
"command": "uvx",
"args": ["mcp-dharmamitra"],
"env": {"DHARMAMITRA_COOKIE": ""}
}
}
}
Or via the Claude Code CLI:
claude mcp add dharmamitra -e DHARMAMITRA_COOKIE="" -- uvx mcp-dharmamitra
Pin a specific version with uvx mcp-dharmamitra@0.1.0.
uv sync # or: pip install -e '.[dev]'
Run locally with the MCP inspector:
uv run mcp dev src/mcp_dharmamitra/server.py
Run tests:
uv run pytest
For a source checkout the Claude Desktop entry uses the local path:
{
"mcpServers": {
"dharmamitra": {
"command": "uv",
"args": ["--directory", "/path/mcp-dharmamitra", "run", "mcp-dharmamitra"],
"env": {"DHARMAMITRA_COOKIE": ""}
}
}
}
Build the image:
docker build -t mcp-dharmamitra:latest .
MCP talks over stdio, so the container must be run with -i (no -t). Mount
a host directory that holds the input images — the tool arguments
(image_path, output_path) are paths inside the container.
Smoke-test the entrypoint:
docker run --rm --entrypoint python mcp-dharmamitra:latest \
-c "from mcp_dharmamitra.server import mcp; print(mcp.name)"
Replace /path/mcp-dharmamitra with any host
directory you want the tool to be able to read/write. Files inside it will be
visible under /data in the container.
{
"mcpServers": {
"dharmamitra": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/path/mcp-dharmamitra/data:/data",
"-e", "DHARMAMITRA_COOKIE",
"mcp-dharmamitra:latest"
],
"env": {
"DHARMAMITRA_COOKIE": ""
}
}
}
}
Or the same via CLI:
claude mcp add dharmamitra \
--scope project \
-e DHARMAMITRA_COOKIE="" \
-- docker run -i --rm \
-v /path/mcp-dharmamitra/data:/data \
-e DHARMAMITRA_COOKIE \
mcp-dharmamitra:latest
When calling the tool, pass container paths. Example — image at
<host>/tmp/text.png → /data/text.png:
{
"image_path": "/data/text.png",
"output_path": "/data/text.txt"
}
The resulting text.txt appears in the mounted host directory.
cf_clearanceThe endpoint sits behind Cloudflare. Most requests go through without any
cookie. If you start getting 403, grab a fresh cf_clearance value from a
logged-in browser session on dharmamitra.org and export it:
export DHARMAMITRA_COOKIE='cf_clearance value here'
The server will attach it as a cookie on every request. Do not hardcode it — Cloudflare rotates the value.