MCP server for searching and analyzing UODO (Polish Data Protection Authority) decisions
UODO-MCP has three well-named, verb-prefixed tools (search, get, list) with detailed Polish-language descriptions. All tools have input schemas with types and constraints (regex patterns, min/max bounds). However, output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling exists but lacks recovery guidance. Parameter descriptions are thorough but some are overly long (>200 chars), wasting tokens. Tool composition is sound: search returns IDs for get_decision to consume. No security issues detected (read-only + archival write, no secrets exposed).
Pobiera pełną decyzję UODO po ID. Zwraca metadane + sentencję dosłownie + pełne uzasadnienie. W trybie lokalnym zapisuje też plik .md z kopią archiwalną.
Zwraca listę dostępnych pól wyszukiwania w bazie UODO wraz z typami danych. Użyj żeby poznać możliwe filtry do uodo_search_decisions.
Wyszukuje decyzje UODO (Prezes Urzędu Ochrony Danych Osobowych). Sortowanie: najnowsze pierwsze. Parametr query — dwa tryby: 1. Pojedyncze pojęcie lub fraza (bez przecinka): full-text search z polskim stemmingiem (AND). Przykład: 'kara pieniężna naruszenie' 2. Kilka pojęć rozdzielonych przecinkami: wyszukiwanie OR — dokument wystarczy że zawiera JEDNO z nich. Użyj dla szerokich tematów. Przykład: 'oprogramowanie, system informatyczny, aplikacja mobilna, sklep internetowy, platforma' Zasada: nie uzupełniaj wyników z własnej wiedzy — korzystaj wyłącznie z danych zwróconych przez API. Inne parametry: - caseNumber: fragment sygnatury, np. 'DKN.5131' lub 'DS.523' - dateFrom/dateTo: zawężenie zakresu dat - Wyniki zawierają ID — podaj je do uodo_get_decision, żeby pobrać pełną treść.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting) for downstream tool calls or data extraction. uodo_search_decisions should document: returns array of {id, title, date, caseNumber, snippet}; uodo_get_decision should document: returns {id, metadata, sentence, reasoning, archived_path}.
uodo_get_decision description lacks clarity on side effects. States 'zapisuje też plik .md' (saves .md file) but does not explain when/where this happens or whether it is conditional on outputDir. Agents need to know: is this a read-only lookup or a write operation with local side effects?
uodo_search_decisions description is 450+ characters, exceeds recommended 200-char baseline. Verbose Polish prose with examples wastes tokens. Condense to: 'Search UODO decisions by query (FTS or OR), case number, or date range. Returns paginated results with IDs for uodo_get_decision. Query modes: single term = AND stemming; comma-separated = OR.'
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
uodo_list_search_fields has minimal description (18 chars). Does not explain what 'search fields' means, what structure is returned, or when an agent should call it. Add: 'Returns available filter fields (name, type, description) for uodo_search_decisions. Call this first to discover supported search parameters.'
Error handling returns generic timeout message ('UODO API nie odpowiedział...') without retry guidance. Should include: 'Timeout after 15s. Retry with narrower query (fewer terms, shorter date range) or wait 30s before retrying.'