Read local PDFs without uploading. Classifies first, flags untrustworthy text, bounds output.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP server that lets any AI tool read local PDFs β without uploading them, without an OCR bill, and without silently handing back garbage.
Built on @firecrawl/pdf-inspector (Rust, no ML models, no external services).
Most PDF tooling has the same failure mode: it returns confident text regardless of whether extraction actually worked. Broken CID fonts, substitution-cipher encodings, scanned pages with no text layer β you get plausible-looking output and find out downstream, if at all.
pdf-inspector is unusually good at knowing when it failed. It emits U+FFFD rather than guessing at an unmapped CID, runs substitution-cipher detection over its own output, and reclassifies a document as scanned when extracted text drops below 50% alphanumeric. But it stops at reporting those findings on a result object β and most wrappers throw them away.
This server acts on them. Every response carries the trust signals, above the content, where the model reads them first:
Three design rules follow:
pdf_classify costs ~20ms and tells you whether extraction is worth attempting at all.~/.ssh/id_rsa. Enforced in code, not left to the model's judgement.Nothing to install. Every config below runs the published package straight from npm:
Your MCP client runs that for you β you only need to paste the config. Confirm it works first:
Requires Node 20+. Available on npm as pdf-triage-mcp and in the MCP Registry as io.github.vishalmeena2211/pdf-triage-mcp.
Then substitute "command": "node", "args": ["/absolute/path/to/dist/index.js", ...] for the npx invocation in any config below.
Every config below is complete as written except for one value:
/Users/me/Documents β replace with the directory the server may read. This is the only thing you must change.Use an absolute path; ~ is not expanded by most clients. Repeat --root for multiple directories.
PATH gotcha, applies to every GUI client below. Desktop apps launch servers with a minimal environment, so bare
npxoften fails to resolve even though it works in your terminal. If the server won't start, substitute the absolute path β find it withwhich npx(commonly/opt/homebrew/bin/npxon Apple Silicon,/usr/local/bin/npxon Intel macOS).
Why
-y? It skips npx's install confirmation prompt. Without it, a first run can hang waiting for input that an MCP client cannot provide β the server appears to start and then silently times out.
Config file
| OS | Path |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| Windows | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
Verify: Fully quit and relaunch Claude Desktop (not just close the window). A tools icon appears near the chat input β click it and confirm the four pdf_* tools are listed.
Logs: ~/Library/Logs/Claude/mcp*.log (macOS), %APPDATA%\Claude\logs\mcp*.log (Windows).
CLI β the easiest route. The -- separator is mandatory; everything after it is the server command.
Or edit .mcp.json at the project root directly:
| Scope | Stored in | Shared |
|---|---|---|
local (default) | ~/.claude.json, under this project | No |
user | ~/.claude.json, top level | No |
project | .mcp.json in repo root | Yes, via git |
Verify: claude mcp list β look for β Connected. Project-scoped servers need approval on first use β run /mcp inside a session.
Config file: .cursor/mcp.json (project) or ~/.cursor/mcp.json (global). Project wins on conflict.
Verify: Cursor hot-reloads β no restart. Open Cursor Settings β Tools & MCP and look for a green dot next to pdf-triage.
Config file: ~/.codeium/windsurf/mcp_config.json (macOS/Linux), %USERPROFILE%\.codeium\windsurf\mcp_config.json (Windows).
Not created on first launch β create it yourself if missing.
Verify: Windsurf watches the file and hot-reloads on save. Tools appear in Cascade on the next chat session.
The key is
servers, notmcpServers. This is the most common mistake when copying a config from Claude Desktop.
Config file: .vscode/mcp.json (workspace), or Command Palette β MCP: Open User Configuration (global).
CLI alternative:
Verify: MCP tools only work in Agent mode β switch from Ask/Edit to Agent in Copilot Chat, then click Configure Tools and confirm the pdf_* tools appear. Restart VS Code after first adding the file.
The key is
context_servers, notmcpServers, andcommandis a nested object rather than a string.
Config file: ~/.config/zed/settings.json (macOS/Linux), %APPDATA%\Zed\settings.json (Windows). Command Palette β zed: open settings.
If your Zed version rejects that, it predates the nested form β try command, args and env flat at the top level of the server object instead.
Verify: Agent Panel (Cmd+Shift+A) β gear icon β MCP Servers. Green dot means connected.
Config file β separate from VS Code's own:
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/pdf-triage)<a href="https://allmcps.com/mcp/pdf-triage"><img src="https://allmcps.com/api/badge/pdf-triage?style=directory" alt="PDF Triage on AllMCPs" /></a>