PDF MCP Flow
PDF MCP Flow - AI 驱动的 PDF 处理引擎
中文 | English
🚀 专为 LLM 和 RAG 设计的 MCP 文档处理服务器 | PDF 转 Markdown | 格式转换 | 智能提取
MCP PDF Flow 是一个强大的 Model Context Protocol (MCP) 服务器,旨在弥合 LLM(如 Claude)与本地文档之间的鸿沟。
它不仅是PDF 转 Markdown 的最佳工具,还提供了一套完整的文档处理工作流,支持 RAG(检索增强生成) 场景下的数据清洗和格式化。
✨ 核心优势
🤖 LLM 友好:输出清洗后的结构化 Markdown,完美适配 AI 上下文阅读。
🔍 智能 RAG 支持:支持语义模糊搜索和元数据提取,快速定位文档关键信息。
🔄 全能格式转换:PDF ⇋ Word ⇋ Markdown 无缝互转。
✨ 功能特性
📝 智能文本提取:
精准提取 PDF 页面文本。
智能 Markdown 识别:自动识别标题、列表、段落结构,合并跨行文本,输出干净的 Markdown。
🖼️ 图片提取:
支持提取页面内的所有图片。
自动保存与引用:默认将图片保存到本地
extracted_images/目录,并在 Markdown 中插入图片路径引用,避免大量 Base64 数据占用上下文。Base64 预览:可选直接返回图片 Base64 编码,支持在 MCP 客户端中即时预览(适合少量小图)。
📂 批量处理:支持对指定目录下的 PDF 文件进行批量提取,自动生成 Markdown 和图片,并保持目录结构整洁。
📊 增强表格提取:
高精度识别:自动处理跨行表头、错位列和复杂排版。
智能清洗:自动移除空行、空表头,过滤伪表格(如文本列表)。
批量导出:支持一键提取目录下所有 PDF 中的表格为 Markdown 文件。
🔍 模糊搜索:
智能查找:支持通过文件名关键词(模糊匹配、拼写错误兼容)快速定位 PDF 文件路径。
递归搜索:默认支持多级目录递归查找。
🔄 格式转换:
Markdown 转 Word:将生成的 Markdown 报告一键转换为格式完美的 Word (.docx) 文档。
Word 转 PDF:支持将 Word 文档转换为 PDF 文件。
自动适配:优先使用 Microsoft Word,若未安装则自动回退到 WPS Office。
⚙️ 灵活提取:支持提取全部页面、指定页码范围(如
1,1-5)或按关键词智能搜索。ℹ️ 元数据获取:支持获取 PDF 标题、作者、页数及目录结构 (TOC)。
🛠️ 环境要求
操作系统:Windows (推荐,用于支持 Word/WPS 转换) / macOS / Linux
Python:>= 3.10
Office 软件 (仅 Word 转 PDF 功能需要):
Microsoft Word (最佳兼容性)
或 WPS Office (支持 Windows)
📦 安装与使用
本项目使用 uv 进行包管理。
1. 克隆项目
git clone https://github.com/Dublin1231/PDF_MCP_Flow.git
cd mcp-pdf-flow2. 安装依赖
uv sync3. 运行服务
本服务是一个 MCP Server,设计为由 Claude Desktop 等客户端自动启动。 您不需要手动在终端运行启动命令。请继续阅读下方的 Claude Desktop 配置 章节完成设置。一旦配置完成,Claude Desktop 启动时会自动在后台运行此服务。
🔌 Claude Desktop 配置
要将此工具添加到 Claude Desktop,请编辑配置文件:
Windows:
%AppData%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
添加以下内容(请务必将路径修改为您本地的实际路径):
{
"mcpServers": {
"simple-pdf": {
"command": "uv",
"args": [
"--directory",
"D:/path/to/your/mcp-pdf-flow", // ⚠️ 请务必修改为您本地的实际项目路径
"run",
"simple-pdf"
],
"env": {
"PYTHONIOENCODING": "utf-8",
// (可选) 指定额外的 PDF 搜索路径。Windows 使用分号 (;),Mac/Linux 使用冒号 (:) 分隔
"PDF_SEARCH_PATHS": //"D:\\example;E:\\example"
}
}
}
}注意:
Windows 用户路径分隔符请使用
/或\\。PDF_SEARCH_PATHS为可选配置,用于指定额外的 PDF 搜索路径,多个路径用;(Windows) 或:(Mac/Linux) 分隔。
💬 如何在对话中使用
你不需要手动填写 JSON 参数! 只需要在对话中告诉 Claude 你想做什么,它会自动调用工具。
场景示例
1. 读取 PDF
指定绝对路径:
用户: "帮我读取
D:\Documents\report.pdf的第 1 到 5 页。"读取项目目录下文件:
用户: "读取当前目录下的
test.pdf。" (注:Claude 会自动查找运行目录下的文件)
2. 转换 Markdown 为 Word
用户: "把刚刚提取的内容保存为 Word 文档,放在
D:\Documents\output.docx。"Claude: (自动调用
convert_markdown_to_docx工具)
3. Word 转 PDF
用户: "把
D:\Documents\draft.docx转换成 PDF。"Claude: (自动调用
convert_docx_to_pdf工具)
4. 批量处理 PDF
用户: "批量处理
D:\Docs目录下的所有 PDF,导出为 Markdown。"Claude: (自动调用
batch_extract_pdf_content工具)
5. 批量处理并指定输出目录
用户: "批量处理
D:\Docs下的 PDF,将 Markdown 存到D:\Output\MD,图片存到D:\Output\Images。"Claude: (调用
batch_extract_pdf_content,参数custom_output_dir="D:\\Output\\MD",custom_image_output_dir="D:\\Output\\Images")
6. 批量处理并平铺输出(不保留目录结构)
用户: "把
D:\Docs下所有子文件夹里的 PDF 都提取出来,全部放到D:\All_MDs这个文件夹里,不要建子文件夹。"Claude: (调用
batch_extract_pdf_content,参数custom_output_dir="D:\\All_MDs",preserve_structure=False,create_folder=False)
7. 模糊查找 PDF
用户: "帮我找一下
D:\Study下面关于springboot的 PDF 文件。"Claude: (自动调用
search_pdf_files工具)
8. 获取 PDF 目录结构
用户: "提取
D:\Books\Guide.pdf的目录大纲。"Claude: (自动调用
get_pdf_metadata工具)
9. 批量提取表格
用户: "把
D:\Books下所有 PDF 的表格提取出来,存到D:\Tables。"Claude: (自动调用
batch_extract_tables工具)
📖 工具列表
💡 小贴士:如何获取“绝对路径”?
Windows: 按住
Shift键,右键点击文件,选择“复制文件地址 (Copy as path)”。粘贴时去掉首尾的引号。
示例:
C:\Users\Name\Documents\report.pdfmacOS: 选中文件,按下
Option + Command + C复制路径。
示例:
/Users/name/Documents/report.pdf
1. extract_pdf_content
提取 PDF 内容的核心工具。
参数:
file_path(必填): PDF 文件的绝对路径。Windows 示例:
D:\Documents\paper.pdfmacOS 示例:
/Users/username/Documents/paper.pdf
page_range(可选): 页码范围,默认为 "all"。示例:
"1","1-5","1,3,5","all"。
keyword(可选): 关键词搜索。若提供,将忽略页码范围,仅提取包含关键词的页面。format(可选): 输出格式。"text"(默认): 纯文本提取。"markdown": 推荐。智能识别标题和段落,适合 LLM 阅读。"json": 返回结构化 JSON 数据,包含每一页的文本和图片信息,适合程序化处理。
include_text(可选): 是否提取文本,默认为true。include_images(可选): 是否提取图片,默认为false。use_local_images_only(可选): 图片处理模式,默认为true。true(默认): 图片保存到本地extracted_images目录,Markdown 中使用路径引用。推荐用于大文件或包含大量图片的 PDF,防止 Token 溢出。false: 返回图片的 Base64 数据流,可直接预览,但消耗大量 Token。
skip_table_detection(可选): 极速模式开关,默认为false。false(默认): 智能检测并提取表格,转换为 Markdown 表格格式。true: 跳过表格检测。适用于仅需要纯文本内容的场景,速度可提升 3-4 倍(约 400+ 页/秒)。
2. batch_extract_pdf_content
批量处理指定目录下的所有 PDF 文件。
参数:
directory(必填): 要搜索的根目录绝对路径。pattern(可选): 文件匹配模式,默认为**/*.pdf(支持递归)。custom_output_dir(可选): 指定输出根目录。如果不填,默认使用项目根目录。最终输出将在该目录下创建output文件夹,并根据模式包含以下子目录:output_standard_with_image: 包含图片,标准模式(含表格)。output_fast_with_image_no_table: 包含图片,极速模式(跳过表格检测)。output_standard_no_image: 标准模式+纯文本 (不含图片,含表格)。output_fast_no_image_and_table: 极速模式+纯文本 (不含图片,不含表格)。output_only_image: 仅提取图片模式 (不生成 Markdown 文件,图片保存在output/output_only_image/extracted_images目录)。
format(可选): 输出格式,支持markdown(默认),json,text。include_text(可选): 是否提取文本,默认为true。include_images(可选): 是否提取图片,默认为false。use_local_images_only(可选): 图片处理模式,默认为true。skip_table_detection(可选): 极速模式开关,默认为false。false(默认): 智能检测并提取表格,转换为 Markdown 表格格式。true: 跳过表格检测。适用于仅需要纯文本内容的场景,速度可提升 3-4 倍(约 400+ 页/秒)。
create_folder(可选): 是否创建专属文件夹,默认为false。true: 为每个 PDF 创建专属的同名文件夹(例如output/subdir/file/file.md)。false(默认): 不创建专属文件夹(例如output/subdir/file.md)。
preserve_structure(可选): 目录结构保持开关,默认为true。true(默认): 保持源文件的目录层级结构(例如output/SourceSubDir/file.md)。false: 集中/扁平化模式。忽略源目录结构,将所有结果直接放在输出根目录(例如output/file.md)。
3. get_pdf_metadata
快速获取 PDF 的元数据和目录结构。
参数:
file_path(必填): PDF 文件的绝对路径。
4. convert_markdown_to_docx
将 Markdown 内容转换为 Word 文档。
参数:
markdown_content(必填): 要转换的 Markdown 文本内容。output_path(必填): 输出 .docx 文件的绝对路径。注意: 这里需要填写你希望保存的新文件路径。
示例:
D:\Documents\report_output.docx
5. convert_docx_to_pdf
将 Word 文档转换为 PDF 文件。
参数:
docx_path(必填): 输入的 .docx 文件绝对路径。pdf_path(可选): 输出 .pdf 文件的绝对路径。如果不提供,将在原 docx 文件同目录下生成同名 pdf 文件。
6. search_pdf_files
通过文件名模糊搜索 PDF 文件路径。
参数:
query(必填): 文件名关键词。支持模糊匹配(如拼写错误)、中文匹配。directory(可选): 搜索根目录。默认为当前工作目录。limit(可选): 返回的最大结果数量,默认 10。threshold(可选): 匹配阈值 (0.0-1.0),默认 0.45。
7. batch_extract_tables
批量提取目录中所有 PDF 的表格。
默认输出路径:
output/output_only_table: 仅提取表格模式 (表格保存在output/output_only_table目录)。
参数:
directory(必填): 要搜索的根目录绝对路径。output_dir(可选): 指定输出根目录。最终表格 Markdown 文件将保存在该目录下的output/output_only_table文件夹中。如果不填,默认为当前目录。pattern(可选): 文件匹配模式,默认为**/*.pdf。
✨ 表格提取增强特性:
智能表头合并:自动处理跨行表头和被拆分的列名。
错位列修复:智能识别并合并因格式问题错位的标题和内容列。
空行/空表头优化:
自动移除无效的空行。
智能识别 KV 结构表格,仅在必要时保留表头,避免对中文 KV 表格生成错误的空表头。
伪表格过滤:
自动识别并过滤文本列表(如目录、步骤说明)。
自动过滤被误判为表格的代码块或长文本段落。
排版优化:智能处理单元格内的换行符,保持列表结构清晰,同时让普通长文本自然回流。
📂 输出目录结构
运行工具后,图片将按以下结构保存:
extracted_images/
└── PDF文件名/
├── page_1_img_1.jpeg
├── page_1_img_2.png
└── ...💻 开发
核心代码:
src/simple_pdf/server.py转换逻辑:
src/simple_pdf/convert.py