pdf阅读
该项目为AI代理提供了一个安全且灵活的工具,用于从PDF文件中读取和提取信息。它支持全文、特定页面、元数据和页数提取。服务器可以通过npm、Docker或本地构建集成到MCP环境中。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"pdf-reader-mcp": {
"args": [
"@sylphlab/pdf-reader-mcp"
],
"command": "npx",
"name": "PDF Reader (npx)"
}
}
}
服务介绍
PDF Reader MCP Server (@sylphlab/pdf-reader-mcp)
赋予您的AI代理(如Cline)在项目上下文中使用单一、灵活的工具安全地读取和提取PDF文件中的信息(文本、元数据、页数)的能力。
安装
使用npm(推荐)
在您的MCP主机环境或项目中作为依赖项安装:
bash
pnpm add @sylphlab/pdf-reader-mcp # 或者使用 npm install / yarn add
配置您的MCP主机(例如,mcp_settings.json)以使用npx:
json
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "npx",
"args": ["@sylphlab/pdf-reader-mcp"],
"name": "PDF Reader (npx)"
}
}
}
(确保主机为目标项目设置了正确的cwd)
使用Docker
拉取镜像:
bash
docker pull sylphlab/pdf-reader-mcp:latest
配置您的MCP主机以运行容器,并将您的项目目录挂载到/app:
json
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
"/path/to/your/project:/app", // 或者使用 "$PWD:/app", "%CD%:/app" 等
"sylphlab/pdf-reader-mcp:latest"
],
"name": "PDF Reader (Docker)"
}
}
}
本地构建(开发用)
-
克隆仓库:
git clone https://github.com/sylphlab/pdf-reader-mcp.git -
安装依赖:
cd pdf-reader-mcp && pnpm install -
构建项目:
pnpm run build -
配置MCP主机:
json
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "node",
"args": ["/path/to/cloned/repo/pdf-reader-mcp/build/index.js"],
"name": "PDF Reader (Local Build)"
}
}
}(确保主机为目标项目设置了正确的
cwd)
快速开始
假设服务器正在运行并在您的MCP主机中已配置:
MCP 请求(从本地PDF获取元数据和第2页文本):
json
{
"tool_name": "read_pdf",
"arguments": {
"sources": [
{
"path": "./documents/my_report.pdf",
"pages": [2]
}
],
"include_metadata": true,
"include_page_count": false, // 默认为true,这里显式设置为false
"include_full_text": false // 因为指定了'pages',所以忽略此选项
}
}
预期响应片段:
json
{
"results": [
{
"source": "./documents/my_report.pdf",
"success": true,
"data": {
"page_texts": [
{ "page": 2, "text": "来自第2页的文本内容..." }
],
"info": { ... },
"metadata": { ... }
// 按请求未包含num_pages
}
}
]
}
为什么选择这个项目?
- 🛡️ 安全性高: 严格限制文件访问仅限于项目根目录。
- 🌐 灵活性强: 支持处理本地相对路径和公共URL。
- 🧩 功能整合: 单一的
read_pdf工具满足多种提取需求(全文、特定页面、元数据、页数)。 - ⚙️ 结构化输出: 返回的数据采用可预测的JSON格式,易于代理解析。- 🚀 易于集成: 通过
npx或 Docker 在 MCP 环境中无缝使用。 - ✅ 强大: 使用
pdfjs-dist进行可靠的解析,并使用 Zod 进行输入验证。
性能优势
使用 Vitest 对样本 PDF 的初步基准测试显示,各种操作的处理效率如下:
| 场景 | 每秒操作次数 (hz) | 相对速度 |
|---|---|---|
| 处理不存在的文件 | ~12,933 | 最快 |
| 获取全文内容 | ~5,575 | |
| 获取特定页(第 1 页) | ~5,329 | |
| 获取特定页(第 1 和第 2 页) | ~5,242 | |
| 获取元数据和页数 | ~4,912 | 最慢 |
(更高的 hz 值表示更好的性能。结果可能因 PDF 的复杂性和环境而异。)
有关更多详细信息和未来计划,请参阅 性能文档。
功能
- 从 PDF 文件中读取完整的文本内容。
- 从特定页面或页面范围读取文本内容。
- 读取 PDF 元数据(作者、标题、创建日期等)。
- 获取 PDF 的总页数。
- 在单个请求中处理多个 PDF 源(本地路径或 URL)。
- 在定义的项目根目录内安全运行。
- 通过 MCP 提供结构化的 JSON 输出。
- 可通过 npm 和 Docker Hub 获得。
设计理念
该服务器通过上下文限制优先考虑安全性,通过结构化数据传输提高效率,并简化以方便集成到 AI 代理工作流中。它旨在最小化依赖项,依靠强大的 pdfjs-dist 库。
请参阅完整的 设计理念 文档。
与其他解决方案的比较
与直接文件访问(通常不可行)或通用文件系统工具相比,此服务器提供了针对 PDF 的解析能力。与外部 CLI 工具(例如 pdftotext)不同,它提供了一个安全的集成 MCP 接口和结构化输出,增强了 AI 代理的可靠性和易用性。
请参阅完整的 比较 文档。
未来计划(路线图)
- 文档:
- 完成所有文档部分(指南、API、设计、比较)。
- 解决 TypeDoc 问题并生成 API 文档。
- 添加更多示例和高级使用模式。
- 实现 PWA 支持和移动优化的文档站点。
- 向文档站点添加分享按钮和增长指标。
- 基准测试:
- 使用多样化的 PDF 文件(大小、复杂度)进行全面基准测试。
- 测量内存使用情况。
- 比较 URL 与本地文件的性能。
- 核心功能:
- 探索针对非常大的 PDF 文件的潜在优化。
- 调查提取图像或注释的选项(长期目标)。
- 测试:
- 尽可能将测试覆盖率提高到 100%。
- 一旦可行,添加运行时测试。
文档
有关详细的使用说明、API 参考和指南,请访问 完整文档网站(部署后更新链接)。
社区与支持
- 发现错误或有功能请求? 请在 GitHub Issues 上提出问题。
- 想贡献代码? 我们欢迎贡献!请参阅 CONTRIBUTING.md。
- 点赞 & 关注: 如果您觉得这个项目有用,请考虑在 GitHub 上为仓库点星 ⭐ 并关注 👀 以表示您的支持并保持更新!
许可证
本项目采用 MIT 许可证。