Airsc is free for everyone. If it helps you, support it with $2–$20.

Support
PluginSafeDocs, writing & contentBeginner friendly

anymd

SylphxAI · SylphxAI/anymd

This fast, local Rust MCP server and CLI converts various file types, including PDF, Word, HTML, and audio/video, into clean Markdown for AI agent consumption, without API keys.

Any file → clean Markdown for AI agents: PDF, Word, PowerPoint, Excel, EPUB, HTML and web pages, images (OCR), audio and video (metadata, subtitles, transcripts). A fast Rust MCP server and CLI that runs on your machine. No API key.

1k stars90License: MITUpdated 12 days ago0 opens

See it in action

Terminal session converting PDF and XLSX files to Markdown

From the author's READMETerminal session converting PDF and XLSX files to Markdown

From the author's README SylphxAI ·Source

What you can do with it

  • Convert complex PDF reports into digestible Markdown for an AI agent to analyze.
  • Extract text and metadata from Word documents, Excel sheets, or EPUB books for AI processing.
  • Generate transcripts and subtitles from audio/video files to provide context for an AI agent.

Safety check

Safe

No risky patterns found in the files we scanned.

Automated scan of the repo files. Always review code you run.

From the README

anymd

PDF, Word, PowerPoint, Excel, EPUB, HTML and web pages, images (OCR), audio and video (metadata, subtitles, transcripts). A fast Rust MCP server and CLI that runs on your machine. No API key.

Install · Benchmarks · Tools · CLI · Formats · Docs · Pro

Formerly pdf-reader-mcp. Migrating from pdf-reader-mcp

A real, unedited terminal recording (asciinema + agg, script). The last command is Claude Code answering from the PDF through the anymd MCP server.

npx -y @sylphx/anymd setup              # add anymd to every MCP client on this machine
npx -y @sylphx/anymd report.pdf > report.md   # or convert from the shell

Why anymd

  • Fast. Native Rust converts in parallel, page by page. On the 38 benchmark documents, anymd takes 11.5 s in total; docling 2,432.4 s (212×), markitdown 75.6 s (7×); marker converted 30 of them in 7,104.5 s, against anymd's 4.64 s on the same 30 (1,532×).

  • Accurate. A layout engine rebuilds words from glyph gaps, puts two-column papers in reading order, and recovers tables, including borderless ones. The text stays exactly as printed, with no glued words and no scrambled columns.

  • Lean on tokens. Pages come back as Markdown with `` citation anchors, a small front-matter header, and compact tables. A token budget and a cursor keep large documents within your agent's context.

  • Every format, one call. One tool reads every format listed below. It also accepts web URLs and whole directories, and search looks across all of them.

  • Local and private. Nothing is uploaded. OCR uses installed local doc-VLM models or tesseract; transcripts use ffmpeg and bundled Qwen3-ASR. OCR setup and ASR model downloads require explicit opt-in.

Install

Add anymd to every MCP client on your machine (Claude Code, Codex, Cursor, VS Code, Claude Desktop, Windsurf, Gemini CLI) with one command:

npx -y @sylphx/anymd setup     # --dry-run to preview, --remove to undo

Or add it by hand: every MCP client runs the same command, npx -y @sylphx/anymd. Node 18+ is the only requirement; npm installs the native binary for your platform.

Claude Code

claude mcp add anymd -- npx -y @sylphx/anymd

Or as a plugin, with the anymd skill: /plugin marketplace add SylphxAI/anymd, then /plugin install anymd@anymd.

Codex

codex mcp add anymd -- npx -y @sylphx/anymd

or in ~/.codex/config.toml:

[mcp_servers.anymd]
command = "npx"
args = ["-y", "@sylphx/anymd"]

Cursor

or in .cursor/mcp.json:

{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }

VS Code

Install in VS Code with one click, or from a terminal:

code --add-mcp '{"name":"anymd","command":"npx","args":["-y","@sylphx/anymd"]}'

or in .vscode/mcp.json:

{ "servers": { "anymd": { "type": "stdio", "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }

Claude Desktop

One click: download anymd-<version>.mcpb from the latest release and open it. Or, by hand:

Add to claude_desktop_config.json (Settings → Developer → Edit Config):

{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }

Windsurf, Zed, Cline, and other clients

Any client that speaks MCP over stdio: command npx, args ["-y", "@sylphx/anymd"]. To keep the server inside one folder, add --allow-dir=/path/to/docs.

CLI only

npm install -g @sylphx/anymd     # or run it once with: npx -y @sylphx/anymd <file>

Python: uvx anymd report.pdf > report.md runs it once, pip install anymd installs it, and uvx anymd mcp starts the MCP server. The wheels carry the same prebuilt binary.

Docker (amd64 and arm64):

docker run --rm -v "$PWD:/data" ghcr.io/sylphxai/anymd report.pdf > report.md
docker run -i --rm ghcr.io/sylphxai/anymd        # MCP server on stdio

Or build it from crates.io (Rust 1.95+, CMake and a C++ compiler; doc-VLM OCR and local ASR are included):

cargo install anymd

npm, pip and Docker ship a prebuilt binary, while cargo install compiles one on your machine.

Benchmarks

AgentDocBench is an open benchmark for document → Markdown conversion for agents: license-clean documents in 12 categories (math papers, two-column papers, financial tables, forms, scans, CJK, slides, spreadsheets, Word, EPUB, HTML), scored on verbatim sentences, text F1, reading order, and table cells, with time and output tokens. Every tool runs on the same kind of GitHub-hosted runner (4 CPUs):

anymddoclingkreuzbergunstructuredmarkitdownmarkerpdftotext
Overall score96.493.081.781.276.871.042.2
Table cells F192.289.938.438.457.260.90.0
Reading order98.894.496.893.985.576.852.0
Docs converted38/3838/3838/3838/3838/3830/3823/38
Time, all docs11.5 s2,432.4 s16.0 s346.5 s75.6 s7,104.5 s0.90 s

The generated leaderboard, per-category scores (including where anymd loses), and method are in the benchmark guide. The corpus, ground truth, adapters, and raw results are in bench/, and the [Benchmark workflow](https://github.com/SylphxAI/anymd/blob/ma

View source on GitHub