mcpField
P
PDF Reader MCP

PDF Reader MCP

本地服务
sylphxai.github.io生产力1.1k1 天前更新

关于 PDF Reader MCP

提供的 README 介绍的是 anymd:一款将文档和媒体转换为 Markdown 的本地 Rust MCP 服务及命令行工具。文档未说明 PDF Reader MCP 的 Agent Document Twin 或页面及边界框证据功能,因此本简介仅涵盖 README 中记录的 anymd 能力。

主要功能

  1. 01将文档和媒体转换为 Markdown
  2. 02支持 PDF、Office、EPUB、HTML、图像、音频和视频
  3. 03跨文件、文件夹和网址搜索
  4. 04检查 PDF 结构、页面和区域
  5. 05本地运行,提供 OCR 和转录选项

适用场景

  1. 01为 Agent 工作流整理 PDF 和 Office 文件
  2. 02搜索合同或研究论文文件夹
  3. 03将网页文章或目录转换为 Markdown
  4. 04从扫描页面和媒体中提取文本

MCP 相关

通过 stdio 向 MCP 客户端提供 `outline`、`read`、`search` 和 `inspect` 工具。客户端可读取文件、网址或文件夹,搜索内容并检查 PDF。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sylphxai-pdf-reader": {
"command": "npx",
"args": [
"-y",
"@sylphx/pdf-reader-mcp"
]
}
}
}
启动命令npx -y @sylphx/pdf-reader-mcp

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@sylphx/pdf-reader-mcp4.1.2

工具

3

收录的工具列表 · 更新于 2 周前

参数类型必填说明
scalenumber|null否
sourcesarray是
languagesarray|null否
max_pagesinteger|null否
operationany是
timeout_msinteger|null否
max_regionsinteger|null否
sample_pagesinteger|null否
include_imageboolean|null否
include_metadataboolean|null否
max_output_charsinteger|null否
max_pixels_per_pageinteger|null否

详细介绍

anymd — 将任意文件转换为适合 AI Agent 使用的整洁 Markdown

anymd

支持 PDF、Word、PowerPoint、Excel、EPUB、HTML 和网页、图像(OCR)、音频和视频(元数据、字幕、转录文本)。这是一款在本机运行的高速 Rust MCP 服务和命令行工具。无需 API 密钥。

anymd 是与 Sylphx AI parse 相同 crates 的免费本地模式。Sylphx AI parse 是托管式文档解析服务:使用相同的 crates,按页计费托管,适合不想在本地运行的调用方。

npm downloads stars MCP registry license OpenSSF Scorecard agent-ready 93/100

安装 · 基准测试 · 工具 · 命令行 · 格式 · 文档 · 专业版

原名 pdf-reader-mcp。从 pdf-reader-mcp 迁移

真实终端会话:anymd 转换 PDF 页面及其表格、搜索文件夹、读取电子表格,随后 Claude Code 通过 anymd MCP 服务根据 PDF 作答

未经剪辑的真实终端录屏(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

或者添加到 .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)上运行:

anymddoclingkreuzbergunstructuredmarkitdownmarkerpdftotext
总分96.493.081.781.276.871.042.2
表格单元格 F192.289.938.438.457.260.90.0
阅读顺序98.894.496.893.985.576.852.0
转换的文档数38/3838/3838/3838/3838/3830/3823/38
所有文档耗时11.5 s2,432.4 s16.0 s346.5 s75.6 s7,104.5 s0.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 或文件夹转换为 Markdownsource、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深入检查 PDFoperation: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 服务。

格式

输入输出内容
PDF按阅读顺序生成 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-formats crate。它在你的机器上进行转换,不会上传任何内容,也不需要 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 历史

Star History Chart

许可证

MIT © Sylphx

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。