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.
- wrapper_mcp-0.8.0/.gitignore +16 -0
- wrapper_mcp-0.8.0/LICENSE +30 -0
- wrapper_mcp-0.8.0/PKG-INFO +214 -0
- wrapper_mcp-0.8.0/README.md +184 -0
- wrapper_mcp-0.8.0/dev/ufal-mcp-stress-v076/README.md +44 -0
- wrapper_mcp-0.8.0/docs/journal/README.md +31 -0
- wrapper_mcp-0.8.0/pyproject.toml +56 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/__init__.py +3 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/http.py +108 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/korektor.py +65 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/langdetect.py +508 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit.py +452 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_audit.py +342 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_constants.py +141 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_normalize.py +172 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_parsing.py +147 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_patterns.py +1502 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_placeholders.py +259 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_postprocess.py +858 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_stoplist.py +75 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/maskit_strict.py +130 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/nametag.py +386 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/nametag_labels.py +76 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/ponk.py +245 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/server.py +380 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/translator.py +182 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/udpipe.py +225 -0
- wrapper_mcp-0.8.0/src/wrapper_mcp/validation.py +125 -0
|
@@ -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
|
+
[](https://github.com/Buggy1111/wrapper-mcp/actions/workflows/ci.yml)
|
|
34
|
+
[](https://pypi.org/project/wrapper-mcp/)
|
|
35
|
+
[](https://pypi.org/project/wrapper-mcp/)
|
|
36
|
+
[](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
|
+
[](https://github.com/Buggy1111/wrapper-mcp/actions/workflows/ci.yml)
|
|
4
|
+
[](https://pypi.org/project/wrapper-mcp/)
|
|
5
|
+
[](https://pypi.org/project/wrapper-mcp/)
|
|
6
|
+
[](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
|
+
]
|