PluginBench
MCP Server
Active
MIT

PDF Reader MCP MCP Server

io.github.SylphxAI/pdf-reader-mcp

Local-first PDF reading for AI agents with citeable page and bounding box evidence.

What is the PDF Reader MCP MCP server?

The PDF Reader MCP (Citra) is an MCP server that gives AI agents structured access to PDF content with verifiable citations. It extracts text, tables, and OCR from PDFs while preserving page numbers, geometry, and bounding boxes so agents can cite specific evidence rather than hallucinate. Designed for zero-config deployment via npx with no API keys or cloud dependencies.

Citra solves the problem of AI agents making up PDF citations or losing table structure. It returns an 'Agent Document Twin' with three core tools: read_pdf for smart extraction with markdown and tables, search_pdf for finding page-specific matches, and pdf_evidence for inspecting crops and geometry. Built on a native Rust engine, it runs locally on macOS, Linux, and Windows with minimal footprint and ~10× faster performance than previous versions.

How to install PDF Reader MCP

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "pdf-reader-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@sylphx/pdf-reader-mcp"
      ]
    }
  }
}
Cursor
~/.cursor/mcp.json
{
  "mcpServers": {
    "pdf-reader-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@sylphx/pdf-reader-mcp"
      ]
    }
  }
}
Windsurf
~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "pdf-reader-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@sylphx/pdf-reader-mcp"
      ]
    }
  }
}
VS Code
.vscode/mcp.json
{
  "servers": {
    "pdf-reader-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@sylphx/pdf-reader-mcp"
      ]
    }
  }
}
Claude Code
claude mcp add pdf-reader-mcp -- npx -y @sylphx/pdf-reader-mcp

Tools & capabilities

Tools this server exposes to the agent.

  • read_pdfSmart default extraction: markdown, tables, structure, OCR, and page-level citations from PDFs
  • search_pdfFind page and snippet matches in PDFs before deep reading
  • pdf_evidenceInspect crops, renders, and focused evidence operations with bounding boxes and geometry

Use cases

  • Extract and cite specific table cells from financial reports by page and cell geometry
  • Search research papers for headings and quotes with page-level evidence
  • OCR scanned documents while preserving page-linked evidence instead of text soup
  • Build agent workflows that defend PDF claims with verifiable citations
  • Compose with other Sylphx tools (Iris for images, Cue for video) in document processing pipelines

PDF Reader MCP MCP server FAQ

What does the PDF Reader MCP do?

It gives AI agents structured PDF reading with verifiable citations. Agents can extract text, tables, and OCR while preserving page numbers and bounding boxes, so they cite specific evidence instead of hallucinating.

Is it free?

Yes. Citra is MIT-licensed and open-source. No API keys or cloud services required.

How do I install it in Cursor or Claude Desktop?

Add to your config: {"mcpServers": {"citra": {"command": "npx", "args": ["-y", "@sylphx/citra"]}}}. Or run `npx -y @sylphx/citra` directly.

Does it require authentication or API keys?

No. Citra is local-first and runs entirely on your machine. PDFs never leave your system.

What platforms does it support?

macOS (arm64 and x64), Linux (x64 and arm64), and Windows (x64). Platform-specific native binaries are installed automatically.

How fast is it?

The native Rust engine is ~10× faster than the previous TypeScript version on repeated reads, with a much smaller install footprint (~24 MiB vs 82 MiB).

README (reference)

Source of truth, from the repository.

<!-- Marketing surface: scannable pitch first; engineering docs below the fold. --> <div align="center">

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

npm version License: MIT stars

</div>

Zero-config in one line

npx -y @sylphx/citra

No Docker. No API key. No global install. Spawns a stdio MCP server agents can use immediately.

ClientSetup
Any agent / CLInpx -y @sylphx/citra
Claude Codeclaude mcp add citra -- npx -y @sylphx/citra
Claude Desktop / Cursor / VS Code / Codex"command": "npx", "args": ["-y", "@sylphx/citra"]
Global CLInpm i -g @sylphx/citracitra

Why Citra feels unfairly good

Plain-text PDF tools make agents guess. Citra returns an Agent Document Twin they can cite.

Pain todayWith Citra
Page numbers invented or missingPage + geometry + provenance
Tables flattened into soupRows · columns · cells · bounding boxes
Scanned PDFs become noiseOCR path linked to evidence
Install / config / “hope it works”npx -y — done
Silent engine fallbacksFail closed if the native binary is missing

Five reasons teams pick Citra

  1. Zero-config — real npx MCP, not a 20-step bootstrap.
  2. Evidence, not vibes — citations agents can show a human.
  3. Local-first — PDFs stay on the machine; no required cloud vision API.
  4. Brand-sole — one package, one bin, one story (@sylphx/citra / citra).
  5. Instrument family — compose with Iris (image), Cue (video), Spine, Lookout, Locus.

See the difference

Plain text vs evidence

Without evidenceWith Citra
“Revenue was about $12M”“Page 14, Table 3, cell (row 4, col 2) = $12.4M
Lost table structureRows, columns, cells, bounding boxes
Scanned PDF = garbage textOCR with page-linked evidence
Hidden / adversarial text ignoredTrust signals when requested

What you get

Three tools. One product surface.

ToolWhat agents use it for
read_pdfSmart default: markdown, tables, structure, OCR, citations
search_pdfFind page + snippet matches before deep reading
pdf_evidenceCrops, renders, inspect, focused evidence ops

Minimal call:

{
  "sources": [{ "path": "/absolute/path/to/report.pdf" }]
}

Flagship use cases

  1. Financial reports — extract table cells agents can cite by page and geometry
  2. Research papers — headings, reading order, page-level quotes
  3. Scanned documents — OCR path with evidence, not a text soup

Platforms

One optional native package is selected for your host only:

PlatformNative package
macOS arm64@sylphx/citra-darwin-arm64
macOS x64@sylphx/citra-darwin-x64
Linux x64@sylphx/citra-linux-x64-gnu
Linux arm64@sylphx/citra-linux-arm64-gnu
Windows x64@sylphx/citra-win32-x64-msvc

Missing native → fail closed (no silent TypeScript PDF engine).

Product docs

DocPurpose
docs/POSITIONING.mdStrategic positioning
docs/COMPETITIVE.mdPeer anchors and wedge
docs/EVIDENCE_CONTRACT.mdEvidence = result contract
docs/TOOL_SURFACE.mdFew clear tools policy
docs/PRODUCT_INDEPENDENCE.mdThis repo is SSOT
docs/IPPB.mdIndependent public product bar
docs/PUBLISH.mdnpm / git publish status
docs/guide/installation.mdInstall & host config
skills/citra/SKILL.mdAgent skill surface

Surfaces (MCP · CLI · SDK)

MCP (default agent path)

npx -y @sylphx/citra

Claude 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 --help

SDK

  • @sylphx/citra/sdkCitra (read / search / evidence)
  • @sylphx/citra/pure-rust → low-level client helpers
  • Same tools as MCP: read_pdf · search_pdf · pdf_evidence
  • Requires 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 3.0.14Sole-Rust 4.1.0 lineage
Main package on disk~403 KB~77 KB
Full node_modules~82.3 MiB~24.4 MiB (~3.4× smaller)
Installed files4,10120 (~205× fewer)
Production npm depsPDF.js + MCP TS SDK + more{} + one platform native

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):

ModeWhat it measuresResult
persistent_warmlong-lived server, repeated identical local read_pdf after warm-up≥ ~10× median latency improvement on all 8 required fixture classes
startup_inclusivespawn + initialize + one tasklarge 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


<div align="center">

Stop PDF hallucinations. Give agents proof.

npx -y @sylphx/citra
</div>

Related MCP servers

Evidence-first image MCP. Agent Media Twin with metadata and citeable OCR evidence.

2
TypeScript
MIT
View repository →

Evidence-first video MCP. Timeline document with ffprobe streams and subtitle cues.

2
TypeScript
MIT
View repository →

Sniff format and delegate to Sylphx Reader siblings for unified media read.

0
TypeScript
MIT
View repository →