Skip to main content

MCP server pro ÚFAL MFF UK NLP nástroje (NameTag, MasKIT, UDPipe, PONK) — česká právní AI

Project description

ufal-mcp

CI PyPI Python License: MIT

MCP server obalující NLP nástroje ÚFAL MFF UK pro zpracování českých právních textů.

Co umí

Tool Backend K čemu
anonymize MasKIT Pseudonymizace osobních údajů (jména, IČO, telefony, adresy, č.j., rodná čísla, data narození…)
extract_entities NameTag 3 Named Entity Recognition — osoby, instituce, firmy, geo, data
analyze_morphology UDPipe Tokenizace, lemmatizace, POS tagging, závislostní parse
check_readability PONK Analýza čitelnosti právních textů (ARI, Verb Distance, Activity, Lexical diversity)

Instalace

Z PyPI (doporučeno):

pip install ufal-mcp

Nebo ze source:

git clone https://github.com/Buggy1111/ufal-mcp.git
cd ufal-mcp
pip install -e .

Registrace v Claude Code

claude mcp add ufal -s user -- ufal-mcp

Pokud máš binárku v jiném venv:

claude mcp add ufal -s user -- /cesta/k/.venv/bin/ufal-mcp

Poté Claude Code restartuj — nástroje budou dostupné jako:

  • mcp__ufal__anonymize
  • mcp__ufal__extract_entities
  • mcp__ufal__analyze_morphology
  • mcp__ufal__check_readability

Použití

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

Anonymizuj text z PRICHOZI_POSTA/2026-03-02_odpoved_na_stiznost.md a vrať mi čistou verzi pro veřejný demo.

Vytáhni z dokumentu všechny osoby, soudy a č.j. — chystám matter intake pro /litigation-legal:matter-intake.

Zlemmatizuj tenhle text a vyhoď mi všechny tvary slova "soud" — potřebuju fulltextové vyhledávání.

Projeď moje podání přes PONK — kolik vět má příliš dlouhých?

Licence

  • Kód: MIT
  • Modely (přes API): CC BY-NC-SA — NEKOMERČNÍ použití. Pro placené nasazení potřebuješ explicitní písemné svolení autorů (Jana Straková, Milan Straka).

Bezpečnost

  • Vše posíláš na externí server ÚFAL (quest.ms.mff.cuni.cz, lindat.mff.cuni.cz)
  • ÚFAL loguje: čas, velikost dat, konfigurace serveru, IP. Obsah neloguje (přes POST).
  • Pro plně privátní variantu lze rozšířit o lokální self-host (UDPipe + NameTag mají modely ke stažení).

Známé limitace

Wrapper sám funguje deterministicky, ale upstream API mají několik dokumentovaných nedostatků. Pro každý je v této verzi přidaná detekce / warning:

Limitace Příčina Co s tím
Fragmentace názvů firem ("ZR Trade s.r.o." → MasKIT zachytí jen "ZR" a "s.r.o.", slovo "Trade" zůstane neanonymizované) MasKIT tokenizace anonymize vrací warnings — NameTag cross-check najde celou entitu a upozorní, že MasKIT nepokryl celý název
Římské číslice v názvech soudů ("MS Bratislava II""II" není anonymizováno) MasKIT regex pattern Detekováno warningem (viz výše)
Soudci se neanonymizují MasKIT záměrný whitelist By-design — pokud potřebuješ anonymizovat soudce, použij extract_entities + manuální post-processing
Slovenské tvary ("Tóthovej", "súd", "sa") — nižší přesnost než čeština NameTag i UDPipe trénované primárně na CZ Funguje, ale očekávej občasné chyby morfologie a NER
Generické placeholdery v MasKIT ("FABBR1", "IABBR1") bez typu entity MasKIT API Tool anonymizeclassify_types=True (default) — 100 % náhrad klasifikováno čtyřvrstvým fallbackem (placeholder pattern → pre-context → NameTag → fallback dle obsahu)
Slovenský text v UDPipe morfologii NameTag nemá SK model, UDPipe ano analyze_morphologymodel="auto" (default) — auto-detect SK podle markerů (som, vďaka, súd, ktorá, vo…) a přepne na slovenský UDPipe model
NER nepokrývá: ID karty, řidičáky, pasy, čísla účtů, datovky, spisové značky MasKIT roadmap (future updates) Tyto údaje dohledat ručně před odesláním do veřejného sdílení

Pro citlivá data: vždy zkontroluj warnings v odpovědi anonymize a anonymizovaný výstup ručně před zveřejněním. Wrapper je nástroj na první průchod, ne náhrada za lidskou kontrolu.

Použité API

  • POST https://lindat.mff.cuni.cz/services/nametag/api/recognize
  • POST https://lindat.mff.cuni.cz/services/udpipe/api/process
  • POST https://quest.ms.mff.cuni.cz/maskit/api/process
  • POST https://quest.ms.mff.cuni.cz/ponk/api/process

Vývoj

python3 -m venv .venv
source .venv/bin/activate
pip install -e .

# Smoke test (volá živé ÚFAL API)
python test_live.py

Release proces

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

Jednorázové nastavení (PyPI strana):

  1. Vytvořit balíček na https://pypi.org (nebo nechat workflow, ať ho vytvoří první run)
  2. PyPI → Account settings → Publishing → Add pending publisher:
    • PyPI Project Name: ufal-mcp
    • Owner: Buggy1111
    • Repository: ufal-mcp
    • Workflow: release.yml
    • Environment: pypi

Release nového releasu:

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

GHA workflow release.yml automaticky postaví distribution, publishne na PyPI a vytvoří GitHub Release s artefakty.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ufal_mcp-0.2.2.tar.gz (13.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ufal_mcp-0.2.2-py3-none-any.whl (14.5 kB view details)

Uploaded Python 3

File details

Details for the file ufal_mcp-0.2.2.tar.gz.

File metadata

  • Download URL: ufal_mcp-0.2.2.tar.gz
  • Upload date:
  • Size: 13.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ufal_mcp-0.2.2.tar.gz
Algorithm Hash digest
SHA256 6879f84f6886d0a918881055e5a35fbe1e7fced9b004bb01cd0b940c2696ee7e
MD5 18c544680ee5df818459e132e76f24aa
BLAKE2b-256 600915a6eec4f5236e9cffdc99b258f5579a2a8639045f0729629563aeb5913f

See more details on using hashes here.

Provenance

The following attestation bundles were made for ufal_mcp-0.2.2.tar.gz:

Publisher: release.yml on Buggy1111/ufal-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ufal_mcp-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: ufal_mcp-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 14.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ufal_mcp-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 547824e8fe410cb23ed6050dc5e3fcebc26e643eda074ce930efd89fd54c88ab
MD5 3341672ed94071c415e5bafe1eb64e47
BLAKE2b-256 f75e4d82ce04918568d4c490728a5276010edb049a2b81fbc649a6b969d68078

See more details on using hashes here.

Provenance

The following attestation bundles were made for ufal_mcp-0.2.2-py3-none-any.whl:

Publisher: release.yml on Buggy1111/ufal-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page