Skip to main content
Glama

# UODO MCP — decyzje Prezesa UODO w Claude

npm version Licencja: Apache-2.0 MCP

Serwer MCP, którym podłączysz Claude Desktop (oraz inne rozwiązania wspierające MCP) do orzeczenia.uodo.gov.pl — oficjalnego portalu decyzji Prezesa Urzędu Ochrony Danych Osobowych. Zamiast ręcznie przeszukiwać portal i kopiować fragmenty decyzji, pytasz Claude'a w języku naturalnym w Claude Desktop, a on przeszukuje bazę, pobiera pełne treści do plików markdown i cytuje sentencję i uzasadnienie.

To narzędzie do wyszukiwania i pracy na treści decyzji. Nie interpretuje prawa za Ciebie i nie zastępuje analizy prawnika — patrz Zastrzeżenie.

Dla kogo

Dla każdego, kto na co dzień szuka precedensów, argumentacji albo wysokości kar w orzecznictwie UODO:

  • prawnicy i kancelarie przygotowujące opinie, pisma czy analizy ryzyka opartych na praktyce decyzyjnej UODO,

  • inspektorzy ochrony danych (IOD), którzy sprawdzają, jak Prezes UODO oceniał podobne naruszenia w innych podmiotach,

  • działy compliance, które potrzebują szybkiego przeglądu kar w danym sektorze albo za dany typ naruszenia,

  • badacze i studenci prawa analizujący linię orzeczniczą UODO.

Nie musisz znać składni zapytań ani struktury API — piszesz do Claude w języku naturalnym, on tłumaczy to na wywołania narzędzi.

Related MCP server: io.github.mister-franklin/gdpr-decisions

Bezpieczeństwo i audyt kodu

Sekcja dla prawników, radców prawnych, adwokatów i IOD oceniających ryzyko wdrożenia tego serwera MCP w kancelarii lub dziale prawnym.

Zweryfikuj kod samodzielnie, zanim go podłączysz. Nie musisz mieć zaplecza programistycznego — audyt możesz zlecić narzędziu AI (np. Claude Code, Codex, Cursor):

  1. Pobierz repozytorium na dysk (plik .zip lub git clone).

  2. Otwórz je w wybranym narzędziu AI do analizy kodu.

  3. Poproś o audyt, np.: "Przeanalizuj ten kod pod kątem bezpieczeństwa i prywatności danych. Sprawdź, dokąd wysyłane są dane, czy są ślady złośliwego kodu oraz podatności typu prompt injection."

To kilka minut pracy, a dają pełną kontrolę nad tym, co serwer faktycznie robi, zanim zaufasz mu instalując go na swoim urządzeniu.

Jeśli chcesz lepiej zrozumieć serwery MCP i dowiedzieć się, jak działają oraz jakie zagrożenia za sobą niosą, polecamy szkolenie r.pr. Michała Pietrzyka (AI Lead, Kancelaria JDP) "Claude AI w pracy prawnika" — mec. Pietrzyk ma tam spory blok poświęcony właśnie tej kwestii: Claude AI w pracy prawnika – warsztaty online.

Co potrafi ten serwer MCP?

  • Pełnotekstowe wyszukiwanie w decyzjach UODO — kary administracyjne, upomnienia, nakazy dostosowania przetwarzania do RODO

  • Filtrowanie po sygnaturze (DKN, DS, DKE, …) i zakresie dat

  • Pobieranie pełnej treści decyzji — metadane, sentencja/decyzja i pełne uzasadnienie

  • Bogate metadane — kategorie tematyczne, podstawy prawne (artykuły RODO, ustawy krajowe, orzecznictwo), Prezes wydający decyzję, status publikacji

  • Lokalne archiwum — w trybie stdio każda pobrana decyzja zapisuje się jako plik .md do ~/Documents/uodo-orzeczenia (zmienisz przez zmienną środowiskową UODO_OUTPUT_DIR) do dalszej pracy offline

  • Cache w pamięci (15 minut) ograniczający liczbę zapytań do API

  • Ochrona przed zawieszeniem — 15-sekundowy limit czasu na każde zapytanie do API

  • Dwa tryby pracy — stdio do lokalnego użytku w Claude Desktop, HTTP do wdrożenia zdalnego/hostowanego (patrz Dla programistów)

Instalacja (Claude Desktop)

Krok 1. Zainstaluj Node.js w wersji 20 lub nowszej.

Krok 2. Otwórz plik konfiguracyjny Claude Desktop:

  • Windows: Win + R → wpisz %APPDATA%\Claude → otwórz claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Krok 3. Dodaj poniższy wpis do sekcji mcpServers (jeśli plik jest pusty, wklej całość):

{
  "mcpServers": {
    "UODO": {
      "command": "npx",
      "args": ["-y", "@thescalablelegalmarketer/uodo-mcp"]
    }
  }
}

Krok 4. Zapisz plik i zrestartuj Claude Desktop. Przy pierwszym uruchomieniu Claude sam pobierze serwer — nie trzeba nic dodatkowo instalować.

Klucz API nie jest potrzebny — API portalu UODO jest publicznie dostępne.

Przykładowe zapytania

Wyszukaj w bazie UODO 5 decyzji dotyczących niezgłoszenia naruszenia
ochrony danych w terminie 72 godzin. Dla każdej podaj:
- sygnaturę i datę decyzji
- sentencję (dosłowny cytat)
- wysokość nałożonej kary
- główny argument Prezesa UODO
Znajdź decyzje UODO dotyczące sektora mieszkaniowego (wspólnoty
mieszkaniowe, spółdzielnie). Jakie naruszenia RODO były najczęstsze
i jakie kary były nakładane?
Pobierz decyzję DKN.5131.16.2025 i przeanalizuj, jakie kryteria
Prezes UODO zastosował przy ustalaniu wysokości kary pieniężnej.

Narzędzia (Tools)

uodo_search_decisions

Wyszukuje decyzje UODO. Wyniki sortowane od najnowszych. Wszystkie parametry opcjonalne.

Parametr

Typ

Opis

query

string

Wyszukiwanie pełnotekstowe w treści decyzji, np. kara pieniężna naruszenie

caseNumber

string

Fragment sygnatury, np. DKN.5131 lub DS.523

dateFrom

string

Format RRRR-MM-DD — data ogłoszenia od

dateTo

string

Format RRRR-MM-DD — data ogłoszenia do

count

number

Maks. 100, domyślnie 20

from

number

Przesunięcie stronicowania, licząc od 0

Wskazówka: sygnatury mają postać DKN.5131.X.RRRR (postępowania w sprawie kar), DS.523.X.RRRR (postępowania skargowe), DKE.561.X.RRRR (postępowania kontrolne). Prefiks typu DKN.5131 zwróci wszystkie decyzje danego rodzaju postępowania.

uodo_get_decision

Pobiera pełną decyzję po ID. Zwraca metadane, dosłowną sentencję/decyzję i pełne uzasadnienie. W trybie stdio dodatkowo zapisuje plik .md do UODO_OUTPUT_DIR.

Parametr

Typ

Opis

id

string

Wymagany. ID decyzji z wyników uodo_search_decisions, np. PublicDocument-20260407-000000-000-abc123

uodo_list_search_fields

Zwraca listę dostępnych pól wyszukiwania wraz z ich typami danych. Przydaje się przy budowaniu bardziej złożonych zapytań.

Znane ograniczenia

  • Limit terminów w wyszukiwaniu OR — przy wyszukiwaniu wielu terminów rozdzielonych przecinkiem bardzo szerokie zapytania mogą przekroczyć limit długości URL; w razie problemu podziel zapytanie na kilka osobnych wywołań

  • Puste pola title_pl/keywords w wynikach wyszukiwania — indeks portalu UODO obecnie ich nie uzupełnia; pełne metadane (w tym kategorie tematyczne) są dostępne dopiero po pobraniu konkretnej decyzji przez uodo_get_decision

  • Cache w pamięci — 15 minut TTL, czyści się przy restarcie procesu

  • Tryb HTTP nie zapisuje plików .md (brak dostępu do systemu plików użytkownika)

O UODO

Urząd Ochrony Danych Osobowych to polski organ nadzorczy w rozumieniu art. 51 RODO. Prezes UODO wydaje wiążące decyzje w postępowaniach dotyczących naruszeń ochrony danych osobowych — w tym kary administracyjne (art. 83 RODO), upomnienia (art. 58 ust. 2 lit. a), nagany (art. 58 ust. 2 lit. b) oraz nakazy dostosowania przetwarzania do przepisów.

Portal orzeczenia.uodo.gov.pl publikuje pełne treści tych decyzji. API portalu jest publicznie dostępne, bez uwierzytelniania.

Zastrzeżenie

To narzędzie służy wyłącznie do wyszukiwania i analizy orzecznictwa — nie stanowi porady prawnej i jej nie zastępuje. Zawsze weryfikuj cytaty względem źródła pierwotnego (portalu UODO) przed użyciem ich w piśmie procesowym, opinii prawnej czy dokumentacji compliance.

Dla programistów

Rozwój

npm run dev          # serwer stdio (TypeScript, bez builda)
npm run dev:http     # serwer HTTP na porcie 3000
npm run build        # type-check + bundlowanie esbuild → dist/
npm run start        # uruchomienie skompilowanego bundla stdio
npm run start:http   # uruchomienie skompilowanego serwera HTTP

Wdrożenie

Build i uruchomienie przez Docker:

docker build -t uodo-mcp .
docker run -p 3000:3000 uodo-mcp

Endpoint MCP: http://localhost:3000/mcp Health check: http://localhost:3000/health

Do wdrożenia nadaje się dołączony Dockerfile — np. na Railway, Render lub Fly.io.

Struktura projektu

uodo-mcp/
├── src/
│   ├── types.ts        ← interfejsy TypeScript dla API UODO
│   ├── api.ts          ← klient API UODO + cache w pamięci
│   ├── format.ts       ← parsowanie HTML, formatowanie tekstu, zapis plików
│   ├── server.ts       ← fabryka createMcpServer() — rejestracja narzędzi
│   ├── index.ts        ← punkt wejścia dla trybu stdio
│   └── http-server.ts  ← punkt wejścia dla trybu HTTP + endpoint /health
├── dist/               ← wynik builda (gitignored)
│   ├── index.js        ← bundle stdio (z shebangiem #!/usr/bin/env node)
│   └── http-server.js  ← bundle HTTP
├── build.mjs           ← konfiguracja esbuild (dwa buildy równolegle)
├── tsconfig.json       ← tylko type-check (noEmit), bundlowanie przez esbuild
├── server.json         ← manifest dla marketplace MCP
├── Dockerfile          ← multi-stage build → obraz z http-server.js
└── package.json

Licencja

Apache-2.0 © Paweł Ojdowski — pełna treść w pliku LICENSE, informacja o autorstwie w NOTICE.

Możesz kopiować, modyfikować i wykorzystywać ten kod, także komercyjnie, pod warunkiem zachowania powyższych plików i oznaczenia wprowadzonych zmian.

Available Tools

3 tools
uodo_get_decisionA

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ą.

Inputs: id (required).

uodo_list_search_fieldsA

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.

Inputs: no named parameters.

uodo_search_decisionsA

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ść.

Inputs: query, caseNumber, dateFrom, dateTo, +2 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 3 tools

    Disambiguation5/5

    Each tool has a distinct purpose: listing search fields, searching decisions, and retrieving a full decision. No overlap in functionality.

    Naming Consistency5/5

    All tools use a consistent 'uodo_verb_noun' pattern (get_decision, list_search_fields, search_decisions), making them predictable.

    Tool Count5/5

    With only 3 tools, the server is tightly scoped to searching and retrieving UODO decisions, which is appropriate for this domain.

    Completeness5/5

    The tool set covers the full workflow: discover fields, search with filters, and retrieve full decisions. No obvious gaps for the intended use case.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers