MCP Conceal 是一个 MCP 代理,它可以在数据到达 Claude、ChatGPT 或 Gemini 等外部 AI 提供商之前,对个人身份信息(PII)进行伪匿名化处理。该工具通过伪匿名化而非简单的信息删除,保留了 AI 分析所需的语义和数据关系。例如,john.smith@acme.com
会被转换为 mike.wilson@techcorp.com
,在保护敏感信息的同时保持了数据结构。
安装用于基于大语言模型(LLM)的 PII 检测的 Ollama:
ollama pull llama3.2:3b
curl http://localhost:11434/api/version
创建一个最小化的 mcp-server-conceal.toml
配置文件:
[detection]
mode = "regex_llm"
[llm]
model = "llama3.2:3b"
endpoint = "http://localhost:11434"
所有可用的配置选项请参考配置部分。
作为代理运行:
mcp-server-conceal \
--target-command python3 \
--target-args "my-mcp-server.py" \
--config mcp-server-conceal.toml
访问 发布页面
下载适合你平台的二进制文件:
| 平台 | 二进制文件 |
|------|------|
| Linux x64 | mcp-server-conceal-linux-amd64
|
| macOS Intel | mcp-server-conceal-macos-amd64
|
| macOS Apple Silicon | mcp-server-conceal-macos-aarch64
|
| Windows x64 | mcp-server-conceal-windows-amd64.exe
|
赋予执行权限:chmod +x mcp-server-conceal-*
(Linux/macOS)
添加到系统路径:
mv mcp-server-conceal-* /usr/local/bin/mcp-server-conceal
git clone https://github.com/gbrigandi/mcp-server-conceal
cd mcp-server-conceal
cargo build --release
二进制文件位置:target/release/mcp-server-conceal
mcp-server-conceal \
--target-command python3 \
--target-args "my-mcp-server.py" \
--config mcp-server-conceal.toml
配置 Claude 桌面以代理 MCP 服务器:
{
"mcpServers": {
"database": {
"command": "mcp-server-conceal",
"args": [
"--target-command", "python3",
"--target-args", "database-server.py --host localhost",
"--config", "/path/to/mcp-server-conceal.toml"
],
"env": {
"DATABASE_URL": "postgresql://localhost/mydb"
}
}
}
}
为特定领域自定义检测提示: 模板位置:
~/.local/share/mcp-server-conceal/prompts/
~/Library/Application Support/com.mcp-server-conceal.mcp-server-conceal/prompts/
%LOCALAPPDATA%\\com\\mcp-server-conceal\\mcp-server-conceal\\data\\prompts\\
使用方法:
default.md
:mcp-server-conceal --target-command echo --target-args "test" --config mcp-server-conceal.toml
cp default.md healthcare.md
prompt_template = "healthcare"
将环境变量传递给目标进程:
mcp-server-conceal \
--target-command node \
--target-args "server.js" \
--target-cwd "/path/to/server" \
--target-env "DATABASE_URL=postgresql://localhost/mydb" \
--target-env "API_KEY=secret123" \
--config mcp-server-conceal.toml
完整的配置参考如下:
[detection]
mode = "regex_llm" # 检测策略:regex, llm, regex_llm
enabled = true
confidence_threshold = 0.8 # 检测置信度阈值 (0.0-1.0)
[detection.patterns]
email = "\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b"
phone = "\\b(?:\\+?1[-\\.\\s]?)?(?:\\(?[0-9]{3}\\)?[-\\.\\s]?)?[0-9]{3}[-\\.\\s]?[0-9]{4}\\b"
ssn = "\\b\\d{3}-\\d{2}-\\d{4}\\b"
credit_card = "\\b\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}[-\\s]?\\d{4}\\b"
ip_address = "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"
url = "https?://[^\\s/$.?#].[^\\s]*"
[faker]
locale = "en_US" # 用于生成逼真虚假 PII 数据的区域设置
seed = 12345 # 种子确保重启时匿名化的一致性
consistency = true # 相同的真实 PII 始终映射到相同的虚假数据
[mapping]
database_path = "mappings.db" # 存储真实到虚假映射的 SQLite 数据库
retention_days = 90 # N 天后删除旧的映射
[llm]
model = "llama3.2:3b" # 用于 PII 检测的 Ollama 模型
endpoint = "http://localhost:11434"
timeout_seconds = 180
prompt_template = "default" # PII 检测提示的模板
[llm_cache]
enabled = true # 缓存 LLM 检测结果以提高性能
database_path = "llm_cache.db"
max_text_length = 2000
检测设置:
confidence_threshold
:较低的值(0.6)可以捕获更多的 PII,但会增加误报率;较高的值(0.9)更精确,但可能会遗漏一些 PII。mode
:根据你的延迟和准确性要求选择(见下面的检测模式)Faker 设置:
locale
:使用 "en_US" 生成美国姓名/地址,"en_GB" 生成英国姓名/地址等,影响生成的虚假数据的真实性。seed
:在部署过程中保持一致,以确保相同的真实数据映射到相同的虚假数据。consistency
:始终设置为 true
以维护数据关系。映射设置:
retention_days
:在数据一致性和存储之间进行平衡。较短的保留期(30 天)可以减少存储,但可能会导致重复数据的匿名化不一致。database_path
:在生产环境中使用绝对路径,以避免数据库位置问题。根据你的性能要求和数据复杂度选择检测策略:
适用于生产环境 - 结合了速度和准确性:
mode = "regex_llm"
适用于高吞吐量、对延迟敏感的应用程序:
mode = "regex"
适用于复杂、非结构化数据:
mode = "llm"
MCP Conceal 的工作流程如下:
sequenceDiagram
participant C as AI 客户端 (Claude)
participant P as MCP Conceal
participant S as 你的 MCP 服务器
C->>P: 请求
P->>S: 请求
S->>P: 包含 PII 的响应
P->>P: PII 检测
P->>P: 伪匿名化
P->>P: 一致映射
P->>C: 清理后的响应
它通过伪匿名化而非简单的信息删除,保留了 AI 分析所需的语义和数据关系。例如,john.smith@acme.com
会被转换为 mike.wilson@techcorp.com
,在保护敏感信息的同时保持了数据结构。
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。