这是一个使用 PyMuPDF(fitz)进行 PDF 红字处理的 Model Context Protocol (MCP) 服务器。该服务器提供了加载 PDF 文件、识别并红字敏感文本以及保存已红字文档的工具。
此项目使用 uv 进行包管理。要安装,请执行以下操作:
# 克隆仓库
git clone <your-repo-url>
cd redact_mcp
# 使用 uv 安装
uv pip install -e .
您可以使用 Python 脚本直接运行服务器或使用 FastMCP CLI:
python -m redact_mcp.server
# 标准 I/O 传输(默认)
fastmcp run redact_mcp.server:mcp
# HTTP 传输用于远程访问
fastmcp run redact_mcp.server:mcp --transport http --port 8000
在您的 Claude Desktop 配置文件中添加:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"pdf-redaction": {
"command": "uv",
"args": [
"--directory",
"/path/to/redact_mcp",
"run",
"fastmcp",
"run",
"redact_mcp.server:mcp"
]
}
}
}
使用 FastMCP CLI 生成其他客户端的配置:
# 对于 Cursor
fastmcp install cursor redact_mcp.server:mcp
# 对于 Gemini CLI
fastmcp install gemini-cli redact_m
cp.server:mcp
# 生成通用 MCP JSON 配置
fastmcp install mcp-json redact_mcp.server:mcp
load_pdf加载 PDF 文件并提取其文本内容。
参数:
pdf_path (字符串):要加载的 PDF 文件路径返回值: PDF 的全文内容,按页组织
示例:
加载位于 /path/to/document.pdf 的 PDF
redact_text红字已加载 PDF 中的所有特定文本实例。此工具现在接受一次多个文本,以实现高效的批量红字。它会自动跟踪哪些文本已经被红字,以防止重复工作。
参数:
pdf_path (字符串):已加载的 PDF 文件路径texts_to_redact (字符串列表):要搜索并红字的文本字符串列表fill_color (元组,可选):红字框的 RGB 颜色(0-1 范围)。默认值:(0, 0, 0) - 黑色返回值: 红字操作摘要,包括哪些文本是新红字的,哪些被跳过(已经红字过的)
示例:
# 单个文本
红字 ["confidential"] 在 /path/to/document.pdf
# 一次多个文本(推荐以提高效率)
红字 ["John Doe", "123-45-6789", "john.doe@email.com"] 在 /path/to/document.pdf
注意: 此工具会跟踪哪些文本已被红字,并会跳过任何已处理的文本,防止重复红字。
redact_area红字 PDF 页面上的特定矩形区域。
参数:
pdf_path (字符串):已加载的 PDF 文件路径page_number (整数):页面编号(从 1 开始)x0 (浮点数):左 x 坐标y0 (浮点数):顶部 y 坐标x1 (浮点数):右 x 坐标y1 (浮点数):底部 y 坐标fill_color (元组,可选):红字框的 RGB 颜色(0-1 范围)。默认值:(0, 0, 0) - 黑色返回值: 确认消息
示例:
红字第 1 页上从 (100, 100) 到 (300, 150) 的区域
save_redacted_pdf应用所有待处理的红字并保存 PDF。
参数:
pdf_path (字符串):已加载的 PDF 文件路径output_path (字符串,可选):自定义输出路径。如果没有提供,则在原始文件名后追加 "_redacted"返回值: 已保存的红字 PDF 路径
示例:
保存位于 /path/to/document.pdf 的红字版本
list_loaded_pdfs列出当前已加载的所有 PDF 文件。
参数: 无
返回值: 已加载 PDF 路径及其页数的列表
list_applied_redactions列出已应用于已加载 PDF 的所有红字。新工具 用于跟踪红字进度并避免重复工作。
参数:
pdf_path (字符串,可选):特定 PDF 的路径。如果没有提供,则列出所有已加载 PDF 的红字返回值: 每个 PDF 中已标记为红字的文本列表
示例:
# 列出特定 PDF 的红字
列出 /path/to/document.pdf 的已应用红字
# 列出所有已加载 PDF 的红字
列出所有已应用红字
使用场景:
close_pdf关闭已加载的 PDF 并释放其资源。这也会清除该 PDF 的红字跟踪。
参数:
pdf_path (字符串):要关闭的 PDF 文件路径返回值: 确认消息
这里是一个使用此 MCP 服务器的典型工作流程:
加载 PDF
加载位于 /Users/me/documents/sensitive.pdf 的 PDF
审查内容 工具将返回全文内容,您可以审查以识别敏感信息。
红字敏感文本(批量模式 - 推荐)
红字 ["Social Security Number", "123-45-6789", "John Doe", "jane.smith@email.com"] 在 /Users/me/documents/sensitive.pdf
小贴士: 一次红字多个文本比多次调用工具更快。
检查已红字的内容(可选)
列出 /Users/me/documents/sensitive.pdf 的已应用红字
这将显示哪些文本已被标记为红字。
如有需要,添加更多红字
红字 ["Additional Text", "Another Secret"] 在 /Users/me/documents/sensitive.pdf
工具将跳过已在第 3 步中红字的文本。
红字特定区域(可选)
红字第 2 页上从 (50, 100) 到 (200, 120) 的区域
保存红字 PDF
保存位于 /Users/me/documents/sensitive.pdf 的红字版本
这将创建 /Users/me/documents/sensitive_redacted.pdf
关闭 PDF(可选)
关闭 /Users/me/documents/sensitive.pdf
批量红字更快:
# ❌ 较慢:多次单独调用
红字 ["John Doe"] 在 document.pdf
红字 ["123-45-6789"] 在 document.pdf
红字 ["jane@email.com"] 在 document.pdf
# ✅ 更快:单次批量调用
红字 ["John Doe", "123-45-6789", "jane@email.com"] 在 document.pdf
为什么批量红字更好:
最佳实践: 首先收集所有要红字的文本,然后进行一次批量调用。
fitz)save_redacted_pdfToolError 将错误传播到 MCP 客户端# 安装开发依赖项
uv pip install -e ".[dev]"
# 运行测试(当实现时)
pytest
redact_mcp/
├── src/
│ └── redact_mcp/
│ ├── __init__.py # 包初始化
│ └── server.py # 主 MCP 服务器实现
├── pyproject.toml # 包配置
└── README.md # 本文档
Apache-2.0
欢迎贡献!请随时提交问题或拉取请求。