关于 redact-pdf-mcp
redact-pdf-mcp 是用于永久删除 PDF 和图像中个人信息的 MCP 服务,面向处理合同、证件或账单的团队。它支持 OCR、实体检测和一致的占位符匿名化,输出文件不保留被遮盖的文本层。
主要功能
- 01永久移除文档中的敏感文本
- 02对扫描件和图像执行 OCR
- 03检测 8 类个人信息实体
- 04用一致标签替换实体并生成对照表
- 05设置始终遮盖或排除的词语
适用场景
- 01向外部机构发送合同前移除个人信息
- 02匿名化文档后将文本交给 AI 处理
- 03批量处理账单并保留公司名称
- 04人工复核检测到的遮盖区域
MCP 相关
作为 MCP 服务,它向客户端提供文档脱敏、任务状态、结果下载、演示和名称恢复等工具。支持本地 STDIO 与无会话的 Streamable HTTP 服务;远程调用通过请求传入 API 密钥。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| file_path | string | 是 | 此计算机上文件的绝对路径。接受 PDF、JPEG 和 PNG——可直接传入图像,无需预先转换。此服务在本地运行,因此会直接读取文件;切勿将文件内容粘贴到此参数中。 |
| retention | enum | 否 | "ephemeral"(默认)会在处理后删除原件,并仅短暂保留输出文件。"studio" 会保留原件和检测到的遮罩,供人工在 redact-pdf.ai 上审核和调整后再导出——适用于需要由人员最终确认的重要文档。ephemeral | studio |
| output_path | string | 否 | 在此计算机上写入已涂黑 PDF 的位置。默认写入原文件旁边,并在输入路径后添加 "-redacted" 后缀。输出始终为 PDF,因此图像输入会生成 .pdf 文件。原文件不会被修改。 |
| pii_categories | array | 否 | 要涂黑的实体类型。省略此项以使用账户默认设置,这通常是用户所需的设置——不要传入空列表,否则会表示“什么都不涂黑”并返回未涂黑的文件。有效值:Person、Email、PhoneNumber、Address、Organization、Date、IBAN、CreditCard。 |
| idempotency_key | string | 否 | 可选。默认情况下,系统会根据文件字节和设置生成密钥,因此重复执行完全相同的调用会返回同一个作业,而不会重复涂黑(和计费)。只有在明确需要对同一文档再次单独涂黑时,才在此处传入不同的值。 |
| timeout_seconds | integer | 否 | 等待完成的时长,以秒为单位(默认 300,最大 900)。超时后,作业会在服务端继续运行,可使用 get_job_status 恢复查询。 |
| pii_excluded_terms | array | 否 | 即使被检测为个人身份信息,也绝不能涂黑的词语——通常是贵公司的名称、公开联系地址,或文档所写给的收件人。 |
| pii_included_terms | array | 否 | 即使模型不会将其视为个人身份信息,也必须始终涂黑的词语——项目代号、内部引用信息或特定案件编号。按完整单词匹配且不区分大小写。发生冲突时优先于排除词语。 |
详细介绍
Redact PDF MCP 服务
一款可永久删除 PDF 中个人身份信息(PII)的 MCP 服务。 给 Agent 一份 PDF,即可获得一份敏感文本已从文件中删除的 PDF,而不是用黑色矩形遮住文字——任何人都能选中、复制或删除这种矩形。
大多数“脱敏”MCP 服务只会从提示词文本中清除 PII。这个服务处理真实文档,并返回真正完成脱敏的文档。
它还可以匿名化。 使用 mode: "pseudonymize" 时,每个人名、公司名和地址都会替换为一致的标签,例如 [Person 1],而不是被黑框遮住,因此文档仍然可读(例如,将合同粘贴到 ChatGPT 或 Claude 之前);同时,你会得到一份标签 → 原文的对照表,用于还原名称。
claude mcp add redact-pdf -- npx -y redact-pdf-mcp
然后提出请求:“删除 ~/Documents/contract.pdf 中的个人数据”,或*“使用占位符匿名化 ~/Documents/contract.pdf,这样我就能把它粘贴到 AI 中”*。
你的数据
你发送的是 Agent 应当保护的文档,因此我们先从这里说起。
- 绝不会用于训练 AI 模型——不用于我们的模型、Microsoft 的模型,也不用于任何人的模型。用于 OCR 和 PII 检测的 Azure AI 服务已禁用内容日志记录,因此不会保留文档内容,也不会将其用于改进模型。
- 在欧盟和瑞士处理,使用 Microsoft Azure。
- 加密保护:传输过程中使用 TLS 1.2+,静态存储时使用 AES-256。
- 原件会在处理后删除,默认采用
ephemeral保留策略。脱敏后的输出会在你账户的保留期限内保存(默认 14 天,可配置),你也可以随时通过DELETE /v1/jobs/{job_id}将其清除。 - 经认证的基础设施。 Azure 持有 SOC 2 Type II、ISO 27001、ISO 27017 和 ISO 27018 认证,并根据 Microsoft 的 BAA 符合 HIPAA 要求。Redact PDF AI 本身未经这些框架的独立审计;其构建方式旨在让法律、医疗和金融团队能够在各自的合规体系内使用。
- MCP 服务不会自行发送任何遥测数据——请参阅服务在本地执行的操作。
详情:redact-pdf.ai/security · 隐私政策
为什么不让 Agent 自己脱敏?
Agent 可以在文本中找到姓名,但无法独自确保 PDF 安全:
- 黑框不等于脱敏。 在文字上方画一个矩形,会留下底层的文本层;任何人都能选中、复制或提取文字。此服务会将每一页栅格化,并移除文本层和元数据,因此没有任何内容可供恢复。
- 扫描件中没有可搜索的文本。 合同、证件和账单通常是图像。服务会先以 100 多种语言运行 OCR,然后对识别出的内容进行 PII 检测。
- 检测依靠模型,而不是正则表达式。 姓名、地址和组织名称都没有固定格式。检测器专为 PII 打造,你的始终脱敏和绝不脱敏列表则可覆盖其余情况。
示例
安装服务后即可直接使用的提示词:
- “在我将 ~/Documents/lease.pdf 发给中介之前,先遮盖其中的个人数据。”
- “遮盖 ~/Downloads/statements 中每个 PDF 里的姓名、电子邮件和 IBAN,但保留我公司的名称可见。” — Agent 会为公司名称传入
pii_excluded_terms,并并行调用redact_pdf。 - “这是客户工单的截图。移除其中的电话号码和地址,然后给我一个可附加发送的 PDF。” — 可直接传入图片,无需转换。
- “在 ~/Documents/contract.pdf 上试用 redact-pdf 演示版,看看它的效果。” — 无需密钥,仅处理第一页。
无需 API 密钥即可试用
该服务提供了一个无需密钥的工具 try_demo。传入文件后,它会实际遮盖第一页,无需密钥或账户,并告知 Agent 检测到的内容:
你: 在 ~/Documents/contract.pdf 上使用 redact-pdf 服务的 try_demo 工具。
Claude: 已遮盖 contract.pdf 的第一页(共 4 页)。该页已移除的个人数据:Person、Email。以下是遮盖后的页面(链接有效期为 14 天)。若要遮盖全部 4 页,免费账户可完整处理第一个文档(最多 5 页),无需信用卡。
不传入文件时,它会改为运行内置的合成示例,这是零配置的连通性检查。也可以在终端中执行相同操作,无需安装:
curl https://www.redact-pdf.ai/v1/demo
curl -F [email protected] https://www.redact-pdf.ai/v1/demo/redact
功能
- 永久且不可逆的遮盖。 底层文本会被删除,而非仅仅遮住。无法通过复制粘贴、文本提取或 PDF 编辑器中的“移除对象”功能恢复。
- PDF 和图片。 可传入 PDF、JPEG 或 PNG。照片和截图无需预先转换;无论输入哪种格式,输出都是遮盖后的 PDF。
- 扫描文档。 OCR 可处理纯图像 PDF 和文档照片。
- 支持 100 多种语言进行实体检测。
- 八种实体类型:Person、Email、PhoneNumber、Address、Organization、Date、IBAN、CreditCard,还支持自定义的始终遮盖和永不遮盖术语列表。
- 在欧盟/瑞士处理,绝不用于 AI 训练——参见你的数据。
- 用假名替代黑框。
mode: "pseudonymize"会将每个实体替换为一致的标签([Person 1]、[Org 1]、[Address 1]……),每一页及姓名的各种变体都会使用相同标签,让同事或其他 AI 仍能读懂文档。文本仍会被删除,而非覆盖;redact_pdf_and_wait还会返回标签 → 原文对照表(CSV)。 - 必要时进行人工审核。
retention: "studio"会保留检测到的遮盖区域,供人员在导出前检查和调整。
安装
Claude Code
claude mcp add redact-pdf --env REDACT_PDF_API_KEY=your_key -- npx -y redact-pdf-mcp
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"redact-pdf": {
"command": "npx",
"args": ["-y", "redact-pdf-mcp"],
"env": { "REDACT_PDF_API_KEY": "your_key" }
}
}
}
Cursor
.cursor/mcp.json:
{
"mcpServers": {
"redact-pdf": {
"command": "npx",
"args": ["-y", "redact-pdf-mcp"],
"env": { "REDACT_PDF_API_KEY": "your_key" }
}
}
}
VS Code
code --add-mcp '{"name":"redact-pdf","command":"npx","args":["-y","redact-pdf-mcp"],"env":{"REDACT_PDF_API_KEY":"your_key"}}'
在 redact-pdf.ai/sign-up 获取 API 密钥。免费账户可完整脱敏第一份文档(最多 5 页),无需银行卡。没有密钥时,try_demo 仍可使用;其他所有工具都会提示 Agent 向你索要密钥。
无法通过环境变量传递密钥的客户端(Cowork 会丢弃配置中引用插件设置的插件 MCP 服务,因此 Claude 插件不会传递密钥)可以改为保存密钥:将密钥提供给 Agent,它会调用 set_api_key,通过 API 验证密钥;如果客户端支持 MCP elicitation,还会请求你确认账户(电子邮件和密钥的末四位字符)。确认后的密钥会写入 ~/.config/redact-pdf-mcp/key(或 $XDG_CONFIG_HOME/redact-pdf-mcp/key),仅你的用户可读取,且未经同样的确认不会被替换。不支持 elicitation 的客户端只会在会话期间将密钥保存在内存中;如果现有密钥仍有效,则不会覆盖它,并且每个工具结果都会注明账户。这样可以避免文档中的密钥被悄悄用于重定向你的文件。工具绝不会返回密钥。你也可以自行写入该文件一次(单行命令见插件 README)。设置 REDACT_PDF_API_KEY 后会优先使用它;空值或未替换的占位符(例如 ${user_config.api_key})都视为未设置。
工具
| 工具 | 功能 |
|---|---|
redact_pdf_and_wait | 从这里开始。 上传、脱敏、等待并返回处理完成的 PDF。一次调用即可。 |
redact_pdf | 启动任务后立即返回,适合并行脱敏多个文档。 |
get_job_status | 轮询任务状态:uploaded → analyzing → redacting → redacted | error。 |
download_redacted | 获取单个文档的脱敏结果。 |
download_correspondence | 获取已假名化文档的标签 → 原文对照表(mode: "pseudonymize")。 |
try_demo | 无需密钥。有文件时:实际脱敏其第一页。无文件时:运行内置示例。 |
restore_names | 仅限本地。 将真实姓名还原到 Agent 根据假名化文本编写的 .md、.txt 或 .docx 文件中。返回输出路径和计数,绝不返回姓名。 |
get_account_status | 检查 API 密钥是否有效并查看账户信息,适用于批量处理前。 |
set_api_key | 仅限本地。 验证用户在对话中提供的密钥,并将其保存到此机器上,仅供当前用户使用,适用于无法传递 REDACT_PDF_API_KEY 的客户端。绝不返回密钥。 |
适用于任一脱敏工具的脱敏规则:
| 参数 | 效果 |
|---|---|
pii_categories | 限定为特定实体类型。省略则使用账户默认值。 |
pii_included_terms | 始终脱敏这些内容,即使未将其识别为 PII(代号、案件编号)。 |
pii_excluded_terms | 始终保留这些内容,即使将其识别为 PII(你自己的公司名称)。 |
retention | ephemeral(默认值)会在处理后删除原文。studio 会保留遮罩,供人工审核。 |
mode | redact(默认值)绘制黑色方框。pseudonymize 绘制一致的标签,例如 [Person 1],并返回对照表(stdio:写入 PDF 旁的 *-correspondence.csv;远程:以内嵌的 correspondence_csv 返回),以及保留标签的文档文本(32 KB 以内使用 document_text;超过 32 KB 则使用 document_text_path / document_text_url)。try_demo 也接受此参数。 |
匿名化 → 让 AI 处理 → 恢复姓名
本地服务可以闭环处理,整个过程中模型都不会看到姓名:
- 使用
redact_pdf_and_wait并设置mode: "pseudonymize",会返回脱敏后的 PDF、保存在磁盘上的对应表,以及document_text:文档的文本内容,其中每个姓名都已替换为对应标签。Agent 根据这段文本开展工作。 - Agent 将答案(摘要、备忘录、信件)写入
.md、.txt或.docx文件,并保留原样的标签。 - 使用该文件和
correspondence_path调用restore_names,会生成包含真实姓名的<name>-restored.<ext>,并且只返回路径和数量。
Agent 不能先打开原始文档,也不能在之后打开对应关系 CSV 或恢复后的文件:读取其中任何一个都会让个人数据重新进入对话。服务说明和工具描述中对此都有明确说明。
远程服务
此软件包还提供了一个流式 HTTP 服务,供托管场景使用,API 密钥通过每个请求传递,而不是存储在环境变量中:
npx redact-pdf-mcp-http # listens on :8080/mcp
POST /mcp
X-API-Key: your_key (or: Authorization: Bearer your_key)
该服务是无状态的——没有会话、不存储密钥、请求之间不保留任何内容——因此每个请求都会获得独立的短时服务实例,一个调用方的密钥绝不会泄漏到另一个调用方的工具调用中。
握手、tools/list 和 try_demo 无需密钥即可使用,因此客户端可以在任何人注册之前连接并验证服务;其他所有工具都会返回 401,并附带 WWW-Authenticate 质询。
文档通过 file_base64 提供(远程服务无法访问你的文件系统)。
远程服务默认关闭通过 URL 获取文档的功能。地址检查确实有效——解析到环回、私有或链路本地地址的 URL 会被拒绝,并且每次重定向都会重新检查——但套接字会在检查后再次解析主机名,因此,TTL 较短的 DNS 重绑定攻击者仍可能让服务验证一个地址,却连接到另一个地址。要杜绝此问题,需要将连接固定到已验证的地址;目前尚未实现,因此可从互联网访问的服务不会开放此功能。
设置 REDACT_PDF_ENABLE_URL_INPUT=1 以接受 file_url,且仅在服务前方有自己的出口流量控制(网络策略或允许列表代理)时使用。
REDACT_PDF_ALLOW_PRIVATE_URLS=1 还会允许访问私有地址,适用于从内部存储获取文件的可自托管实例。
stdio 模式不受影响:它在你自己的机器上运行,通过 URL 获取内容不会获得你原本不具备的权限。
| 变量 | 默认值 | 用途 |
|---|---|---|
REDACT_PDF_API_KEY | — | API 密钥(仅用于 stdio 模式;远程服务在每个请求中接收密钥)。为空或值为 ${...} 时视为未设置,并改用通过 set_api_key 保存的密钥。 |
REDACT_PDF_BASE_URL | https://www.redact-pdf.ai | 指向其他 API 主机。 |
PORT | 8080 | HTTP 服务端口。 |
REDACT_PDF_MCP_PATH | /mcp | HTTP 端点路径。 |
REDACT_PDF_ENABLE_URL_INPUT | 未设置 | 允许远程服务接受 file_url。默认关闭——请参阅上文的 DNS 重绑定说明。 |
REDACT_PDF_ALLOW_PRIVATE_URLS | 未设置 | 仅限可自托管实例:允许 file_url 访问私有地址。切勿在可从公网访问的服务上设置此项。 |
服务在本地的行为
- 不收集遥测数据。 服务只会发起其工具所述的 API 调用,不会做其他任何事情。不进行分析、不报告错误,也不会向外发送数据。
- 无状态。 不使用数据库或缓存,也不会写入磁盘;只有在指定路径写入你要求的文件,以及调用
set_api_key时写入密钥文件。 - 原始文件始终属于你。 在 stdio 模式下,输入文件只会被读取,不会被修改。默认采用
ephemeral保留策略时,API 会在处理后删除原始文件。 - 默认具备幂等性。 幂等键根据文件字节和脱敏设置生成,因此 Agent 重试同一调用时会获取同一个任务,而不会重复脱敏并重复计费。缓存有效期为 24 小时;如果确实要对同一文件再次单独脱敏,请传入显式的
idempotency_key。 - 绝不覆盖文件。 在 stdio 模式下,脱敏后的 PDF 会以原子方式写入,工具拒绝覆盖已有文件。
隐私政策
完整政策请见 redact-pdf.ai/privacy。该政策涵盖网站、应用,以及本服务调用的 API。简而言之:
- 收集哪些信息。 你发送的文档及其处理元数据(状态、页数、所选 PII 类别)和脱敏遮罩;如果使用 API 密钥,还会收集你的账户标识符和电子邮件;如果付费,还会收集账单数据。此 MCP 服务本身不收集任何信息,也不发送遥测数据。
- 信息如何使用。 用于执行你要求的脱敏,以及运营、保护和计费你的账户。文档仅用于 OCR 和 PII 检测,不会用于训练 AI 模型。
- 信息存储在哪里。 存储于欧盟和瑞士的 Microsoft Azure,传输过程中(TLS 1.2+)和静态存储时(AES-256)均经过加密。
- 与谁共享信息。 文档仅会发送给 Microsoft Azure(用于存储、OCR 和 PII 检测)。账户和账单数据会发送给 Clerk 和 Stripe。内部运营提醒(可能包含文件名)会发送到团队的 Slack。政策列出了所有子处理方。
- 信息保留多久。 默认采用
ephemeral保留策略时,原始文件会在处理后删除;脱敏后的输出文件遵循你账户的保留期限(默认 14 天),你可以随时删除。发送到无需密钥的try_demo的文件会在第一页完成脱敏后删除;该页会保留 14 天。 - 联系方式。 如需提出隐私请求或咨询问题,请联系 [email protected]。
限制
- 每个 PDF 最大 50 MB,每张图片最大 10 MB,每个任务最多 100 个文件。
- 支持输入 PDF、JPEG 和 PNG;始终输出 PDF。其他格式(DOCX、TIFF、HEIC)请先转换为 PDF。
- 在远程服务上,base64 会使文档体积膨胀约三分之一,因此对于较大的文件,建议使用
file_url。 - 传入空的
pii_categories列表会被拒绝:对于 API,空列表表示“什么都不脱敏”,这会导致返回未修改却被标记为已脱敏的文件。省略此参数即可使用账户默认设置。 - 免费处理首份文档后,将根据你的套餐配额和额度包按页计费。
quota_exceeded错误表示需要充值,工具会告知 Agent 不要重试。
开发
npm install
npm run build
npm test # offline unit + tool tests
npm run test:integration # hits the live keyless demo endpoint; no key needed
链接
- API 文档:redact-pdf.ai/developers
- 安全与数据处理:redact-pdf.ai/security
- OpenAPI 规范:redact-pdf.ai/openapi.yaml
- LLM 索引:redact-pdf.ai/llms.txt
有关脱敏质量、账单或账户的支持问题,请联系 [email protected]——此处的 GitHub issues 仅用于反馈 MCP 服务本身的问题。
采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。