关于 pdf-extract-mcp
pdf-extract-mcp 是从发票、银行对账单等带文本层的数字 PDF 中提取表格和文本的 MCP 服务。它适用于需要 CSV、JSON 或 Excel 结构化输出的流程,并默认自动脱敏个人信息;扫描版 PDF 会被拒绝。
主要功能
- 01提取数字 PDF 中的表格和文本
- 02接受 Base64 数据或 PDF URL
- 03导出 CSV、JSON 或 XLSX
- 04使用三种策略检测表格
- 05默认脱敏个人信息
- 06拒绝扫描版或纯图像 PDF
适用场景
- 01将银行对账单表格转为 CSV
- 02将发票数据整理为 JSON 或 Excel
- 03以已屏蔽标识信息的形式共享提取数据
MCP 相关
它提供 `extract_pdf` PDF 提取工具,以及用于查看服务状态和免费额度的 `health` 工具。支持本地 stdio 或远程 streamable HTTP 运行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/diyaluo/pdf-extract-mcp:v0.3.0本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/diyaluo/pdf-extract-mcp:v0.3.0stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
pdf-extract-mcp
一个 Model Context Protocol(MCP)服务,可从数字版(带文本层)PDF(银行对账单、发票、账单)中提取表格和文本,并输出为 CSV / JSON / Excel,同时自动脱敏 PII。
属于 invoice-extractor 产品的一部分。此软件包是 MCP 的分发渠道(“生态系统寄生者”:一个后端,多种宿主工作流)。Web 演示位于父项目中。
功能
extract_pdf— 上传数字版 PDF(base64 或 URL),获取结构化表格行,格式为 CSV / JSON 记录 / XLSX。health— 服务状态和免费层限制。
表格检测会对每一页尝试三种策略:带线条的表格 → 根据表头行自身的 x 坐标推断显式列(适用于没有网格线的对账单 PDF,这是西方银行的常见情况)→ 通用文本对齐。
PII 脱敏(默认启用)涵盖:
| 地区 | 脱敏内容 |
|---|---|
| 美国 / 国际 | SSN、EIN/TIN、IBAN、SWIFT/BIC、routing/ABA、账号、卡号(纯数字和 4111 1111 1111 1111 / 带连字符的格式)、美国及国际电话号码、电子邮件 |
| 中国 | 18/15 位身份证号、手机号、银行卡、USCC(统一社会信用代码)、护照、2–3 字个人姓名、组织关键词 |
对于可能存在歧义的纯数字银行标识符(routing/账号/sort code),仅当其前面跟有标签时才会脱敏,因此参考编号和金额仍可读。金额、日期和描述绝不会被修改。
扫描版 / 纯图像 PDF 会被明确拒绝(SCANNED_PDF_UNSUPPORTED)——免费层仅支持数字版 PDF(OCR 是付费层的候选功能)。
限制(免费层)
- 每个客户端每滚动 30 天 100 页(匿名,以客户端哈希为键)。
- 每个文件 50 MB。
- 超出配额时,工具会返回结构化的
QUOTA_EXCEEDED响应,并附带内联升级链接。绝不会在无提示的情况下扣费。 - 设置
PDF_EXTRACT_API_KEY为付费密钥即可绕过配额(计费网关属于 P1 项目;当前免费层尚未发放付费密钥)。
运行(本地 stdio — Claude Desktop / Cursor / 任意 MCP 客户端)
pip install -e .
pdf-extract-mcp
客户端配置示例:
{
"mcpServers": {
"pdf-extract": {
"command": "pdf-extract-mcp",
"env": {}
}
}
}
运行(远程 streamable-http,适用于托管的 MCP 客户端)
REMOTE_TRANSPORT=http MCP_HOST=127.0.0.1 MCP_PORT=5060 \
python -m pdf_extract_mcp.server
# POST JSON-RPC to http://127.0.0.1:5061/mcp
工具架构
extract_pdf(
pdf_base64: str | None, # preferred: PDF bytes as base64
pdf_url: str | None, # alternative: direct https .pdf URL
output: "csv"|"json"|"xlsx", # default csv
redact_pii: bool = true,
api_key: str | None, # paid key, optional
) -> {
ok, type: "tables"|"text", pages, tables, rows, columns,
csv | rows_json | xlsx_base64, # depends on output
elapsed_ms
}
遥测
每次调用都会追加到 ~/.cache/pdf-extract-mcp/mcp_usage.jsonl(尽力而为,不会阻塞提取;可通过 PDF_EXTRACT_STATE_DIR 修改路径)。客户端以加盐哈希记录;绝不会记录 PDF 内容或 PII。
注意:由于这是分发的 stdio 软件包,该文件位于用户的机器上,因此发布者无法读取。实际外部使用情况可通过托管注册表的所有者 API 获取(Smithery 上的
GET /servers/{namespace}/{name}/logs会返回调用次数)。
技术栈
mcp >= 1.2(兼容 mcp 1.x FastMCP 和 mcp 2.x MCPServer)、pdfplumber、openpyxl。pandas 是可选项——如果缺少该依赖,软件包会回退到轻量级的行列表格(使用标准库 CSV/JSON 和 openpyxl),从而缩小可分发软件包的体积。Python 3.10+。
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。