fastocr-mcp 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,13 @@
1
+ __pycache__/
2
+ *.pyc
3
+ .pytest_cache/
4
+ *.egg-info/
5
+ dist/
6
+ build/
7
+ .venv/
8
+ venv/
9
+ .env
10
+ .mypy_cache/
11
+ .ruff_cache/
12
+ .DS_Store
13
+ .mcpregistry_*
@@ -0,0 +1,13 @@
1
+ # Changelog
2
+
3
+ All notable changes to this server are listed here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and versions follow
5
+ [semantic versioning](https://semver.org).
6
+
7
+ ## [0.1.0] - 2026-10-24
8
+
9
+ First release. A stdio MCP server for the FastOCR Document OCR API with the tools
10
+ `ocr_file` (a local PDF, PNG, JPG, JPEG, GIF, WebP or BMP file), `get_document`,
11
+ `list_documents` and `delete_document`. `ocr_pdf` is the same tool as `ocr_file` under its
12
+ earlier name. Needs `fastocr-sdk` 0.2.0 or later for image uploads. API requests send the
13
+ User-Agent `fastocr-mcp/<version>` followed by the SDK's own.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 FastOCR
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,172 @@
1
+ Metadata-Version: 2.5
2
+ Name: fastocr-mcp
3
+ Version: 0.1.0
4
+ Summary: MCP server for the FastOCR Document OCR API: OCR scanned PDFs into text or searchable PDFs from Claude, Cursor and other MCP clients.
5
+ Project-URL: Homepage, https://fastocr.org
6
+ Project-URL: Documentation, https://fastocr.org/docs
7
+ Project-URL: Repository, https://github.com/fastocr-org/fastocr-mcp
8
+ Project-URL: Changelog, https://github.com/fastocr-org/fastocr-mcp/blob/main/CHANGELOG.md
9
+ Project-URL: Issues, https://github.com/fastocr-org/fastocr-mcp/issues
10
+ Author-email: FastOCR <support@fastocr.org>
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: ai-agents,fastocr,mcp,model-context-protocol,ocr,pdf,searchable-pdf
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Programming Language :: Python :: 3.13
23
+ Classifier: Programming Language :: Python :: 3.14
24
+ Classifier: Topic :: Scientific/Engineering :: Image Recognition
25
+ Classifier: Typing :: Typed
26
+ Requires-Python: >=3.10
27
+ Requires-Dist: fastocr-sdk<0.3,>=0.2.0
28
+ Requires-Dist: mcp<3,>=2.3.0
29
+ Provides-Extra: dev
30
+ Requires-Dist: jsonschema>=4.20.0; extra == 'dev'
31
+ Requires-Dist: mypy>=1.10; extra == 'dev'
32
+ Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
33
+ Requires-Dist: pytest>=7.4.0; extra == 'dev'
34
+ Requires-Dist: respx>=0.21.0; extra == 'dev'
35
+ Requires-Dist: ruff>=0.6; extra == 'dev'
36
+ Description-Content-Type: text/markdown
37
+
38
+ <a href="https://fastocr.org"><img src="https://raw.githubusercontent.com/fastocr-org/fastocr-mcp/main/docs/images/logo.png" alt="FastOCR" width="56" height="56"></a>
39
+
40
+ # FastOCR MCP server
41
+
42
+ OCR any scanned PDF or image from Claude, Cursor and other MCP clients, in 100+ languages. **[fastocr.org](https://fastocr.org)** · [Docs](https://fastocr.org/docs) · [Get an API key](https://fastocr.org/developers/keys)
43
+
44
+ <!-- mcp-name: io.github.fastocr-org/fastocr-mcp -->
45
+
46
+ [![PyPI](https://img.shields.io/pypi/v/fastocr-mcp.svg)](https://pypi.org/project/fastocr-mcp/)
47
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
48
+
49
+ An [MCP](https://modelcontextprotocol.io) server for the
50
+ [FastOCR Document OCR API](https://fastocr.org/docs). It lets Claude Desktop,
51
+ Claude Code, Cursor and other MCP clients OCR a local scanned PDF or image and get
52
+ back its text or a searchable PDF.
53
+
54
+ - PDF files up to 1 GiB, and PNG, JPG, JPEG, GIF, WebP and BMP images up to 20 MiB; 100+ languages.
55
+ - Built on the official [`fastocr-sdk`](https://pypi.org/project/fastocr-sdk/) and the
56
+ official MCP Python SDK. Runs locally over stdio; your files go only to the FastOCR API.
57
+
58
+ ![A scanned Arabic book page beside the text FastOCR returned for it](https://raw.githubusercontent.com/fastocr-org/fastocr-mcp/main/docs/images/ocr-before-after.png)
59
+
60
+ A real scanned page and the first lines of the text FastOCR returned for it, unedited.
61
+
62
+ API reference and guides: **https://fastocr.org/docs**
63
+
64
+ ## Get an API key
65
+
66
+ Any signed-in FastOCR account can create an API key and start right away.
67
+
68
+ 1. Sign in and create an API key in the
69
+ [developer console](https://fastocr.org/developers/keys). You accept the
70
+ [API terms](https://fastocr.org/api-terms) with your first key.
71
+ 2. Set the key as `FASTOCR_API_KEY` in your MCP client config (see below).
72
+ 3. When you need more than the free pages, buy a prepaid API page pack by card in the
73
+ [developer console](https://fastocr.org/developers/keys#buy-api-pages).
74
+
75
+ Each account gets 50 free document pages per month.
76
+
77
+ ## Install
78
+
79
+ With [uv](https://docs.astral.sh/uv/) there is nothing to install; MCP clients run it with
80
+ `uvx fastocr-mcp`. Or install it with pip and run `fastocr-mcp`:
81
+
82
+ ```bash
83
+ pip install fastocr-mcp
84
+ ```
85
+
86
+ Python 3.10 or newer. The server reads the key from `FASTOCR_API_KEY`.
87
+
88
+ ## Configure your MCP client
89
+
90
+ ### Claude Code
91
+
92
+ ```bash
93
+ claude mcp add fastocr -e FASTOCR_API_KEY=your_api_key -- uvx fastocr-mcp
94
+ ```
95
+
96
+ ### Claude Desktop
97
+
98
+ Add this to `claude_desktop_config.json` (Settings > Developer > Edit Config), then restart
99
+ Claude Desktop:
100
+
101
+ ```json
102
+ {
103
+ "mcpServers": {
104
+ "fastocr": {
105
+ "command": "uvx",
106
+ "args": ["fastocr-mcp"],
107
+ "env": { "FASTOCR_API_KEY": "your_api_key" }
108
+ }
109
+ }
110
+ }
111
+ ```
112
+
113
+ ### Cursor
114
+
115
+ Add the same block to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project):
116
+
117
+ ```json
118
+ {
119
+ "mcpServers": {
120
+ "fastocr": {
121
+ "command": "uvx",
122
+ "args": ["fastocr-mcp"],
123
+ "env": { "FASTOCR_API_KEY": "your_api_key" }
124
+ }
125
+ }
126
+ }
127
+ ```
128
+
129
+ If you installed with pip, use `"command": "fastocr-mcp"` and `"args": []`.
130
+
131
+ ## Tools
132
+
133
+ | Tool | What it does |
134
+ |---|---|
135
+ | `ocr_file(path, output="text", output_path=None)` | Uploads a local PDF or image, runs OCR and waits up to 45 seconds; a larger document returns its id for `get_document`. `output="text"` returns the text (text over 20,000 characters is cut, and the full text is saved to `output_path` or `<file>.ocr.txt` next to the input file). `output="pdf"` saves a searchable PDF to `output_path` or `<file>.searchable.pdf`. |
136
+ | `ocr_pdf(path, output="text", output_path=None)` | The same tool as `ocr_file` under its earlier name, kept so existing setups keep working. |
137
+ | `get_document(document_id, output="status", output_path=None)` | Status and page counts of a document; with `output="text"` or `"pdf"`, waits up to 45 seconds and fetches the finished result. Fetching a result again costs no pages. |
138
+ | `list_documents(limit=20)` | The most recent documents in the account, newest first. |
139
+ | `delete_document(document_id)` | Deletes a document and its stored files on FastOCR. Local files are not touched. |
140
+
141
+ Try asking: *"OCR ~/Downloads/scanned-contract.pdf and summarize the termination clause"*,
142
+ *"Read the text in /Users/me/Desktop/receipt.jpg"* or
143
+ *"Make a searchable copy of /Users/me/archive/1998-letters.pdf"*.
144
+
145
+ Every processed page uses one page of the account's API allowance; an image is one page. A document that runs out
146
+ of pages fails with `buy_pages`; the tool says so and links to the
147
+ [developer console](https://fastocr.org/developers/keys#buy-api-pages).
148
+
149
+ ## Errors
150
+
151
+ Tool errors are written for the agent to act on: a rejected key, an account out of pages
152
+ (`buy_pages`), too many documents processing at once (`concurrency_limit`), a missing file, or an
153
+ unsupported file type. Each message says what to do next. Error codes are listed in the
154
+ [API docs](https://fastocr.org/docs/documents).
155
+
156
+ ## Configuration
157
+
158
+ | Variable | Purpose |
159
+ |---|---|
160
+ | `FASTOCR_API_KEY` | Required. Your API key. |
161
+ | `FASTOCR_BASE_URL` | Optional. Overrides `https://api.fastocr.org`. |
162
+
163
+ ## Links
164
+
165
+ - Docs: https://fastocr.org/docs
166
+ - API keys and page packs: https://fastocr.org/developers/keys
167
+ - Python SDK: https://github.com/fastocr-org/fastocr-python
168
+ - Support: support@fastocr.org
169
+
170
+ ## License
171
+
172
+ MIT
@@ -0,0 +1,135 @@
1
+ <a href="https://fastocr.org"><img src="https://raw.githubusercontent.com/fastocr-org/fastocr-mcp/main/docs/images/logo.png" alt="FastOCR" width="56" height="56"></a>
2
+
3
+ # FastOCR MCP server
4
+
5
+ OCR any scanned PDF or image from Claude, Cursor and other MCP clients, in 100+ languages. **[fastocr.org](https://fastocr.org)** · [Docs](https://fastocr.org/docs) · [Get an API key](https://fastocr.org/developers/keys)
6
+
7
+ <!-- mcp-name: io.github.fastocr-org/fastocr-mcp -->
8
+
9
+ [![PyPI](https://img.shields.io/pypi/v/fastocr-mcp.svg)](https://pypi.org/project/fastocr-mcp/)
10
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
11
+
12
+ An [MCP](https://modelcontextprotocol.io) server for the
13
+ [FastOCR Document OCR API](https://fastocr.org/docs). It lets Claude Desktop,
14
+ Claude Code, Cursor and other MCP clients OCR a local scanned PDF or image and get
15
+ back its text or a searchable PDF.
16
+
17
+ - PDF files up to 1 GiB, and PNG, JPG, JPEG, GIF, WebP and BMP images up to 20 MiB; 100+ languages.
18
+ - Built on the official [`fastocr-sdk`](https://pypi.org/project/fastocr-sdk/) and the
19
+ official MCP Python SDK. Runs locally over stdio; your files go only to the FastOCR API.
20
+
21
+ ![A scanned Arabic book page beside the text FastOCR returned for it](https://raw.githubusercontent.com/fastocr-org/fastocr-mcp/main/docs/images/ocr-before-after.png)
22
+
23
+ A real scanned page and the first lines of the text FastOCR returned for it, unedited.
24
+
25
+ API reference and guides: **https://fastocr.org/docs**
26
+
27
+ ## Get an API key
28
+
29
+ Any signed-in FastOCR account can create an API key and start right away.
30
+
31
+ 1. Sign in and create an API key in the
32
+ [developer console](https://fastocr.org/developers/keys). You accept the
33
+ [API terms](https://fastocr.org/api-terms) with your first key.
34
+ 2. Set the key as `FASTOCR_API_KEY` in your MCP client config (see below).
35
+ 3. When you need more than the free pages, buy a prepaid API page pack by card in the
36
+ [developer console](https://fastocr.org/developers/keys#buy-api-pages).
37
+
38
+ Each account gets 50 free document pages per month.
39
+
40
+ ## Install
41
+
42
+ With [uv](https://docs.astral.sh/uv/) there is nothing to install; MCP clients run it with
43
+ `uvx fastocr-mcp`. Or install it with pip and run `fastocr-mcp`:
44
+
45
+ ```bash
46
+ pip install fastocr-mcp
47
+ ```
48
+
49
+ Python 3.10 or newer. The server reads the key from `FASTOCR_API_KEY`.
50
+
51
+ ## Configure your MCP client
52
+
53
+ ### Claude Code
54
+
55
+ ```bash
56
+ claude mcp add fastocr -e FASTOCR_API_KEY=your_api_key -- uvx fastocr-mcp
57
+ ```
58
+
59
+ ### Claude Desktop
60
+
61
+ Add this to `claude_desktop_config.json` (Settings > Developer > Edit Config), then restart
62
+ Claude Desktop:
63
+
64
+ ```json
65
+ {
66
+ "mcpServers": {
67
+ "fastocr": {
68
+ "command": "uvx",
69
+ "args": ["fastocr-mcp"],
70
+ "env": { "FASTOCR_API_KEY": "your_api_key" }
71
+ }
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### Cursor
77
+
78
+ Add the same block to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project):
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "fastocr": {
84
+ "command": "uvx",
85
+ "args": ["fastocr-mcp"],
86
+ "env": { "FASTOCR_API_KEY": "your_api_key" }
87
+ }
88
+ }
89
+ }
90
+ ```
91
+
92
+ If you installed with pip, use `"command": "fastocr-mcp"` and `"args": []`.
93
+
94
+ ## Tools
95
+
96
+ | Tool | What it does |
97
+ |---|---|
98
+ | `ocr_file(path, output="text", output_path=None)` | Uploads a local PDF or image, runs OCR and waits up to 45 seconds; a larger document returns its id for `get_document`. `output="text"` returns the text (text over 20,000 characters is cut, and the full text is saved to `output_path` or `<file>.ocr.txt` next to the input file). `output="pdf"` saves a searchable PDF to `output_path` or `<file>.searchable.pdf`. |
99
+ | `ocr_pdf(path, output="text", output_path=None)` | The same tool as `ocr_file` under its earlier name, kept so existing setups keep working. |
100
+ | `get_document(document_id, output="status", output_path=None)` | Status and page counts of a document; with `output="text"` or `"pdf"`, waits up to 45 seconds and fetches the finished result. Fetching a result again costs no pages. |
101
+ | `list_documents(limit=20)` | The most recent documents in the account, newest first. |
102
+ | `delete_document(document_id)` | Deletes a document and its stored files on FastOCR. Local files are not touched. |
103
+
104
+ Try asking: *"OCR ~/Downloads/scanned-contract.pdf and summarize the termination clause"*,
105
+ *"Read the text in /Users/me/Desktop/receipt.jpg"* or
106
+ *"Make a searchable copy of /Users/me/archive/1998-letters.pdf"*.
107
+
108
+ Every processed page uses one page of the account's API allowance; an image is one page. A document that runs out
109
+ of pages fails with `buy_pages`; the tool says so and links to the
110
+ [developer console](https://fastocr.org/developers/keys#buy-api-pages).
111
+
112
+ ## Errors
113
+
114
+ Tool errors are written for the agent to act on: a rejected key, an account out of pages
115
+ (`buy_pages`), too many documents processing at once (`concurrency_limit`), a missing file, or an
116
+ unsupported file type. Each message says what to do next. Error codes are listed in the
117
+ [API docs](https://fastocr.org/docs/documents).
118
+
119
+ ## Configuration
120
+
121
+ | Variable | Purpose |
122
+ |---|---|
123
+ | `FASTOCR_API_KEY` | Required. Your API key. |
124
+ | `FASTOCR_BASE_URL` | Optional. Overrides `https://api.fastocr.org`. |
125
+
126
+ ## Links
127
+
128
+ - Docs: https://fastocr.org/docs
129
+ - API keys and page packs: https://fastocr.org/developers/keys
130
+ - Python SDK: https://github.com/fastocr-org/fastocr-python
131
+ - Support: support@fastocr.org
132
+
133
+ ## License
134
+
135
+ MIT
@@ -0,0 +1,80 @@
1
+ [build-system]
2
+ requires = ["hatchling>=1.27"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "fastocr-mcp"
7
+ dynamic = ["version"]
8
+ description = "MCP server for the FastOCR Document OCR API: OCR scanned PDFs into text or searchable PDFs from Claude, Cursor and other MCP clients."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ keywords = ["mcp", "model-context-protocol", "ocr", "pdf", "searchable-pdf", "ai-agents", "fastocr"]
14
+ authors = [
15
+ { name = "FastOCR", email = "support@fastocr.org" }
16
+ ]
17
+ classifiers = [
18
+ "Development Status :: 4 - Beta",
19
+ "Intended Audience :: Developers",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3 :: Only",
23
+ "Programming Language :: Python :: 3.10",
24
+ "Programming Language :: Python :: 3.11",
25
+ "Programming Language :: Python :: 3.12",
26
+ "Programming Language :: Python :: 3.13",
27
+ "Programming Language :: Python :: 3.14",
28
+ "Topic :: Scientific/Engineering :: Image Recognition",
29
+ "Typing :: Typed",
30
+ ]
31
+ dependencies = [
32
+ "fastocr-sdk>=0.2.0,<0.3",
33
+ "mcp>=2.3.0,<3",
34
+ ]
35
+
36
+ [project.optional-dependencies]
37
+ dev = [
38
+ "pytest>=7.4.0",
39
+ "pytest-asyncio>=0.23.0",
40
+ "respx>=0.21.0",
41
+ "jsonschema>=4.20.0",
42
+ "ruff>=0.6",
43
+ "mypy>=1.10",
44
+ ]
45
+
46
+ [project.scripts]
47
+ fastocr-mcp = "fastocr_mcp.server:main"
48
+
49
+ [project.urls]
50
+ Homepage = "https://fastocr.org"
51
+ Documentation = "https://fastocr.org/docs"
52
+ Repository = "https://github.com/fastocr-org/fastocr-mcp"
53
+ Changelog = "https://github.com/fastocr-org/fastocr-mcp/blob/main/CHANGELOG.md"
54
+ Issues = "https://github.com/fastocr-org/fastocr-mcp/issues"
55
+
56
+ [tool.hatch.version]
57
+ path = "src/fastocr_mcp/_version.py"
58
+
59
+ [tool.hatch.build.targets.wheel]
60
+ packages = ["src/fastocr_mcp"]
61
+
62
+ [tool.hatch.build.targets.sdist]
63
+ include = ["src", "tests", "README.md", "LICENSE", "CHANGELOG.md", "server.json"]
64
+
65
+ [tool.pytest.ini_options]
66
+ testpaths = ["tests"]
67
+ asyncio_mode = "auto"
68
+
69
+ [tool.ruff]
70
+ line-length = 120
71
+ target-version = "py310"
72
+ src = ["src", "tests"]
73
+
74
+ [tool.ruff.lint]
75
+ select = ["E4", "E7", "E9", "F", "I"]
76
+
77
+ [tool.mypy]
78
+ python_version = "3.10"
79
+ strict = true
80
+ files = ["src"]
@@ -0,0 +1,32 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.fastocr-org/fastocr-mcp",
4
+ "title": "FastOCR",
5
+ "description": "OCR scanned PDFs and images into text or searchable PDFs with the FastOCR API.",
6
+ "websiteUrl": "https://fastocr.org/docs",
7
+ "repository": {
8
+ "url": "https://github.com/fastocr-org/fastocr-mcp",
9
+ "source": "github"
10
+ },
11
+ "version": "0.1.0",
12
+ "packages": [
13
+ {
14
+ "registryType": "pypi",
15
+ "registryBaseUrl": "https://pypi.org",
16
+ "identifier": "fastocr-mcp",
17
+ "version": "0.1.0",
18
+ "runtimeHint": "uvx",
19
+ "transport": {
20
+ "type": "stdio"
21
+ },
22
+ "environmentVariables": [
23
+ {
24
+ "name": "FASTOCR_API_KEY",
25
+ "description": "FastOCR API key from https://fastocr.org/developers/keys",
26
+ "isRequired": true,
27
+ "isSecret": true
28
+ }
29
+ ]
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,6 @@
1
+ """FastOCR MCP server: OCR local PDFs from any MCP client."""
2
+
3
+ from ._version import __version__
4
+ from .server import create_server, main
5
+
6
+ __all__ = ["__version__", "create_server", "main"]
@@ -0,0 +1,3 @@
1
+ from .server import main
2
+
3
+ main()
@@ -0,0 +1 @@
1
+ __version__ = "0.1.0"
File without changes