{
  "markdown": "# anonymize-mcp\n\n<!-- mcp-name: io.github.Buggy1111/anonymize-mcp -->\n\n[![CI](https://github.com/Buggy1111/anonymize-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Buggy1111/anonymize-mcp/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/anonymize-mcp.svg)](https://pypi.org/project/anonymize-mcp/)\n[![Python](https://img.shields.io/pypi/pyversions/anonymize-mcp.svg)](https://pypi.org/project/anonymize-mcp/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nMCP server obalující NLP nástroje [LINDAT](https://lindat.mff.cuni.cz/) / [ÚFAL MFF UK](https://ufal.mff.cuni.cz/) — **multilingvální NER + morfologie (35 jazyků auto-detect)**, **production-grade anonymizace s 80+ PII patterny napříč 9 sektory + mezinárodním pokrytím (US/UK/DE/FR/IT/ES/PL/RU/IN, EU VAT 28 zemí, IBAN 30+ zemí, crypto, API tokeny)**, překlad mezi 8 jazyky (17 přímých párů + auto EN-pivot), čitelnost a korektura.\n\n> 🔒 **Nově (v0.10.0): [zero-egress lokální mód](#zero-egress--on-prem-mód-)** — plně offline anonymizace, žádný text neopustí stroj. Pro GDPR / právní / zdravotnická data. Zapnutí: `ANONYMIZE_MCP_LOCAL=1`.\n\n> 🌐 **Nechcete nic instalovat? Vyzkoušejte to online zdarma → [anonymizace.js.org](https://anonymizace.js.org)** — anonymizace, NER, morfologie, korektor a překlad češtiny přímo v prohlížeči. Doprovodný web k tomuto MCP serveru.\n\n> **Pouze pro nekomerční použití.** Modely NameTag a UDPipe jsou pod CC BY-NC-SA. LINDAT API je bezplatné pro akademické a osobní použití. Pro komerční nasazení kontaktujte autory nástrojů a `ufal@ufal.mff.cuni.cz`.\n\n> **Neoficiální komunitní projekt** — není provozován ani schválen ÚFAL MFF UK; wrapper kolem veřejných LINDAT API od nezávislého vývojáře. Historie názvů: `ufal-mcp` → `wrapper-mcp` (v0.8.0, na žádost ÚFAL) → **`anonymize-mcp`** (v0.9.0). Pokud máte nainstalovaný deprecated balíček `wrapper-mcp`, přejděte na `pip install anonymize-mcp` — je to tentýž projekt.\n\n## Co umí\n\n| Tool | Backend | K čemu |\n|------|---------|--------|\n| `extract_entities` | [NameTag 3](https://ufal.mff.cuni.cz/nametag/3) | NER pro **CZ** (bohatý CNEC 2.0 tagset) + **34 dalších jazyků** (UNER PER/ORG/LOC) s auto-detekcí |\n| `anonymize` | [MasKIT](https://ufal.mff.cuni.cz/maskit) + NameTag | **Production-grade pseudonymizace**: regex pre-pass přes **80+ PII patternů** — CZ + international (IBAN 30+ zemí, EU VAT 28, US SSN/EIN, DE/UK/FR/IT/ES/PL/RU/IN ID, crypto, API tokeny). Opt-in `placeholder_mode` (deterministické OSOBA1/MESTO1). **🔒 Zero-egress lokální mód** (`ANONYMIZE_MCP_LOCAL=1`) — plně offline, [viz níže](#zero-egress--on-prem-mód-). |\n| `analyze_morphology` | [UDPipe](https://ufal.mff.cuni.cz/udpipe) | Tokenizace, lemmatizace, POS tagging, závislostní parse — **auto-detect 35 jazyků** |\n| `check_readability` | [PONK](https://ufal.mff.cuni.cz/ponk) | Čitelnost CZ — 4 feature sety: metrics + rules + lexical surprise + speech acts |\n| `correct_text` | [Korektor](https://ufal.mff.cuni.cz/korektor) | CZ spell checker + auto-doplnění/odstranění diakritiky |\n| `translate_text` | [Charles Translator](https://lindat.mff.cuni.cz/services/translation/) | Překlad mezi 8 jazyky (CZ/EN/FR/DE/PL/RU/UK/HI), 17 přímých párů + auto EN-pivot |\n\n### Podporované jazyky — NER + morfologie (35 jazyků, auto-detect)\n\n- 🇨🇿 CZ · 🇸🇰 SK · 🇬🇧 EN · 🇩🇪 DE · 🇫🇷 FR · 🇮🇹 IT · 🇪🇸 ES · 🇵🇹 PT · 🇳🇱 NL\n- 🇵🇱 PL · 🇭🇺 HU · 🇷🇴 RO · 🇸🇮 SL · 🇧🇬 BG · 🇬🇷 EL · 🇭🇷 HR · 🇷🇸 SR · 🇺🇦 UK · 🇷🇺 RU\n- 🇫🇮 FI · 🇱🇹 LT · 🇱🇻 LV · 🇪🇪 ET · 🇩🇰 DA · 🇸🇪 SV · 🇳🇴 NO (Bokmål + Nynorsk)\n- 🇨🇳 ZH · 🇦🇪 AR · 🇹🇷 TR · 🇻🇳 VI · 🇮🇳 HI · 🇮🇱 HE · 🇯🇵 JA · 🇰🇷 KO · 🇹🇭 TH\n\n## Pro koho je tohle (sektory + use cases)\n\nStress-tested napříč 9 sektory na **12.7KB cross-sektorovém spisu** — výsledek **94/94 unique PII chyceno** v jednom volání. Plus **international corpus 17/17** (US/UK/DE/FR/IT/ES/PL/RU/IN + crypto + akademické + fleet):\n\n| Sektor | Use case | PII které MCP zvládne |\n|---|---|---|\n| ⚖️ **Právo** | Anonymizace spisu před AI review, GDPR compliance | Jména, RČ, adresy, č.j., sp.zn., IBAN, OP, datovky |\n| 🏥 **Medicína** | Propouštěcí zprávy pro výzkum, statistika hospitalizací | RČ, IČZ, č. pojištěnce, kontakty lékaře — klinické kódy MKN-10 zachované |\n| 🎓 **Věda / akademie** | Peer review, citace v publikaci | ORCID, Researcher ID, e-maily kolegů, granty |\n| 💳 **Bankovnictví** | Compliance, výpisy do AI, vykazování | Č.ú., karta, IBAN, VS/KS/SS, header výpisu |\n| 🏠 **Reality / katastr** | Anonymizace výpisů z KN, smluv | LV, parcely, k.ú., vlastník + RČ + adresa |\n| 🚗 **Pojišťovny** | Likvidace škod, AI analýza | VIN, SPZ, č. pojistky, TP, OP, RČ pojištěného |\n| 📜 **Notáři** | Notářské zápisy pro AI summary | NZ, OP, datovka notáře, sp. zn. |\n| 📚 **Studijní oddělení** | Potvrzení o studiu, statistika studentů | UČO, studijní č., ISIC, kontakty studenta |\n| 🔬 **Výzkum / NGO** | Anonymizace korpusu pro etiku výzkumu | Vše výše + zachování klinických/právních kódů |\n\nPlus 35 jazyků v multilingvální stack (legal docs SK/EN/DE/PL/UK/RU/FR/HI/ES/IT/AR + 24 dalších otestovány na NER+morfologii, auto EN-pivot pro překlad mimo přímé Charles páry). **CJK jména (čínská/japonská) maskována od v0.8.4.**\n\n### Sektor #10 — International\n\n| Use case | PII které MCP zvládne |\n|---|---|\n| 🌍 **US/UK/DE/FR/IT/ES/PL/RU/IN dokumenty** | SSN, NIN, Steuer-ID, NIR, Codice Fiscale, DNI, PESEL, Aadhaar, PAN, cestovní pasy (8 jazyků) — auto bez `lang=` parametru |\n| 💰 **Crypto/Web3 outreach, smart contracts** | Bitcoin (Legacy/P2SH/Bech32/Taproot), Ethereum, Monero, XRP, TRON |\n| 🔐 **DevOps logs / API key leak detection** | OpenAI, Anthropic, OpenRouter, GitHub PAT, AWS, Google, Slack, Stripe tokeny |\n| 🏢 **Cross-border B2B** | Foreign companies (SARL/SAS/GmbH/AG/Ltd/LLC/Inc/SpA/SL/Sp. z o.o.) + EU VAT (28 zemí) + IBAN (30+ zemí) |\n\n## Instalace\n\nZ PyPI (doporučeno):\n\n```bash\npip install anonymize-mcp\n```\n\nNebo ze source:\n\n```bash\ngit clone https://github.com/Buggy1111/anonymize-mcp.git\ncd anonymize-mcp\npip install -e .\n```\n\n## Registrace v MCP klientovi\n\nanonymize-mcp je standardní [MCP](https://modelcontextprotocol.io) server (stdio transport). Po registraci a restartu klienta máš k dispozici 6 nástrojů:\n\n- `mcp__anonymize__extract_entities` — multilingvální NER (35 jazyků auto-detect)\n- `mcp__anonymize__anonymize` — production-grade pseudonymizace CZ (regex pre-pass + stop-list + placeholder mode)\n- `mcp__anonymize__analyze_morphology` — morfologie 35 jazyků auto-detect (UDPipe 961 modelů)\n- `mcp__anonymize__check_readability` — čitelnost CZ (4 feature sety)\n- `mcp__anonymize__correct_text` — spell check + diakritika CZ\n- `mcp__anonymize__translate_text` — překlad mezi 8 jazyky\n\n### Claude Code (terminál)\n\n```bash\nclaude mcp add anonymize -s user -- anonymize-mcp\n```\n\n### Claude Desktop\n\n**Starší Claude Desktop** (Mac `.app` z anthropic.com, Windows `.exe` installer):\n\nEdituj `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac)\nnebo `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"anonymize\": {\n      \"command\": \"anonymize-mcp\"\n    }\n  }\n}\n```\n\n**Nová Claude Desktop** (Microsoft Store / appx package, \"Cowork\" UI): k 05/2026 podporuje pouze **remote MCP servery přes HTTP URL**. Lokální stdio MCP servery jako `anonymize-mcp` zde **přidat nelze**.\n\n> Na Windows může být `anonymize-mcp.exe` mimo PATH (typicky `C:\\Python\\Python3xx\\Scripts\\anonymize-mcp.exe`). V configu pak použij plnou cestu.\n\n### OpenAI Codex CLI _(autorem netestováno)_\n\nEdituj `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.anonymize]\ncommand = \"anonymize-mcp\"\n```\n\n### Cursor _(autorem netestováno)_\n\nEdituj `.cursor/mcp.json` v projektu (nebo globálně `~/.cursor/mcp.json`):\n\n```json\n{\n  \"mcpServers\": {\n    \"anonymize\": {\n      \"command\": \"anonymize-mcp\"\n    }\n  }\n}\n```\n\n### Windsurf, Cline, Zed, VS Code Copilot Agent _(autorem netestováno)_\n\nStejný `mcpServers` JSON formát — viz dokumentace daného klienta. `command: \"anonymize-mcp\"` (případně absolutní cesta).\n\n## Použití\n\nV Claude Code stačí napsat například:\n\n> Anonymizuj text z `dokument.md` v placeholder_mode a vrať mi čistou verzi.\n\n> Vytáhni z dokumentu všechny osoby, soudy a č.j.\n\n> Klient přinesl ukrajinský dokument — přelož mi ho do češtiny, najdi entity a zanalyzuj morfologii.\n\n> Projeď moje podání přes PONK — vrať aktivovaná gramatická pravidla.\n\n> Klient mi posílá text bez diakritiky z mobilu — doplň diakritiku přes Korektor.\n\n## Autor\n\n`anonymize-mcp` napsal **Michal Bürgermeister** ([@Buggy1111](https://github.com/Buggy1111), michalbugy12@gmail.com) — nezávislý vývojář z ČR.\n\nWrapper kolem skvělých nástrojů ÚFAL MFF UK — bez NameTag, MasKIT, UDPipe, PONK, Korektor a Charles Translator by tenhle MCP server neexistoval. Díky celému ÚFAL týmu (Jana Straková, Milan Straka, Jiří Mírovský, Barbora Hladká, Silvie Cinková a další) za roky práce na production-grade NLP nástrojích pro češtinu.\n\nIssues, PR a feedback jsou vítané na [github.com/Buggy1111/anonymize-mcp](https://github.com/Buggy1111/anonymize-mcp).\n\n## Licence\n\nTento nástroj má **MIT licenci** (viz `LICENSE`).\n\nPod ním jsou čtyři samostatné nástroje, každý s vlastní licencí:\n\n| Komponenta | Autoři | Licence software | Licence modelů |\n|------------|--------|------------------|----------------|\n| **NameTag 3** | Jana Straková, Milan Straka | MPL 2.0 | **CC BY-NC-SA** (NON-commercial) |\n| **UDPipe** | Milan Straka, Jana Straková | MPL 2.0 | **CC BY-NC-SA** (NON-commercial) |\n| **MasKIT** | Jiří Mírovský, Barbora Hladká | MPL 2.0 | (rule-based) |\n| **PONK** | Jiří Mírovský, Silvie Cinková, Barbora Hladká + autoři podaplikací: Ivan Kraus, Arnold Stanovský, Jan Černý, Ivana Kvapilíková, Tomáš Polák, Silvie Cinková | MPL 2.0 | (rule-based + UDPipe → CC BY-NC-SA) |\n\n**Důležité**: tento nástroj nevolá lokální instalaci, ale **veřejné API služby** (`lindat.mff.cuni.cz`, `quest.ms.mff.cuni.cz`). Bezplatné pro akademické a osobní použití. Hromadný / placený / produkční traffic vyžaduje explicitní souhlas autorů a provozovatele API.\n\n## Bezpečnost\n\n- **V cloudovém módu posíláš text na externí server** (`quest.ms.mff.cuni.cz`, `lindat.mff.cuni.cz`). Před odesláním citlivých dat **nejdřív** projeď text přes `anonymize`.\n- Pro **plně privátní zpracování** použij **zero-egress lokální mód** (níže) — žádný text neopustí tvůj stroj.\n\n## Zero-egress / on-prem mód 🔒\n\nAnonymizace **kompletně lokálně** — žádné volání externího API, žádný text neopustí stroj. Pro GDPR / právní / zdravotnická data, kde citlivý obsah nesmí ven.\n\n```bash\npip install \"anonymize-mcp[local]\"          # přidá ufal.nametag (lokální NER)\npython -m anonymize_mcp.local_backend        # jednorázově stáhne model (~31 MB)\nANONYMIZE_MCP_LOCAL=1 anonymize-mcp          # spusť server v lokálním módu\n```\n\nV Claude Code stačí přidat env proměnnou k registraci:\n\n```bash\nclaude mcp add anonymize -s user -e ANONYMIZE_MCP_LOCAL=1 -- anonymize-mcp\n```\n\n**Jak to funguje:** `anonymize` přeskočí MasKIT API a anonymizuje přes lokální regex pre-pass (80+ vzorů) + NameTag NER běžící v procesu (`ufal.nametag` + CNEC 2.0 model). Jména, města, instituce, telefony, IČO, RČ, č.j. atd. se nahradí placeholdery (`OSOBA1`, `MESTO1`, `TELEFON1`…) bez jediného síťového volání.\n\n**Konfigurace (env):**\n\n| Proměnná | Význam |\n| --- | --- |\n| `ANONYMIZE_MCP_LOCAL=1` | Zapne zero-egress mód |\n| `ANONYMIZE_MCP_NAMETAG_MODEL=/cesta/model.ner` | Vlastní cesta k modelu (jinak auto-download do `~/.cache/anonymize-mcp/models/`) |\n| `ANONYMIZE_MCP_NO_DOWNLOAD=1` | Zakáže auto-download (model musíš dodat ručně) |\n| `ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD=1` | Vědomě povolí cloudové tooly i v lokálním módu (jinak odmítnuté, viz níže) |\n\n**Co je v lokálním módu lokální (v0.10.1):** `anonymize` **i `extract_entities`** běží plně offline (lokální CNEC 2.0 NER; multilingvální model vyžaduje API, tool na to upozorní warningem). Ostatní tooly (`translate_text`, `correct_text`, `check_readability`, `analyze_morphology`) by text poslaly na ÚFAL API — proto jsou v zero-egress módu **odmítnuté s vysvětlující chybou**; vědomě je povolíš přes `ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD=1`.\n\n**Hardened setup (air-gapped/auditované stroje):** model si předstáhni předem (`python -m anonymize_mcp.local_backend` — ověřuje se SHA-256) a server nasaď s `ANONYMIZE_MCP_NO_DOWNLOAD=1` — pak proces nikdy neotevře žádné síťové spojení.\n\n**Tradeoff:** lokální NameTag 1 (CNEC 2.0, CC BY-NC-SA, **non-commercial**) je o něco jednodušší než cloudový NameTag 3 a vynechává MasKIT rule-engine — výměnou za **nulový egress**.\n\n## Použité API (6 LINDAT REST endpointů)\n\n- `POST https://lindat.mff.cuni.cz/services/nametag/api/recognize` — NER\n- `POST https://lindat.mff.cuni.cz/services/udpipe/api/process` — morfologie\n- `POST https://lindat.mff.cuni.cz/services/korektor/api/correct` — spell check\n- `POST https://lindat.mff.cuni.cz/services/translation/api/v2/models/{src-tgt}` — překlad\n- `POST https://quest.ms.mff.cuni.cz/maskit/api/process` — anonymizace\n- `POST https://quest.ms.mff.cuni.cz/ponk/api/process` — čitelnost\n\n## Vývoj\n\n```bash\npython3 -m venv .venv\nsource .venv/bin/activate\npip install -e .\n\n# Testy (272 offline testů; síťové: pytest -m network)\npip install -e \".[test]\"\npytest -m \"not network\"\n```\n\n## Release proces\n\nPyPI publish je automatický přes [Trusted Publisher (OIDC)](https://docs.pypi.org/trusted-publishers/).\n\n```bash\n# Bump version v pyproject.toml a src/anonymize_mcp/__init__.py\ngit commit -am \"release: v0.X.0\"\ngit tag v0.X.0\ngit push origin main --tags\n```\n",
  "bytes": 13575,
  "sha": "da0b8e0c9236704c327903f8b24108052769a999f49b58b0db378e93252b65c4",
  "repo_slug": "buggy1111/anonymize-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_buggy1111_anonymize_mcp_7d68c080/readme"
}