mcpField
R
redactpdf

redactpdf

本地服务
github.com/CloudCorpRecords安全01 周前更新

关于 redactpdf

redactpdf 是用于从本地 PDF 移除敏感文本的命令行工具和 MCP 服务。它检测常见个人信息及自定义词语,另存脱敏副本,并检查匹配文本是否仍可提取。

主要功能

  1. 01检测 SSN、银行卡号、邮箱和电话
  2. 02不区分大小写匹配自定义词语
  3. 03预览匹配项而不写入文件
  4. 04创建独立的脱敏 PDF
  5. 05验证已移除文本不可提取

适用场景

  1. 01分享前检查 PDF 中的敏感文本
  2. 02脱敏本地报告中的身份信息
  3. 03从 PDF 副本中移除指定词语

MCP 相关

MCP 服务提供 `check_pdf` 用于报告检测到的匹配项,并提供 `redact_pdf` 用于生成并验证本地 PDF 的脱敏副本。

配置

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

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

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

安装包
npm@reneturcios/redactpdf0.1.0
ocighcr.io/cloudcorprecords/redactpdf:0.1.0

工具

2

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

参数类型必填说明
pathstring是此计算机上 PDF 的绝对路径
termsarray否要匹配的字面字符串,不区分大小写
detectarray否ssn、card、email、phone 中的任意项。省略表示全部。

详细介绍

redactpdf

分享 PDF 通常意味着你相信屏幕上涂黑的内容确实已经消失。但很多时候并非如此:文本仍留在文件中,可以直接复制出来。redactpdf 采取了相反的做法。它会在本地 PDF 的文本层中查找敏感文本,生成一份副本,将每个匹配的字符实际替换掉,然后重新读取输出文件,以证明已无法提取任何要求移除的内容。如果验证失败,它会报错,而不是生成文件。

它会检测四类敏感文本。社会安全号码必须符合 SSA 自身的有效性规则(区域码为 001-899,但不包括 666;组号为 01-99;序列号为 0001-9999),因此不会标记格式相符的随机数字组。支付卡号由 13 至 19 位数字组成,数字之间允许用单个空格或连字符分隔,并且必须通过 Luhn 校验。内置类别还包括电子邮件地址和北美电话号码——格式为 (ddd) ddd-dddd、ddd-ddd-dddd、ddd.ddd.dddd 或 ddd ddd dddd,可带可选的 +1 前缀。除此之外,terms 可让你指定自定义的字面字符串,匹配时不区分大小写,并单独统计。省略 detect 时会运行全部四类检测。

检测会针对每个提取出的字符串进行——也就是纯文本或 FlateDecode 内容流中 Tj 和 TJ 操作符的字符串操作数——因此,若匹配内容被拆分到两个字符串操作数中,就不会被检测到。这是该工具所用文本层模型明确说明的限制,并非隐瞒不提。

check_pdf 会报告将要移除的内容,但不会写入任何文件。redact_pdf 会写入脱敏后的副本——绝不会修改输入文件——将每个匹配的字符替换为 #,同时保留字符串长度,然后验证结果。免费处理的文档最多为 10 页;超过此页数时,两个工具都会要求提供许可证。此版本中的许可证检查仅验证格式:由 16 至 512 个 [A-Za-z0-9_-] 字符组成并以 . 分隔的令牌会被视为格式正确,可通过 license 参数或 BLACKOUT_LICENSE 环境变量提供——超出页数上限时,错误会区分缺少许可证(LICENSE_REQUIRED)和许可证格式错误(LICENSE_INVALID)。加密 PDF、基于 xref 或对象流构建的 PDF,以及格式错误的文件会被报告为不受支持,而不会被悄然跳过。

两个工具都会以一行摘要、一个空行和一个围栏 JSON 代码块作为响应,其中包含 path、outputPath(check_pdf 时为 null)、pages、counts、extractableChars——对于 check_pdf,表示输入中落在检测匹配范围内的字符;对于成功的 redact_pdf,则按设计为 0——以及 licenseState。

命令行

npx @reneturcios/redactpdf check_pdf '{"path":"/abs/path/report.pdf"}'
npx @reneturcios/redactpdf redact_pdf '{"path":"/abs/path/report.pdf","terms":["falcon"]}'
npx @reneturcios/redactpdf --version

除非另有 output_path 指定,redact_pdf 会写入 <input>-redacted.pdf(即将输入路径中的 .pdf 后缀替换为该名称);输出路径不能与输入路径相同,且只有在 overwrite 为 true 时才会替换已有输出文件。

退出代码:成功时为 0,运行时错误时为 1(会打印工具的错误文本),用法错误时为 2。

MCP 服务

npx -y @reneturcios/redactpdf mcp

MCP 客户端配置:

{
  "mcpServers": {
    "redactpdf": {
      "command": "npx",
      "args": ["-y", "@reneturcios/redactpdf", "mcp"]
    }
  }
}
工具
  • check_pdf — 报告本地 PDF 中将被涂黑的内容,以及每个类别的匹配数量,不会写入任何内容。
    • path(字符串,必填)— 此计算机上某个 PDF 的绝对路径
    • detect(字符串数组,可选)— 可选值为 ssn、card、email、phone;省略则检测所有类别
    • terms(字符串数组,可选)— 要匹配的字面字符串,不区分大小写
  • redact_pdf — 写入本地 PDF 的涂黑副本,永久移除检测到的敏感文本,并验证其已彻底删除。绝不会修改输入文件。
    • path(字符串,必填)— 此计算机上某个 PDF 的绝对路径
    • output_path(字符串,可选)— 默认为 <input>-redacted.pdf;不得与输入文件相同
    • detect(字符串数组,可选)— 可选值为 ssn、card、email、phone;省略则检测所有类别
    • terms(字符串数组,可选)— 要匹配的字面字符串,不区分大小写
    • overwrite(布尔值,可选,默认值为 false)— 允许替换现有输出文件
    • license(字符串,可选)— Pro 许可证令牌;未提供时使用 BLACKOUT_LICENSE

Docker

docker run -i ghcr.io/cloudcorprecords/redactpdf
docker run --rm -v "$PWD:/w" ghcr.io/cloudcorprecords/redactpdf check_pdf '{"path":"/w/report.pdf"}'

开发

npm install
npm run build   # tsc -> dist/
npm test        # tsx --test test/*.test.ts (pure local, no network)
npm run dev     # run the CLI from source

许可证

MIT — 版权所有 (c) 2026 Rene Turcios

评论

支持 Markdown

第一次接触 MCP?

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

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