mcpField
P
pdf-toolkit-mcp

pdf-toolkit-mcp

本地服务
github.com生产力127 周前更新

关于 pdf-toolkit-mcp

pdf-toolkit-mcp 是通过 iLoveAPI 执行 PDF 处理的 MCP 服务,面向 Claude Code、Claude Desktop 和其他 MCP 客户端。它提供 18 种操作,并支持输入校验、路径沙箱和进度通知。

主要功能

  1. 01合并、拆分和提取 PDF 页面
  2. 02PDF 与 Office、图片格式互转
  3. 03旋转、加页码和添加水印
  4. 04OCR、修复及密码保护
  5. 05校验输入并限制文件路径
  6. 06长任务进度通知及文件资源 URI

适用场景

  1. 01合并文件并压缩、加密后交付
  2. 02将扫描件 OCR 后转为 Word
  3. 03为 PDF 添加水印或页码
  4. 04将 Office 文档或图片转换为 PDF

MCP 相关

作为 MCP 服务,通过 stdio 向客户端提供 18 个 PDF 工具;处理结果附有摘要和 file:// 资源 URI。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"eigencharlie-pdf-toolkit": {
"command": "npx",
"args": [
"-y",
"pdf-toolkit-mcp"
],
"env": {
"ILOVEAPI_PROJECT_PUBLIC_KEY": "<ILOVEAPI_PROJECT_PUBLIC_KEY>",
"ILOVEAPI_PROJECT_SECRET_KEY": "<ILOVEAPI_PROJECT_SECRET_KEY>",
"ILOVEAPI_SANDBOX_ROOT": "<ILOVEAPI_SANDBOX_ROOT>"
}
}
}
}
启动命令npx -y pdf-toolkit-mcp
需要配置的环境变量
ILOVEAPI_PROJECT_PUBLIC_KEY密钥iLoveAPI Project Public Key (from https://developer.ilovepdf.com).
ILOVEAPI_PROJECT_SECRET_KEY密钥iLoveAPI Project Secret Key. Used locally to sign short-lived JWTs.
ILOVEAPI_SANDBOX_ROOTOptional filesystem sandbox: if set, all I/O must stay inside this directory.

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

安装包
npmpdf-toolkit-mcp0.1.2

工具

18

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

参数类型必填说明
input_filesarray是按顺序排列的两个或多个待合并 PDF 文件。
output_pathstring否可选的输出路径。如果以预期扩展名结尾,文件将写入该路径。如果是目录,文件将以带时间戳的名称放入该目录。默认与第一个输入文件位于同一目录。

详细介绍

pdf-toolkit-mcp

通过 iLoveAPI 为 Claude Code、Claude Desktop 和任何 MCP 客户端提供 18 项 PDF 操作。

npm version npm downloads License: MIT Node.js TypeScript MCP Claude Code CI

安装 · 工具 · 使用方案 · 架构 · 安全性 · 常见问题


免责声明。 pdf-toolkit-mcp 是一个独立的社区开源客户端。它与 iLovePDF SL 无关联,也未获其认可、赞助或认证。本项目使用你自己的项目凭据,连接公共 iLoveAPI REST 服务;不会代理、转售或重新授权任何内容。“iLovePDF”和“iLoveAPI”是 iLovePDF SL 的商标;本项目不主张拥有这些商标。


📖 目录


🎯 为什么选择 pdf-toolkit-mcp

手动调用 iLoveAPI原始 @ilovepdf/ilovepdf-nodejspdf-toolkit-mcp
可从 Claude Code / Claude Desktop / 任何 MCP 客户端调用❌❌✅
为你处理 JWT 签名和 5 步生命周期❌✅✅
经过验证的 Zod 架构(无效输入不会传到 API)❌❌✅
防止路径遍历的路径沙箱❌❌✅
结构化错误代码(RATE_LIMITED、PLAN_LIMIT 等)❌部分支持✅
长时间 OCR 任务期间发送进度通知❌❌✅
内置 Claude Code 技能,支持多步骤流水线❌❌✅
通过 npx -y 零配置安装❌❌✅

个人使用免费。 iLoveAPI 的免费套餐每月提供约 2,500 点数;此 MCP 使用 MIT 许可证,完全免费。


🚀 快速浏览

安装后,只需告诉 Claude 你要做什么。模型会判断该调用哪些工具:

You: Merge invoice-jan.pdf and invoice-feb.pdf into Q1.pdf, then compress it hard
     and lock it with the password "2026q1".

Claude (planning):
  1. merge_pdf     → invoice-jan.pdf + invoice-feb.pdf  →  Q1.pdf
  2. compress_pdf  → Q1.pdf                             →  Q1-compressed.pdf  (level: extreme)
  3. protect_pdf   → Q1-compressed.pdf                  →  Q1-compressed-protected.pdf

Claude (result):
  ✅ Created ~/docs/Q1-compressed-protected.pdf (312 KB, password-protected).

📦 安装

前置条件
  • Node.js ≥ 18(推荐使用 LTS 版本)。
  • iLoveAPI 项目密钥 — 可在 developer.ilovepdf.com 免费注册。约需 2 分钟:
    1. 注册 → 创建项目 → 复制 Project public key 和 Project secret key。
    2. 导出密钥(或将它们填入客户端的 MCP 配置中 — 示例见下文)。
选项 A — Claude Code(CLI 一行命令安装)
export ILOVEAPI_PROJECT_PUBLIC_KEY="project_public_xxx"
export ILOVEAPI_PROJECT_SECRET_KEY="secret_key_xxx"

claude mcp add pdf-toolkit -- npx -y pdf-toolkit-mcp

重启 Claude Code 后,选择器中就会显示全部 18 个工具。使用 /mcp 验证 → 你应该会看到 pdf-toolkit: connected (18 tools)。

选项 B — Claude Code 插件(包含 pdf-workflow skill)
/plugin marketplace add EigenCharlie/pdf-toolkit-mcp
/plugin install pdf-toolkit@EigenCharlie/pdf-toolkit-mcp

该插件会自动配置 MCP 服务,并且安装一个 skill,教 Claude 掌握五种经典的多步骤 PDF 工作流(参见工作流示例)。

选项 C — Claude Desktop(claude_desktop_config.json)
点击展开

编辑 claude_desktop_config.json(Windows 上位于 %APPDATA%\Claude\,macOS 上位于 ~/Library/Application Support/Claude/):

{
  "mcpServers": {
    "pdf-toolkit": {
      "command": "npx",
      "args": ["-y", "pdf-toolkit-mcp"],
      "env": {
        "ILOVEAPI_PROJECT_PUBLIC_KEY": "project_public_xxx",
        "ILOVEAPI_PROJECT_SECRET_KEY": "secret_key_xxx"
      }
    }
  }
}

重启 Claude Desktop — 🔌 图标应显示 pdf-toolkit 已连接。

选项 D — 通过 stdio 使用任意 MCP 客户端
ILOVEAPI_PROJECT_PUBLIC_KEY=… ILOVEAPI_PROJECT_SECRET_KEY=… npx -y pdf-toolkit-mcp

该服务通过 stdio 使用标准 MCP JSON-RPC 2.0 帧格式。可将它接入 Cursor、Windsurf、mcphub、mcp-inspector,或任何支持 MCP 的工具。

选项 E — Claude Desktop .mcpb 捆绑包(拖放安装)

从最新的 GitHub Release下载 pdf-toolkit-mcp-<version>.mcpb,然后将其拖入 Claude Desktop → Settings → Extensions。Claude 会通过捆绑清单的 user_config 部分提示你输入 iLoveAPI 密钥。无需 npx、Node 或终端。

捆绑包未签名(尚无发布者证书)。macOS Gatekeeper / Windows SmartScreen 首次安装时可能会发出警告;接受前请核对发布说明中的 SHA-256。

选项 F — MCP Registry(兼容客户端自动发现)

该服务已在官方 MCP Registry 中编入索引,条目为 io.github.EigenCharlie/pdf-toolkit-mcp。可浏览 Registry 的客户端(Claude Desktop 扩展面板、VS Code MCP 选择器、mcphub 等)无需手动配置即可安装 — 它们会指向 npm 包,并自动提示你设置两个 iLoveAPI 环境变量。


🧰 工具目录

全部 18 个工具均使用严格的 Zod schema、additionalProperties: false,并同时返回 text 摘要和 file:// 资源 URI,以便客户端展示输出。

📚 整理
工具功能关键输入
merge_pdf按顺序合并 ≥ 2 个 PDFinput_files[]、output_path?
split_pdf按页面范围("1-3,5-7")或固定分块大小拆分input_file、ranges?、fixed_range?
extract_pdf_pages保留指定页面子集input_file、pages("1,3,5-9")
🔄 转换 — 从 PDF 转换
工具输出备注
pdf_to_word.docx扫描版 PDF → 为获得最佳效果,请先运行 ocr_pdf
pdf_to_excel.xlsx最适用于表格类源 PDF
pdf_to_powerpoint.pptx每个 PDF 页面对应一张幻灯片
pdf_to_jpg.jpg 的 .zip 文件mode: "pages" 渲染页面;"extract" 提取嵌入的图像
🔄 转换 — 转换为 PDF
工具接受的格式备注
office_to_pdf.doc、.docx、.xls、.xlsx、.ppt、.pptx服务端渲染
html_to_pdf.html、.htm仅支持本地 HTML;外部资源可能无法解析
image_to_pdf.jpg、.jpeg、.png每页一张图像,并保留顺序
✏️ 编辑
工具功能关键输入
rotate_pdf顺时针旋转页面 90 / 180 / 270°rotation、pages?(默认:全部)
add_page_numbers添加带编号的页眉/页脚starting_number、vertical_position、horizontal_position
add_watermark添加文本或图像水印mode: "text" + text,或 mode: "image" + image_file
🔐 安全
工具功能关键输入
unlock_pdf移除已知密码input_file、password
protect_pdf添加密码input_file、password
🩹 修复 / OCR
工具功能说明
repair_pdf尝试修复损坏 PDF 的结构适合在进一步处理前使用
ocr_pdf运行 OCR,让扫描件支持搜索languages[](例如 ["eng"]、["spa"]、["eng","spa"])。⏱ 图像较多的 PDF 可能需要超过 60s

所有工具的 input_file(s) 均支持绝对路径或相对于 CWD 的路径,并可选填 output_path(文件或目录)。默认会将结果保存到第一个输入文件所在位置,并使用带时间戳的名称。


🍳 工作流示例

捆绑的 pdf-workflow 技能(skills/pdf-workflow/SKILL.md)会教 Claude 五种经典多步骤流程。你也可以手动运行——只需描述最终状态,Claude 就会为你串联这些工具。

1. 组装 — 合并 + 压缩 +(可选)加密
merge_pdf([a.pdf, b.pdf, c.pdf])
   → compress_pdf(level="recommended")
   → protect_pdf(password="…")
2. 转换并加密 — 将 Office 文档转换为受保护的 PDF
office_to_pdf(report.docx)
   → add_watermark(mode="text", text="CONFIDENTIAL", opacity=30)
   → protect_pdf(password="…")
3. 提取并 OCR — 从扫描件中提取页面并使其可编辑
extract_pdf_pages(scan.pdf, pages="3-9")
   → ocr_pdf(languages=["eng"])
   → pdf_to_word
4. 准备邮件附件 — 压缩 + 加密
compress_pdf(big.pdf, level="extreme")
   → protect_pdf(password="…")
5. 清理扫描件 — 修复 + OCR + 编号
repair_pdf(scan_broken.pdf)
   → ocr_pdf(languages=["eng"])
   → add_page_numbers(position="bottom-center")

🏛 架构

┌────────────────────────────┐    stdio    ┌──────────────────────────┐
│     Claude Code / Desktop  │◀───────────▶│   pdf-toolkit-mcp server │
│   (or any MCP client)      │  JSON-RPC   │   (this repo)            │
└────────────────────────────┘             └────────────┬─────────────┘
                                                        │
                                                        ▼
                                             ┌──────────────────────┐
                                             │  @ilovepdf/          │
                                             │  ilovepdf-nodejs     │
                                             │  (JWT + HTTP)        │
                                             └──────────┬───────────┘
                                                        │
                                                        ▼  HTTPS
                                             ┌──────────────────────┐
                                             │   iLoveAPI servers   │
                                             │   api.ilovepdf.com   │
                                             └──────────────────────┘
iLoveAPI 五阶段生命周期(在 src/api/tasks.ts 中编排)
  [ 10% ]   start     →  POST /v1/start/{tool}     (server assignment + task id)
  [ 40% ]   upload    →  POST /v1/upload           (one call per file, progress scales)
  [ 50% ]   process   →  POST /v1/process          (run the tool with params)
  [ 90% ]   download  →  GET  /v1/download/{task}  (bytes → Buffer)
  [100% ]   done      →  write to disk, emit file:// resource URI

对于耗时操作(OCR、大型合并),服务会在每个阶段边界发送 MCP notifications/progress,以便客户端显示实时进度条。

项目布局
pdf-toolkit-mcp/
├── .claude-plugin/
│   ├── plugin.json           # Plugin manifest
│   └── .mcp.json             # MCP server config (npx -y pdf-toolkit-mcp)
├── skills/
│   └── pdf-workflow/
│       └── SKILL.md          # 5-recipe skill for multi-step pipelines
├── src/
│   ├── index.ts              # #!/usr/bin/env node shebang
│   ├── server.ts             # MCP stdio bootstrap
│   ├── api/
│   │   ├── client.ts         # iLoveAPI client singleton (CJS interop via createRequire)
│   │   ├── tasks.ts          # 5-phase lifecycle orchestrator
│   │   ├── errors.ts         # HTTP → structured PdfToolkitError mapping
│   │   └── types.ts          # Types + error class
│   ├── tools/                # 18 tools, one file per concern
│   │   ├── _shared.ts        # Zod fragments + writeOutputAndReport helper
│   │   ├── merge.ts  split.ts  compress.ts
│   │   ├── convertFromPdf.ts convertToPdf.ts
│   │   ├── pageOps.ts  security.ts  watermark.ts
│   │   ├── repair.ts  ocr.ts
│   │   └── index.ts          # allTools[] barrel
│   └── util/
│       ├── paths.ts          # resolveInputs/resolveOutput + sandbox enforcement
│       ├── progress.ts       # Progress adapter
│       └── logger.ts         # stderr-only logger (stdio-safe)
├── tests/
│   ├── unit/                 # client, paths, errors, tools.merge (25 tests)
│   └── integration/          # smoke.test.ts — gated on iLoveAPI creds
├── scripts/
│   └── inspector.sh          # npm run inspect → MCP Inspector UI
└── .github/workflows/
    ├── ci.yml                # ubuntu+windows × node 18/20/22
    └── publish.yml           # Publishes to npm on v* tags with --provenance

⚙️ 配置参考

环境变量
变量必填默认值说明
ILOVEAPI_PROJECT_PUBLIC_KEY✅—来自 developer.ilovepdf.com 的项目公钥
ILOVEAPI_PROJECT_SECRET_KEY✅—项目密钥。**绝不会记录到日志中。**用于本地 JWT 签名。
ILOVEAPI_SANDBOX_ROOT❌—绝对路径。设置后,所有输入/输出路径都必须解析到此目录内——目录穿越尝试会触发 PATH_TRAVERSAL。
PDF_TOOLKIT_DEBUG❌—设置为 1 可输出详细的 stderr 日志(请求结构、各阶段耗时)。绝不会记录密钥。
结构化错误代码

每次失败都会返回带有稳定、机器可读代码的 PdfToolkitError:

代码触发条件应告知用户的内容
MISSING_CREDENTIALS未设置环境变量指引用户访问 developer.ilovepdf.com
INVALID_INPUTHTTP 400 / Zod 解析失败修正参数
AUTH_FAILEDHTTP 401重新生成项目密钥
PLAN_LIMITHTTP 402免费套餐额度已用尽,或套餐不包含此工具
NOT_FOUNDHTTP 404找不到输入文件或任务
RATE_LIMITEDHTTP 429等待一段时间后重试
TASK_LIMITSDK TaskLimit 错误并发任务过多
PATH_TRAVERSAL路径超出 ILOVEAPI_SANDBOX_ROOT 范围拒绝请求
API_ERROR未映射的 iLoveAPI 错误检查 data.http_status + data.iloveapi_code

🔒 安全模型

pdf-toolkit-mcp 的设计目标是在开发者机器上安全安装:

  • 仅使用 Stdio。 服务不会打开网络套接字;它只会通过官方 SDK 向 api.ilovepdf.com 发起出站 HTTPS 调用。
  • 不使用 console.log。 通过 stdio 传输的 JSON-RPC 会因任何意外的标准输出写入而损坏,因此所有日志行都会写入 process.stderr。
  • 绝不持久化机密信息。 凭据仅在进程运行期间存于环境变量中,绝不会写入磁盘、日志文件或工具响应。
  • 在本地生成 JWT。 @ilovepdf/ilovepdf-nodejs SDK 使用你的密钥自行签发 JWT——不会有任何密钥离开本机。
  • 路径沙箱(可选)。 设置 ILOVEAPI_SANDBOX_ROOT,将服务限制在单个目录树内;任何解析后指向该目录树之外的路径都会在调用 API 前触发异常。
  • 为每个工具设置扩展名白名单。 html_to_pdf 会拒绝 .exe;image_to_pdf 只接受常见的光栅图像格式,等等。
  • 采用 MIT 许可证,便于审计。 约 2k 行 TypeScript。无混淆、无压缩、无 postinstall 脚本。

👩‍💻 开发

git clone https://github.com/EigenCharlie/pdf-toolkit-mcp.git
cd pdf-toolkit-mcp
npm install
常见任务
命令作用
npm run build编译 TypeScript → dist/
npm run dev监视模式构建
npm run typechecktsc --noEmit — 快速发现错误
npm run lint对 src/ + tests/ 运行 ESLint
npm testVitest 单元测试套件(不联网)
npm run test:integration调用真实的 iLoveAPI(需要凭据)
npm run inspect启动 MCP Inspector,检查本地构建
在 Claude Code 中调试
  1. 在本地构建:npm run build。
  2. 注册本地的 dist,而不是 npm:
    claude mcp remove pdf-toolkit    # if previously registered
    claude mcp add pdf-toolkit -- node "$(pwd)/dist/index.js"
    
  3. 启动 Claude Code 前,在 shell 中设置 PDF_TOOLKIT_DEBUG=1,以查看详细的 stderr 输出。
  4. 可通过 claude mcp logs pdf-toolkit 查看 stderr。

✅ 测试与 CI

  • 单元测试 — client、paths、errors 和 tools.merge 共 25 项测试。全部使用模拟,无网络连接。运行 npm test。
  • 集成冒烟测试 — tests/integration/smoke.test.ts 会创建两个最简有效 PDF,并端到端测试真实的 merge_pdf。该测试需要设置 ILOVEAPI_*_KEY 环境变量;出于安全考虑,在 PR CI 中会自动跳过。
  • CI 矩阵 — .github/workflows/ci.yml 会在以下环境中运行 lint → typecheck → build → test:
    • OS:ubuntu-latest、windows-latest
    • Node:18、20、22

🚢 发布

推送标签时会自动执行发布:

npm version patch           # or minor / major
git push --follow-tags

随后,发布工作流会:

  1. 重新运行 lint、typecheck、build 和测试。
  2. 使用 --access public --provenance 发布到 npm(供应链证明)。
  3. 创建包含自动生成说明的 GitHub Release。

所需的仓库机密:NPM_TOKEN(npm automation token)。


🗺 路线图

  • v0.1 — 18 个 PDF 工具、stdio 传输、插件 + 技能、CI、发布到 npm
  • v0.1.1 — 面向 Claude Desktop 的 MCPB 捆绑包(.mcpb)、市场清单、提交至 MCP Registry(mcpName)
  • v0.2 — 将 Claude 插件提交至 anthropics/claude-plugins-official,发布配套的图像工具包
  • v0.3 — 8 个图像工具(调整大小、转换、压缩、裁剪、旋转、添加水印、放大、移除背景)
  • v0.4 — 签名工具(签名流程需要付费套餐,受环境变量标志控制)
  • v1.0 — 为托管和多用户部署提供可选的 Streamable-HTTP 传输

有功能需求?提交 issue。


🙋 常见问题

这合法吗/安全吗/获得 iLovePDF 允许吗? 是的。这是一个轻量级开源客户端,使用的是你自己的凭据——不会转售、重新授权或代理任何内容。iLoveAPI 服务条款明确允许使用用户提供的密钥的开源库(多个社区 SDK 多年来一直存在)。本项目不附带任何密钥,软件包名称中不使用“iLovePDF”/“iLoveAPI”,并附有所需的免责声明。

需要付费吗? iLoveAPI 每月提供约 2,500 个免费额度(足以处理数千次小型操作)。更大的工作负载需要使用付费 iLoveAPI 套餐。此 MCP 本身采用 MIT 许可,永久免费。

可以离线使用吗? 不可以。iLoveAPI 仅提供云端服务,因此每次工具调用都需要互联网连接。

可以固定到特定版本吗? 可以:claude mcp add pdf-toolkit -- npx -y [email protected]。

可以自托管吗? 可以。克隆仓库,运行 npm run build,然后让客户端指向 node ./dist/index.js。该服务完全无状态。

如果 iLoveAPI 宕机了会怎样? 该工具会返回一个 PdfToolkitError,其中包含 code: "API_ERROR" 和 data.http_status。Claude 可以代表你使用指数退避策略重试。

不使用 Claude 也能用吗? 可以——任何兼容 MCP 的客户端都能使用:Cursor、Windsurf、Zed、MCP Inspector、自定义客户端。该服务 100% 符合规范。


🤝 参与贡献

欢迎贡献!提交 PR 前,请简单检查以下事项:

  1. npm run lint && npm run typecheck && npm test → 全部通过。
  2. 新工具遵循 src/tools/merge.ts 中的模式(Zod 模式 → runTask → writeOutputAndReport)。
  3. 至少添加一个单元测试。
  4. 如果添加或重命名工具,请更新本 README 中的工具目录。

更欢迎提交 Bug 报告——请附上工具名称、参数,以及(如果可以安全分享)stderr 输出。


📜 许可证与商标

根据 MIT 许可证 发布,© 2026 Carlos。

“iLovePDF”和“iLoveAPI”是 iLovePDF SL 的商标。本项目是独立的社区构建客户端,与 iLovePDF SL 无关联,未获其认可、赞助或认证。软件包名称特意避开了这两个商标。


🙏 致谢

评论

支持 Markdown

第一次接触 MCP?

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

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