返回市场
内容审查MCP服务器

内容审查MCP服务器

作者:marc-hanheide2 星标更新:2025-10-10

项目介绍

PDF 红字 MCP 服务器

这是一个使用 PyMuPDF(fitz)进行 PDF 红字处理的 Model Context Protocol (MCP) 服务器。该服务器提供了加载 PDF 文件、识别并红字敏感文本以及保存已红字文档的工具。

功能

  • 📄 加载和读取 PDF 文件 - 提取 PDF 中的文本内容以供审查
  • 🔍 批量文本红字 - 搜索并一次性红字多个文本字符串,以提高效率
  • 📋 红字跟踪 - 跟踪哪些内容已被红字,防止重复工作
  • 🔎 列出已应用的红字 - 审计日志显示哪些文本已被标记为红字
  • 📐 基于区域的红字 - 根据坐标红字特定的矩形区域
  • 💾 保存已红字的 PDF - 应用红字并自动命名保存
  • 🎨 可定制的红字外观 - 选择红字填充颜色
  • 🔒 错误处理 - 通过 MCP 协议提供全面的错误消息

安装

此项目使用 uv 进行包管理。要安装,请执行以下操作:

# 克隆仓库
git clone <your-repo-url>
cd redact_mcp

# 使用 uv 安装
uv pip install -e .

使用方法

运行服务器

您可以使用 Python 脚本直接运行服务器或使用 FastMCP CLI:

方案 1:直接 Python 执行(标准 I/O 传输)

python -m redact_mcp.server

方案 2:使用 FastMCP CLI

# 标准 I/O 传输(默认)
fastmcp run redact_mcp.server:mcp

# HTTP 传输用于远程访问
fastmcp run redact_mcp.server:mcp --transport http --port 8000

在 MCP 客户端中安装

Claude Desktop

在您的 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"
      ]
    }
  }
}

其他 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

可用工具

1. load_pdf

加载 PDF 文件并提取其文本内容。

参数:

  • pdf_path (字符串):要加载的 PDF 文件路径

返回值: PDF 的全文内容,按页组织

示例:

加载位于 /path/to/document.pdf 的 PDF

2. 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

注意: 此工具会跟踪哪些文本已被红字,并会跳过任何已处理的文本,防止重复红字。

3. 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) 的区域

4. save_redacted_pdf

应用所有待处理的红字并保存 PDF。

参数:

  • pdf_path (字符串):已加载的 PDF 文件路径
  • output_path (字符串,可选):自定义输出路径。如果没有提供,则在原始文件名后追加 "_redacted"

返回值: 已保存的红字 PDF 路径

示例:

保存位于 /path/to/document.pdf 的红字版本

5. list_loaded_pdfs

列出当前已加载的所有 PDF 文件。

参数:

返回值: 已加载 PDF 路径及其页数的列表

6. list_applied_redactions

列出已应用于已加载 PDF 的所有红字。新工具 用于跟踪红字进度并避免重复工作。

参数:

  • pdf_path (字符串,可选):特定 PDF 的路径。如果没有提供,则列出所有已加载 PDF 的红字

返回值: 每个 PDF 中已标记为红字的文本列表

示例:

# 列出特定 PDF 的红字
列出 /path/to/document.pdf 的已应用红字

# 列出所有已加载 PDF 的红字
列出所有已应用红字

使用场景:

  • 在添加更多红字之前检查已红字的内容
  • 在多步骤过程中验证红字进度
  • 避免重复红字尝试
  • 生成已红字内容的报告

7. close_pdf

关闭已加载的 PDF 并释放其资源。这也会清除该 PDF 的红字跟踪。

参数:

  • pdf_path (字符串):要关闭的 PDF 文件路径

返回值: 确认消息

工作流程示例

这里是一个使用此 MCP 服务器的典型工作流程:

  1. 加载 PDF

    加载位于 /Users/me/documents/sensitive.pdf 的 PDF
    
  2. 审查内容 工具将返回全文内容,您可以审查以识别敏感信息。

  3. 红字敏感文本(批量模式 - 推荐)

    红字 ["Social Security Number", "123-45-6789", "John Doe", "jane.smith@email.com"] 在 /Users/me/documents/sensitive.pdf
    

    小贴士: 一次红字多个文本比多次调用工具更快。

  4. 检查已红字的内容(可选)

    列出 /Users/me/documents/sensitive.pdf 的已应用红字
    

    这将显示哪些文本已被标记为红字。

  5. 如有需要,添加更多红字

    红字 ["Additional Text", "Another Secret"] 在 /Users/me/documents/sensitive.pdf
    

    工具将跳过已在第 3 步中红字的文本。

  6. 红字特定区域(可选)

    红字第 2 页上从 (50, 100) 到 (200, 120) 的区域
    
  7. 保存红字 PDF

    保存位于 /Users/me/documents/sensitive.pdf 的红字版本
    

    这将创建 /Users/me/documents/sensitive_redacted.pdf

  8. 关闭 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

为什么批量红字更好:

  • 减少工具调用开销
  • 只扫描一次 PDF
  • 在一次通过中应用所有红字
  • 自动防止重复红字
  • 提供所有操作的单一摘要

最佳实践: 首先收集所有要红字的文本,然后进行一次批量调用。

依赖项

  • FastMCP (>=2.12.0):用于构建 MCP 服务器的 Python 框架
  • PyMuPDF (>=1.24.0):PDF 操作库(导入为 fitz

架构

  • 内存存储:加载的 PDF 存储在内存中,以便在红字操作期间快速访问
  • 红字跟踪:服务器跟踪哪些文本已被红字,以防止重复工作
  • 批处理:可以在单次工具调用中红字多个文本,以提高性能
  • 延迟应用:红字注释被添加但不会立即应用,直到调用 save_redacted_pdf
  • 错误处理:使用 FastMCP 的 ToolError 将错误传播到 MCP 客户端
  • 上下文记录:所有操作都记录到 MCP 上下文中,以确保透明度

限制(当前版本)

  • 仅文本红字:此版本专注于文本红字。图像红字尚未实现。
  • 内存使用:加载的 PDF 存储在内存中。非常大的 PDF 可能会消耗大量内存。
  • 单会话:内存存储不会跨服务器重启持久化。

开发

运行测试

# 安装开发依赖项
uv pip install -e ".[dev]"

# 运行测试(当实现时)
pytest

代码结构

redact_mcp/
├── src/
│   └── redact_mcp/
│       ├── __init__.py      # 包初始化
│       └── server.py         # 主 MCP 服务器实现
├── pyproject.toml           # 包配置
└── README.md               # 本文档

许可证

Apache-2.0

贡献

欢迎贡献!请随时提交问题或拉取请求。

致谢