关于 PDF Reader MCP Server (@shtse8/pdf-reader-mcp)
anymd(原 pdf-reader-mcp)是一个在本机运行的 Rust 文档转换器和 MCP 服务,面向需要将文件内容交给 Agent 处理的用户。它覆盖多种文档及媒体格式,并提供结构化 Markdown、分页读取和搜索。
主要功能
- 01转换 PDF、Office、EPUB、网页等
- 02提供 outline、read、search 和 inspect 工具
- 03提取 PDF 阅读顺序与表格
- 04支持本地 OCR 和音视频转录
- 05按页读取并限制令牌量
- 06同时提供命令行转换
适用场景
- 01将 PDF 转为带页码线索的 Markdown
- 02搜索本地文件夹和网页内容
- 03检查 PDF 页面、区域或结构
- 04从扫描图片提取文字
MCP 相关
anymd 通过 stdio 提供 MCP 服务,向客户端开放 outline、read、search 和 inspect 四种工具,可读取文件、URL 或文件夹并返回 Markdown。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
anymd
支持 PDF、Word、PowerPoint、Excel、EPUB、HTML 和网页、图像(OCR)、音频和视频(元数据、字幕、转录文本)。这是一款在本机运行的高速 Rust MCP 服务和命令行工具。无需 API 密钥。
anymd 是与 Sylphx AI parse 相同 crates 的免费本地模式。Sylphx AI parse 是托管式文档解析服务:使用相同的 crates,按页计费托管,适合不想在本地运行的调用方。
安装 · 基准测试 · 工具 · 命令行 · 格式 · 文档 · 专业版
原名 pdf-reader-mcp。从 pdf-reader-mcp 迁移
未经剪辑的真实终端录屏(asciinema + agg,脚本)。最后一条命令是 Claude Code 通过 anymd MCP 服务根据 PDF 作答。
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
为什么选择 anymd
-
快速。 原生 Rust 按页并行转换。在 38 份基准测试文档上,anymd 总耗时 11.5 s;docling 耗时 2,432.4 s(慢 212 倍),markitdown 耗时 75.6 s(慢 7 倍);marker 转换其中 30 份耗时 7,104.5 s,而 anymd 转换同样 30 份只需 4.64 s(快 1,532 倍)。
-
精准。 布局引擎根据字形间距重建单词,按阅读顺序排列双栏论文,并还原表格,包括无边框表格。文本与印刷内容完全一致,不会粘连单词,也不会打乱分栏。
-
节省 token。 页面以 Markdown 返回,带有 `` 引用锚点、小型 front-matter 标头和紧凑表格。token 预算和游标可确保大型文档在 Agent 的上下文范围内。
-
一次调用支持所有格式。 一个工具即可读取下方列出的所有格式。它还接受网页 URL 和整个目录,
search可搜索其中的所有内容。 -
本地且私密。 不会上传任何内容。OCR 使用已安装的本地 doc-VLM 模型或 tesseract;转录使用 ffmpeg 和内置的 Qwen3-ASR。设置 OCR 和下载 ASR 模型都需要明确同意。
安装
只需一条命令,即可将 anymd 添加到本机上的所有 MCP 客户端(Claude Code、Codex、Cursor、VS Code、Claude Desktop、Windsurf、Gemini CLI):
npx -y @sylphx/anymd setup # --dry-run to preview, --remove to undo
或者手动添加:所有 MCP 客户端都运行相同的命令 npx -y @sylphx/anymd。唯一要求是 Node 18+;npm 会为你的平台安装原生二进制文件。
Claude Code
claude mcp add anymd -- npx -y @sylphx/anymd
也可以通过 anymd 技能作为插件安装:运行 /plugin marketplace add SylphxAI/anymd,然后运行 /plugin install anymd@anymd。
Codex
codex mcp add anymd -- npx -y @sylphx/anymd
或者添加到 ~/.codex/config.toml:
[mcp_servers.anymd]
command = "npx"
args = ["-y", "@sylphx/anymd"]
Cursor
或者添加到 .cursor/mcp.json:
{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }
VS Code
点击一次即可安装到 VS Code,也可以在终端中运行:
code --add-mcp '{"name":"anymd","command":"npx","args":["-y","@sylphx/anymd"]}'
或者添加到 .vscode/mcp.json:
{ "servers": { "anymd": { "type": "stdio", "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }
Claude Desktop
一键安装:从最新版本下载 anymd-<version>.mcpb 并打开。或者手动安装:
将内容添加到 claude_desktop_config.json(设置 → 开发者 → 编辑配置):
{ "mcpServers": { "anymd": { "command": "npx", "args": ["-y", "@sylphx/anymd"] } } }
Windsurf、Zed、Cline 及其他客户端
任何通过 stdio 使用 MCP 的客户端:命令为 npx,参数为 ["-y", "@sylphx/anymd"]。若要将服务限制在单个文件夹内,请添加 --allow-dir=/path/to/docs。
仅使用 CLI
npm install -g @sylphx/anymd # or run it once with: npx -y @sylphx/anymd <file>
Python wheel 包含相同的预构建二进制文件,并从发布后的首个版本起在 PyPI 上以 anymd 的名称提供。
Windows:winget install Sylphx.anymd。macOS 和 Linux:brew install sylphxai/tap/anymd。Scoop:scoop bucket add sylphx https://github.com/SylphxAI/scoop-bucket && scoop install anymd。
Docker(amd64 和 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
或者从 crates.io 构建(需要 Rust 1.95+、CMake 和 C++ 编译器;包含 doc-VLM OCR 和本地 ASR):
cargo install anymd
npm、pip 和 Docker 提供预构建二进制文件,而 cargo install 会在你的机器上编译二进制文件。
基准测试
AgentDocBench 是一项面向 Agent 文档转 Markdown 的开放基准测试:涵盖 12 类符合许可证要求的文档(数学论文、双栏论文、财务表格、表单、扫描件、中日韩文字、幻灯片、电子表格、Word、EPUB、HTML),并根据逐字匹配句子、文本 F1、阅读顺序和表格单元格评分,同时统计耗时和输出 token 数。所有工具都在同类 GitHub 托管运行器(4 个 CPU)上运行:
| anymd | docling | kreuzberg | unstructured | markitdown | marker | pdftotext | |
|---|---|---|---|---|---|---|---|
| 总分 | 96.4 | 93.0 | 81.7 | 81.2 | 76.8 | 71.0 | 42.2 |
| 表格单元格 F1 | 92.2 | 89.9 | 38.4 | 38.4 | 57.2 | 60.9 | 0.0 |
| 阅读顺序 | 98.8 | 94.4 | 96.8 | 93.9 | 85.5 | 76.8 | 52.0 |
| 转换的文档数 | 38/38 | 38/38 | 38/38 | 38/38 | 38/38 | 30/38 | 23/38 |
| 所有文档耗时 | 11.5 s | 2,432.4 s | 16.0 s | 346.5 s | 75.6 s | 7,104.5 s | 0.90 s |
生成的排行榜、各类别得分(包括 anymd 表现较差的类别)和评测方法见基准测试指南。语料库、标准答案、适配器和原始结果位于 bench/,而 Benchmark 工作流 会重新运行所有测试;新工具只需一个适配器文件即可加入。
图像和视频提取
图像和视频基准测试 分别涵盖页面图像 OCR 和嵌入式视频字幕:
| 数据集 | anymd | 参考替代方案 |
|---|---|---|
| OmniDocBench v1.6(1,651 张页面图像),总体 ↑ | 21.4(8.1.0,英语 tesseract) | TeleOCR 96.91(作者报告的数据,并非我们在相同运行中测得) |
| MP4 mov_text 测试样本(4 段视频,12 条字幕),文本/起始时间召回率 ↑ | 91.7%(8.5.1,11/12) | FFmpeg 100%(12/12) |
| Matroska SubRip 测试样本(4 段视频,12 条字幕),文本/起始时间召回率 ↑ | 91.7%(8.5.1,11/12) | FFmpeg 100%(12/12) |
图像分数是历史数据,并非当前 OCR 模型的分数。视频分数于 2026-10-08 使用小型自建回归数据集测得,并非来自电影或讲座;anymd 会漏掉在不同时间戳重复出现的字幕。 这些分数衡量的是嵌入式字幕提取,而非视觉理解或 ASR。指南中提供了替代方案选择、局限性、耗时、原始输出和复现测试工具。
MCP 工具
anymd 提供四种工具。
| 工具 | 用途 | 关键参数 |
|---|---|---|
outline | 浏览标题树,查看节点 ID 和单元/Markdown 范围 | source、format(json · tree) |
read | 将文件、URL 或文件夹转换为 Markdown | source、pages("1-5,8")、max_tokens(默认值 20000)、cursor、ocr、images(refs · none)、revisions(markup · accept · reject)、transcript、download_asr_model |
search | 在文件、文件夹和 URL 中查找文本 | query、sources、mode(auto · literal · ranked)、glob、max_results |
inspect | 深入检查 PDF | operation:render_page、extract_regions、ocr_pages、structure(包含几何信息的 JSON)、compare、inspect、cite_check(支持引文和位置,anymd Pro) |
read 的回答如下:
---
source: papers/attention.pdf
title: Attention Is All You Need
pages: 15
showing: pages 1-9
---
# Attention Is All You Need
…
|Model|BLEU EN-DE|BLEU EN-FR|
|-|-|-|
|Transformer (big)|28.4|41.8|
…
search 的回答会为每条命中结果提供一行:
5 matches for "masked language model" (2 files, 31 sections searched)
### papers/bert.pdf (5)
- p.1: …by using a “**masked language model**” (MLM) pre-training objective, inspired by the Cloze task…
- p.2: …In addition to the **masked language model**, we also use a “next sentence prediction” task…
如果没有完全匹配的结果,search 会回退到按 BM25 排序的段落,因此像“how does bidirectional pretraining work”这样的问题仍能找到正确的页面。
CLI
同一个二进制文件也是命令行转换器,类似 MarkItDown,但速度快得多:
anymd report.pdf > report.md # a file
anymd deck.pptx notes.docx budget.xlsx # several files, each with a header
anymd https://example.com/article # a web page (main content only)
cat scan.png | anymd - --ocr # stdin, with OCR
anymd setup ocr # one-time: install the OCR engine and pinned local models (~2 GB)
anymd scan.png --ocr vlm # tables as Markdown, formulas as LaTeX
anymd paper.pdf --pages 1-3 --max-tokens 4000
anymd search "indemnification" contracts/ --glob '*.pdf'
anymd doctor # lists the optional tools anymd found
在 MCP 客户端中不带参数运行(通过管道传入 stdin),或运行 anymd mcp,即可通过 stdio 提供 MCP 服务。
格式
| 输入 | 输出内容 |
|---|---|
按阅读顺序生成 Markdown:标题、段落、列表、表格、上下标、`` 标记,以及以大纲形式呈现的书签。移除页眉和页码。仅含图像的页面在显式设置模型后使用本地 doc-VLM OCR,否则使用已安装的 tesseract。嵌入的图表会保存到 anymd 缓存中,并连同标题标记在原位(images: "refs",默认值)。 | |
Word .docx | 标题、粗体/斜体、链接、嵌套列表、含合并单元格的表格、脚注、以 LaTeX 表示的公式、作为图像文件的嵌入图片,以及以 CriticMarkup 表示的修订和评论 |
PowerPoint .pptx | 按演示文稿顺序,每张幻灯片对应一个部分;包括标题、项目符号、表格、图表数据、演讲者备注,以及作为图像文件的图片 |
Excel .xlsx .xls .ods · CSV/TSV | 每张工作表对应一个表格;日期使用 ISO 字符串;每张工作表最多 2,000 行 |
| EPUB | 按 spine 顺序,每章对应一个部分,另含标题和作者;图片作为图像文件 |
| HTML 和 URL | 仅提取正文:移除导航、Cookie 横幅和侧边栏。解析相对链接,并保留代码的语言。 |
| Markdown、文本、JSON | 原样返回,并添加分页 |
| 图像 | 尺寸和 EXIF 信息(相机、日期、GPS),以及在设置模型后运行的本地 doc-VLM OCR,或已安装的 tesseract |
| 音频 / 视频 | 时长、流、章节、内嵌字幕和外置字幕(通过 ffprobe/ffmpeg)。设置 transcript: true 可获取本地 Qwen3-ASR 转录;download_asr_model: true 会启用转录;仅设置 transcript: true 绝不会下载模型权重。 |
工作原理
对于 PDF,anymd 读取字形位置,而不是文本片段。它根据基线将字形分组为行,因此可以处理上标和下标。单词之间的空格根据字形间距确定,并参考字体大小进行测量,再根据字距调整。具备列感知能力的 XY cut 算法会查找连续文本之间的栏间空白。有绘制线条的表格依据线条识别(两个单元格之间缺少分隔线时,会将它们视为合并单元格);没有线条的表格则依据对齐的空白列识别。换行的单元格文本会保留在原单元格中,堆叠的表头行会合并为一个表头,跨越多列的表头则会保留在每一列中。读者无法看到的文本(不可见文本,或与其所在框背景颜色相同的文本)会被排除。页面会并行处理且彼此隔离,因此单个格式错误的页面不会导致整个文档处理失败。其他格式均使用 Rust 原生解析(zip/XML、calamine、html5ever);整个过程不涉及 Python、LibreOffice 或云服务。
anymd Pro
anymd 核心功能免费且开源(MIT),此前免费的功能不会转移到 Pro。anymd Pro(当前为一次性价格,适用于 8.4.0 起的版本)只为必须展示证据的 Agent 增添两项功能:带精确哈希帧的视频时间轴(inspect 的 video_timeline 和 render_frame,以及 read 和 outline 的 timeline 选项),以及引用核查,用于验证 PDF 中特定页面和位置的引文。许可证离线验证;无需账户。Pro 收入用于支持 anymd 的开发。购买 anymd Pro,付款后即可立即获取:从结账确认页面复制许可证令牌,或通过产品的恢复页面找回。在终端购买:运行 anymd pro buy,即可在浏览器中打开结账页面,并在此设备上将付款转换为许可证令牌,无需复制。查看 anymd Pro。
本地版与托管版
anymd 有两种模式,只有一种在你的机器上运行:
- 本地版(免费、MIT、此仓库)。
anymd二进制文件、MCP 服务、命令行工具以及anymd-core、anymd-pdf和anymd-formatscrate。它在你的机器上进行转换,不会上传任何内容,也不需要 API 密钥。 - 托管版(Sylphx AI parse,按量计费)。 相同的 crate 以发布版本固定,并原样导入,为不想使用本地运行时的 Sylphx AI 调用方提供文档解析服务。调用按页计费,且需要 Sylphx AI 账号。这是付费模式;没有许可证密钥,本地二进制文件中的任何功能也不会因此受到限制。
Sylphx AI parse 不是另一种解析器,也不是分支:托管服务会导入这些 crate,因此此处的修复会同时影响两种模式,它们不会分化成独立的引擎。此仓库中只有免费的本地二进制文件;托管服务则运行在 Sylphx 平台上。
对于导入方,anymd-core、anymd-pdf 和 anymd-formats crate API 在同一主版本内保持稳定:除非升级主版本,否则不会发布破坏性变更,因此服务固定使用的版本会持续正常运行,并会审慎地升级,绝不会因补丁版或次版本发布而被迫升级。
安全性
- 本地优先:除非你传入 URL,否则文档不会离开你的机器;即使传入,也只会获取该 URL。
- URL 获取会屏蔽专用地址和环回地址,并在每次重定向时重新检查,且会固定到解析出的地址。
--allow-dir=<path>(可重复指定)或MCP_PDF_ALLOWED_DIRS会将服务限制在你列出的目录中。- 嵌入的图像只会写入 anymd 自己的缓存目录(
ANYMD_CACHE_DIR,否则使用平台缓存目录),不会写在源文档旁边;超过 50 百万像素的图像将被拒绝。 - 外部工具(tesseract、ffprobe、ffmpeg)均为可选。anymd 会在不使用 shell 的情况下运行它们,并设置超时和输出上限。
如需报告漏洞,请参阅 SECURITY.md。
Sylphx 的其他项目
- repomap:为 AI Agent 提供代码库地图:代码图、搜索、调用路径和变更影响。
- lockdocs:根据 lockfile 提供精确到版本的库文档。本地运行、离线可用、没有速率限制。
- skills:经实战验证的 Claude Code 和 Codex Agent 技能,一条命令即可安装。
- readme-mark:通过一个 URL 生成精美的 README 图像:横幅、徽章、图标和统计卡片。
- Sylphx apps:Sylphx 提供的应用和工具。
了解更多 Sylphx 项目:https://sylphx.com/open-source
Star 历史
许可证
MIT © Sylphx
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。