关于 all2md
all2md 是面向开发者和文档使用者的文档转换与处理工具,可通过命令行、Python API 或 MCP 助手处理多种文件格式。它支持文档阅读、转换、搜索、比较和分块,并提供带来源页码及章节信息的分块结果。
主要功能
- 01读取并转换 40 多种格式
- 02跨格式搜索和比较文档
- 03按章节或语义分块
- 04提供 Python API 和命令行
- 05评估转换质量并支持 CI 门禁
- 06通过 MCP 读取、编辑和保存文档
适用场景
- 01将 PDF 和 Office 文档转为 Markdown
- 02在合同和演示文稿中查找内容
- 03为 RAG 流程准备带出处的文本块
- 04让 AI 助手搜索并编辑指定文件夹中的文档
MCP 相关
提供 MCP 服务,供客户端读取、保存和编辑文档,并搜索文件、比较版本及获取大纲。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
5收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| source | string | 是 | 统一的 source 参数。自动检测为:文件路径(读取允许列表中存在时)、data URI(data:...)、Base64 字符串或纯文本内容。必填。 |
| section | any | 否 | 要提取的可选部分名称(按标题匹配,不区分大小写)。如果提供,则仅返回该部分。 |
| pdf_pages | any | 否 | 仅适用于 PDF 来源的页面指定方式。示例:'1-3'(第 1–3 页)、'1,3,5'(指定页面)、'1-3,5,10-'(页码范围和单页)、'1-'(从第 1 页到末尾)。 |
| format_hint | any | 否 | 用于消除歧义情况(例如无扩展名文件)的可选格式提示。选项:auto(默认)、pdf、docx、pptx、html、eml、epub、ipynb、odt、odp、ods、xlsx、csv、rst、markdown、txt。 |
详细介绍
all2md
以 Markdown 格式读取、转换、搜索和分块处理 PDF、Office 文件、电子书、电子邮件及其他 40 多种格式,并可转换回原格式。可通过 Python、终端或 AI 助手使用。
使用 all2md read 在终端中读取 Word 文档。
十秒上手
使用 uv 无需预先安装:
uvx --from "all2md[all]" rcat report.pdf # read any document in the terminal
uvx --from "all2md[all]" all2md report.docx # print it as Markdown
将其作为工具保留在本地,即可通过 PATH 使用 all2md、rcat 和 all2md-mcp 服务:
uv tool install "all2md[all]"
也可以将其用作库:
uv add "all2md[pdf,docx]" # or: pip install "all2md[pdf,docx]"
from all2md import to_markdown
markdown = to_markdown("report.pdf")
选择适合你的方式
| 我想要…… | 从这里开始 | 阅读 |
|---|---|---|
| 不离开终端即可阅读文档 | rcat report.docx、all2md read docs/ | 在终端中阅读 |
| 双向转换文件,无论一个还是一千个 | all2md ./inbox -r --output-dir ./md | 转换 |
| 在 Python 代码中解析文档 | to_markdown("report.pdf") | Python API |
| 在 PDF、Word 文件和幻灯片中查找文本 | all2md grep "deadline" contracts/ -r | 搜索任意文档 |
| 将文档输入 RAG 工作流 | all2md chunk handbook.pdf | RAG 和分块 |
| 让 Claude 或其他助手处理我的文件 | 一键安装 Claude Desktop 扩展 | AI 助手(MCP) |
| 了解输出结果的可信度 | all2md report scan.pdf | 准确度测量 |
在终端中阅读文档
rcat 就是用于文档的 cat。它可以渲染 PDF、Word 和 PowerPoint 文件(也支持 97-2003 .doc 和 .ppt)、电子表格、电子书、电子邮件、笔记本、man 手册页,以及 all2md 可读取的其他所有格式,并保留标题、表格、语法高亮代码、带目标地址的链接、脚注、数学公式和提示框。无需浏览器或办公套件,也能通过 SSH 使用。如果你会用 glow 阅读 Markdown,或用 doxx 阅读 Word 文件,那么 rcat 就是适用于所有格式的同类工具。
rcat report.docx # read a Word document
rcat deck.pptx --outline # just the slide titles
rcat handbook.pdf --extract "Installation" # one section, by heading
rcat contract.pdf --pager # page through it
curl -sL https://example.com/spec.pdf | rcat -
对于较长的内容,all2md read(或 rcat -i)会打开上方所示的交互式查看器:文本旁边显示大纲,可在标题间跳转、查看屏幕上的链接;如果提供文件夹,还会显示其中的文档树。
all2md read handbook.pdf
all2md read docs/ # choose from the documents in a folder
如果你更愿意使用浏览器,all2md view report.docx 会打开经过样式美化的 HTML 预览,all2md serve ./docs -r 会通过按需转换来提供整个文件夹,all2md edit notes.md 则会打开浏览器编辑器,并将更改保存回文件。
样式功能需要 cli_extras extra,查看器需要 tui;all2md[all] 同时包含两者。更多信息请参阅查看器文档。
在命令行中转换文档
将任何受支持的格式转换为 Markdown,也可将 Markdown 转换为 DOCX、PDF、PPTX、HTML、EPUB 等格式:
all2md report.pdf > report.md # to Markdown on stdout
all2md answer.md --out answer.docx # Markdown (an LLM's output, say) to Word
all2md ./inbox -r --output-dir ./markdown -p 4 # a whole tree, four at a time
all2md ./inbox -r --output-dir ./markdown --watch # keep converting as files arrive
all2md scan.pdf --pdf-ocr-enabled # scanned pages, through OCR
每个转换器的所有选项都可通过 CLI 标志(all2md --help)或配置文件中的键(all2md config generate)设置。每个文件命令都支持用 - 从 stdin 读取并写入 stdout,因此 all2md 可以融入管道。Word 文档的输出会遵循 Word 的显示效果:按策略处理修订,保留带锚点的批注、脚注、字段结果、合并单元格,以及 Word 实际显示的列表编号。
Python API
to_markdown() 可处理常见情况;convert() 可在任意两种格式之间转换;to_ast() 则会提供解析后的文档供你处理。
from all2md import to_markdown, convert, to_ast, from_ast
markdown = to_markdown("report.pdf", pages="1-3", flavor="gfm")
convert("notes.md", "notes.docx", target_format="docx")
doc = to_ast("report.docx") # a typed document tree
html = from_ast(doc, target_format="html")
核心部分没有依赖项;每种格式的 extra 只会引入该格式所需的依赖。选项可以是类型化的数据类(PdfOptions、DocxOptions、……),也可以是普通关键字参数;AST 转换(remove-images、heading-offset,或你自己的转换)可插入解析和渲染之间。新格式和转换可通过入口点接入。
如果你是拥有编码环境的 LLM,all2md llm-help 会打印专为你编写的使用指南,而 all2md install-skills 会将其安装为 Claude Code、Cursor 等工具的技能。
请参阅 Python API 指南、AST 指南和 examples/python。
搜索任意文档内容
grep 无法搜索 PDF 或 .docx 文件内部。all2md grep 可以跨多种格式搜索,并支持常用标志:
all2md grep -i "termination" contracts/ -r # every format in the tree
all2md grep -C 2 "deadline" contracts/ -r --rich # with context, highlighted
all2md search "renewal terms" ./contracts --keyword # ranked BM25 search
all2md search "who approved the budget" ./minutes --hybrid
all2md diff draft-v1.docx draft-v2.pdf # a colored diff, across formats
向量搜索和混合搜索需要 search extra。添加 --cache(或 ALL2MD_CACHE=1)即可在重复运行时复用已解析的文档。
RAG 和分块
all2md chunk 可一步完成转换和拆分。每个块都附带其章节标题和源页面范围,因此答案可以标注内容出处。
all2md chunk handbook.pdf --strategy semantic --max-tokens 512 --overlap 64 > chunks.jsonl
import all2md
for c in all2md.chunk("handbook.pdf", strategy="semantic", max_tokens=512, overlap=64):
print(c.chunk_id, c.section_heading, c.page, c.token_count)
共有 11 种策略(语义、标题、章节、令牌、句子、段落、代码等)。表格和代码块会保持完整,输出为适用于任何向量存储的 JSONL。实际令牌数使用 chunk extra 中的 tiktoken 计算。请参阅 chunk 命令。
将你的文档交给 AI 助手
all2md 内置了 Model Context Protocol 服务,因此 Claude 之类的助手可以读取你的 PDF 和 Office 文件、编写 Word 文档、直接编辑文档、搜索文件夹并比较两个版本。你无需编写任何代码。
在 Claude Desktop 中(无需 Python 或终端):
- 从最新版本下载
all2md.mcpb。 - 打开 Claude Desktop → Settings → Extensions,将文件拖到页面上。
- 选择 all2md 可以处理的文件夹,以及是否允许其写入文件。
- 询问 Claude 该文件夹中的文档。
其他 MCP 客户端及开发者配置
该服务已列入 MCP Registry,名称为 io.github.thomas-villani/all2md。若要自行运行,请使用 uvx(无需安装任何内容):
{
"mcpServers": {
"all2md": {
"command": "uvx",
"args": ["--from", "all2md[all]", "all2md-mcp", "--temp", "--enable-from-md"]
}
}
}
也可以使用 uv tool install "all2md[mcp]" 安装,并使用 "command": "all2md-mcp"。[mcp] 扩展涵盖 PDF、Word、PowerPoint、Excel、HTML、EPUB、ODF 和 reStructuredText;如需全部功能,请使用 [all]。
工具: read_document_as_markdown、save_document_from_markdown、edit_document,以及只读工具 search_documents、diff_documents 和 get_document_outline。
选项和安全模型请参阅 MCP 文档。
实测保真度
all2md 的转换质量通过独立的真实基准进行衡量,而非仅凭声称。每个基准类别都公布了一项对照测试,展示当测试理应失败时的测量结果:
- **原生数字 PDF:**来自 PubMed Central 的出版商 PDF,以随附的 JATS XML 为依据进行评分。
- **扫描页面:**981 页 OmniDocBench 页面,以人工标注为依据,评估 OCR 流程。
- **往返转换:**Markdown → 格式 → Markdown 必须在每个拉取请求中,对本仓库自身的文档保持 100 的保真度。
与其他转换器相比,在由 103 篇 PubMed Central 文章组成的封存留出集上,使用相同工具进行评分(读取日期:2026-08-29):
| all2md | pymupdf4llm 1.28.2 | Docling 2.120.3 | |
|---|---|---|---|
| 可提取文本的召回率 | 97.3% | 97.1% | 96.2% |
| 虚构文本(越低越好) | 0.55% | 6.26% | 2.05% |
| 保留的表格文本 | 73.1% | 60.7% | 79.3% |
Docling 的学习型表格模型在表格处理方面仍然领先。比较基准类别包含完整结果、基本规则以及相关限制说明。转换保真度提供其余信息。
你也可以用相同方式衡量自己的文档:
all2md report scan.pdf # a reference-free "quality card"
all2md roundtrip notes.md --via docx # convert, parse back, score what survived
all2md optimize hard.pdf --sample-pages 5 # auto-tune the settings for a difficult file
CI 质量门禁
相同的评分会作为 GitHub Action 运行;当你的文档无法再被干净地转换时,它会使构建失败:
- uses: thomas-villani/[email protected]
with:
paths: docs/**/*.md
roundtrip-fail-under: 97
如果没有匹配的文件、没有设置阈值,或文档完全无法转换,它会直接失败,而不会悄悄通过;如果阈值远低于实际底线、可能永远不会触发,它也会发出警告。请参阅 Action 文档。
支持的格式
- **文档:**PDF、DOCX、DOC、PPTX、PPT、ODT、ODP、RTF、EPUB、FB2、CHM
- **网页与标记语言:**HTML、MHTML、Markdown、reStructuredText、AsciiDoc、Org-Mode、LaTeX、MediaWiki、Textile、DokuWiki、BBCode、man 页面
- **数据与电子表格:**XLSX、ODS、CSV/TSV、JSON、YAML、TOML、INI、OpenAPI/Swagger
- **电子邮件:**EML、MBOX、Outlook(MSG/PST/OST)、Evernote(ENEX)
- **笔记本与代码:**Jupyter,以及近 200 种源代码和配置文件类型
- **归档文件:**ZIP、TAR、7Z、RAR 等;
.gz、.bz2和.xz会按其所包含的文件格式转换 - **自定义输出:**通过 Jinja2 模板支持任意文本格式
完整格式矩阵(输入 / 输出 / 所需扩展)
| Format | File Extensions | Input (Parse) | Output (Render) | Dependencies Extra | | ----------------------------- | --------------------------------------------- | :-----------: | :-------------: | ------------------ | | **PDF** | `.pdf` | ✅ | ✅ | `pdf`, `pdf_render`| | **Word Document** | `.docx` | ✅ | ✅ | `docx` | | **Word 97-2003 Document** | `.doc`, `.dot` | ✅ | (N/A) | (built-in) | | **PowerPoint Presentation** | `.pptx` | ✅ | ✅ | `pptx` | | **PowerPoint 97-2003** | `.ppt`, `.pps`, `.pot` | ✅ | (N/A) | (built-in) | | **HTML** | `.html`, `.htm` | ✅ | ✅ | `html` | | **MHTML Web Archive** | `.mhtml`, `.mht` | ✅ | (N/A) | `html` | | **Email Message** | `.eml` | ✅ | (N/A) | (built-in) | | **MBOX Mailbox Archive** | `.mbox`, `.mbx` | ✅ | (N/A) | (built-in) | | **Outlook Message/Archive** | `.msg`, `.pst`, `.ost` | ✅ | (N/A) | `outlook` | | **Jupyter Notebook** | `.ipynb` | ✅ | ✅ | (built-in) | | **EPUB E-book** | `.epub` | ✅ | ✅ | `epub` | | **FictionBook 2.0 (FB2)** | `.fb2` | ✅ | (N/A) | `fb2` | | **CHM (Compiled HTML Help)** | `.chm` | ✅ | (N/A) | `chm` | | **OpenDocument Text** | `.odt` | ✅ | ✅ | `odf` | | **OpenDocument Presentation** | `.odp` | ✅ | ✅ | `odf` | | **OpenDocument Spreadsheet** | `.ods` | ✅ | (N/A) | `odf` | | **Excel Spreadsheet** | `.xlsx` | ✅ | (N/A) | `xlsx` | | **CSV / TSV** | `.csv`, `.tsv` | ✅ | ✅ | (built-in) | | **Rich Text Format** | `.rtf` | ✅ | ✅ | `rtf` | | **LaTeX** | `.tex`, `.latex` | ✅ | ✅ | `latex` | | **AsciiDoc** | `.adoc`, `.asciidoc`, `.asc` | ✅ | ✅ | (built-in) | | **reStructuredText** | `.rst` | ✅ | ✅ | `rst` | | **Org-Mode** | `.org` | ✅ | ✅ | `org` | | **MediaWiki** | `.wiki`, `.mw` | ✅ | ✅ | `wiki` | | **Textile** | `.textile` | ✅ | ✅ | (built-in) | | **BBCode** | `.bbcode`, `.bb` | ✅ | (N/A) | (built-in) | | **DokuWiki** | `.doku`, `.dokuwiki` | ✅ | ✅ | (built-in) | | **Man Page (man(7))** | `.1` to `.9`, `.man` | ✅ | ✅ | (built-in) | | **Evernote Export** | `.enex` | ✅ | (N/A) | `enex` | | **Safari Web Archive** | `.webarchive` | ✅ | (N/A) | `html` | | **JSON** | `.json` | ✅ | ✅ | (built-in) | | **YAML** | `.yaml`, `.yml` | ✅ | ✅ | (built-in) | | **TOML** | `.toml` | ✅ | ✅ | (built-in) | | **INI / Config** | `.ini`, `.cfg`, `.conf` | ✅ | ✅ | (built-in) | | **OpenAPI/Swagger** | `.yaml`, `.yml`, `.json` | ✅ | (N/A) | `openapi` | | **Plain Text** | `.txt`, `.text` | ✅ | ✅ | (built-in) | | **Source Code** | nearly 200 extensions (`.py`, `.js`, etc.) | ✅ | (N/A) | (built-in) | | **Archive Formats** | `.tar`, `.tgz`, `.7z`, `.rar`, etc. | ✅ | (N/A) | (built-in) | | **Single Compressed File** | `.gz`, `.bz2`, `.xz` (e.g. `ls.1.gz`) | ✅ | (N/A) | (built-in) | | **ZIP Archive** | `.zip` | ✅ | (N/A) | (built-in) | | **Jinja2 Templates (Custom)** | User-defined (`.jinja2`, `.j2`) | ❌ | ✅ | `jinja2` |运行 all2md list-formats 查看当前安装支持的格式,或浏览格式文档。
安装
| 使用场景 | 安装方式 |
|---|---|
| 使用 CLI 和查看器 | uv tool install "all2md[all]" |
| 试用一次 | uvx --from "all2md[all]" rcat FILE |
| 使用库进行开发 | uv add "all2md[pdf,docx,html]" 或 pip install "all2md[pdf,docx,html]" |
| 运行 MCP 服务 | 上方的 Claude Desktop 扩展,或 uv tool install "all2md[mcp]" |
all2md check-deps 会显示当前安装支持处理哪些格式。
一键安装脚本、OCR、版面分析及其他扩展功能
安装脚本。 这些脚本会安装 uv(如果尚未安装),并通过 all 扩展全局安装 CLI。
# macOS / Linux
curl -LsSf https://raw.githubusercontent.com/thomas-villani/all2md/main/scripts/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/thomas-villani/all2md/main/scripts/install.ps1 | iex"
若要精简安装内容,请下载脚本并传入所需的扩展:sh install.sh pdf,docx,html 或 .\install.ps1 -Extras pdf,docx,html。
针对特定需求的扩展:
uv add "all2md[cli_extras]" # terminal styling for --rich / rcat, progress bars, watch mode
uv add "all2md[tui]" # the interactive viewer, all2md read
uv add "all2md[pdf,ocr]" # OCR for scanned PDFs (Tesseract; needs the system binary)
uv add "all2md[pdf,ocr-easyocr]" # ...or binary-free EasyOCR (downloads models on first use)
uv add "all2md[pdf_layout]" # ML layout analysis for difficult PDFs
uv add "all2md[search]" # vector and hybrid search
uv add "all2md[chunk]" # real token counts for chunking
uv add "all2md[outlook]" # Outlook MSG (PST/OST also need: pip install libpff-python)
完整列表请参阅安装指南。
常见问题
all2md 与 Pandoc 有什么不同? all2md 基于 Python 构建,适用于编程调用、大模型工作流以及在终端中阅读文档。Pandoc 的出版功能覆盖面更广,并提供引文等学术功能。两者相辅相成。
它支持扫描版 PDF 吗?
支持。安装 all2md[pdf,ocr](若不需要系统二进制文件,则安装 ocr-easyocr),并传入 --pdf-ocr-enabled。如果 PDF 没有文本层,all2md report 会提示你。
我可以输出 Markdown 以外的格式吗? 可以:DOCX、PDF、PPTX、HTML、EPUB、ODT、RST、LaTeX 等;也可以通过 Jinja2 模板输出任何文本格式。
如何添加格式?
编写解析器,使用 ConverterMetadata 描述它,并将其注册到 all2md.converters 入口点。请参阅 examples/plugins。
贡献
欢迎提交错误报告、功能请求、文档和代码。有关开发环境设置,请参阅 CONTRIBUTING.md。解析器变更将依据基准测试类别进行评估;请参阅转换保真度。
问题和错误请提交至 GitHub Issues。完整文档请访问 Read the Docs。
许可证
MIT。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。