内容
# 匿名化MCP
<!-- mcp-name: io.github.Buggy1111/anonymize-mcp -->
[](https://github.com/Buggy1111/anonymize-mcp/actions/workflows/ci.yml)
[](https://pypi.org/project/anonymize-mcp/)
[](https://pypi.org/project/anonymize-mcp/)
[](LICENSE)
MCP服务器,封装NLP工具 [LINDAT](https://lindat.mff.cuni.cz/) / [ÚFAL MFF UK](https://ufal.mff.cuni.cz/) — **多语言NER + 形态学(35种语言自动检测)**,**生产级匿名化,支持80+ PII模式,涵盖9个行业 + 国际覆盖(US/UK/DE/FR/IT/ES/PL/RU/IN,欧盟增值税28个国家,IBAN 30+ 个国家,加密货币,API令牌)**,支持8种语言翻译(17个直接对和自动EN-pivot)。
> 🔒 **新增(v0.10.0):[zero-egress本地模式](#zero-egress--on-prem-模式-)** — 完全离线匿名化,无文本离开机器。适用于GDPR / 法律 / 医疗数据。启用:`ANONYMIZE_MCP_LOCAL=1`。
> 🌐 **不想安装?试试在线免费版本 → [anonymizace.js.org](https://anonymizace.js.org)** — 匿名化、NER、形态学、校正和翻译,直接在浏览器中。配套网站。
> **仅限非商业使用**。NameTag和UDPipe模型在CC BY-NC-SA下。LINDAT API免费用于学术和个人使用。商业部署请联系工具作者和`ufal@ufal.mff.cuni.cz`。
> **非官方社区项目** — 由独立开发者运行和维护;封装公共LINDAT API。历史名称:`ufal-mcp` → `wrapper-mcp`(v0.8.0,根据ÚFAL请求)→ **`anonymize-mcp`**(v0.9.0)。如果您已安装废弃的`wrapper-mcp`软件包,请升级到`pip install anonymize-mcp` — 这是同一个项目。
## 功能
| 工具 | 后端 | 用途 |
|------|---------|--------|
| `extract_entities` | [NameTag 3](https://ufal.mff.cuni.cz/nametag/3) | **CZ**(丰富CNEC 2.0标签集)+ **34种其他语言**(UNER PER/ORG/LOC)自动检测 |
| `anonymize` | [MasKIT](https://ufal.mff.cuni.cz/maskit) + NameTag | **生产级伪匿名化**:正则表达式预处理 + **80+ PII模式** — CZ + 国际(IBAN 30+ 个国家,欧盟增值税28个国家,US SSN/EIN,DE/UK/FR/IT/ES/PL/RU/IN ID,加密货币,API令牌)。可选`placeholder_mode`(确定性OSOBA1/MESTO1)。 **🔒 Zero-egress本地模式** (`ANONYMIZE_MCP_LOCAL=1`) — 完全离线,[见下](#zero-egress--on-prem-模式-)。 |
| `analyze_morphology` | [UDPipe](https://ufal.mff.cuni.cz/udpipe) | 分词、词干提取、词性标注、依赖关系解析 — **自动检测35种语言** |
| `check_readability` | [PONK](https://ufal.mff.cuni.cz/ponk) | CZ可读性 — 4个特征集:指标 + 规则 + 词汇惊奇度 + 语音行为 |
| `correct_text` | [校正工具](https://ufal.mff.cuni.cz/korektor) | CZ拼写检查 + 自动添加/删除变音符号 |
| `translate_text` | [Charles翻译器](https://lindat.mff.cuni.cz/services/translation/) | 8种语言翻译(CZ/EN/FR/DE/PL/RU/UK/HI),17个直接对 + 自动EN-pivot |
### 支持语言 — NER + 形态学(35种语言,自动检测)
- 🇨🇿 CZ · 🇸🇰 SK · 🇬🇧 EN · 🇩🇪 DE · 🇫🇷 FR · 🇮🇹 IT · 🇪🇸 ES · 🇵🇹 PT · 🇳🇱 NL
- 🇵🇱 PL · 🇭🇺 HU · 🇷🇴 RO · 🇸🇮 SL · 🇧🇬 BG · 🇬🇷 EL · 🇭🇷 HR · 🇷🇸 SR · 🇺🇦 UK · 🇷🇺 RU
- 🇫🇮 FI · 🇱🇹 LT · 🇱🇻 LV · 🇪🇪 ET · 🇩🇰 DA · 🇸🇪 SV · 🇳🇴 NO (Bokmål + Nynorsk)
- 🇨🇳 ZH · 🇦🇪 AR · 🇹🇷 TR · 🇻🇳 VI · 🇮🇳 HI · 🇮🇱 HE · 🇯🇵 JA · 🇰🇷 KO · 🇹🇭 TH
## 适用场景(行业 + 用例)
在9个行业中经过压力测试,涵盖 **12.7KB跨行业文件** — 结果 **94/94个唯一PII被捕获**,一次调用。 此外还有 **国际语料库17/17**(US/UK/DE/FR/IT/ES/PL/RU/IN + 加密货币 + 学术 + 车队):
| 行业 | 用例 | PII类型 |
|---|---|---|
| ⚖️ **法律** | 匿名化文件以供AI审查,GDPR合规 | 姓名,身份证号码,地址,案件编号,银行账号,护照号码 |
| 🏥 **医疗** | 研究用病历,住院统计 | 身份证号码,保险号码,医生联系方式 — 保留MKN-10临床代码 |
| 🎓 **学术** | 同行评审,出版引用 | ORCID,研究人员ID,合作者邮箱,资助 |
| 💳 **银行** | 合规,AI审计,报告 | 账号,卡号,银行账号,交易流水号 |
| 🏠 **房地产** | 匿名化房产证,合同 | 房产证号,土地号,业主 + 身份证号码 + 地址 |
| 🚗 **保险** | 赔偿处理,AI分析 | 车辆识别号,车牌号码,保单号码,驾驶执照 |
| 📜 **公证** | 公证记录以供AI总结 | 公证号码,公证人联系方式,案件编号 |
| 📚 **教务** | 学习证明,学生统计 | 学号,学生编号,ISIC,学生联系方式 |
| 🔬 **研究** | 研究语料库匿名化以确保伦理 | 以上所有 + 保留临床/法律代码 |
此外,35种语言支持多语言栈(legal docs SK/EN/DE/PL/UK/RU/FR/HI/ES/IT/AR + 24种其他语言测试过NER + 形态学,自动EN-pivot翻译)。 **CJK姓名(中文/日文)从v0.8.4开始被屏蔽**。
### 行业 #10 — 国际
| 用例 | PII类型 |
|---|---|
| 🌍 **US/UK/DE/FR/IT/ES/PL/RU/IN文件** | SSN,NIN,税务ID,NIR,Codice Fiscale,DNI,PESEL,Aadhaar,PAN,护照(8种语言)— 自动,无`lang=`参数 |
| 💰 **加密货币/Web3外联,智能合约** | Bitcoin(Legacy/P2SH/Bech32/Taproot),Ethereum,Monero,XRP,TRON |
| 🔐 **DevOps日志/API密钥检测** | OpenAI,Anthropic,OpenRouter,GitHub PAT,AWS,Google,Slack,Stripe令牌 |
| 🏢 **跨境B2B** | 外国公司(SARL/SAS/GmbH/AG/Ltd/LLC/Inc/SpA/SL/Sp. z o.o.)+ 欧盟增值税(28个国家)+ IBAN(30+ 个国家) |
## 安装
从PyPI(推荐):
```bash
pip install anonymize-mcp
```
或从源码:
```bash
git clone https://github.com/Buggy1111/anonymize-mcp.git
cd anonymize-mcp
pip install -e .
```
## 在MCP客户端注册
`anonymize-mcp`是一个标准的 [MCP](https://modelcontextprotocol.io) 服务器(stdio传输)。注册并重启客户端后,您可以使用6种工具:
- `mcp__anonymize__extract_entities` — 多语言NER(35种语言自动检测)
- `mcp__anonymize__anonymize` — 生产级伪匿名化(CZ正则表达式预处理 + 停止列表 + 占位符模式)
- `mcp__anonymize__analyze_morphology` — 35种语言形态学(UDPipe 961个模型)
- `mcp__anonymize__check_readability` — CZ可读性(4个特征集)
- `mcp__anonymize__correct_text` — CZ拼写检查 + 变音符号
- `mcp__anonymize__translate_text` — 8种语言翻译
### Claude 代码(终端)
```bash
claude mcp add anonymize -s user -- anonymize-mcp
```
### Claude 桌面版
**旧版Claude Desktop**(Mac `.app`来自anthropic.com,Windows `.exe`安装程序):
编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`(Mac)
或 `%APPDATA%\Claude\claude_desktop_config.json`(Windows):
```json
{
"mcpServers": {
"anonymize": {
"command": "anonymize-mcp"
}
}
}
```
**新版Claude Desktop**(Microsoft Store / appx package,“Cowork” UI):截至 05/2026仅支持 **远程MCP服务器通过HTTP URL**。 像`anonymize-mcp`这样的本地stdio MCP服务器 **无法添加**。
> 在Windows上,`anonymize-mcp.exe`可能不在PATH中(通常为`C:\Python\Python3xx\Scripts\anonymize-mcp.exe`)。在配置中请使用完整路径。
### OpenAI Codex CLI _(作者未测试)_
编辑 `~/.codex/config.toml`:
```toml
[mcp_servers.anonymize]
command = "anonymize-mcp"
```
### Cursor _(作者未测试)_
编辑 `.cursor/mcp.json`在项目中(或全局 `~/.cursor/mcp.json`):
```json
{
"mcpServers": {
"anonymize": {
"command": "anonymize-mcp"
}
}
}
```
### Windsurf, Cline, Zed, VS Code Copilot Agent _(作者未测试)_
相同的`mcpServers` JSON格式 — 参见客户端文档。 `command: "anonymize-mcp"`(或绝对路径)。
## 使用
在Claude Code中,只需输入:
> 匿名化来自 `document.md`的文件,启用placeholder_mode并返回干净的版本。
> 从文档中提取所有人,法院和案件编号。
> 客户提交了乌克兰文件 — 将其翻译成中文,提取实体并分析形态学。
> 使用PONK运行我的提交 — 返回激活的语法规则。
> 客户给我发送没有变音符号的文本 — 使用校正器进行补充。
## 作者
`anonymize-mcp`由 **Michal Bürgermeister** [@Buggy1111](https://github.com/Buggy1111),michalbugy12@gmail.com)编写 — 来自CR的独立开发者。
感谢ÚFAL MFF UK的优秀工具 — 没有NameTag,MasKIT,UDPipe,PONK,校正器和Charles翻译器,就不会有这个MCP服务器。感谢ÚFAL团队(Jana Straková,Milan Straka,Jiří Mírovský,Barbora Hladká,Silvie Cinková等)多年对生产级NLP工具的工作。
在 [github.com/Buggy1111/anonymize-mcp](https://github.com/Buggy1111/anonymize-mcp)上欢迎提交issues,PR和反馈。
## 许可证
该工具遵循 **MIT许可证**(见 `LICENSE`)。
它下面有四个独立的工具,每个工具都有自己的许可证:
| 组件 | 作者 | 软件许可证 | 模型许可证 |
|------------|--------|------------------|----------------|
| **NameTag 3** | Jana Straková,Milan Straka | MPL 2.0 | **CC BY-NC-SA**(非商业) |
| **UDPipe** | Milan Straka,Jana Straková | MPL 2.0 | **CC BY-NC-SA**(非商业) |
| **MasKIT** | Jiří Mírovský,Barbora Hladká | MPL 2.0 | (基于规则) |
| **PONK** | Jiří Mírovský,Silvie Cinková,Barbora Hladká + 应用程序作者:Ivan Kraus,Arnold Stanovský,Jan Černý,Ivana Kvapilíková,Tomáš Polák,Silvie Cinková | MPL 2.0 | (基于规则 + UDPipe → CC BY-NC-SA) |
**重要提示**:该工具不调用本地安装,而是调用 **公共API服务**(`lindat.mff.cuni.cz`,`quest.ms.mff.cuni.cz`)。 免费用于学术和个人使用。批量/付费/生产流量需要作者和API提供者的明确同意。
## 安全
- **在云模式下,您将文本发送到外部服务器**(`quest.ms.mff.cuni.cz`,`lindat.mff.cuni.cz)。 **首先**在发送敏感数据之前 **先运行`anonymize`**。
- 完全 **私有处理** 使用 **零 egress本地模式**(下面) — 无文本离开您的机器。
## 零 egress / 本地模式 🔒
匿名化 **完全本地** - 没有外部API调用,没有文本离开机器。适用于GDPR / 法律 / 医疗数据,其中敏感内容不得离开。
```bash
pip install "anonymize-mcp[local]" # 添加ufal.nametag(本地NER)
python -m anonymize_mcp.local_backend # 一次性下载模型(~31 MB)
ANONYMIZE_MCP_LOCAL=1 anonymize-mcp # 在本地模式下启动服务器
```
在Claude Code中,只需在注册时添加env变量:```bash
claude mcp add anonymize -s user -e ANONYMIZE_MCP_LOCAL=1 -- anonymize-mcp
```
**工作原理:`anonymize` 跳过MasKIT API并匿名化本地regex预处理(80+ 模式)+ NameTag NER在进程中(`ufal.nametag` + CNEC 2.0 模型)。姓名,城市,机构,电话号码,IČO,RČ,案件编号等将被替换为占位符(`OSOBA1`,`MESTO1`,`TELEFON1`...),无需网络调用。
**配置(env):**
| 变量 | 含义 |
| --- | --- |
| `ANONYMIZE_MCP_LOCAL=1` | 启用零 egress 模式 |
| `ANONYMIZE_MCP_NAMETAG_MODEL=/path/to/model.ner` | 自定义模型路径(否则自动下载到 `~/.cache/anonymize-mcp/models/`) |
| `ANONYMIZE_MCP_NO_DOWNLOAD=1` | 禁止自动下载(您必须手动提供模型) |
| `ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD=1` | 允许在本地模式下使用云工具(否则拒绝,见下) |
**本地模式下内容是什么(v0.10.1)**:`anonymize` **和`extract_entities`** 完全离线运行(本地 CNEC 2.0 NER;多语言模型需要 API,会有警告提示)。其他工具(`translate_text`,`correct_text`,`check_readability`,`analyze_morphology`)会发送文本到ÚFAL API — 因此在零 egress 模式下 **被拒绝并显示解释性错误**;您可以有意识地允许使用 `ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD=1`。
**强化设置(air-gapped / 审计机器)**:提前下载模型(`python -m anonymize_mcp.local_backend` — 校验 SHA-256),并使用 `ANONYMIZE_MCP_NO_DOWNLOAD=1` 启动服务器 — 然后该进程永远不会打开任何网络连接。
**权衡:** 本地 NameTag 1(CNEC 2.0,CC BY-NC-SA,**非商业**)比云 NameTag 3 简单 — 但 **没有网络 egress**。
## 使用的API(6个LINDAT REST终结点)
- `POST https://lindat.mff.cuni.cz/services/nametag/api/recognize` — NER
- `POST https://lindat.mff.cuni.cz/services/udpipe/api/process` — 形态学
- `POST https://lindat.mff.cuni.cz/services/korektor/api/correct` — 拼写检查
- `POST https://lindat.mff.cuni.cz/services/translation/api/v2/models/{src-tgt}` — 翻译
- `POST https://quest.ms.mff.cuni.cz/maskit/api/process` — 匿名化
- `POST https://quest.ms.mff.cuni.cz/ponk/api/process` — 可读性
## 开发
```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
# 测试(272个离线测试;联网测试:pytest -m network)
pip install -e ".[test]"
pytest -m "not network"
```
## 发布流程
PyPI发布通过 [Trusted Publisher (OIDC)](https://docs.pypi.org/trusted-publishers/) 自动进行。
```bash
# 在pyproject.toml和src/anonymize_mcp/__init__.py中更新版本号
git commit -am "release: v0.X.0"
git tag v0.X.0
git push origin main --tags
```