Czech PII Anonymizer & NLP

io.github.Buggy1111Published by GitHub account Buggy1111v0.10.2Updated Oct 24, 2026

Anonymize PII & redact text (GDPR): Czech + 35-lang NER, morphology, translation, spellcheck

Overview

AI-generated overview

Lets an assistant anonymize and pseudonymize text, extract named entities, analyze morphology, check Czech readability, correct spelling, and translate across…

What you can do
Wraps LINDAT/ÚFAL NLP services in six tools: extract_entities for multilingual NER (Czech plus 34 languages with auto-detection), anonymize for pseudonymization using 80+ PII regex patterns and a stop-list with an optional deterministic placeholder mode, analyze_morphology for tokenization, lemmatization, POS tagging and dependency parsing, check_readability for Czech readability features, correct_text for Czech spelling and diacritics, and translate_text between eight languages. A zero-egress local mode runs anonymization and entity extraction fully offline.
When to use it
Useful when preparing legal, medical, academic, banking, insurance or research documents for AI review while removing personal data, or when working with Czech and other European-language text that needs entity extraction, morphology, correction or translation.
Requirements
Runs locally over stdio as a PyPI package (pip install anonymize-mcp), so Python is required. Cloud mode sends text to LINDAT and ÚFAL endpoints and needs network access. The optional zero-egress mode needs the local extra, a one-time model download (about 31 MB), and is enabled with ANONYMIZE_MCP_LOCAL=1; related variables include ANONYMIZE_MCP_NAMETAG_MODEL, ANONYMIZE_MCP_NO_DOWNLOAD and ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD. No accounts or API keys are declared.
Before you install
In cloud mode the text is sent to external servers (quest.ms.mff.cuni.cz, lindat.mff.cuni.cz), so sensitive content should be anonymized first or processed in zero-egress mode. The zero-egress mode refuses the cloud-only tools unless ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD=1 is set. The underlying NameTag and UDPipe models are non-commercial (CC BY-NC-SA) and the LINDAT API is free for academic and personal use; commercial deployment requires contacting the tool authors. This is an unofficial…

Installation

In SourceWeft

  1. Open Czech PII Anonymizer & NLP in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

anonymize-mcp

[CI] [PyPI] [Python] [License: MIT]

MCP server obalující NLP nástroje LINDAT / ÚFAL MFF UK — 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.

🔒 Nově (v0.10.0): zero-egress lokální mód — plně offline anonymizace, žádný text neopustí stroj. Pro GDPR / právní / zdravotnická data. Zapnutí: ANONYMIZE_MCP_LOCAL=1.

🌐 Nechcete nic instalovat? Vyzkoušejte to online zdarma → anonymizace.js.org — anonymizace, NER, morfologie, korektor a překlad češtiny přímo v prohlížeči. Doprovodný web k tomuto MCP serveru.

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 [email protected].

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.

Co umí

ToolBackendK čemu
extract_entitiesNameTag 3NER pro CZ (bohatý CNEC 2.0 tagset) + 34 dalších jazyků (UNER PER/ORG/LOC) s auto-detekcí
anonymizeMasKIT + NameTagProduction-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.
analyze_morphologyUDPipeTokenizace, lemmatizace, POS tagging, závislostní parse — auto-detect 35 jazyků
check_readabilityPONKČitelnost CZ — 4 feature sety: metrics + rules + lexical surprise + speech acts
correct_textKorektorCZ spell checker + auto-doplnění/odstranění diakritiky
translate_textCharles TranslatorPřeklad mezi 8 jazyky (CZ/EN/FR/DE/PL/RU/UK/HI), 17 přímých párů + auto EN-pivot

Podporované jazyky — NER + morfologie (35 jazyků, auto-detect)

  • 🇨🇿 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

Pro koho je tohle (sektory + use cases)

Stress-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):

SektorUse casePII které MCP zvládne
⚖️ PrávoAnonymizace spisu před AI review, GDPR complianceJména, RČ, adresy, č.j., sp.zn., IBAN, OP, datovky
🏥 MedicínaPropouš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é
🎓 Věda / akademiePeer review, citace v publikaciORCID, Researcher ID, e-maily kolegů, granty
💳 BankovnictvíCompliance, výpisy do AI, vykazováníČ.ú., karta, IBAN, VS/KS/SS, header výpisu
🏠 Reality / katastrAnonymizace výpisů z KN, smluvLV, parcely, k.ú., vlastník + RČ + adresa
🚗 PojišťovnyLikvidace škod, AI analýzaVIN, SPZ, č. pojistky, TP, OP, RČ pojištěného
📜 NotářiNotářské zápisy pro AI summaryNZ, OP, datovka notáře, sp. zn.
📚 Studijní odděleníPotvrzení o studiu, statistika studentůUČO, studijní č., ISIC, kontakty studenta
🔬 Výzkum / NGOAnonymizace korpusu pro etiku výzkumuVše výše + zachování klinických/právních kódů

Plus 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.

Sektor #10 — International

Use casePII které MCP zvládne
🌍 US/UK/DE/FR/IT/ES/PL/RU/IN dokumentySSN, NIN, Steuer-ID, NIR, Codice Fiscale, DNI, PESEL, Aadhaar, PAN, cestovní pasy (8 jazyků) — auto bez lang= parametru
💰 Crypto/Web3 outreach, smart contractsBitcoin (Legacy/P2SH/Bech32/Taproot), Ethereum, Monero, XRP, TRON
🔐 DevOps logs / API key leak detectionOpenAI, Anthropic, OpenRouter, GitHub PAT, AWS, Google, Slack, Stripe tokeny
🏢 Cross-border B2BForeign companies (SARL/SAS/GmbH/AG/Ltd/LLC/Inc/SpA/SL/Sp. z o.o.) + EU VAT (28 zemí) + IBAN (30+ zemí)

Instalace

Z PyPI (doporučeno):

bash
pip install anonymize-mcp

Nebo ze source:

bash
git clone https://github.com/Buggy1111/anonymize-mcp.gitcd anonymize-mcppip install -e .

Registrace v MCP klientovi

anonymize-mcp je standardní MCP server (stdio transport). Po registraci a restartu klienta máš k dispozici 6 nástrojů:

  • mcp__anonymize__extract_entities — multilingvální NER (35 jazyků auto-detect)
  • mcp__anonymize__anonymize — production-grade pseudonymizace CZ (regex pre-pass + stop-list + placeholder mode)
  • mcp__anonymize__analyze_morphology — morfologie 35 jazyků auto-detect (UDPipe 961 modelů)
  • mcp__anonymize__check_readability — čitelnost CZ (4 feature sety)
  • mcp__anonymize__correct_text — spell check + diakritika CZ
  • mcp__anonymize__translate_text — překlad mezi 8 jazyky

Claude Code (terminál)

bash
claude mcp add anonymize -s user -- anonymize-mcp

Claude Desktop

Starší Claude Desktop (Mac .app z anthropic.com, Windows .exe installer):

Edituj ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) nebo %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "anonymize": {      "command": "anonymize-mcp"    }  }}

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.

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.

OpenAI Codex CLI (autorem netestováno)

Edituj ~/.codex/config.toml:

toml
[mcp_servers.anonymize]command = "anonymize-mcp"

Cursor (autorem netestováno)

Edituj .cursor/mcp.json v projektu (nebo globálně ~/.cursor/mcp.json):

json
{  "mcpServers": {    "anonymize": {      "command": "anonymize-mcp"    }  }}

Windsurf, Cline, Zed, VS Code Copilot Agent (autorem netestováno)

Stejný mcpServers JSON formát — viz dokumentace daného klienta. command: "anonymize-mcp" (případně absolutní cesta).

Použití

V Claude Code stačí napsat například:

Anonymizuj text z dokument.md v placeholder_mode a vrať mi čistou verzi.

Vytáhni z dokumentu všechny osoby, soudy a č.j.

Klient přinesl ukrajinský dokument — přelož mi ho do češtiny, najdi entity a zanalyzuj morfologii.

Projeď moje podání přes PONK — vrať aktivovaná gramatická pravidla.

Klient mi posílá text bez diakritiky z mobilu — doplň diakritiku přes Korektor.

Autor

anonymize-mcp napsal Michal Bürgermeister (@Buggy1111, [email protected]) — nezávislý vývojář z ČR.

Wrapper 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.

Issues, PR a feedback jsou vítané na github.com/Buggy1111/anonymize-mcp.

Licence

Tento nástroj má MIT licenci (viz LICENSE).

Pod ním jsou čtyři samostatné nástroje, každý s vlastní licencí:

KomponentaAutořiLicence softwareLicence modelů
NameTag 3Jana Straková, Milan StrakaMPL 2.0CC BY-NC-SA (NON-commercial)
UDPipeMilan Straka, Jana StrakováMPL 2.0CC BY-NC-SA (NON-commercial)
MasKITJiří Mírovský, Barbora HladkáMPL 2.0(rule-based)
PONKJiří 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)

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.

Bezpečnost

  • 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.
  • Pro plně privátní zpracování použij zero-egress lokální mód (níže) — žádný text neopustí tvůj stroj.

Zero-egress / on-prem mód 🔒

Anonymizace kompletně lokálně — žádné volání externího API, žádný text neopustí stroj. Pro GDPR / právní / zdravotnická data, kde citlivý obsah nesmí ven.

bash
pip install "anonymize-mcp[local]"          # přidá ufal.nametag (lokální NER)python -m anonymize_mcp.local_backend        # jednorázově stáhne model (~31 MB)ANONYMIZE_MCP_LOCAL=1 anonymize-mcp          # spusť server v lokálním módu

V Claude Code stačí přidat env proměnnou k registraci:

bash
claude mcp add anonymize -s user -e ANONYMIZE_MCP_LOCAL=1 -- anonymize-mcp

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í.

Konfigurace (env):

ProměnnáVýznam
ANONYMIZE_MCP_LOCAL=1Zapne zero-egress mód
ANONYMIZE_MCP_NAMETAG_MODEL=/cesta/model.nerVlastní cesta k modelu (jinak auto-download do ~/.cache/anonymize-mcp/models/)
ANONYMIZE_MCP_NO_DOWNLOAD=1Zakáže auto-download (model musíš dodat ručně)
ANONYMIZE_MCP_LOCAL_ALLOW_CLOUD=1Vědomě povolí cloudové tooly i v lokálním módu (jinak odmítnuté, viz níže)

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.

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í.

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.

Použité API (6 LINDAT REST endpointů)

  • POST https://lindat.mff.cuni.cz/services/nametag/api/recognize — NER
  • POST https://lindat.mff.cuni.cz/services/udpipe/api/process — morfologie
  • POST https://lindat.mff.cuni.cz/services/korektor/api/correct — spell check
  • POST https://lindat.mff.cuni.cz/services/translation/api/v2/models/{src-tgt} — překlad
  • POST https://quest.ms.mff.cuni.cz/maskit/api/process — anonymizace
  • POST https://quest.ms.mff.cuni.cz/ponk/api/process — čitelnost

Vývoj

bash
python3 -m venv .venvsource .venv/bin/activatepip install -e .
# Testy (272 offline testů; síťové: pytest -m network)pip install -e ".[test]"pytest -m "not network"

Release proces

PyPI publish je automatický přes Trusted Publisher (OIDC).

bash
# Bump version v pyproject.toml a src/anonymize_mcp/__init__.pygit commit -am "release: v0.X.0"git tag v0.X.0git push origin main --tags

Source: README.md at commit 15fb051

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v0.10.2LatestSep 16, 2026

Score

40% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.