wrapper-mcp 0.8.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. wrapper_mcp-0.8.0/.gitignore +16 -0
  2. wrapper_mcp-0.8.0/LICENSE +30 -0
  3. wrapper_mcp-0.8.0/PKG-INFO +214 -0
  4. wrapper_mcp-0.8.0/README.md +184 -0
  5. wrapper_mcp-0.8.0/dev/ufal-mcp-stress-v076/README.md +44 -0
  6. wrapper_mcp-0.8.0/docs/journal/README.md +31 -0
  7. wrapper_mcp-0.8.0/pyproject.toml +56 -0
  8. wrapper_mcp-0.8.0/src/wrapper_mcp/__init__.py +3 -0
  9. wrapper_mcp-0.8.0/src/wrapper_mcp/http.py +108 -0
  10. wrapper_mcp-0.8.0/src/wrapper_mcp/korektor.py +65 -0
  11. wrapper_mcp-0.8.0/src/wrapper_mcp/langdetect.py +508 -0
  12. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit.py +452 -0
  13. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_audit.py +342 -0
  14. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_constants.py +141 -0
  15. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_normalize.py +172 -0
  16. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_parsing.py +147 -0
  17. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_patterns.py +1502 -0
  18. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_placeholders.py +259 -0
  19. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_postprocess.py +858 -0
  20. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_stoplist.py +75 -0
  21. wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_strict.py +130 -0
  22. wrapper_mcp-0.8.0/src/wrapper_mcp/nametag.py +386 -0
  23. wrapper_mcp-0.8.0/src/wrapper_mcp/nametag_labels.py +76 -0
  24. wrapper_mcp-0.8.0/src/wrapper_mcp/ponk.py +245 -0
  25. wrapper_mcp-0.8.0/src/wrapper_mcp/server.py +380 -0
  26. wrapper_mcp-0.8.0/src/wrapper_mcp/translator.py +182 -0
  27. wrapper_mcp-0.8.0/src/wrapper_mcp/udpipe.py +225 -0
  28. wrapper_mcp-0.8.0/src/wrapper_mcp/validation.py +125 -0
@@ -0,0 +1,16 @@
1
+ __pycache__/
2
+ *.py[cod]
3
+ *.egg-info/
4
+ .venv/
5
+ venv/
6
+ build/
7
+ dist/
8
+ .pytest_cache/
9
+ .mypy_cache/
10
+ .ruff_cache/
11
+ .DS_Store
12
+ *.log
13
+
14
+ # Working documents (not part of distribution)
15
+ *.docx
16
+ *:Zone.Identifier
@@ -0,0 +1,30 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Michal Bürgermeister
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+
23
+ ---
24
+
25
+ NOTE: This MIT license covers the wrapper code only.
26
+ The underlying ÚFAL MFF UK NLP models accessed via the REST APIs
27
+ (NameTag 3, MasKIT, PONK) are licensed under CC BY-NC-SA, which means
28
+ their results are limited to NON-COMMERCIAL use unless you obtain
29
+ explicit written permission from the model authors.
30
+ See https://lindat.mff.cuni.cz/en/terms-of-use for details.
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.4
2
+ Name: wrapper-mcp
3
+ Version: 0.8.0
4
+ Summary: MCP server wrapping LINDAT NLP tools — production-grade anonymization, multilingual NER (33+ languages), UDPipe (961 models), Charles Translator (8 languages), PONK readability, Korektor spellcheck. Non-commercial use only.
5
+ Project-URL: Homepage, https://github.com/Buggy1111/wrapper-mcp
6
+ Project-URL: Repository, https://github.com/Buggy1111/wrapper-mcp
7
+ Project-URL: Issues, https://github.com/Buggy1111/wrapper-mcp/issues
8
+ Project-URL: LINDAT, https://lindat.mff.cuni.cz/
9
+ Author-email: Michal Bürgermeister <michalbugy12@gmail.com>
10
+ License: MIT
11
+ License-File: LICENSE
12
+ Keywords: anonymization,anthropic,claude,czech,legal-tech,lindat,maskit,mcp,model-context-protocol,nametag,ner,nlp,ponk,udpipe
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: Legal Industry
16
+ Classifier: License :: OSI Approved :: MIT License
17
+ Classifier: Natural Language :: Czech
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Programming Language :: Python :: 3.13
24
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
25
+ Classifier: Topic :: Text Processing :: Linguistic
26
+ Requires-Python: >=3.10
27
+ Requires-Dist: httpx>=0.27.0
28
+ Requires-Dist: mcp>=1.2.0
29
+ Description-Content-Type: text/markdown
30
+
31
+ # wrapper-mcp
32
+
33
+ [![CI](https://github.com/Buggy1111/wrapper-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Buggy1111/wrapper-mcp/actions/workflows/ci.yml)
34
+ [![PyPI](https://img.shields.io/pypi/v/wrapper-mcp.svg)](https://pypi.org/project/wrapper-mcp/)
35
+ [![Python](https://img.shields.io/pypi/pyversions/wrapper-mcp.svg)](https://pypi.org/project/wrapper-mcp/)
36
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
37
+
38
+ MCP 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.
39
+
40
+ > **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`.
41
+
42
+ > **Dříve `ufal-mcp`** — přejmenováno na žádost ÚFAL MFF UK (v0.8.0).
43
+
44
+ ## Co umí
45
+
46
+ | Tool | Backend | K čemu |
47
+ |------|---------|--------|
48
+ | `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í |
49
+ | `anonymize` | [MasKIT](https://ufal.mff.cuni.cz/maskit) | **Production-grade pseudonymizace** (v0.7.26): 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). |
50
+ | `analyze_morphology` | [UDPipe](https://ufal.mff.cuni.cz/udpipe) | Tokenizace, lemmatizace, POS tagging, závislostní parse — **auto-detect 35 jazyků** |
51
+ | `check_readability` | [PONK](https://ufal.mff.cuni.cz/ponk) | Čitelnost CZ — 4 feature sety: metrics + rules + lexical surprise + speech acts |
52
+ | `correct_text` | [Korektor](https://ufal.mff.cuni.cz/korektor) | CZ spell checker + auto-doplnění/odstranění diakritiky |
53
+ | `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 |
54
+
55
+ ### Podporované jazyky — NER + morfologie (35 jazyků, auto-detect)
56
+
57
+ - 🇨🇿 CZ · 🇸🇰 SK · 🇬🇧 EN · 🇩🇪 DE · 🇫🇷 FR · 🇮🇹 IT · 🇪🇸 ES · 🇵🇹 PT · 🇳🇱 NL
58
+ - 🇵🇱 PL · 🇭🇺 HU · 🇷🇴 RO · 🇸🇮 SL · 🇧🇬 BG · 🇬🇷 EL · 🇭🇷 HR · 🇷🇸 SR · 🇺🇦 UK · 🇷🇺 RU
59
+ - 🇫🇮 FI · 🇱🇹 LT · 🇱🇻 LV · 🇪🇪 ET · 🇩🇰 DA · 🇸🇪 SV · 🇳🇴 NO (Bokmål + Nynorsk)
60
+ - 🇨🇳 ZH · 🇦🇪 AR · 🇹🇷 TR · 🇻🇳 VI · 🇮🇳 HI · 🇮🇱 HE · 🇯🇵 JA · 🇰🇷 KO · 🇹🇭 TH
61
+
62
+ ## Instalace
63
+
64
+ Z PyPI (doporučeno):
65
+
66
+ ```bash
67
+ pip install wrapper-mcp
68
+ ```
69
+
70
+ Nebo ze source:
71
+
72
+ ```bash
73
+ git clone https://github.com/Buggy1111/wrapper-mcp.git
74
+ cd wrapper-mcp
75
+ pip install -e .
76
+ ```
77
+
78
+ ## Registrace v MCP klientovi
79
+
80
+ wrapper-mcp je standardní [MCP](https://modelcontextprotocol.io) server (stdio transport). Po registraci a restartu klienta máš k dispozici 6 nástrojů:
81
+
82
+ - `mcp__wrapper__extract_entities` — multilingvální NER (35 jazyků auto-detect)
83
+ - `mcp__wrapper__anonymize` — production-grade pseudonymizace CZ (regex pre-pass + stop-list + placeholder mode)
84
+ - `mcp__wrapper__analyze_morphology` — morfologie 35 jazyků auto-detect (UDPipe 961 modelů)
85
+ - `mcp__wrapper__check_readability` — čitelnost CZ (4 feature sety)
86
+ - `mcp__wrapper__correct_text` — spell check + diakritika CZ
87
+ - `mcp__wrapper__translate_text` — překlad mezi 8 jazyky
88
+
89
+ ### Claude Code (terminál)
90
+
91
+ ```bash
92
+ claude mcp add wrapper -s user -- wrapper-mcp
93
+ ```
94
+
95
+ ### Claude Desktop
96
+
97
+ **Starší Claude Desktop** (Mac `.app` z anthropic.com, Windows `.exe` installer):
98
+
99
+ Edituj `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac)
100
+ nebo `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
101
+
102
+ ```json
103
+ {
104
+ "mcpServers": {
105
+ "wrapper": {
106
+ "command": "wrapper-mcp"
107
+ }
108
+ }
109
+ }
110
+ ```
111
+
112
+ **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 `wrapper-mcp` zde **přidat nelze**.
113
+
114
+ > Na Windows může být `wrapper-mcp.exe` mimo PATH (typicky `C:\Python\Python3xx\Scripts\wrapper-mcp.exe`). V configu pak použij plnou cestu.
115
+
116
+ ### OpenAI Codex CLI _(autorem netestováno)_
117
+
118
+ Edituj `~/.codex/config.toml`:
119
+
120
+ ```toml
121
+ [mcp_servers.wrapper]
122
+ command = "wrapper-mcp"
123
+ ```
124
+
125
+ ### Cursor _(autorem netestováno)_
126
+
127
+ Edituj `.cursor/mcp.json` v projektu (nebo globálně `~/.cursor/mcp.json`):
128
+
129
+ ```json
130
+ {
131
+ "mcpServers": {
132
+ "wrapper": {
133
+ "command": "wrapper-mcp"
134
+ }
135
+ }
136
+ }
137
+ ```
138
+
139
+ ### Windsurf, Cline, Zed, VS Code Copilot Agent _(autorem netestováno)_
140
+
141
+ Stejný `mcpServers` JSON formát — viz dokumentace daného klienta. `command: "wrapper-mcp"` (případně absolutní cesta).
142
+
143
+ ## Použití
144
+
145
+ V Claude Code stačí napsat například:
146
+
147
+ > Anonymizuj text z `dokument.md` v placeholder_mode a vrať mi čistou verzi.
148
+
149
+ > Vytáhni z dokumentu všechny osoby, soudy a č.j.
150
+
151
+ > Klient přinesl ukrajinský dokument — přelož mi ho do češtiny, najdi entity a zanalyzuj morfologii.
152
+
153
+ > Projeď moje podání přes PONK — vrať aktivovaná gramatická pravidla.
154
+
155
+ > Klient mi posílá text bez diakritiky z mobilu — doplň diakritiku přes Korektor.
156
+
157
+ ## Autor
158
+
159
+ `wrapper-mcp` napsal **Michal Bürgermeister** ([@Buggy1111](https://github.com/Buggy1111), michalbugy12@gmail.com) — nezávislý vývojář z ČR.
160
+
161
+ 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.
162
+
163
+ Issues, PR a feedback jsou vítané na [github.com/Buggy1111/wrapper-mcp](https://github.com/Buggy1111/wrapper-mcp).
164
+
165
+ ## Licence
166
+
167
+ Tento wrapper má **MIT licenci** (viz `LICENSE`).
168
+
169
+ Pod ním jsou čtyři samostatné nástroje, každý s vlastní licencí:
170
+
171
+ | Komponenta | Autoři | Licence software | Licence modelů |
172
+ |------------|--------|------------------|----------------|
173
+ | **NameTag 3** | Jana Straková, Milan Straka | MPL 2.0 | **CC BY-NC-SA** (NON-commercial) |
174
+ | **UDPipe** | Milan Straka, Jana Straková | MPL 2.0 | **CC BY-NC-SA** (NON-commercial) |
175
+ | **MasKIT** | Jiří Mírovský, Barbora Hladká | MPL 2.0 | (rule-based) |
176
+ | **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) |
177
+
178
+ **Důležité**: tento wrapper 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.
179
+
180
+ ## Bezpečnost
181
+
182
+ - **Vše posíláš 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`.
183
+ - Pro plně privátní zpracování doporučuji **lokální self-host**: NameTag i UDPipe mají modely ke stažení (CC BY-NC-SA), MasKIT a PONK mají MPL 2.0 source.
184
+
185
+ ## Použité API (6 LINDAT REST endpointů)
186
+
187
+ - `POST https://lindat.mff.cuni.cz/services/nametag/api/recognize` — NER
188
+ - `POST https://lindat.mff.cuni.cz/services/udpipe/api/process` — morfologie
189
+ - `POST https://lindat.mff.cuni.cz/services/korektor/api/correct` — spell check
190
+ - `POST https://lindat.mff.cuni.cz/services/translation/api/v2/models/{src-tgt}` — překlad
191
+ - `POST https://quest.ms.mff.cuni.cz/maskit/api/process` — anonymizace
192
+ - `POST https://quest.ms.mff.cuni.cz/ponk/api/process` — čitelnost
193
+
194
+ ## Vývoj
195
+
196
+ ```bash
197
+ python3 -m venv .venv
198
+ source .venv/bin/activate
199
+ pip install -e .
200
+
201
+ # Smoke test (volá živé API)
202
+ python test_live.py
203
+ ```
204
+
205
+ ## Release proces
206
+
207
+ PyPI publish je automatický přes [Trusted Publisher (OIDC)](https://docs.pypi.org/trusted-publishers/).
208
+
209
+ ```bash
210
+ # Bump version v pyproject.toml a src/wrapper_mcp/__init__.py
211
+ git commit -am "release: v0.X.0"
212
+ git tag v0.X.0
213
+ git push origin main --tags
214
+ ```
@@ -0,0 +1,184 @@
1
+ # wrapper-mcp
2
+
3
+ [![CI](https://github.com/Buggy1111/wrapper-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/Buggy1111/wrapper-mcp/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/wrapper-mcp.svg)](https://pypi.org/project/wrapper-mcp/)
5
+ [![Python](https://img.shields.io/pypi/pyversions/wrapper-mcp.svg)](https://pypi.org/project/wrapper-mcp/)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
+
8
+ MCP 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.
9
+
10
+ > **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`.
11
+
12
+ > **Dříve `ufal-mcp`** — přejmenováno na žádost ÚFAL MFF UK (v0.8.0).
13
+
14
+ ## Co umí
15
+
16
+ | Tool | Backend | K čemu |
17
+ |------|---------|--------|
18
+ | `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í |
19
+ | `anonymize` | [MasKIT](https://ufal.mff.cuni.cz/maskit) | **Production-grade pseudonymizace** (v0.7.26): 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). |
20
+ | `analyze_morphology` | [UDPipe](https://ufal.mff.cuni.cz/udpipe) | Tokenizace, lemmatizace, POS tagging, závislostní parse — **auto-detect 35 jazyků** |
21
+ | `check_readability` | [PONK](https://ufal.mff.cuni.cz/ponk) | Čitelnost CZ — 4 feature sety: metrics + rules + lexical surprise + speech acts |
22
+ | `correct_text` | [Korektor](https://ufal.mff.cuni.cz/korektor) | CZ spell checker + auto-doplnění/odstranění diakritiky |
23
+ | `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 |
24
+
25
+ ### Podporované jazyky — NER + morfologie (35 jazyků, auto-detect)
26
+
27
+ - 🇨🇿 CZ · 🇸🇰 SK · 🇬🇧 EN · 🇩🇪 DE · 🇫🇷 FR · 🇮🇹 IT · 🇪🇸 ES · 🇵🇹 PT · 🇳🇱 NL
28
+ - 🇵🇱 PL · 🇭🇺 HU · 🇷🇴 RO · 🇸🇮 SL · 🇧🇬 BG · 🇬🇷 EL · 🇭🇷 HR · 🇷🇸 SR · 🇺🇦 UK · 🇷🇺 RU
29
+ - 🇫🇮 FI · 🇱🇹 LT · 🇱🇻 LV · 🇪🇪 ET · 🇩🇰 DA · 🇸🇪 SV · 🇳🇴 NO (Bokmål + Nynorsk)
30
+ - 🇨🇳 ZH · 🇦🇪 AR · 🇹🇷 TR · 🇻🇳 VI · 🇮🇳 HI · 🇮🇱 HE · 🇯🇵 JA · 🇰🇷 KO · 🇹🇭 TH
31
+
32
+ ## Instalace
33
+
34
+ Z PyPI (doporučeno):
35
+
36
+ ```bash
37
+ pip install wrapper-mcp
38
+ ```
39
+
40
+ Nebo ze source:
41
+
42
+ ```bash
43
+ git clone https://github.com/Buggy1111/wrapper-mcp.git
44
+ cd wrapper-mcp
45
+ pip install -e .
46
+ ```
47
+
48
+ ## Registrace v MCP klientovi
49
+
50
+ wrapper-mcp je standardní [MCP](https://modelcontextprotocol.io) server (stdio transport). Po registraci a restartu klienta máš k dispozici 6 nástrojů:
51
+
52
+ - `mcp__wrapper__extract_entities` — multilingvální NER (35 jazyků auto-detect)
53
+ - `mcp__wrapper__anonymize` — production-grade pseudonymizace CZ (regex pre-pass + stop-list + placeholder mode)
54
+ - `mcp__wrapper__analyze_morphology` — morfologie 35 jazyků auto-detect (UDPipe 961 modelů)
55
+ - `mcp__wrapper__check_readability` — čitelnost CZ (4 feature sety)
56
+ - `mcp__wrapper__correct_text` — spell check + diakritika CZ
57
+ - `mcp__wrapper__translate_text` — překlad mezi 8 jazyky
58
+
59
+ ### Claude Code (terminál)
60
+
61
+ ```bash
62
+ claude mcp add wrapper -s user -- wrapper-mcp
63
+ ```
64
+
65
+ ### Claude Desktop
66
+
67
+ **Starší Claude Desktop** (Mac `.app` z anthropic.com, Windows `.exe` installer):
68
+
69
+ Edituj `~/Library/Application Support/Claude/claude_desktop_config.json` (Mac)
70
+ nebo `%APPDATA%\Claude\claude_desktop_config.json` (Windows):
71
+
72
+ ```json
73
+ {
74
+ "mcpServers": {
75
+ "wrapper": {
76
+ "command": "wrapper-mcp"
77
+ }
78
+ }
79
+ }
80
+ ```
81
+
82
+ **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 `wrapper-mcp` zde **přidat nelze**.
83
+
84
+ > Na Windows může být `wrapper-mcp.exe` mimo PATH (typicky `C:\Python\Python3xx\Scripts\wrapper-mcp.exe`). V configu pak použij plnou cestu.
85
+
86
+ ### OpenAI Codex CLI _(autorem netestováno)_
87
+
88
+ Edituj `~/.codex/config.toml`:
89
+
90
+ ```toml
91
+ [mcp_servers.wrapper]
92
+ command = "wrapper-mcp"
93
+ ```
94
+
95
+ ### Cursor _(autorem netestováno)_
96
+
97
+ Edituj `.cursor/mcp.json` v projektu (nebo globálně `~/.cursor/mcp.json`):
98
+
99
+ ```json
100
+ {
101
+ "mcpServers": {
102
+ "wrapper": {
103
+ "command": "wrapper-mcp"
104
+ }
105
+ }
106
+ }
107
+ ```
108
+
109
+ ### Windsurf, Cline, Zed, VS Code Copilot Agent _(autorem netestováno)_
110
+
111
+ Stejný `mcpServers` JSON formát — viz dokumentace daného klienta. `command: "wrapper-mcp"` (případně absolutní cesta).
112
+
113
+ ## Použití
114
+
115
+ V Claude Code stačí napsat například:
116
+
117
+ > Anonymizuj text z `dokument.md` v placeholder_mode a vrať mi čistou verzi.
118
+
119
+ > Vytáhni z dokumentu všechny osoby, soudy a č.j.
120
+
121
+ > Klient přinesl ukrajinský dokument — přelož mi ho do češtiny, najdi entity a zanalyzuj morfologii.
122
+
123
+ > Projeď moje podání přes PONK — vrať aktivovaná gramatická pravidla.
124
+
125
+ > Klient mi posílá text bez diakritiky z mobilu — doplň diakritiku přes Korektor.
126
+
127
+ ## Autor
128
+
129
+ `wrapper-mcp` napsal **Michal Bürgermeister** ([@Buggy1111](https://github.com/Buggy1111), michalbugy12@gmail.com) — nezávislý vývojář z ČR.
130
+
131
+ 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.
132
+
133
+ Issues, PR a feedback jsou vítané na [github.com/Buggy1111/wrapper-mcp](https://github.com/Buggy1111/wrapper-mcp).
134
+
135
+ ## Licence
136
+
137
+ Tento wrapper má **MIT licenci** (viz `LICENSE`).
138
+
139
+ Pod ním jsou čtyři samostatné nástroje, každý s vlastní licencí:
140
+
141
+ | Komponenta | Autoři | Licence software | Licence modelů |
142
+ |------------|--------|------------------|----------------|
143
+ | **NameTag 3** | Jana Straková, Milan Straka | MPL 2.0 | **CC BY-NC-SA** (NON-commercial) |
144
+ | **UDPipe** | Milan Straka, Jana Straková | MPL 2.0 | **CC BY-NC-SA** (NON-commercial) |
145
+ | **MasKIT** | Jiří Mírovský, Barbora Hladká | MPL 2.0 | (rule-based) |
146
+ | **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) |
147
+
148
+ **Důležité**: tento wrapper 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.
149
+
150
+ ## Bezpečnost
151
+
152
+ - **Vše posíláš 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`.
153
+ - Pro plně privátní zpracování doporučuji **lokální self-host**: NameTag i UDPipe mají modely ke stažení (CC BY-NC-SA), MasKIT a PONK mají MPL 2.0 source.
154
+
155
+ ## Použité API (6 LINDAT REST endpointů)
156
+
157
+ - `POST https://lindat.mff.cuni.cz/services/nametag/api/recognize` — NER
158
+ - `POST https://lindat.mff.cuni.cz/services/udpipe/api/process` — morfologie
159
+ - `POST https://lindat.mff.cuni.cz/services/korektor/api/correct` — spell check
160
+ - `POST https://lindat.mff.cuni.cz/services/translation/api/v2/models/{src-tgt}` — překlad
161
+ - `POST https://quest.ms.mff.cuni.cz/maskit/api/process` — anonymizace
162
+ - `POST https://quest.ms.mff.cuni.cz/ponk/api/process` — čitelnost
163
+
164
+ ## Vývoj
165
+
166
+ ```bash
167
+ python3 -m venv .venv
168
+ source .venv/bin/activate
169
+ pip install -e .
170
+
171
+ # Smoke test (volá živé API)
172
+ python test_live.py
173
+ ```
174
+
175
+ ## Release proces
176
+
177
+ PyPI publish je automatický přes [Trusted Publisher (OIDC)](https://docs.pypi.org/trusted-publishers/).
178
+
179
+ ```bash
180
+ # Bump version v pyproject.toml a src/wrapper_mcp/__init__.py
181
+ git commit -am "release: v0.X.0"
182
+ git tag v0.X.0
183
+ git push origin main --tags
184
+ ```
@@ -0,0 +1,44 @@
1
+ # ÚFAL MCP — Stress Test v0.7.6
2
+
3
+ Adversarial test suite pro `ufal-mcp` v0.7.5 → hledání bugů pro v0.7.6.
4
+ ÚFAL = Ústav formální a aplikované lingvistiky, **MFF UK / Univerzita Karlova v Praze**.
5
+
6
+ ## Cíl
7
+ Najít reprodukovatelné bugy napříč všemi 6 nástroji a zlepšit robustnost.
8
+
9
+ ## Nástroje pod testem
10
+ 1. `extract_entities` — NameTag 3 (CNEC 2.0 + UNER multilingual)
11
+ 2. `anonymize` — MasKIT + wrapper pipeline (8 kroků)
12
+ 3. `analyze_morphology` — UDPipe 2 (961 modelů)
13
+ 4. `check_readability` — PONK (4 feature sety)
14
+ 5. `correct_text` — Korektor (spellcheck / strict / diacritics / strip)
15
+ 6. `translate_text` — Charles Translator (8 jazyků, 17 párů)
16
+
17
+ ## Kategorie testů (A-I)
18
+ | ID | Název | Co testuje |
19
+ |---|---|---|
20
+ | A | Degenerate input | "", whitespace, emoji, single char, control chars |
21
+ | B | Size extrémy | 1B, 10KB, 100KB, 500KB+ (validation limit) |
22
+ | C | Encoding/Unicode | BOM, zero-width, RTL, kombinující znaky |
23
+ | D | Language mixing | CZ+SK+EN+DE+PL+UK code-switching |
24
+ | E | PII adversarial | RČ formáty, hybrid PII, OCR typos, fake PII |
25
+ | F | Domain stress | legal / medical / technical / social |
26
+ | G | Adversarial payload | HTML/JSON/XML v textu, placeholdery v inputu, prompt injection |
27
+ | H | Cross-tool / idempotence | `f(f(x))==f(x)`, translate round-trip |
28
+ | I | Concurrency | asyncio paralelní volání |
29
+
30
+ ## Použití
31
+ ```bash
32
+ # 1. Spustit celou matrici
33
+ python runner/run_stress.py
34
+
35
+ # 2. Spustit jen jednu kategorii
36
+ python runner/run_stress.py --category E
37
+
38
+ # 3. Spustit jen jeden nástroj
39
+ python runner/run_stress.py --tool anonymize
40
+ ```
41
+
42
+ Raw výstupy: `results/raw/`
43
+ Bug report: `results/BUGS-v076.md`
44
+ Demo report: `demo/stress-report.md`
@@ -0,0 +1,31 @@
1
+ # Development Journal — ufal-mcp
2
+
3
+ Den po dni: co se dělo, proč, co se z toho naučilo.
4
+
5
+ > Repo: <https://github.com/Buggy1111/ufal-mcp>
6
+ > PyPI: <https://pypi.org/project/ufal-mcp/>
7
+
8
+ ## Timeline
9
+
10
+ | Den | Verze | Hlavní téma |
11
+ |-----|-------|-------------|
12
+ | [2026-05-14](2026-05-14.md) | v0.1.0 → v0.3.1 | Initial release, 4 nástroje, refactor 6 modulů |
13
+ | [2026-05-15](2026-05-15.md) | (docs) | Per-tool license tabulka, Claude Desktop MS Store omezení |
14
+ | [2026-05-19](2026-05-19.md) | v0.3.3 | PONK podaplikace autoři (Mírovský feedback) |
15
+ | [2026-05-20](2026-05-20.md) | v0.4.0 → v0.7.4 | Multilingvální průlom (33 jazyků), Charles Translator, production-grade anonymizace pipeline |
16
+ | [2026-05-21](2026-05-21.md) | v0.7.5 → v0.7.7 | Stress test fixy, 9 sektorů + 11 jazyků, idempotence |
17
+ | [2026-05-22](2026-05-22.md) | v0.7.8 → v0.7.17 | Wikipedia stress, post-process layer, preserved acronyms |
18
+ | [2026-05-23](2026-05-23.md) | v0.7.18 → v0.7.26 | Production-grade push, MEGA international expansion, 179/179 PASS |
19
+
20
+ ## Final test coverage (v0.7.26)
21
+
22
+ ```
23
+ ✅ 86 unit tests (pytest)
24
+ ✅ 9 9-sektor synthetic regression
25
+ ✅ 29 mass corpus v2 (CZ reálné dokumenty)
26
+ ✅ 12 mass corpus v3 (CZ obskurní edge cases)
27
+ ✅ 17 mass corpus v4 (international)
28
+ ✅ 26 ÚFAL tool integration (6 tools × 6 lang × edge cases)
29
+ ─────────────────────────────────────────────────
30
+ 179 TOTAL PASS (100%)
31
+ ```
@@ -0,0 +1,56 @@
1
+ [project]
2
+ name = "wrapper-mcp"
3
+ version = "0.8.0"
4
+ description = "MCP server wrapping LINDAT NLP tools — production-grade anonymization, multilingual NER (33+ languages), UDPipe (961 models), Charles Translator (8 languages), PONK readability, Korektor spellcheck. Non-commercial use only."
5
+ readme = "README.md"
6
+ requires-python = ">=3.10"
7
+ authors = [{ name = "Michal Bürgermeister", email = "michalbugy12@gmail.com" }]
8
+ license = { text = "MIT" }
9
+ keywords = [
10
+ "mcp", "model-context-protocol", "claude", "anthropic",
11
+ "czech", "nlp", "ner", "anonymization", "legal-tech",
12
+ "nametag", "udpipe", "maskit", "ponk", "lindat",
13
+ ]
14
+ classifiers = [
15
+ "Development Status :: 4 - Beta",
16
+ "Intended Audience :: Developers",
17
+ "Intended Audience :: Legal Industry",
18
+ "License :: OSI Approved :: MIT License",
19
+ "Natural Language :: Czech",
20
+ "Operating System :: OS Independent",
21
+ "Programming Language :: Python :: 3",
22
+ "Programming Language :: Python :: 3.10",
23
+ "Programming Language :: Python :: 3.11",
24
+ "Programming Language :: Python :: 3.12",
25
+ "Programming Language :: Python :: 3.13",
26
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
27
+ "Topic :: Text Processing :: Linguistic",
28
+ ]
29
+ dependencies = [
30
+ "mcp>=1.2.0",
31
+ "httpx>=0.27.0",
32
+ ]
33
+
34
+ [project.urls]
35
+ Homepage = "https://github.com/Buggy1111/wrapper-mcp"
36
+ Repository = "https://github.com/Buggy1111/wrapper-mcp"
37
+ Issues = "https://github.com/Buggy1111/wrapper-mcp/issues"
38
+ "LINDAT" = "https://lindat.mff.cuni.cz/"
39
+
40
+ [project.scripts]
41
+ wrapper-mcp = "wrapper_mcp.server:main"
42
+
43
+ [build-system]
44
+ requires = ["hatchling"]
45
+ build-backend = "hatchling.build"
46
+
47
+ [tool.hatch.build.targets.wheel]
48
+ packages = ["src/wrapper_mcp"]
49
+
50
+ [tool.hatch.build.targets.sdist]
51
+ include = [
52
+ "src/",
53
+ "README.md",
54
+ "LICENSE",
55
+ "pyproject.toml",
56
+ ]
@@ -0,0 +1,3 @@
1
+ """Wrapper MCP — Czech NLP tools (NameTag, MasKIT, UDPipe, PONK, Korektor, Charles Translator)."""
2
+
3
+ __version__ = "0.8.0"