关于 Utilitly PDF
Utilitly PDF 是供 AI 应用调用的本地 MCP 服务,可在电脑上执行 PDF 页面操作。它限制文件访问范围,并将结果另存为新文件。
主要功能
- 01合并 PDF 文件
- 02按页码范围拆分 PDF
- 03提取、旋转、删除、重排或复制页面
- 04查看页数、文件大小和加密状态
- 05将文件访问限制在指定文件夹
- 06生成新文件而不覆盖原件
适用场景
- 01将每月报告合并为一个 PDF
- 02把手册拆分为多个章节
- 03旋转或删除扫描文档中的页面
- 04检查 PDF 页数和密码保护状态
MCP 相关
通过本地服务向 MCP 客户端提供 PDF 查询和编辑工具。文件在电脑上读写,PDF 内容不会上传。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
8收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | PDF 文件的绝对路径,或以 ~/ 开头的路径。 |
详细介绍
@utilitly/mcp
适用于 Claude、ChatGPT 桌面应用、Codex、Gemini CLI、Cursor 以及任何能运行本地 MCP 服务的应用的 PDF MCP 服务。让 AI 合并、拆分、旋转、删除、重新排序或复制页面,它就会在你自己的电脑上处理 PDF 文件。
该服务与 AI 应用一同在本地运行,并在文件所在位置进行编辑。它基于 Utilitly 的开源 PDF 引擎构建,这些引擎移植自 utilitly.com 上的免费工具;它绝不会替换文件:每个结果都是与原文件放在一起的新 PDF。
安装
你需要 Node.js 22 或更高版本。首次运行时会通过 npx 下载服务。
包名后面的文件夹是服务唯一可以读写的位置。请将其改为 PDF 文件所在的位置。
Claude Code
claude mcp add utilitly -- npx -y @utilitly/mcp ~/Documents ~/Downloads ~/Desktop
Claude Desktop:打开 Settings,然后依次选择 Developer 和 Edit Config,将以下内容添加到 claude_desktop_config.json。之后重启 Claude Desktop。
{
"mcpServers": {
"utilitly": {
"command": "npx",
"args": ["-y", "@utilitly/mcp", "~/Documents", "~/Downloads", "~/Desktop"]
}
}
}
Cursor:将相同的 mcpServers 块放入 ~/.cursor/mcp.json。
ChatGPT 桌面应用和 Codex 共用一套设置,因此将服务添加到其中一个应用后,也会添加到另一个应用。在 ChatGPT 应用中,打开 Settings,然后依次选择 MCP servers 和 Add server。选择 STDIO,输入命令 npx,参数为 -y @utilitly/mcp ~/Documents ~/Downloads ~/Desktop,保存并重启。使用 Codex CLI 时:
codex mcp add utilitly -- npx -y @utilitly/mcp ~/Documents ~/Downloads ~/Desktop
Gemini CLI:-- 后的所有内容都会传递给 npx,而 -s user 会让服务在你启动 Gemini 的每个文件夹中都可用。
gemini mcp add -s user utilitly npx -- -y @utilitly/mcp ~/Documents ~/Downloads ~/Desktop
其他任何能启动本地(stdio)MCP 服务的应用:命令为 npx,参数为 -y @utilitly/mcp,后面再接文件夹。
该服务也已列入官方 MCP Registry,名称为 com.utilitly/mcp,因此读取此注册表的应用和目录都能通过这个名称找到它。
关于文件夹列表
路径会在解析符号链接后进行检查,因此允许访问的文件夹中的链接无法指向其他位置。
如果不指定文件夹,服务可能会使用你有权访问的任何文件。它仍然不会覆盖或删除任何内容,也不会向 AI 显示 PDF 的内容。但是,被其他地方读取的信息误导的 AI 可能会将你的任意 PDF 复制到任意文件夹,因此除非你需要让它访问所有位置,否则请列出文件夹。
30 秒快速体验
安装完成后,用日常语言提出请求,并使用完整路径:
- “合并 ~/Downloads/march.pdf 和 ~/Downloads/april.pdf。”
- “删除 ~/Desktop/scan.pdf 中的第 3 页空白页。”
- “将 ~/Documents/handbook.pdf 拆分为第 1–12 页、第 13–30 页,以及第 31 页到最后一页。”
- “~/Desktop/scan.pdf 的第 2 到第 4 页是横着的;把它们转正。”
- “~/Documents/contract.pdf 有多少页?它是否已锁定?”
工具
| 工具 | 功能 | 写入的新文件 |
|---|---|---|
pdf_info | 页数、文件大小、首页尺寸,以及 PDF 是否受密码保护。不做任何更改。 | 无 |
merge_pdfs | 按给定顺序合并 PDF。 | <first>-merged.pdf |
split_pdf | 每个范围生成一个文件,例如 "1-2, 3-end"。 | <name>-part1.pdf、-part2.pdf、…… |
extract_pages | 将选定页面按页码顺序合并为一个 PDF。 | <name>-pages.pdf |
rotate_pdf | 将页面旋转 90 度的倍数。 | <name>-rotated.pdf |
delete_pages | 删除页面;至少要保留一页。 | <name>-trimmed.pdf |
reorder_pages | 按新的顺序排列所有页面。 | <name>-reordered.pdf |
duplicate_pages | 在每页之后或文档末尾添加副本。 | <name>-duplicated.pdf |
结果会保存在与输入文件相同的文件夹中。每个会写入文件的工具都接受可选的 output_path,而 split_pdf 还接受可选的 output_folder。页面选择格式如 "2"、"1-3, 5" 或 "4-end"。
出现问题时,AI 会收到简短的错误代码和可采取行动的说明,例如 NO_PAGES: "9" 不匹配任何页面。PDF 有 4 页。 或 ENCRYPTED: File 2 受密码保护。请先移除密码,然后重试。
它能处理和不能处理的内容
- 它绝不会覆盖文件。如果
report-merged.pdf已存在,结果文件名会变成report-merged-2.pdf;如果output_path指向已存在的文件,则会被拒绝。 - 输入文件只会被读取,不会被更改。
- 路径必须是绝对路径或以
~/开头,这样 AI 就不会因使用相对路径而误入错误文件夹。 - 安装时列出的文件夹以外的内容无法读取或写入。
- 遇到受密码保护的 PDF 时会拒绝处理,而不是修改它。
pdf_info会报告文件是否已锁定。 - 一次调用最多可比输入文件总页数多添加 10,000 页;一次拆分最多写入 1,000 个文件(对于更长的 PDF,则每页生成一个文件)。对于一亿个副本之类的错误请求,会在开始处理前拒绝。
为什么不会上传任何内容
PDF 处理在这项服务内部、你的机器上进行,其中不包含任何网络代码。每次更改时,test/network.test.ts 都会验证这一点:它会让建立连接、查询主机名和调用 fetch 全部抛出错误,然后运行每个工具,且它们都能成功运行。
你的 AI 应用仍会照常与模型通信。这段对话会包含你输入的所有内容(包括文件路径)以及每个工具的简短回复:它写入的路径、页数和文件大小。这项服务绝不会将 PDF 内容放入对话中。
须知
merge_pdfs、split_pdf、extract_pages、delete_pages、reorder_pages和duplicate_pages会生成全新的 PDF,因此书签、文档属性和可正常使用的表单字段不会保留在结果中。rotate_pdf会保留整个文档。- 在多个页面间共享的图像和字体仍会保持共享,因此结果文件不会膨胀。
- 如需查看正在运行的版本,执行
npx -y @utilitly/mcp --version;执行--help可查看用法。
许可证
MIT。基于 @utilitly PDF engines 和 pdf-lib(两者均为 MIT 许可证),以及官方 MCP TypeScript SDK(Apache-2.0 许可证)构建。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。