mcpField
P
pdfport

pdfport

本地服务
github.com/CloudCorpRecords生产力02 周前更新

关于 pdfport

pdfport 是处理本地 PDF 文件的命令行工具和 MCP 服务,支持提取文本、读取元数据、查看文件信息、合并和拆分。其纯 TypeScript 引擎仅处理明确范围内的 PDF,文件不会上传。

主要功能

  1. 01提取 PDF 页面文本
  2. 02读取文档元数据和文件信息
  3. 03合并多个 PDF
  4. 04将 PDF 拆分为单页文件
  5. 05处理本地文件且不上传

适用场景

  1. 01提取受支持 PDF 中的文本
  2. 02检查页数和文档元数据
  3. 03合并 PDF 或将页面拆分为文件

MCP 相关

MCP 服务提供提取文本、读取元数据和 PDF 信息、合并 PDF 以及拆分页面文件的工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"cloudcorprecords-pdfport": {
"command": "npx",
"args": [
"-y",
"@reneturcios/pdfport"
]
}
}
}
启动命令npx -y @reneturcios/pdfport

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@reneturcios/pdfport0.1.0
ocighcr.io/cloudcorprecords/pdfport:0.1.0

工具

5

收录的工具列表 · 更新于 2 周前

参数类型必填说明
file_pathstring是

详细介绍

pdfport

pdfport 可完成五种常见的 PDF 操作:提取文件中的文本、读取文档元数据、汇总文档信息(页数、页面尺寸、文件大小、PDF 版本)、将多个文件合并为一个,以及将文件拆分为每页一个文档。它仅处理本地文件,不会将文件上传到任何地方。

其引擎是专为本项目编写的轻量级纯 TypeScript PDF 实现。项目未捆绑任何 PDF 库,除 MCP SDK 外也没有运行时依赖。引擎会扫描文档的间接对象,沿 Catalog 找到 Pages 树,解码普通内容流和 FlateDecode 内容流,并从标准文本显示操作符中提取文本。合并时会为源对象重新编号,将其合并到一个新的对象图中,并重建页面树;拆分时也会以相同方式为每页生成一个文档。两者都会写入重新计算的交叉引用表。

范围 — 引擎的支持与不支持

支持:页面树为扁平结构的简单 PDF(Catalog 的 Pages 节点直接列出 Page 对象——这是常见生成器生成的结构,也是 pdfport 自身合并和拆分时写入的结构)、未压缩或 FlateDecode 内容流、内容流和 Info 字典中的字面字符串及十六进制字符串,以及每页的 MediaBox 尺寸(页面未指定时从 Pages 节点继承)。

不支持:加密文件、对象流和压缩交叉引用流(PDF 1.5+ 紧凑文件)、嵌套页面树、需要 ToUnicode 映射才能读取的嵌入字体编码,以及合并或拆分时保留表单/注释。对于不在支持范围内的文件,程序会报出明确说明缺少内容的错误——pdfport 绝不会返回虚构的文本或元数据。

安装

npx @reneturcios/pdfport get-pdf-info ./report.pdf

或者运行容器镜像:

docker run -i ghcr.io/cloudcorprecords/pdfport

容器默认启动 MCP 服务(见下文)。传入 CLI 参数即可将其用作 CLI。

CLI

# Print the document's text
pdfport extract-text ./report.pdf

# Print the Info-dictionary metadata (plus page count) as JSON
pdfport get-metadata ./report.pdf

# Print page count, page sizes, file size and PDF version as JSON
pdfport get-pdf-info ./report.pdf

# Merge inputs, in order, into one output file
pdfport merge ./combined.pdf ./a.pdf ./b.pdf ./c.pdf

# Split into <name>-page-1.pdf, <name>-page-2.pdf, ... in a directory
pdfport split ./report.pdf ./report-pages

# Start the MCP server
pdfport mcp

pdfport --version

退出代码:成功时为 0;文件缺失或无法处理文档时为 1(错误信息会说明原因);用法错误时为 2。

MCP 服务

同一个可执行文件支持两种用法。mcp 子命令会启动 stdio MCP 服务:

npx -y @reneturcios/pdfport mcp

MCP 客户端配置:

{
  "mcpServers": {
    "pdfport": {
      "command": "npx",
      "args": ["-y", "@reneturcios/pdfport", "mcp"]
    }
  }
}
工具
工具输入返回内容
extract_textfile_path(字符串,必填)文件文本:每页显示的文本,各页之间以换行符连接。
get_metadatafile_path(字符串,必填)Info 字典中的标题、作者、主题、关键词、创建者、制作者和日期(仅包含文档中存在的字段),以及页数。
get_pdf_infofile_path(字符串,必填)页数、每页以点为单位的 MediaBox 尺寸、文件大小(字节)以及文件头中的 PDF 版本。
merge_pdfsinput_files(字符串数组,必填),output_file(字符串,必填)写入合并后的文档,并返回输出路径和总页数。保留第一个输入文件的元数据。
split_pdffile_path(字符串,必填),output_dir(字符串,必填)在指定目录中为每页写入一个单页文件,并返回创建的文件路径和页数。

开发

npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, no network
npm run dev     # run the CLI from source via tsx

测试套件会从原始字符串构建小型 PDF,涵盖普通内容流和 FlateDecode 内容流,并端到端测试默认引擎:文本提取(包括 TJ 数组和字面字符串转义)、元数据、文档信息、合并和拆分都会针对真实实现进行断言;随后还会使用临时目录中的真实文件测试文件接口。

许可证

MIT — 参见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

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

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