PDF Reader MCP Server
The PDF Reader MCP Server allows AI agents to securely read and extract data from PDF files.
Capabilities:
Extract full text content from PDFs
Extract text from specific pages or page ranges
Retrieve PDF metadata (author, title, creation date, etc.)
Get the total page count of a PDF
Process multiple PDF sources (local paths or URLs) in a single request
Operate securely within the defined project root directory
Provide structured JSON output for easy parsing by AI agents
Be installed and run via npm (npx) or Docker
Integrates with Codecov for code coverage reporting, as indicated by the badge showing coverage statistics for the project.
Provides Docker container deployment option, allowing users to run the PDF reader MCP server in an isolated environment with project directory mounting.
Integrates with GitHub for CI/CD pipeline execution, issue tracking, and repository management for the PDF reader MCP server.
Publishes to npm registry allowing installation via npm, with version tracking displayed through npm badge.
Future plans include PWA support for the documentation site, enabling offline access and mobile optimization.
Uses Vitest for performance benchmarking, measuring operations per second for various PDF processing scenarios.
Leverages Zod for input validation, ensuring that requests to the PDF reader MCP server are properly formatted and validated.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PDF Reader MCP Serverextract text from the quarterly report PDF in the reports folder"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Citra
Give your AI agent eyes for PDFs — with proof.
Local-first PDF evidence for agents. Structured text, tables, OCR, visual crops, and page-level citations your agent can defend — not invent.
Canonical package @sylphx/citra · bin citra · MCP io.github.SylphxAI/citra · live 5.0.0
Zero-config in one line
npx -y @sylphx/citraNo Docker. No API key. No global install. Spawns a stdio MCP server agents can use immediately.
Client | Setup |
Any agent / CLI |
|
Claude Code |
|
Claude Desktop / Cursor / VS Code / Codex |
|
Global CLI |
|
Related MCP server: MCP PDF Reader
Why Citra feels unfairly good
Plain-text PDF tools make agents guess. Citra returns an Agent Document Twin they can cite.
Pain today | With Citra |
Page numbers invented or missing | Page + geometry + provenance |
Tables flattened into soup | Rows · columns · cells · bounding boxes |
Scanned PDFs become noise | OCR path linked to evidence |
Install / config / “hope it works” |
|
Silent engine fallbacks | Fail closed if the native binary is missing |
Five reasons teams pick Citra
Zero-config — real
npxMCP, not a 20-step bootstrap.Evidence, not vibes — citations agents can show a human.
Local-first — PDFs stay on the machine; no required cloud vision API.
Brand-sole — one package, one bin, one story (
@sylphx/citra/citra).Instrument family — compose with Iris (image), Cue (video), Spine, Lookout, Locus.
See the difference
Without evidence | With Citra |
“Revenue was about $12M” | “Page 14, Table 3, cell (row 4, col 2) = |
Lost table structure | Rows, columns, cells, bounding boxes |
Scanned PDF = garbage text | OCR with page-linked evidence |
Hidden / adversarial text ignored | Trust signals when requested |
What you get
Three tools. One product surface.
Tool | What agents use it for |
| Smart default: markdown, tables, structure, OCR, citations |
| Find page + snippet matches before deep reading |
| Crops, renders, inspect, focused evidence ops |
Minimal call:
{
"sources": [{ "path": "/absolute/path/to/report.pdf" }]
}Flagship use cases
Financial reports — extract table cells agents can cite by page and geometry
Research papers — headings, reading order, page-level quotes
Scanned documents — OCR path with evidence, not a text soup
Platforms
One optional native package is selected for your host only:
Platform | Native package |
macOS arm64 |
|
macOS x64 |
|
Linux x64 |
|
Linux arm64 |
|
Windows x64 |
|
Missing native → fail closed (no silent TypeScript PDF engine).
Product docs
Doc | Purpose |
Strategic positioning | |
Peer anchors and wedge | |
Evidence = result contract | |
Few clear tools policy | |
This repo is SSOT | |
Independent public product bar | |
npm / git publish status | |
Install & host config | |
Agent skill surface |
Surfaces (MCP · CLI · SDK)
MCP (default agent path)
npx -y @sylphx/citraClaude Desktop / Cursor / VS Code / Codex
{
"mcpServers": {
"citra": {
"command": "npx",
"args": ["-y", "@sylphx/citra"]
}
}
}Dual-era hosts that send server/discover before initialize (e.g. Gemini Antigravity CLI) are supported on stdio.
CLI
npx -y @sylphx/citra --helpSDK
@sylphx/citra/sdk→Citra(read/search/evidence)@sylphx/citra/pure-rust→ low-level client helpersSame tools as MCP:
read_pdf·search_pdf·pdf_evidenceRequires the platform optional native package (same as MCP)
Install footprint (honest)
Compare full clean installs, not “JS wrapper tarball vs native executable”:
Metric (measured clean install, linux-x64) | Historical TS | Sole-Rust |
Main package on disk | ~403 KB | ~77 KB |
Full | ~82.3 MiB | ~24.4 MiB (~3.4× smaller) |
Installed files | 4,101 | 20 (~205× fewer) |
Production npm deps | PDF.js + MCP TS SDK + more |
|
The native binary is multi-megabyte because it is the PDF engine. That is expected — and still a cleaner install than shipping PDF.js + a large JS tree.
Details: installed footprint comparison
Performance (method-bounded)
Controlled same-host linux-x64 dual-mode A/B vs historical @sylphx/pdf-reader-mcp@3.0.14, using registry-installed sole-Rust natives (measured on the 4.1.x lineage; method applies to current sole-Rust packages):
Mode | What it measures | Result |
| long-lived server, repeated identical local | ≥ ~10× median latency improvement on all 8 required fixture classes |
| spawn + initialize + one task | large advantage on the same fixtures |
persistent_warm includes a process-local cache for identical local path+options. First request in a process still pays full parse cost.
Not a multi-host guarantee. Details: 4.1.0 report · claims policy
Engine note
Current production is a native Rust engine on supported platforms via a thin Node launcher.
Local-first. Five platform packages. One clean install. Fail closed without the matching native.
Unusually formed or broken ToUnicode CMaps are handled without crashing; the release binary is panic-unwind so a worker-thread panic fails the request instead of aborting the process (#608).
Engineering history and recovery pins: docs/migration.md — not the product pitch.
Product proof & links
Stop PDF hallucinations. Give agents proof.
npx -y @sylphx/citraAvailable Tools
1 toolread_pdfB
Reads content/metadata from one or more PDFs (local/URL). Each source can specify pages to extract.
| Name | Required | Description | Default |
|---|---|---|---|
| include_full_text | No | Include the full text content of each PDF (only if 'pages' is not specified for that source). | |
| include_metadata | No | Include metadata and info objects for each PDF. | |
| include_page_count | No | Include the total number of pages for each PDF. | |
| sources | Yes | An array of PDF sources to process, each can optionally specify pages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool reads content/metadata and allows page specification, but lacks details on permissions, rate limits, error handling, or output format. For a tool with no annotations, this leaves significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise and front-loaded: two sentences that efficiently convey core functionality without waste. Every sentence earns its place by stating the main purpose and a key feature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no annotations, no output schema, and 4 parameters with full schema coverage, the description is minimally adequate. It covers the basic action and a feature, but lacks context on behavioral traits, output, or error handling, making it incomplete for a tool with no structured support.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description adds minimal value beyond the schema by mentioning 'pages to extract,' which aligns with the 'pages' parameter but doesn't provide additional semantics. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Reads content/metadata from one or more PDFs (local/URL).' It specifies the action (reads), resource (PDFs), and scope (content/metadata, multiple sources). However, it doesn't differentiate from siblings since none exist, so it can't achieve a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides minimal usage guidance. It mentions 'Each source can specify pages to extract,' which hints at when to use page specification, but offers no explicit when/when-not scenarios, prerequisites, or alternatives. With no sibling tools, this is less critical, but the guidance remains basic.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
With only one tool, there is no possibility of ambiguity or overlap between tools. The single tool 'read_pdf' has a clear and distinct purpose focused on extracting content and metadata from PDFs.
Since there is only one tool, naming consistency is inherently perfect. The tool name 'read_pdf' follows a clear verb_noun pattern, which would be consistent if more tools were added.
A single tool is too few for a server named 'PDF Reader MCP Server', as this suggests a broader domain that might include operations like search, annotate, convert, or edit PDFs. The scope feels incomplete with just reading functionality.
The tool set is severely incomplete for a PDF reader domain. While 'read_pdf' covers extraction, there are obvious gaps such as searching within PDFs, manipulating pages, adding annotations, converting formats, or handling PDF metadata updates, which are common in such applications.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Generate and read PDFs for AI agents: a generate_pdf and a read_pdf tool, priced per document.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Generate PDFs from templates via AI chat. Works with Claude, ChatGPT, Cursor, and any MCP client.
Privacy-first PDF tools over MCP: merge, split, rotate, delete, compress, protect, inspect.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to securely read and extract information from PDF files including text content, metadata, and page counts from both local files and URLs within the project context.12,322MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to read, search, and analyze PDF files from local paths or URLs. It provides tools for extracting specific page ranges, searching for terms, and retrieving document metadata.4461MIT
- AlicenseAqualityBmaintenanceEnables AI agents to read documents in Excel, DOCX, PDF, and TXT formats via MCP protocol.123MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to perform 13 PDF operations (merge, split, compress, watermark, encrypt, and more) on local files via MCP.2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/SylphxAI/pdf-reader-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server