About ocr
PennyOCR is a hosted MCP server for agents and clients that need to extract text from PDFs and images by URL. It returns Markdown or plain text, with page citations, exact cost estimates, and spending caps.
Key features
- 01PDF and image text extraction
- 02Markdown output with tables
- 03Plain-text output
- 04Exact page and cost estimates
- 05Pre-processing spend caps
Use cases
- 01Extracting text from linked documents
- 02Preserving tables from PDFs
- 03Estimating processing costs before reading
- 04Limiting automated document-processing spend
MCP support
A hosted, stateless MCP server exposes `read_document`, `estimate_cost`, and `check_balance` over Streamable HTTP. Clients can connect to `https://mcp.pennyocr.com` using an API key.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.pennyocr.comclaude mcp add --transport http com-pennyocr-ocr https://mcp.pennyocr.com{"mcpServers":{"com-pennyocr-ocr":{"type":"http","url":"https://mcp.pennyocr.com"}}}Open in Cursor{"servers":{"com-pennyocr-ocr":{"type":"http","url":"https://mcp.pennyocr.com"}}}Open in VS Code{"mcpServers":{"com-pennyocr-ocr":{"type":"http","url":"https://mcp.pennyocr.com"}}}{"mcpServers":{"com-pennyocr-ocr":{"serverUrl":"https://mcp.pennyocr.com"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://mcp.pennyocr.comAuth requiredTools
2| Parameter | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | http(s) URL of the PDF or image |
| pages | string | No | Page range like '1-20,25'. Default: all pages. |
| output | enum | No | Output format. Default markdown.markdown | text |
| max_pages | integer | No | Refuse (with the numbers) if selection exceeds this many pages. |
| max_cost_usd | number | No | Refuse (with the numbers) if the run would cost more than this. |
Details
From the project README🪙 PennyOCR MCP server
A remote Model Context Protocol server that gives any agent document-reading eyes: PDFs and images by URL → markdown (tables preserved) or plain text, with exact cost reporting and hard spend caps.
Hosted at https://mcp.pennyocr.com — nothing to install:
{
"mcpServers": {
"pennyocr": {
"url": "https://mcp.pennyocr.com",
"headers": { "Authorization": "Bearer pk_live_..." }
}
}
}
Keys are free (first 100 pages free) at pennyocr.com/dashboard.
Clients that can't set headers: https://mcp.pennyocr.com/?key=pk_live_...
Tools
| Tool | Input | Output |
|---|---|---|
read_document | {url, pages?, output?, max_pages?, max_cost_usd?} | {content, pages, cost_usd, citations[]} |
estimate_cost | {url, pages?} | page count + exact cost — free |
check_balance | {} | remaining credits + free-tier allowance — free |
The cost caps refuse before any processing, with the numbers — so autonomous agents can reason about spend ("200 pages, $0.15 — proceed") and can never run past a prepaid balance.
Transport
Streamable HTTP (JSON-RPC 2.0 over POST), stateless. This repo is the complete server —
a single Cloudflare Worker (worker.js) proxying the PennyOCR API.
Pricing: $0.75 per 1,000 pages · pennyocr.com/pricing.txt · Agent onboarding: pennyocr.com/llms.txt
Cursor plugin
This repository includes a Cursor plugin manifest at .cursor-plugin/plugin.json and a plugin-specific mcp.json. In the plugin configuration, set PENNYOCR_API_KEY to your own API key from https://pennyocr.com/dashboard/. The repository contains only a variable placeholder, never a live key. Document reading uses your PennyOCR credits; use cost estimates and spend caps as appropriate. The separate .mcp.json uses Cursor environment-variable interpolation for direct MCP configuration.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.