mcpField
M
merge-pdf

merge-pdf

远程服务
mcp.zovo.one生产力21 天前更新

关于 merge-pdf

这是一个离线运行的 MCP 服务,为需要处理日常 PDF 页面操作的用户提供合并、拆分、提取、旋转、排序和盖章功能。它还能统计页数并提取文本,原始文件不会被修改。

主要功能

  1. 01合并和拆分 PDF
  2. 02提取或重新排列页面
  3. 03旋转页面
  4. 04添加文字印章和页脚水印
  5. 05统计页数并提取文本

适用场景

  1. 01合并合同与附件 PDF
  2. 02从扫描件中拆出指定页面
  3. 03旋转横向扫描页并重新排序
  4. 04在发票副本上添加已付款印章

MCP 相关

该 MCP 服务向客户端提供 PDF 信息查询、页面处理、盖章和文本提取工具,并提供最近操作资源。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.zovo.one/mcp/merge-pdf
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

全部服务地址
Streamable HTTPhttps://mcp.zovo.one/mcp/merge-pdf需要授权
安装包
mcpbpdf.mcpb0.21.0

工具

15
参数类型必填说明
pathstring是使用 pdf_upload 上传的 PDF 名称,或此服务此前生成的 PDF 名称

详细介绍

在 Claude 中合并、拆分 PDF 并填写 PDF 表单

只需说“在那张发票上盖上 PAID,并保存一份副本”或“从这份扫描件中提取第 2 到第 6 页,并与合同合并”,它就会在你的电脑上瞬间完成。这个 MCP 服务能处理那些小型 PDF 任务,否则你可能会把文件上传到某个网页:合并、按页码范围拆分、提取或重新排序页面、旋转横向扫描件、添加 PAID、DRAFT 或任意文本印章、在页脚添加公司名称和 VAT id、统计文件夹中所有文件的页数,以及将 PDF 文本读取为纯文本。不用上传、无需账号、无需原生依赖,也不用安装办公软件。

已收录于官方 MCP Registry(io.github.theluckystrike/pdf-merge-split-stamp-extract-pages)。

已列入 AI Product Index - 提供可用的远程端点 mcp.zovo.one/s/pdf,免费套餐,无需注册。

pdf demo

自由职业者业务中的 PDF 杂务,只需在聊天中完成,不必使用你不放心上传发票的浏览器标签页。

60 秒安装

@theluckystrike/mcp-pdf 的 npm 发布尚待完成。在此之前,可使用一键安装包 .mcpb,或克隆并构建;以下两种方式都已验证可用。

一键安装(.mcpb):从最新版本下载 pdf.mcpb,然后在 Claude Desktop 中双击: https://github.com/theluckystrike/mcp-servers/releases/latest

(claude_desktop_config.json):

{
  "mcpServers": {
    "pdf": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-pdf"]
    }
  }
}

Claude Code:

claude mcp add pdf -- npx -y @theluckystrike/mcp-pdf

(.cursor/mcp.json):

{
  "mcpServers": {
    "pdf": {
      "command": "npx",
      "args": ["-y", "@theluckystrike/mcp-pdf"]
    }
  }
}

上面的 npx 方式会在软件包发布后立即生效。在此之前,请使用上面的 .mcpb 安装包,或通过以下三个命令从源代码构建:

git clone https://github.com/theluckystrike/mcp-servers.git && cd mcp-servers
npm install
npm run build -w packages/mcp-license -w servers/pdf

然后,将客户端的 command 指向 node,并传入一个参数:servers/pdf/dist/index.js 的绝对路径。

若要使用 Pro 模式,请在同一个配置块中设置 MCP_LICENSE_KEY,或使用你的密钥调用一次 license_activate。

工具

工具功能
pdf_info页数、每页的尺寸(以点和毫米为单位)、纸张名称(A4、Letter、自定义)、每页现有的旋转角度、元数据(标题、作者、制作程序、日期),以及文件是否已加密
pdf_count统计任意数量 PDF 文件的页数,并给出总页数。无法读取的文件会单独报告;其他文件仍会照常统计
pdf_merge按给定顺序合并 PDF。保留页面原有尺寸;如果合并后的文件包含多种尺寸,会对此作出说明
pdf_split每个范围生成一个新文件。"1-3,5,7-" 表示第 1-3 页、第 5 页,以及从第 7 页到最后一页。out_path_pattern 接受 {n}、{range} 和 {name}
pdf_pages按你指定的顺序提取页面并生成一个新 PDF。"5,1,1" 会先放入第 5 页,再将第 1 页放入两次
pdf_rotate按 90 度的倍数旋转页面,并与页面现有旋转角度叠加,适用于旋转方向不正的扫描件
pdf_stamp在页面上添加文本:可使用 PAID 和 DRAFT 预设,也可自定义文本、颜色、位置、不透明度和大小。居中印章会沿 45 度对角线放置
pdf_watermark_business使用共享配置文件中的公司名称和 VAT id,在每页页脚添加信息;该配置文件由 mcp-invoice 和 mcp-docx 写入
pdf_text尽可能从页面内容流中提取文本。请参阅下方的注意事项
pdf_reorder按新顺序生成 PDF。顺序必须恰好列出每一页一次,以免意外遗漏页面
license_status显示免费或 Pro 模式
license_activate激活 Pro 密钥(离线验证)

资源:pdf://recent 返回最近 25 次操作,按时间从新到旧排列,并附上输入内容、写入的文件及操作时间。 提示词:mark_invoice_paid 会串联 mcp-invoice 的 invoice_get 和 pdf_stamp PAID,并将盖章后的副本保存到原文件所在目录。

你可以这样说

你说工具
“将发票 INV-2026-0007 标记为已付款。”mark_invoice_paid 提示词,然后是 pdf_stamp
“在我发送这份合同前,将 DRAFT 印在上面。”pdf_stamp
“将这三份 PDF 合并成一个文件。”pdf_merge
“拆分这份扫描件:第 1–3 页是发票,第 4 页起是收据。”pdf_split
“从这份文件中提取第 2 到第 6 页,并另存为单独的文件。”pdf_pages
“这份扫描件是横着的,把它转正。”pdf_rotate
“这些文件总共有多少页?”pdf_count
“这份 PDF 的第 1 页写了什么?”pdf_text
“在页脚加上我的公司名称和 VAT 号码。”pdf_watermark_business
“把封面页移到最前面。”pdf_reorder

示例

You: Stamp PAID on ~/invoices/INV-2026-0007.pdf and save a copy.

  pdf_stamp {
    path: "~/invoices/INV-2026-0007.pdf",
    text: "PAID",
    position: "center",
    out_path: "~/invoices/INV-2026-0007-paid.pdf"
  }
  -> Stamped "PAID" on 1 page
  -> ~/invoices/INV-2026-0007-paid.pdf, 0.9 MB

印章是绘制出来的文本,而不是扁平化的图像:可以选中并搜索,文本以预设绿色沿 45 度斜线绘制,原始文件则逐字节保持不变。

免费版与 Pro 版

免费版Pro 版
pdf_info、pdf_count、pdf_text不限次数不限次数
pdf_merge每次调用最多 5 个文件文件数量不限
pdf_split、pdf_pages、pdf_rotate最多 30 页的文件长度不限
pdf_stamp预设颜色的 PAID 和 DRAFT 预设印章任意文本、颜色和大小
pdf_watermark_business-在页脚添加您的公司名称和 VAT ID
pdf_reorder-支持

遇到套餐限制时,工具会返回说明,而不是报错;如果调用被拒绝,也不会写入任何内容。

Pro 版一次性付费 $19;也可支付 $39,一次性购买合集中的所有服务,终身使用。

pdf_text 尽力而为,具体含义如下

PDF 不存储文本,而是存储绘图操作符;你看到的文本是传递给字体的字节。本服务会使用 node:zlib 解压每一页的 FlateDecode 内容流,并读取四种显示文本的操作符——Tj、TJ、' 和 ",以及用于结束一行的定位操作符。这是此处编写的解析器,约有 200 行代码,不使用 pdfjs 或原生模块,并且存在三项实际限制;每次工具都会在自己的答复中说明:

  • 扫描件没有文本。 纯图像页面不包含文本操作符,因此不会返回任何内容。这里没有 OCR,也不会添加 OCR;答复会说明该页面可能是扫描件,而不是只返回一个没有解释的空字符串。
  • 自定义编码或 CID 编码返回的是字形索引,而不是字母。 子集嵌入字体和 CJK 字体会通过此解析器无法读取的表格,将字节映射为字形编号。如果输出中没有可读字符,答复会说明原因是字体。
  • 读取顺序就是绘制顺序。 解析器不会检测分栏,也不会重建布局。通过 TJ 数组中较大的负字距恢复单词间的空格,因此,如果 PDF 将每个单词分别定位,返回的文本可能会将单词连在一起。

由文字处理软件、开票工具和报告生成器创建的 PDF,以及使用标准字体或完全嵌入字体的 PDF,都能干净地读取。其他情况则会说明无法读取的原因。

遇到加密 PDF 时会拒绝处理,而不是猜测

pdf-lib 无法解密;如果忽略加密加载文件,生成的页面会是一堆垃圾,并被直接写入输出。因此,所有会写入文件的工具都会拒绝处理尾部包含 /Encrypt 字典的文件,并在消息中说明原因和解决方法:使用带密码的阅读器打开文件,然后导出或打印为新的 PDF,再使用该文件。pdf_info 仍会返回结果,并标记 encrypted: true,因为它的工作就是报告信息;pdf_count 则会将其报告为一个无法读取的文件,同时继续统计其余文件。

现有文件绝不会被覆盖,输入也绝不会被修改

每个工具都会写入新文件,并逐字节保留输入原样;这是有意为之,不提供原地修改模式。 如果 out_path 已存在,则会拒绝:

Error: /path/merged.pdf already exists and nothing was written.
Pass overwrite: true to replace it, or give a different out_path.

路径通过独占创建来预留,而不是通过检查是否存在来预留,因此两个进程同时写入相同的 out_path 时不会互相覆盖:一个成功,另一个被拒绝且不写入任何内容。pdf_split 会在写入前预留所有输出路径,因此第 3 个分段发生冲突时,不会留下只完成一半的第 1、2 个分段;预留也会被释放,因此磁盘上不会留下空文件。

如果你希望替换文件,请传入 overwrite: true。

overwrite: true 仍不允许将输出设为输入。把操作结果写回它自己的某个源文件会破坏该源文件:页面已经载入内存,随后会被写回其来源文件,这会把一个三页文件变成你提取出的那一页,之后每次读取该路径都会悄悄读到错误内容。因此,如果 out_path 解析后与同一次调用的任何输入相同(或与其共享 inode),操作会在开始前被拒绝:

Error: out_path /path/scan.pdf is also an input of this operation, so writing it would destroy the source.
Nothing was written. Write beside it instead - /path/scan-out.pdf - and, if the result really is meant to
take the original's place, rename it yourself once you have checked it.

限制

  • 拒绝处理超过 100 MB 的输入:重写 PDF 需要占用相当于文件大小数倍的内存。
  • 如果文件不是以 %PDF- 开头,则会在读取任何内容前被拒绝。
  • 旋转会以页面元数据的形式记录,角度必须是 90 度的倍数;这是该格式所支持的全部角度。不会重新绘制内容。
  • 印章文字会使用内置 PDF 字体,该字体支持 WinAnsi 的 256 个码位。不支持的字符如果有明显的拉丁字母形式,会进行转写;例如,波兰语的 OPŁACONE 印章会转写为 OPLACONE,答案会说明这一点并显示实际绘制的内容。不支持的字符会被移除并计数,因此无法生成 CJK 印章。换行符会被视为词语分隔符,绝不会导致内容被删除。
  • font_size 必须介于 1 到 1600 点之间。如果印章文字过长,即使使用此服务端采用的最小字号也无法容纳,仍会绘制,并在答案中说明超出边缘的距离,方便你缩短文字。
  • pdf_text 的单次答案上限为 200,000 个字符,并会指出应使用哪个 pages 参数从截断处继续。文件内容不会缺失;截断的是答案,而非读取结果。
  • 不支持页码、签名、涂黑或压缩。此服务端只执行页面级操作,并非 PDF 编辑器。它不会写入 PDF/A:pdf_info 会报告文件自身的 pdfa_claim,每个写入文件的工具都会明确说明其输出不再符合该声明。
  • 表单只读取,不填写:pdf_text 会打印 AcroForm 字段值,这些值存储在字段中,而非页面内容流中,因此不属于页面文本。
  • 不支持 OCR。请参阅 pdf_text 部分。

数据存储方式

只记录执行过的操作:${XDG_DATA_HOME:-~/.local/share}/mcp-servers/pdf/operations.json,以纯 JSON 格式保存最近 500 条操作。你的 PDF 会保留在原处。每次写入记录时都会在 .../pdf/.lock 上持有建议锁,因此同一数据目录中的两个客户端不会丢失记录;数据会先保存到临时文件,再重命名到目标位置。

如果记录不可读或不是有效的 JSON,绝不会将其视为空记录:文件会逐字节移至一旁,命名为 operations.json.corrupt-<timestamp>,并在旁边附上标记。你请求生成的 PDF 仍会写入;在处理记录之前,文件就已写入磁盘;答案会告知你历史记录未能更新。

业务页脚会读取整个工具套件共用的配置文件 ${XDG_DATA_HOME:-~/.local/share}/mcp-servers/profile/business.json,该文件由 mcp-invoice 或 mcp-docx 中的 business_set 写入。不会编造任何信息:如果未存储名称,pdf_watermark_business 会拒绝操作并告知你应运行哪个工具。

隐私

所有数据都保留在本地。服务会在你的机器上读写文件,不会发起任何网络请求—— 不会用于许可验证(密钥会离线验证),不会用于获取字体,也不会用于遥测。你添加印章的 PDF 永远不会上传到任何地方,这正是这个项目存在的全部原因。

搭配使用

  • mcp-invoice:给你发出的发票添加“已付款”印章:mark_invoice_paid 提示词会将 invoice_get 与 pdf_stamp 串联起来。
  • mcp-docx:将提案写为 .docx,打印为 PDF,然后在此处添加印章、合并或拆分。
  • mcp-resume:将简历、求职信和作品集合并为申请表接受的单个文件。
  • office-suite:一个安装包中包含多个服务,只需配置一项。

故障排除

  • npx 卡住或找不到软件包:此软件包仍在等待发布到 npm。在发布之前,请使用上方的 .mcpb 捆绑包或克隆并构建的方式。
  • “已加密,因此拒绝处理”:该文件受密码或权限保护。请在 PDF 阅读器中打开它,导出或打印为新的 PDF,然后对副本运行工具。此服务不会猜测或移除密码。
  • pdf_text 未返回任何内容:页面是扫描件,或其字体使用了自定义编码。答案会说明是哪种情况。此处不提供 OCR。
  • 印章太小或太大:默认情况下,印章会调整大小以适应页面宽度。如需精确字号,请传入 font_size,并将 opacity 设为 0 到 1 之间的值。
  • “文件已存在,未写入任何内容”:请传入 overwrite: true,或使用不同的 out_path。
  • Node 版本:需要 Node >= 18。使用 node -v 检查。

采用 MIT 许可证。支持:[email protected]

由 theluckystrike 构建。

常见问题

有用于合并和拆分 PDF 的 MCP 服务吗?

有。mcp.zovo.one 上的 pdf 服务可以合并、拆分、旋转 PDF 并填写 PDF 表单,同时保留表单字段。拆分/提取页面/旋转操作对每个文件有 30 页的免费额度,提供托管的远程端点,无需安装。

Claude 能通过 MCP 服务填写 PDF 表单吗?

可以——连接 https://mcp.zovo.one/mcp/pdf,然后让 Claude 填写表单字段或合并多个 PDF。输出会保留表单,因此填写的字段仍可编辑。

将这些文档用作 MCP 服务

任何 MCP 客户端(Claude、Cursor、Windsurf、VS Code)都可以通过 GitMCP 直接读取此代码库的文档——无需安装:

评论

支持 Markdown

第一次接触 MCP?

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

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