mcpField
A
all2md

all2md

本地服务
all2md.readthedocs.io生产力34今天更新

关于 all2md

all2md 是面向开发者和文档使用者的文档转换与处理工具,可通过命令行、Python API 或 MCP 助手处理多种文件格式。它支持文档阅读、转换、搜索、比较和分块,并提供带来源页码及章节信息的分块结果。

主要功能

  1. 01读取并转换 40 多种格式
  2. 02跨格式搜索和比较文档
  3. 03按章节或语义分块
  4. 04提供 Python API 和命令行
  5. 05评估转换质量并支持 CI 门禁
  6. 06通过 MCP 读取、编辑和保存文档

适用场景

  1. 01将 PDF 和 Office 文档转为 Markdown
  2. 02在合同和演示文稿中查找内容
  3. 03为 RAG 流程准备带出处的文本块
  4. 04让 AI 助手搜索并编辑指定文件夹中的文档

MCP 相关

提供 MCP 服务,供客户端读取、保存和编辑文档,并搜索文件、比较版本及获取大纲。

配置

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

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
pypiall2md1.18.0
mcpball2md.mcpb1.18.0

工具

5

收录的工具列表 · 更新于 3 天前

参数类型必填说明
sourcestring是统一的 source 参数。自动检测为:文件路径(读取允许列表中存在时)、data URI(data:...)、Base64 字符串或纯文本内容。必填。
sectionany否要提取的可选部分名称(按标题匹配,不区分大小写)。如果提供,则仅返回该部分。
pdf_pagesany否仅适用于 PDF 来源的页面指定方式。示例:'1-3'(第 1–3 页)、'1,3,5'(指定页面)、'1-3,5,10-'(页码范围和单页)、'1-'(从第 1 页到末尾)。
format_hintany否用于消除歧义情况(例如无扩展名文件)的可选格式提示。选项:auto(默认)、pdf、docx、pptx、html、eml、epub、ipynb、odt、odp、ods、xlsx、csv、rst、markdown、txt。

详细介绍

all2md 标志

all2md

以 Markdown 格式读取、转换、搜索和分块处理 PDF、Office 文件、电子书、电子邮件及其他 40 多种格式,并可转换回原格式。可通过 Python、终端或 AI 助手使用。

PyPI version Python Versions CI codecov 文档 许可证
uv Ruff 已通过 mypy 检查 下载量 MCP 服务 GitHub Action

all2md 在终端中读取 Word 文档,显示大纲、表格、代码和链接列表

使用 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.pdfRAG 和分块
让 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 实际显示的列表编号。

请参阅 CLI 参考和速查表。

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 或终端):

  1. 从最新版本下载 all2md.mcpb。
  2. 打开 Claude Desktop → Settings → Extensions,将文件拖到页面上。
  3. 选择 all2md 可以处理的文件夹,以及是否允许其写入文件。
  4. 询问 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):

all2mdpymupdf4llm 1.28.2Docling 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。

评论

支持 Markdown

第一次接触 MCP?

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

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