FixMyScan MCP
An official MCP server that allows AI agents to process scanned book PDFs and DjVu files into clean, searchable, and optimized PDFs suitable for e-readers like Kindle. It handles tasks such as straightening pages, splitting spreads, trimming margins, and performing OCR in 19 languages.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://mcp.fixmyscan.com/mcpWhat its tools do
7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (2)
Can change data (5)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Passed Official MCP Registry namespace is tied to fixmyscan.com ·
- Passed Endpoint is on the registry namespace domain ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Convert scanned book PDFs into searchable text
- Clean up and straighten scanned pages
- Split two-page spreads into single pages
- Optimize PDFs for e-readers like Kindle
Source and maintenance
Protocol and capabilities
- Server
- FixMyScan 1.1.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 7 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": false
},
"prompts": {
"listChanged": false
},
"resources": {
"subscribe": false,
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
fix_scan — Fix a scanned book
Turn a scanned book (PDF or DjVu, up to 1,000 pages) into a clean, searchable PDF for e-readers: pages cropped to the text, straightened, sharp black and white, two-page spreads split, and searchable text added. Use it when the user wants to fix, clean up, OCR or convert a scan for a Kindle, Kobo, reMarkable or tablet. Give exactly one source: file (a file the user attached here), source_url (a public https link to the file) or upload_id (from create_upload_link, after the user uploaded). It returns a scan_id at once and the book converts in the background; then call get_scan_status until it is ready and give the user the download link.
{
"type": "object",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "The attachment's id."
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"description": "Where the attached file can be downloaded."
}
},
"description": "A PDF or DjVu file the user attached in this chat.",
"additionalProperties": false
},
"output": {
"enum": [
"bw",
"grey"
],
"type": "string",
"default": "bw",
"description": "bw: sharp black and white, best on e-ink. grey: gentle greyscale."
},
"language": {
"enum": [
"auto",
"ara",
"chi_tra",
"deu",
"ell",
"eng",
"fra",
"frk",
"grc",
"ita",
"lat",
"nld",
"pol",
"por",
"rus",
"san",
"spa",
"swe",
"tam",
"ukr"
],
"type": "string",
"default": "auto",
"description": "The book's language for searchable text, as a Tesseract code; auto detects it."
},
"upload_id": {
"type": "string",
"pattern": "^job_[A-Za-z0-9_-]{1,60}$",
"description": "The upload_id from create_upload_link, once the user has uploaded the file."
},
"source_url": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"description": "A public https link to the PDF or DjVu file."
},
"trim_margins": {
"type": "boolean",
"default": true,
"description": "Crop each page to its text block. Covers and picture pages stay whole."
},
"split_spreads": {
"type": "boolean",
"default": true,
"description": "Split scans of two facing pages into single pages."
},
"idempotency_key": {
"type": "string",
"maxLength": 128,
"description": "Optional. Repeat it on a retry so the same book is not started twice."
}
},
"additionalProperties": false
}{
"title": "Fix a scanned book",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}create_upload_link — Get an upload link
Get a link where the user uploads a scanned PDF or DjVu from their device. Use it when you cannot pass the user's file to fix_scan: no attachment, a file too large to attach, or a file attached in a chat that cannot hand attachments to tools. Show the user the link; when they say it is uploaded, call fix_scan (or preview_scan) with the upload_id. The link works for one hour and one file.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"title": "Get an upload link",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": false,
"destructiveHint": false
}preview_scan — Preview a scan
Show what FixMyScan will do before converting: before-and-after images of 3 pages of the user's own book. Use it when the user wants to see the result first. Give the same source as fix_scan, or the scan_id of a book not yet converted. The first call returns at once; call again with the scan_id after about ten seconds for the images. To convert after the preview, call fix_scan with upload_id set to the scan_id.
{
"type": "object",
"properties": {
"file": {
"type": "object",
"required": [
"download_url",
"file_id"
],
"properties": {
"file_id": {
"type": "string",
"description": "The attachment's id."
},
"file_name": {
"type": "string"
},
"mime_type": {
"type": "string"
},
"download_url": {
"type": "string",
"description": "Where the attached file can be downloaded."
}
},
"description": "A PDF or DjVu file the user attached in this chat.",
"additionalProperties": false
},
"output": {
"enum": [
"bw",
"grey"
],
"type": "string",
"default": "bw",
"description": "bw: sharp black and white, best on e-ink. grey: gentle greyscale."
},
"scan_id": {
"type": "string",
"pattern": "^job_[A-Za-z0-9_-]{1,60}$",
"description": "The scan_id fix_scan or list_my_scans gave."
},
"upload_id": {
"type": "string",
"pattern": "^job_[A-Za-z0-9_-]{1,60}$",
"description": "The upload_id from create_upload_link, once the user has uploaded the file."
},
"source_url": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"description": "A public https link to the PDF or DjVu file."
},
"trim_margins": {
"type": "boolean",
"default": true,
"description": "Crop each page to its text block. Covers and picture pages stay whole."
},
"split_spreads": {
"type": "boolean",
"default": true,
"description": "Split scans of two facing pages into single pages."
}
},
"additionalProperties": false
}{
"title": "Preview a scan",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}get_scan_status — Check a book
Check one book: its stage, pages done of the total, and the download link once it is ready. Use it after fix_scan or preview_scan, or when the user asks how their book is doing. While a book is converting, call again every 10 to 20 seconds.
{
"type": "object",
"required": [
"scan_id"
],
"properties": {
"scan_id": {
"type": "string",
"pattern": "^job_[A-Za-z0-9_-]{1,60}$",
"description": "The scan_id fix_scan or list_my_scans gave."
}
},
"additionalProperties": false
}{
"title": "Check a book",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_my_scans — List my books
List the user's recent books on FixMyScan with their state, and download links for finished ones. Use it when the user asks about their books or you need a scan_id. Files are deleted 24 hours after a book is ready.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"title": "List my books",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}cancel_scan — Stop a book
Stop a book that is converting or waiting to start. Use it only when the user asks to stop or cancel it. A cancelled book does not count as used.
{
"type": "object",
"required": [
"scan_id"
],
"properties": {
"scan_id": {
"type": "string",
"pattern": "^job_[A-Za-z0-9_-]{1,60}$",
"description": "The scan_id fix_scan or list_my_scans gave."
}
},
"additionalProperties": false
}{
"title": "Stop a book",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}delete_scan — Delete a book
Delete a book's upload and finished files from FixMyScan now, rather than after 24 hours. Use it only when the user asks to delete the book. This cannot be undone.
{
"type": "object",
"required": [
"scan_id"
],
"properties": {
"scan_id": {
"type": "string",
"pattern": "^job_[A-Za-z0-9_-]{1,60}$",
"description": "The scan_id fix_scan or list_my_scans gave."
}
},
"additionalProperties": false
}{
"title": "Delete a book",
"readOnlyHint": false,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": true
}Prompts
0 advertised
Resources
1 advertised
upload_box — Upload your scan
A drop box for the scanned PDF or DjVu, inside the chat.
ui://fixmyscan/upload-box-v2.html90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1559 ms
- 95th percentile latency
- 1559 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1559 ms · metadata changed · 7 tool(s), 1 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http fixmyscan-mcp https://mcp.fixmyscan.com/mcpCodex
codex mcp add fixmyscan-mcp --url https://mcp.fixmyscan.com/mcpCursor
{
"mcpServers": {
"fixmyscan-mcp": {
"url": "https://mcp.fixmyscan.com/mcp"
}
}
}Cline
{
"mcpServers": {
"fixmyscan-mcp": {
"type": "streamableHttp",
"url": "https://mcp.fixmyscan.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"fixmyscan-mcp": {
"type": "http",
"url": "https://mcp.fixmyscan.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http fixmyscan-mcp https://mcp.fixmyscan.com/mcpClaude Desktop
https://mcp.fixmyscan.com/mcpWindsurf
{
"mcpServers": {
"fixmyscan-mcp": {
"serverUrl": "https://mcp.fixmyscan.com/mcp"
}
}
}Let your agent find its tools
Find servers like FixMyScan MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run FixMyScan MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.