Skip to main content
Glama

Anonymix MCP

MCP server pro anonymizaci českých právních dokumentů (smlouvy, rozsudky, žaloby).

Nahrazuje osobní údaje pseudonymy [OSOBA_1], [IČO_1] apod. — lokálně na vašem počítači, žádná data neopouštějí váš stroj.

Instalace

Požadavky

  • Python 3.10+

  • uv nebo pip

Krok 1: Přidat MCP server do Claude Code

Přidejte do ~/.claude/settings.json:

{
  "mcpServers": {
    "anonymix": {
      "command": "uvx",
      "args": ["anonymix-mcp"]
    }
  }
}

Krok 2: Přidat skill

Zkopírujte SKILL.md do vašeho projektu nebo do globálního .claude/ adresáře.

Krok 3: Restart Claude Code

Při prvním použití se automaticky stáhnou jazykové modely (~290 MB celkem):

  • NameTag CNEC 2.0 (~8 MB) — češtinový NER model ÚFAL

  • DistilBERT multilingual (~280 MB) — záložní NER model


Related MCP server: ai-security-gateway-mcp

Alternativní instalace

Přes pip

pip install anonymix-mcp
anonymix-mcp  # spustí MCP server

Pro vývoj

git clone https://github.com/dbuze/anonymix-mcp
cd anonymix-mcp
pip install -e ".[nametag,bert,gui]"
anonymix-mcp

Ruční stažení modelů

python scripts/download_models.py

Použití

Po instalaci jsou v Claude Code dostupné tyto MCP tools:

anonymize_text(text, depth="thorough")
  → anonymized_text, mapping_id, entity_count

anonymize_file(file_path, depth="thorough")
  → anonymized_path, mapping_id, entity_count

deanonymize(text, mapping_id)
  → original_text, replacements_made

get_status()
  → verze, dostupné modely, počet sessions

start_gui(port=8501)
  → URL Streamlit GUI pro vizuální review

Příklad workflow

  1. Uložte citlivý dokument jako smlouva.pdf

  2. V Claude Code: "Anonymizuj mi smlouva.pdf"

  3. Claude zavolá anonymize_file("smlouva.pdf") → vrátí smlouva_anonymized.txt + mapping_id

  4. Claude pracuje s anonymizovaným textem

  5. "Deanonymizuj výsledek" → Claude zavolá deanonymize(výsledek, mapping_id)


Bezpečnost

Anonymizace probíhá výhradně lokálně — Claude nikdy neuvidí originální data.

Pravidla:

  • mapping_id je pouze UUID odkaz, ne samotná data

  • Mapovací tabulky jsou v ~/.cache/anonymix-mcp/sessions/ — jen lokálně

  • Claude nesmí tyto soubory číst (viz CLAUDE.md)


Detekované entity

Typ

Příklad

Pseudonym

Osoba

Jan Novák, Ing. Jana Procházková

[OSOBA_1]

Organizace

Firma s.r.o., Ministerstvo

[ORGANIZACE_1]

Místo/adresa

Praha, ul. Mánesova 5

[MÍSTO_1]

Rodné číslo

850101/1234

[RČ_1]

IČO

12345678

[IČO_1]

DIČ

CZ12345678

[DIČ_1]

Bankovní účet

123456789/0800

[ÚČET_1]

Telefon

+420 777 123 456

[TEL_1]

E-mail

jan@firma.cz

[EMAIL_1]

Datum

15. 3. 2024

[DATUM_1]

Částka

50 000 Kč

[ČÁSTKA_1]

Spisová značka

12 C 345/2020

[SPIS_ZN_1]

Datová schránka

ab12cde

[DS_1]


GUI (volitelné)

Pro vizuální kontrolu a ruční úpravu entit:

pip install anonymix-mcp[gui]
streamlit run gui/app.py

Nebo přes MCP tool: start_gui() → URL v prohlížeči.


Licence

MIT License — viz LICENSE

Jazykové modely:

  • NameTag CNEC 2.0: CC BY-NC-SA (ÚFAL, MFF UK) — pouze pro nekomerční použití

  • DistilBERT: Apache 2.0 (Davlan / HuggingFace)

Available Tools

5 tools
anonymize_fileA

Anonymizuje soubor (PDF, DOCX, MD, TXT) — nahradí PII pseudonymy.

Args: file_path: Absolutní cesta k souboru ke zpracování. depth: Hloubka detekce ("thorough" nebo "quick"). output_path: Výstupní cesta (volitelné). Výchozí: vedle originálu s příponou _anonymized.txt.

Returns: anonymized_path: Cesta k výstupnímu souboru s anonymizovaným textem. mapping_id: UUID pro pozdější deanonymizaci. UCHOVEJTE! entity_count: Počet nalezených entit. entities_summary: Počty entit dle typu. source_format: Formát vstupního souboru (pdf/docx/txt/md).

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes
depthNothorough
output_pathNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by disclosing key behaviors: it replaces PII with pseudonyms, generates a mapping ID for later deanonymization (with strong warning to preserve it), and returns detailed statistics. It doesn't mention permissions, rate limits, or error conditions, but covers the core transformation behavior adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Perfectly structured with a clear opening sentence stating purpose, followed by organized sections for Args and Returns. Every sentence earns its place, providing essential information without redundancy. The Czech language doesn't affect conciseness scoring.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (file processing with PII detection), no annotations, and the presence of an output schema, the description is remarkably complete. It explains the transformation process, parameters, return values (though output schema exists), and critical behavioral details like the mapping ID preservation requirement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining all three parameters: file_path (absolute path to process), depth (detection depth with enum values), and output_path (optional with default behavior). It provides crucial semantic information not in the schema, including default values and file naming conventions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('anonymizuje' - anonymizes) and resource ('soubor' - file) with supported formats listed (PDF, DOCX, MD, TXT). It distinguishes from sibling 'anonymize_text' by specifying file processing rather than text input, and from 'deanonymize' by being the forward operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool (anonymizing files with PII) and implicitly distinguishes from 'anonymize_text' by specifying file input. However, it doesn't explicitly state when NOT to use it or mention all alternatives like 'deanonymize' for reverse operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

anonymize_textA

Anonymizuje český text — nahradí PII pseudonymy jako [OSOBA_1], [IČO_1].

Args: text: Text k anonymizaci (smlouva, rozsudek, žaloba, ...). depth: Hloubka detekce. "thorough" — všechny vrstvy (regex + NameTag NER + BERT + slovník). Doporučeno. "quick" — pouze regex vzory (RČ, IČO, telefon, ...). Rychlé.

Returns: anonymized_text: Text s nahrazenými pseudonymy. mapping_id: UUID pro pozdější deanonymizaci. UCHOVEJTE pro deanonymizaci! entity_count: Celkový počet nalezených entit. entities_summary: Počty entit dle typu.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
depthNothorough

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it replaces PII with pseudonyms, generates a UUID for later deanonymization (with a strong warning to preserve it), and returns entity counts. It also explains the impact of the 'depth' parameter on detection methods. While it covers core functionality, it lacks details on error handling or performance characteristics like rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized, with a clear purpose statement followed by sections for Args and Returns. Each sentence adds value, such as explaining parameter options and emphasizing the importance of the mapping_id. It could be slightly more concise by integrating the 'depth' explanation more tightly, but overall it is efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (PII anonymization with multiple detection methods) and the presence of an output schema (which details return values like anonymized_text and mapping_id), the description is complete enough. It covers purpose, parameters, usage context, and key behaviors without redundancy. The output schema handles return value specifics, so the description appropriately focuses on operational guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate fully. It does so by explaining both parameters in detail: 'text' is described as the text to anonymize with examples (contract, judgment, complaint), and 'depth' is explained with clear semantics for 'thorough' (all layers: regex + NameTag NER + BERT + dictionary) and 'quick' (only regex patterns). This adds significant meaning beyond the basic schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs and resources: 'Anonymizuje český text — nahradí PII pseudonymy jako [OSOBA_1], [IČO_1]' (Anonymizes Czech text — replaces PII with pseudonyms like [PERSON_1], [ID_1]). It distinguishes itself from sibling tools like 'deanonymize' by focusing on the anonymization process rather than reversal or file handling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: for anonymizing Czech text in documents like contracts, judgments, or complaints. It also offers guidance on the 'depth' parameter with recommendations ('thorough' is recommended). However, it does not explicitly state when not to use this tool or compare it to alternatives like 'anonymize_file' for file-based processing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deanonymizeA

Obnoví původní text nahrazením pseudonymů originálními hodnotami.

Používá se po zpracování anonymizovaného textu — vrátí výsledek s originálními údaji.

Args: text: Anonymizovaný text (nebo text zpracovaný Claudem) s pseudonymy jako [OSOBA_1]. mapping_id: UUID vrácené funkcí anonymize_text nebo anonymize_file.

Returns: original_text: Text s obnovenými originálními hodnotami. replacements_made: Počet provedených náhrad.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
mapping_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It clearly describes the tool's behavior: it takes anonymized text with pseudonyms and a mapping_id, then returns text with original values and a count of replacements. It doesn't mention error conditions, rate limits, or authentication needs, but covers the core operation adequately for a tool with no annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is efficiently structured: a purpose statement, usage context, parameter explanations, and return values—all in four concise sentences. Every sentence adds value with no wasted words, and key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (2 parameters, no annotations, but with output schema), the description is complete. It explains the purpose, usage context, parameter meanings, and return values. The output schema handles the return structure, so the description doesn't need to detail that further, making it well-rounded for the context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate. It provides clear semantic meaning for both parameters: 'text: Anonymizovaný text (nebo text zpracovaný Claudem) s pseudonymy jako [OSOBA_1]' and 'mapping_id: UUID vrácené funkcí anonymize_text nebo anonymize_file'. This adds significant value beyond the bare schema, though it doesn't specify format details like UUID structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Obnoví původní text nahrazením pseudonymů originálními hodnotami' (Restores original text by replacing pseudonyms with original values). It specifies the verb (restore/replace), resource (text with pseudonyms), and distinguishes from siblings like anonymize_text and anonymize_file by being the inverse operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it: 'Používá se po zpracování anonymizovaného textu' (Used after processing anonymized text). It also references specific alternatives by naming the functions that produce the required mapping_id: 'anonymize_text nebo anonymize_file' (anonymize_text or anonymize_file), providing clear context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statusB

Vrátí informace o stavu Anonymix MCP serveru a dostupnosti modelů.

Returns: version: Verze anonymix-mcp. nametag_available: True pokud je NameTag NER dostupný. bert_available: True pokud je BERT NER dostupný. active_sessions: Počet uložených mapovacích tabulek. cache_dir: Cesta k cache adresáři. models: Detailní info o modelech.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what information is returned (server status, model availability, session counts, cache path), which is useful context. However, it doesn't mention whether this is a read-only operation (implied but not stated), potential rate limits, authentication requirements, or error conditions. The description adds some behavioral value but leaves gaps for a tool that queries server state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately concise and front-loaded: the first sentence clearly states the purpose, followed by a structured list of return values. The bilingual format (Czech and English) adds slight redundancy but doesn't significantly impact clarity. Every sentence earns its place by specifying what information is returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, but with an output schema implied by the 'Returns' section), the description is reasonably complete. It explains the purpose and details the return values, which compensates for the lack of annotations. Since an output schema exists (implied by the structured return description), the description doesn't need to explain return format further. However, it could better address behavioral aspects like error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100% (though trivial since there are no parameters). The description doesn't need to explain parameters, so it appropriately focuses on the return values. This meets the baseline of 4 for zero-parameter tools, as there's no parameter information to add beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Vrátí informace o stavu Anonymix MCP serveru a dostupnosti modelů' (Returns information about the status of the Anonymix MCP server and model availability). It specifies the verb ('returns') and resource ('server status and model availability'), making the purpose unambiguous. However, it doesn't explicitly differentiate from sibling tools like 'start_gui' which might also provide status information in a different context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention any prerequisites, timing considerations, or comparisons with sibling tools like 'start_gui' (which might launch a GUI with status info) or other tools that might indirectly indicate server status. The agent must infer usage from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_guiB

Spustí Streamlit GUI na localhostu pro vizuální revizi entit.

GUI umožňuje nahrát dokument, ručně upravit detekované entity, anonymizovat a deanonymizovat výsledek.

Args: port: Port pro Streamlit server (výchozí 8501).

Returns: url: URL na které běží GUI. pid: PID spuštěného procesu. message: Instrukce pro uživatele.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the GUI enables (uploading documents, editing entities, anonymizing/deanonymizing), which adds useful context beyond basic launching. However, it doesn't cover critical behaviors like whether this is a blocking/non-blocking call, error handling, or resource implications (e.g., memory usage). The description doesn't contradict annotations (none exist), but it's incomplete for a tool that starts a GUI process.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is appropriately sized and front-loaded: the first sentence states the core purpose, followed by GUI capabilities, and then parameter/return details in a structured format. Every sentence adds value, though the Args/Returns sections could be more integrated into the flow. It avoids redundancy and is efficiently written.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (launching a GUI with process management), the description is reasonably complete. It explains the purpose, GUI features, parameter semantics, and return values (with an output schema present, so return details aren't needed in the description). However, it lacks information on behavioral aspects like how to stop the GUI or interaction with sibling tools, preventing a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics for the single parameter: 'port: Port pro Streamlit server (výchozí 8501)' explains that 'port' is for the Streamlit server with a default value. Since schema description coverage is 0% (the schema only defines type and default without description), this compensates well. However, it doesn't detail port constraints (e.g., valid ranges) or conflicts, keeping it from a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Spustí Streamlit GUI na localhostu pro vizuální revizi entit' (Launches a Streamlit GUI on localhost for visual review of entities). It specifies the verb (launch), resource (Streamlit GUI), and high-level functionality (visual entity review). However, it doesn't explicitly differentiate from sibling tools like get_status, which might also provide status information about running processes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like anonymize_file or deanonymize, nor does it explain prerequisites (e.g., whether a document must be uploaded first) or typical workflows. The only implicit context is for 'vizuální revizi entit' (visual review of entities), but this lacks explicit when/when-not instructions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.1/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: anonymize_file handles file processing, anonymize_text processes raw text, deanonymize reverses the process, get_status provides server information, and start_gui launches a visual interface. The descriptions clearly differentiate between file vs text processing, anonymization vs deanonymization, and operational vs administrative functions.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with clear, descriptive names: anonymize_file, anonymize_text, deanonymize, get_status, start_gui. The naming convention is uniform throughout, using snake_case consistently and clearly indicating each tool's primary action and target.

Tool Count5/5

Five tools is perfectly appropriate for this document anonymization server. The set covers the core workflow (anonymize files/text, deanonymize), provides operational visibility (get_status), and offers a user-friendly interface option (start_gui). Each tool has a clear purpose and contributes meaningfully to the server's functionality without redundancy.

Completeness4/5

The tool set covers the essential anonymization workflow comprehensively: input processing (both file and text), reversal capability, system status, and a GUI option. The only minor gap is the lack of batch processing capabilities or configuration management tools, but agents can work around this by iterating through individual files. The core lifecycle of anonymize → deanonymize is fully supported.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Anonymize PII and redact text for GDPR using real NLP, not just regex. Czech-first, built on ÚFAL/LINDAT (MasKIT + NameTag NER) with 80+ PII patterns. Also multilingual NER across 35+ languages, morphology (UDPipe), machine translation, and spellcheck. 6 tools. Non-commercial use only. Install: pip install anonymize-mcp
    6
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Sanitizes text and files by removing PII, secrets, and custom patterns locally before sending to LLMs, with optional reverse-scrubbing.
    3
    327
    2
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Local pseudonymisation MCP server that detects PII in text, replaces it with opaque tokens before sending to cloud LLMs, and restores tokens afterward.
    2
    86
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Dbuzek/anonymix-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server