AnonyMCP
Data governance as a composable MCP layer.
PII detection, anonymization, classification, and audit logging for any AI workflow.
______________________________________________________________________
为什么存在
AI没有合规层。不是真的。
每当LLM读取文档、处理客户数据或生成摘要时,PII都可能在不知不觉中泄露。今天的治理是事后才想到的:最后才加上,由没有人阅读的政策文件强制执行,并依赖于人类捕捉机器错过的东西。如果你在GRC呆过一段时间,你就知道这个故事是如何结束的。
AnonyMCP将治理作为一个可组合的组件直接嵌入到AI工作流中 主控程序 服务器。而不是在事后问“我们编辑了吗?”,每一段文本都变得可分类、可审计和可保护 *之前* 它曾经达到一个模型。
这不仅仅是一个PII洗涤器。它是一个策略驱动的治理引擎,具有可配置的敏感级别、操作员规则、实时警报和完整的审计跟踪。合规团队、法律和工程部门最终可以查看同一个配置文件,并就发生的事情达成一致。
目标很简单:让负责任的数据处理成为阻力最小的路径。
为什么选择MCP层?
PII库存在。Presidio本身是坚实的。但是,当你的AI堆栈是五个服务、三个团队和一个没有人完全理解的RAG管道时,存储在仓库中的库并没有帮助。MCP为您提供了一个单一的治理检查点,任何AI工作流都可以在没有自定义集成的情况下调用该检查点。Claude Desktop、LangChain代理、内部工具,MCP可以使用它。您无需修改现有代码。您添加了一个工具调用。
这种可组合性是关键。治理不再是每个团队编写自己的PII处理(或者更有可能的是,不编写),而是成为一个共享服务,有一个策略文件、一个审计跟踪和一个地方来回答“这些数据发生了什么?”
用例
- LLM前筛查 -在PII进入模型上下文窗口之前,从用户输入中删除PII
- LLM后过滤 -捕获PII——生成的响应中的模型泄漏
- RAG管道治理 -按敏感度级别对检索到的文档进行分类和编辑
- CI/CD门 -部署前扫描提示模板以查找硬编码的PII
- 监管证据 -将审计日志导出为合规性工件,而不是编写无人阅读的策略文档
看 现实世界场景 下面详细介绍了企业将如何实际部署它。
______________________________________________________________________
特性
- 检测 -使用置信度评分识别50多种PII实体类型(电子邮件、SSN、信用卡、姓名、医疗记录等)
- 匿名化 -使用可配置的每个实体运算符替换、编辑、屏蔽、哈希或加密PII
- 分类 -将文本分类为
PUBLIC/INTERNAL/CONFIDENTIAL/RESTRICTED - 审计 -使用导出器(JSONL文件、stdout、webhook)对每个治理操作进行结构化日志记录
- 策略驱动 -基于YAML的治理策略,具有每个实体的运算符规则和警报阈值
- MCP本地 -适用于任何MCP客户端:Claude Desktop、定制代理、RAG管道或您自己的工具
______________________________________________________________________
建筑
______________________________________________________________________
快速入门(本地/开发)
先决条件
- Python 3.11+
- 紫外线 (推荐)或pip
安装
git clone https://github.com/frankkyazze9/anonymcp.git
cd anonymcp
uv sync # installs all deps including the spaCy model探索CLI
anonymcp --helpHTTP服务器(用于管道和集成)
# Start the server
anonymcp --transport streamable-http --port 8100
# Verify it's running
curl http://localhost:8100/health
# → {"status":"ok","policy":"default","policy_version":"1.0"}Claude Desktop(用于原型制作)
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"anonymcp": {
"command": "uv",
"args": ["--directory", "/path/to/anonymcp", "run", "anonymcp"]
}
}
}重新启动克劳德桌面。您将看到6个新工具。
______________________________________________________________________
现实世界场景
这些不是假设。AnonyMCP就是为这些部署而设计的。
健康保险支持聊天机器人
一家中型健康保险公司有一个基于LLM的客户支持聊天机器人。成员键入消息,如“我对程序代码99213的索赔被拒绝,我的SSN是452-29-1098,我的成员ID是HX-8827431,你能检查状态吗?”聊天机器人将其输入RAG管道,该管道从索赔数据库和保单文件中提取。
问题。 他们的合规团队标记了原始成员消息,包括SSN、诊断代码和成员ID,这些消息未经编辑就进入了LLM上下文窗口。根据HIPAA,如果LLM提供商记录或保留了输入,则这是一个可报告的风险敞口。法律团队希望得到证据,证明PII是在模型推理之前而不是之后被剥离的。
实施。 AnonyMCP在Kubernetes集群中作为sidecar运行,使用 streamable-http 使用mTLS(他们的基础设施已经使用基于证书的服务网格认证)。LangChain编排层在LLM调用之前有一个新步骤:它将原始用户消息发送到 scan_and_protect响应返回时,SSN已编辑,成员ID替换为占位符,分类为 CONFIDENTIALLLM看到干净的文本。编排层单独使用原始成员ID查询索赔数据库,因此查找仍然有效。
管道代理获得 read-角色API密钥。合规团队获得 admin-角色键并运行每周脚本调用 get_audit_log 过滤到 classification=CONFIDENTIAL 为其HIPAA合规粘合剂提供证据。
基于人工智能摘要的法律文件审查
一家制造公司的公司法律部门使用内部人工智能工具来汇总合同、雇佣协议和诉讼文件。律师上传PDF文件,系统提取文本,法学硕士生成条款摘要和风险标志。每天大约有40名律师和律师助理使用它。
问题。 雇佣协议包含员工姓名、工资、家庭住址,有时还包括医疗住宿细节。诉讼文件包含证人姓名、证词内容和保密协议下的财务数据。总法律顾问不希望这些信息流向内部托管的法学硕士,即使没有分类和处理记录。他们还需要根据敏感性进行不同的处理:公共合同样板可以直接通过,但员工健康信息需要完全编辑。
实施。 AnonyMCP作为Docker Compose服务在法律团队的内部服务器上运行。不需要TLS,因为它已打开 127.0.0.1 在公司VPN之后,但他们启用API密钥验证,因为服务器承载其他服务。文档管道调用 classify_sensitivity 首先在每个提取的文本块上。块分类为 PUBLIC 或 INTERNAL 按原样通过LLM。 CONFIDENTIAL 大块通过 anonymize_text,它取代了名字,掩盖了财务数字。 RESTRICTED 块(例如,包含医疗设施)被完全阻止:实体类型被记录下来,但文本永远不会到达模型。
YAML策略文件由法律部门和IT部门共同编写。法律部门定义了哪些实体类型映射到哪些敏感层(他们添加了 SALARY 和 MEDICAL_CONDITION 到 HIGH 列表)。IT管理部署。当策略发生变化时,法律部门会编辑YAML,IT部门会滚动部署,审计日志会捕获具有新旧版本号的策略更改事件。
基于AI生成销售洞察的CRM平台
一家B2B SaaS公司销售CRM平台。他们推出了“AI Insights”功能:该系统分析通话记录、电子邮件线程和交易记录,然后生成交易风险评分、下一步建议和情绪摘要。该功能使用外部LLM API。
问题。 他们的CRM数据包含来自客户客户的个人身份信息:CRM中的最终联系人。姓名、电话号码、电子邮件地址,有时还有“与首席财务官交谈时,他提到他妻子的健康问题正在影响时间表”等注释。企业前景(银行、医疗保健公司)在安全审查期间提出了尖锐的问题:“我们的CRM数据是否会发送给第三方LLM?有哪些个人身份信息控制措施?你能证明吗?”如果没有具体的答案,交易就会停滞不前。
实施。 AnonyMCP在应用程序负载平衡器后面的AWS基础架构中作为共享服务运行。TLS终止于ALB,ALB和AnonyMCP实例之间的mTLS。两个副本可用。每次AI Insights功能处理CRM记录时,文本都会通过 scan_and_protect 在离开它们的基础设施去往外部LLM API之前。治理策略针对其用例进行了调整: PERSON 和 PHONE_NUMBER 用通用令牌替换, EMAIL_ADDRESS 戴上口罩,任何与健康相关的东西都会被完全编辑。LLM仍然有足够的背景来生成有用的见解(“与首席财务官交谈,\[已编辑\]正在影响时间表”足以标记交易风险),但实际的PII从未越过第三方提供商。
业务解锁是审计跟踪。当企业潜在客户的安全团队发送他们的供应商问卷,询问“描述您对AI功能的数据处理”时,产品团队会指向实际的审计日志,显示每个LLM调用都是通过治理层预处理的,包括实体计数、分类级别和策略版本。这使得为期三周的安全审查变成了一项检查。他们还在应用程序中展示了审计数据的轻量级版本,这是一个仪表板,显示CRM管理员在他们的帐户中检测到并匿名化了多少PII实体,这成为了一个卖点,而不是一种负担。
______________________________________________________________________
企业部署
老实说:生产AI治理不在Claude Desktop上运行。以下是AnonyMCP如何融入实际基础设施。
HTTP服务(最常见)
将AnonyMCP作为独立的HTTP服务运行。你的AI编排层(LangChain、LlamaIdex、自定义管道等)像其他微服务一样通过网络调用它。
# With TLS and auth (production)
ANONYMCP_TRANSPORT=streamable-http \
ANONYMCP_TLS_CERTFILE=/etc/ssl/certs/anonymcp.pem \
ANONYMCP_TLS_KEYFILE=/etc/ssl/private/anonymcp-key.pem \
ANONYMCP_REQUIRE_AUTH=true \
ANONYMCP_API_KEYS=your-secret-key \
uv run anonymcp
# Docker
cd docker && docker compose up --build它是一个无状态的HTTP服务器,因此横向扩展很简单。将其放在负载均衡器或服务网格后面,并将MCP客户端SDK指向 https://anonymcp-service:8100/mcp.
Kubernetes/Helm
在集群中部署为sidecar或独立服务:
# k8s deployment (simplified)
apiVersion: apps/v1
kind: Deployment
metadata:
name: anonymcp
spec:
replicas: 2
template:
spec:
containers:
- name: anonymcp
image: anonymcp:latest
ports:
- containerPort: 8100
env:
- name: ANONYMCP_TRANSPORT
value: "streamable-http"
- name: ANONYMCP_POLICY_PATH
value: "/config/policy.yaml"
volumeMounts:
- name: policy-config
mountPath: /config
volumes:
- name: policy-config
configMap:
name: anonymcp-policy将您的治理策略存储在ConfigMap或Secret中。当策略更改时,滚动部署。通过热交换 manage_policy 该工具也可以使用,但GitOps在审计方面更干净。
Python SDK集成
如果MCP觉得对您的用例来说过于苛刻,您可以直接导入引擎:
from anonymcp.engine.detector import TextDetector
from anonymcp.engine.anonymizer import TextAnonymizer
from anonymcp.engine.classifier import TextClassifier
from anonymcp.policy.engine import PolicyEngine
policy_engine = PolicyEngine.from_file("policies/default.yaml")
detector = TextDetector()
anonymizer = TextAnonymizer(policy=policy_engine.policy)
classifier = TextClassifier(policy_engine=policy_engine)
# Use in your pipeline
result = detector.detect("Customer SSN is 219-09-9999")
protected = anonymizer.anonymize(result.raw_results)当您在现有的Python服务中嵌入治理检查并且不需要MCP协议层时,这很有用。
CI/CD管道闸门
运行AnonyMCP作为部署前检查,在发货前扫描提示、模板或LLM输出:
# In your CI pipeline
echo "$PROMPT_TEMPLATE" | uv run python -c "
from anonymcp.engine.detector import TextDetector
import sys
detector = TextDetector()
result = detector.detect(sys.stdin.read())
if result.entities_found > 0:
print(f'BLOCKED: {result.entities_found} PII entities found')
sys.exit(1)
print('CLEAN')
"______________________________________________________________________
安全
通过网络以明文形式发送PII的治理工具比无用还要糟糕。这是一种责任。AnonyMCP内置TLS和API密钥身份验证,因此默认值是安全的,任何缺口都是实现者的配置问题,而不是我们的配置问题。
TLS(传输加密)
提供证书和密钥路径。AnonyMCP通过uvicorn自动配置HTTPS:
ANONYMCP_TRANSPORT=streamable-http \
ANONYMCP_TLS_CERTFILE=/etc/ssl/certs/anonymcp.pem \
ANONYMCP_TLS_KEYFILE=/etc/ssl/private/anonymcp-key.pem \
uv run anonymcp如果绑定到网络接口(0.0.0.0)如果未配置TLS,AnonyMCP会记录警告。仅本地主机部署(127.0.0.1)跳过警告,因为交通永远不会离开盒子。
双向TLS(mTLS)
对于需要验证的零信任环境 *客户端* 也:
ANONYMCP_TLS_CA_CERTS=/etc/ssl/certs/client-ca.pem这将启用客户端证书验证。只有出示由CA签名的证书的客户端才能连接。
API密钥验证
TLS对电线进行加密。身份验证控制谁可以进入:
ANONYMCP_REQUIRE_AUTH=true
ANONYMCP_API_KEYS=pipeline-key:read,admin-key:admin每个HTTP请求都必须包含 Authorization: Bearer .密钥以恒定时间进行比较,以防止定时攻击。丢失或无效的密钥将在审计日志中获得401/403和警告。
基于角色的访问控制
每个API键都分配了一个角色,该角色控制它可以调用哪些工具:
| 角色 | 工具 | 用例 |
|---|---|---|
read | analyze_text、匿名文本、分类敏感性、扫描和保护 | 管道代理、应用程序集成 |
admin | 所有工具,包括get_audit_log和manage_policy | 安全团队、CI/CD、运维工具 |
没有角色后缀的键(例如。 my-key 而不是 my-key:read)默认为 admin 为了向后兼容性。stdio传输(Claude Desktop)始终以管理员身份运行,因为它是一个本地单用户上下文。
安全模型摘要
| 图层 | 功能 | 配置 |
|---|---|---|
| TLS | 加密传输中的数据 | ANONYMCP_TLS_CERTFILE, ANONYMCP_TLS_KEYFILE |
| mTLS | 通过证书验证客户端身份 | ANONYMCP_TLS_CA_CERTS |
| API密钥 | 应用程序级访问控制 | ANONYMCP_REQUIRE_AUTH, ANONYMCP_API_KEYS |
| RBAC | 按键角色作用域(读取与管理) | 中的角色标记 ANONYMCP_API_KEYS |
| 策略引擎 | 控制编辑的内容和方式 | ANONYMCP_POLICY_PATH |
| 审计日志 | 记录每一项治理行动 | ANONYMCP_AUDIT_ENABLED |
stdio传输(Claude Desktop,本地开发)不需要任何这些,因为流量永远不会到达网络。
有关完整的威胁模型、强化指南和已知限制,请参阅 安全.md.
______________________________________________________________________
MCP工具
| 工具 | 说明 |
|---|---|
analyze_text | 使用置信度分数检测和定位PII实体 |
anonymize_text | 使用可配置的运算符(替换、编校、掩码、哈希、加密)对PII进行匿名化 |
classify_sensitivity | 将文本分类为公共/内部/机密/受限 |
scan_and_protect | 在一次通话中全面检测、分类和匿名化管道 |
get_audit_log | 使用过滤器查询审计记录(操作、分类、时间范围) |
manage_policy | 查看、列出实体类型或热交换活动治理策略 |
______________________________________________________________________
治理政策
策略是控制AnonyMCP如何分类、匿名和警报的YAML文件。看 policies/default.yaml 对于完整的模式。
entity_sensitivity:
HIGH: [US_SSN, CREDIT_CARD, IBAN_CODE, US_BANK_NUMBER]
MEDIUM: [EMAIL_ADDRESS, PHONE_NUMBER, PERSON, US_PASSPORT]
LOW: [URL, DATE_TIME, IP_ADDRESS]
anonymization:
HIGH:
operator: redact
MEDIUM:
operator: replace
params:
new_value: "[{entity_type}]"
LOW:
operator: mask
params:
masking_char: "*"
chars_to_mask: 4
from_end: false______________________________________________________________________
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
ANONYMCP_TRANSPORT | stdio | stdio 或 streamable-http |
ANONYMCP_POLICY_PATH | ./policies/default.yaml | 治理政策之路 |
ANONYMCP_SCORE_THRESHOLD | 0.4 | 最低PII检测置信度 |
ANONYMCP_AUDIT_ENABLED | true | 启用审核日志记录 |
ANONYMCP_HOST | 0.0.0.0 | HTTP服务器绑定地址 |
ANONYMCP_PORT | 8100 | HTTP服务器端口 |
ANONYMCP_TLS_CERTFILE | none | TLS证书的路径(启用HTTPS) |
ANONYMCP_TLS_KEYFILE | none | TLS私钥的路径 |
ANONYMCP_TLS_CA_CERTS | none | CA证书用于双向TLS(客户端验证) |
ANONYMCP_REQUIRE_AUTH | false | HTTP请求需要API密钥 |
ANONYMCP_API_KEYS | none | 逗号分隔的有效API密钥 |
______________________________________________________________________
这是给谁的?
法律和合规团队
每个检测、分类和匿名操作都会记录时间戳、实体类型、分类级别和策略版本。这是你的证据线索。治理策略是在人类可读的YAML中定义的,因此法律部门可以在不要求工程部门翻译的情况下审查和批准规则。分类级别(从公开到限制)直接映射到您已经用于GDPR、HIPAA和PCI-DSS的标准数据分类框架。
面向首席信息安全官和安全领导者
AnonyMCP是一种安全控制,位于数据路径中并执行敏感策略 *之前* 数据到达LLM或下游系统。警报规则在高严重性分类或实体计数阈值时触发,并通过webhooks推送到您现有的事件响应。 完全自我托管。没有数据离开您的基础设施。 策略引擎支持热交换,因此无需重新启动服务即可更新治理规则。
面向隐私工程师和开发人员
插入MCP服务器,您可以在几分钟内连接到任何AI工作流。将微软Presidio(基于NLP的行业标准PII引擎)包裹在一个干净的工具界面后面,该界面有六个可组合的操作。使用 scan_and_protect 对于单调用管道或链 analyze_text 然后 classify_sensitivity 然后 anonymize_text 用于粒度控制。自定义识别器、每个实体运算符覆盖和YAML策略文件为您提供了完全的灵活性,而无需触及核心代码。
______________________________________________________________________
发展
# Install dev dependencies
uv sync --dev
# Run tests (67 tests)
uv run pytest tests/ -v
# Lint
uv run ruff check src/ tests/
# Type check
uv run mypy src/anonymcp/______________________________________________________________________
路线图
- \[\]多语言PII检测
- \[\]图像和文档PII编辑(OCR管道)
- \[\]结构化数据扫描(JSON、CSV、数据库)
- \[\]合规预设政策(HIPAA、PCI-DSS、GDPR)
- \[\]普罗米修斯指标和OpenTetry导出器
- \[\]自定义识别器插件系统
- \[\]用于审计日志可视化的Web仪表板
- \[\]大文档集的批处理模式
______________________________________________________________________
贡献
欢迎捐款。先打开一个问题,讨论你想改变什么。看 贡献.md 作为指导方针。
许可证
Apache 2.0。看 许可证.
______________________________________________________________________
Built by Frank Kyazze
