mcpField
M
MCP Security Sanitizer

MCP Security Sanitizer

远程服务
github.com/saurabhdrh安全05 天前更新
代码仓库

关于 MCP Security Sanitizer

MCP Security Sanitizer 是基于本地正则表达式的 MCP 服务和聊天客户端,可在消息发送给 Groq 前进行清理。它会遮盖选定的密钥和个人信息模式,但无法保证识别所有敏感内容。

主要功能

  1. 01遮盖常见 API 密钥和秘密
  2. 02隐藏邮箱及北美常见电话号码
  3. 03统计识别出的敏感模式
  4. 04每条非空消息发送前调用清理工具
  5. 05日志不记录工具内容

适用场景

  1. 01发送聊天提示前遮盖测试凭据
  2. 02从聊天输入中移除常见联系信息
  3. 03统计文本中识别出的风险

MCP 相关

本地 SSE MCP 服务提供遮盖常见秘密和个人信息、统计已识别风险的工具。客户端在将每条非空消息发送给 Groq 前调用两个遮盖工具。

配置

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

服务地址https://mcp-security-sanitizer-server.onrender.com/sse
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

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

工具

详细介绍

MCP 安全清理器

一个小型 MCP 服务和交互式 LangChain/Groq 聊天机器人。服务提供基于本地正则表达式的工具,用于遮蔽常见机密和个人身份信息(PII);客户端会在发送每条消息给大模型前进行清理。

重要限制: 正则匹配只能识别此处实现的模式,无法保证检测出所有机密或 PII 值。客户端保证在将每条非空用户消息传给 Groq 前,都会调用两个已配置的清理工具;系统提示词只是纵深防御措施,而非强制执行机制。除非添加适当的控制措施,并验证检测覆盖范围适用于你的环境,否则请勿发送受监管或高度敏感的数据。

架构

User input
   |
   v
Python client --MCP/SSE--> local regex scrubbers
   |                         1. mask_api_keys_and_secrets
   |                         2. mask_pii_data
   v
Sanitized text --> LangChain agent --> Groq

清理过程使用 MCP 服务中的本地 Python 正则表达式,不消耗任何 LLM 令牌。客户端会在调用 Agent 前同步调用清理工具,因此在此聊天流程中,原始输入不会发送给 Groq。MCP 传输仍然属于网络边界;此配置将服务绑定到环回地址(127.0.0.1),旨在用于本地开发。

日志拦截器会打印工具名称和参数字段名称,但会隐去所有参数和结果内容,因此不会记录未清理的输入或可能敏感的清理输出。

工具

工具行为
mask_api_keys_and_secrets(text)将 OpenAI 风格的 sk-... 密钥、Bearer 令牌,以及常见的命名密钥/机密/密码/令牌赋值遮蔽为 [REDACTED_SECRET]。
mask_pii_data(text)将电子邮件地址遮蔽为 [REDACTED_EMAIL],并将常见的北美电话号码格式遮蔽为 [REDACTED_PHONE]。
audit_text_for_risks(text)返回已识别的机密、电子邮件地址和电话号码数量。

要求

  • Python 3.11+
  • uv
  • Groq API 密钥

设置

在项目目录中解析依赖项、创建项目本地的 .venv,并写入或更新 uv.lock:

uv sync

使用 uv run 时,无需激活 .venv;它会自动选择项目环境。

在项目目录中(与 pyproject.toml 同级)创建 .env 文件:

GROQ_API_KEY=your_groq_api_key
GROQ_MODEL=openai/gpt-oss-120b

请勿将 .env 纳入版本控制。客户端启动时会加载此文件,并在连接 Groq 前检查是否已设置 GROQ_API_KEY。放在 .venv 内的 .env 也会被识别为备用位置,但推荐放在项目目录中,因为 .venv 是生成目录,可能会被删除并重新创建。GROQ_MODEL 是可选项;如果未设置,客户端会使用 openai/gpt-oss-120b。如果 Groq 提示模型不可用,请将 GROQ_MODEL 设置为你的账户已启用的模型 ID。API 密钥由 ChatGroq 使用,不会发送给 MCP 服务。

运行

在一个终端中启动 MCP 服务:

uv run server.py

服务使用 SSE 传输监听 http://127.0.0.1:8000,MCP 端点为 /sse。

服务启动截图

下图展示了服务启动后终端的预期状态。这是生成的示例,而非直接截取自你的机器;进程 ID 和日志格式可能因 FastMCP/Uvicorn 版本而异。

MCP 服务启动终端示意图

在第二个终端中启动交互式聊天机器人:

uv run client.py

或者,在每个终端中激活项目环境并直接运行 Python。例如,在 Windows PowerShell 中:

.\.venv\Scripts\Activate.ps1
python server.py

在第二个已激活的终端中:

.\.venv\Scripts\Activate.ps1
python client.py

输入 exit 或 quit 结束聊天。

可尝试的示例提示词

服务器和客户端都在运行后,将以下任一提示词粘贴到 客户端中。以下所有值均为合成测试数据;测试时请勿使用真实凭据 或个人信息。

电子邮件和电话

Write a friendly appointment reminder for [email protected] and ask them to
call (415) 555-0134 if they need to reschedule.

传递给 Agent 的文本应将这些值替换为:

[email protected]  -> [REDACTED_EMAIL]
(415) 555-0134    -> [REDACTED_PHONE]

API 密钥和命名密码

Explain why this demo credential should not be shared: sk-1234567890abcdef.
The test password is password=hunter2.

在消息发送给 Groq 之前,这两个凭据值都应替换为 [REDACTED_SECRET]。

Bearer 令牌和混合数据

Help me write a support note for [email protected]. The test phone is
212-555-0199 and the example authorization header is Bearer
abc123.def456.ghi789.

适用的工具会遮蔽电子邮件、电话号码和 Bearer 令牌。交互式客户端不会将清理后的文本打印到终端;它会记录运行了哪些工具,同时隐藏这些工具的参数和结果。上面的预期替换内容描述的是传递下去的内容,而不是控制台中显示的内容。

终端中看到的内容

在两个单独的终端中运行服务器和客户端。客户端连接到服务器后,服务器会持续运行。

终端 1 — MCP 服务(时间戳和进程 ID 各不相同):

INFO Starting MCP server 'MCP Security Sanitizer' with transport 'sse'
     on http://127.0.0.1:8000/sse
INFO:     Started server process [process-id]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

终端 2 — 客户端(示例清理器调用;以下虚假值仅用于测试):

Secure assistant ready. Type 'exit' or 'quit' to stop.

You: Contact [email protected] at (415) 555-0134; test key sk-1234567890abcdef.

[MCP] Calling mask_api_keys_and_secrets (arguments: text)
[MCP] mask_api_keys_and_secrets completed; result content withheld.

[MCP] Calling mask_pii_data (arguments: text)
[MCP] mask_pii_data completed; result content withheld.

Assistant: [The assistant's reply appears here after the sanitized message is
            sent to the configured Groq model.]

拦截器会有意隐藏终端中的工具参数和结果,因此 MCP 日志不会打印未清理的输入。传递给 Agent 的消息会进行以下替换:

Contact [REDACTED_EMAIL] at [REDACTED_PHONE]; test key [REDACTED_SECRET].

助手的回复取决于 Groq 模型,并非固定输出。下图展示了服务器启动和本地清理器调用。这是终端视图示例,不是原始桌面截图;清理器检查不会发起 Groq 请求。每次运行的启动时间戳和进程 ID 各不相同。

MCP 服务和清理器客户端终端输出示意图

配置和生产环境注意事项

  • 客户端需要这两个清理器工具。如果任一工具不可用或返回不受支持的结果,请求就会失败,而不会以未清理的形式发送。
  • 服务按要求使用 SSE。对于生产部署,请根据你的环境配置身份验证、TLS、网络限制、监控和生命周期管理。
  • 在依赖此服务满足合规要求之前,请更新正则表达式,并针对你所在组织实际使用的机密和 PII 格式添加测试。
  • uv run 无需手动激活即可管理并使用项目环境。如需直接运行 python server.py 或 python client.py,请先在该终端中激活 .venv。

评论

支持 Markdown

第一次接触 MCP?

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

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