pdffr MCP server
Local, private PDF to Markdown for agents: geometry-first parsing, OCR only where needed.
0 stars40 downloads/wk
Reviews
Write oneNobody has reviewed pdffr yet.
If you have run it, two minutes of your experience saves the next person an afternoon.
pdffr tools (3)
write = sends, deletes, buys or postsRead from the package source without running it. The installed server may list more.
pdf_outlineList the headings of a PDF with their level and page number, so you can decide which pages to read with pdf_to_markdown.
pdf_tablesExtract every table in a PDF as JSON rows: [{ page, rows: string[][] }]. The first row is the header.
pdf_to_markdownDecompile a PDF into Markdown (headings, lists, tables, math as LaTeX) locally. Born-digital pages take milliseconds; scans and screenshots get on-device OCR only where needed. Nothing is uploaded. Use pdf_outline first on long documents to pick pages.
Public scan report
scanner v0.1.9 · 2026-09-20 · same rubric, same numbers if you re-run it
- Code scan3 source files scanned25/25
- –Live reliabilityno gateway calls yet and no remote to proben/a
- –Tool poisoningtools not inspected (local package is not executed); not countedn/a
- Auth qualitylocal package, no credentials required12/15
- Maintenancelast push 17 days ago15/15
- Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
What the publisher says
From the pdffr repository's README, as published. We do not edit it. Read it on GitHub
pdffr
A PDF decompiler, not an image reader. PDF → Markdown in the browser or Node, in milliseconds for born-digital pages — with on-device OCR spent only on the pixels the text layer can't explain.
Try it in your browser → — drop any PDF; it never leaves the tab.
import { decompile } from 'pdffr';
const { markdown, stats } = await decompile(file);
// stats.firstOutputMs ≈ 150ms for a typical report; the file never leaves the tabnpx pdffr report.pdf -o report.mdWhy this exists
Every PDF→Markdown tool sits at one of two extremes:
~80% of real-world PDFs are born-digital: every glyph's exact coordinates, size and font are already in the file. pdffr treats PDF as what it is — a drawing program — and decompiles the drawing back into structure:
- Geometry-native decompilation. Glyph runs → lines → an XY-cut reading-order tree over whitespace → headings (font-size clustering), paragraphs (leading analysis), nested lists (marker glyph + indent), tables (ruling lines from the content stream, or column x-alignment), inline bold/italic/, math fonts and sub/superscripts transliterated to $LaTeX$, rotated text re-framed upright, running header/footer stripping, hyphenation repair. No rasterization. Milliseconds per page.
- Render-diff oracle. When a page carries bitmaps or thin text coverage, the page is rendered once, the raster's ink mask is computed, and the dilated boxes of every native glyph are erased from it. What's left is ink the text layer cannot explain — scans, stamps, screenshots with burned-in text. Exact image rectangles from the content stream (CTM-tracked) sharpen the regions further. Only those regions go to OCR.
- One IR for both sources. OCR words come back with boxes and confidence, get gated by a text-plausibility test (confidence alone lies on icons and charts), and enter the same geometry engine as native glyphs. Structure recovery is source-agnostic.
- Parallel and optimistic. Pages decompile concurrently; markdown streams out immediately with placeholders; a pool of tesseract workers fills them in place. Whole-page scans are split along their own ink into chunks so the pool works in parallel.
- Private by construction. pdf.js and tesseract.js run in web workers in the user's tab. Nothing is uploaded.
- Same engine in Node. pdffr/node runs the identical pipeline on the server or the command line, with @napi-rs/canvas standing in for the DOM.
Install
npm install pdffr pdfjs-dist tesseract.jsShortened. The full README is on GitHub.
Nothing above is checked by us. What we check is on the safety report.
Install directly
Runs npx -y pdffr-mcp on your machine. Read the scan report first; the gateway never runs local packages.
claude mcp add pdffr-mcp -- npx -y pdffr-mcp
pdffr: common questions
- Is pdffr MCP server safe?
- Yes, by our scan: it is graded A (92/100). Read the pdffr safety report
- How do I install pdffr?
- It runs on your machine. Copy the Claude Code, Claude Desktop or Cursor config from the install section.
- Does pdffr need an API key?
- Not as far as the registry entry and our scan can tell: no credentials are declared or required.
- Is pdffr maintained?
- The last commit was 18 days ago (2026-09-03). The latest release is v0.1.1.
- What can I use instead of pdffr?
- Servers from other publishers that do the same job: Citra MCP server.
Alternatives to pdffr
Same job from other publishers: the closest match first, then the best rated.
- CitraLocal-first PDF evidence for agents: structure, tables, OCR, and citations. SDK · CLI · MCP.not reviewedEstablishedA