Mmcp.market

pdffr MCP server

by AmerSarhan·io.github.AmerSarhan/pdffr-mcp·v0.1.1

Local, private PDF to Markdown for agents: geometry-first parsing, OCR only where needed.

A92/100grade A
What users say
No reviews yet
Be the first
Safety scan
A92/100

full report

Adoption
Growing

0 stars40 downloads/wk

Reviews

Write one

Nobody 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 posts

Read from the package source without running it. The installed server may list more.

  • pdf_outline

    List the headings of a PDF with their level and page number, so you can decide which pages to read with pdf_to_markdown.

  • pdf_tables

    Extract every table in a PDF as JSON rows: [{ page, rows: string[][] }]. The first row is the header.

  • pdf_to_markdown

    Decompile 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

no findings
  • 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
Overall 92/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

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 tab
npx pdffr report.pdf -o report.md

Why 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.js

Shortened. 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
Add to Cursor

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.

  • Citra
    Local-first PDF evidence for agents: structure, tables, OCR, and citations. SDK · CLI · MCP.
    A

More from AmerSarhan