PrawMi MCP - dokumentacja API dla deweloperów

Dokumentacja API

PrawMi MCP - dokumentacja dla deweloperów

Serwer MCP, 17 narzędzi do prawa polskiego i unijnego, autentykacja przez klucz API. Wszystko, czego potrzebujesz, by podpiąć Claude'a, Cursor lub własnego agenta do bazy ustaw, orzeczeń, dokumentów organów i aktów UE.

Szybki start

Trzy kroki do działającej integracji - wygenerowanie klucza, wpis konfiguracyjny u klienta, restart aplikacji.

  1. 1. Wygeneruj klucz API

    Zaloguj się i przejdź do Panelu konta. Każdy klucz jest powiązany z planem (start / pro / ekspert) i ma własny dzienny limit zapytań.

    Otwórz Panel konta
  2. 2. Wklej konfigurację

    Skopiuj fragment JSON do pliku konfiguracyjnego swojego klienta MCP - Claude Desktop, Cursor lub Claude Code. Pełne instrukcje dla każdego klienta są na stronie głównej MCP.

    Zobacz instrukcję konfiguracji
  3. 3. Zrestartuj klienta

    Po restarcie Twój asystent zobaczy listę narzędzi PrawMi i będzie ich używał automatycznie, kiedy zadasz pytanie o polskie prawo.

claude_desktop_config.json

{
  "mcpServers": {
    "prawmi": {
      "url": "https://api.prawmi.pl/mcp",
      "headers": {
        "X-API-Key": "prawmi_live_..."
      }
    }
  }
}

Endpoint

Serwer MCP PrawMi działa w trybie Streamable HTTP - klient łączy się przez POST z body w formacie JSON-RPC 2.0.

Adres bazowy
https://api.prawmi.pl/mcp
Protokół
JSON-RPC 2.0 (Model Context Protocol, wersja 2025-03-26)
Transport
HTTP POST z body application/json. Streaming SSE nie jest jeszcze wspierany - każde wywołanie zwraca pełną odpowiedź synchronicznie.

GET na ten sam URL zwraca 405 Method Not Allowed. Klient MCP automatycznie wybiera POST.

Autentykacja

Każde żądanie musi zawierać nagłówek X-API-Key z Twoim kluczem. Klucze mają prefix prawmi_live_.

Nagłówek
X-API-Key: prawmi_live_...

Klucz wygenerujesz, zrotujesz i odwołasz w Panelu konta. Stary klucz przestaje działać natychmiast po revoke - nie ma okresu przejściowego, więc rotuj uważnie.

Przykład - bezpieczne przechowywanie klucza w zmiennej środowiskowej (nigdy w repo).

bash

# .env (do not commit)
PRAWMI_API_KEY=prawmi_live_...

# at runtime
curl -X POST https://api.prawmi.pl/mcp \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $PRAWMI_API_KEY" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'

Narzędzia (17)

Każde narzędzie odpowiada jednemu wywołaniu tools/call w protokole MCP. Schematy wejściowe poniżej są podzbiorem JSON Schema. Klient MCP zazwyczaj sam decyduje, kiedy wywołać które narzędzie - schemat służy modelowi do walidacji parametrów.

tools/list - Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}

tools/list - Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "search_acts",
        "description": "Search Polish statutes...",
        "inputSchema": { "type": "object", "properties": { "query": { "type": "string" } }, "required": ["query"] }
      }
    ]
  }
}
search_acts

Wyszukiwanie polskich ustaw i kodeksów po temacie. Zwraca tytuł, skrót (KC, KPC, KK...) i adres ISAP. Używaj, zanim cytujesz konkretny artykuł - chroni przed pomyleniem nazwy aktu.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "search_acts",
    "arguments": { "query": "ochrona danych osobowych", "limit": 3 }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "{\"acts\":[{\"title\":\"Ustawa o ochronie danych osobowych\",\"shortname\":\"UODO\",\"isap_url\":\"https://isap.sejm.gov.pl/...\"}]}"
      }
    ]
  }
}
get_article

Pobiera autorytatywną treść artykułu z polskiej ustawy. Akceptuje skrót (KC, KPC), pełny tytuł lub URL ISAP. Treść jest pobierana z oficjalnego źródła - nie z modelu.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "get_article",
    "arguments": { "act_shortname": "KC", "article_number": "415" }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 3,
  "result": {
    "content": [
      { "type": "text", "text": "Art. 415. Kto z winy swej wyrzadzil drugiemu szkode, obowiazany jest do jej naprawienia." }
    ]
  }
}
search_act_articles

Wyszukuje właściwe artykuły w obrębie danej ustawy po temacie. Używasz, gdy wiesz, do którego aktu sięgnąć, ale potrzebujesz konkretnych numerów artykułów.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "search_act_articles",
    "arguments": { "act_title": "KC", "topic": "odpowiedzialnosc za szkode", "limit": 5 }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 4,
  "result": { "content": [ { "type": "text", "text": "{\"articles\":[{\"number\":\"415\",\"excerpt\":\"...\"}]}" } ] }
}
get_act_text

Pobiera pełny tekst polskiej ustawy po identyfikatorze - adres ISAP, numer ISAP (WDU...), sygnatura Dz.U. albo ELI - z paginacją po znakach. Gdy znasz numer artykułu, taniej jest użyć get_article.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 12,
  "method": "tools/call",
  "params": {
    "name": "get_act_text",
    "arguments": { "isap_id": "WDU20130000403", "offset": 0, "limit": 12000 }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 12,
  "result": { "content": [ { "type": "text", "text": "{\"success\":true,\"act_title\":\"Prawo energetyczne\",\"isap_id\":\"WDU20130000403\",\"dz_u\":\"Dz.U. 2013 poz. 403\",\"eli\":\"DU/2013/403\",\"isap_url\":\"https://isap.sejm.gov.pl/isap.nsf/DocDetails.xsp?id=WDU20130000403\",\"text\":\"Art. 1. ...\",\"start_index\":0,\"end_index\":12000,\"total_chars\":184320,\"truncated\":true}" } ] }
}
search_rulings

Semantyczne wyszukiwanie orzeczeń SN, NSA, WSA, SA i SO po opisie problemu lub po sygnaturze. Zwraca sygnaturę, sąd, datę, link i fragment uzasadnienia.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 5,
  "method": "tools/call",
  "params": {
    "name": "search_rulings",
    "arguments": { "query": "rekojmia za wady fizyczne", "court_filter": "SN", "limit": 5 }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 5,
  "result": { "content": [ { "type": "text", "text": "{\"rulings\":[{\"case_number\":\"III CZP 8/22\",\"court\":\"SN\",\"date\":\"2022-04-15\",\"link\":\"https://sn.pl/...\"}]}" } ] }
}
search_rulings_by_article

Wyszukuje orzeczenia, które powołują się na konkretny artykuł danej ustawy. Pozwala potwierdzić, że Twoja interpretacja prawna ma oparcie w orzecznictwie.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": {
    "name": "search_rulings_by_article",
    "arguments": { "act_shortname": "KC", "article_number": "415", "limit": 5 }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 6,
  "result": { "content": [ { "type": "text", "text": "{\"rulings\":[...]}" } ] }
}
get_ruling_text

Pobiera pełną treść wybranego orzeczenia po linku z search_rulings. Używaj, gdy potrzebujesz dokładnej argumentacji sądu, a nie tylko fragmentu z uzasadnienia.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 7,
  "method": "tools/call",
  "params": {
    "name": "get_ruling_text",
    "arguments": { "ruling_link": "https://sn.pl/orzecznictwo/..." }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 7,
  "result": { "content": [ { "type": "text", "text": "Sad Najwyzszy w skladzie..." } ] }
}
verify_ruling

Weryfikuje sygnaturę sprawy w bazie PrawMi oraz w zewnętrznych źródłach (SAOS, NSA, SN). Zwraca werdykt - verified, not_found_anywhere, uncertain lub invalid_signature.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 8,
  "method": "tools/call",
  "params": {
    "name": "verify_ruling",
    "arguments": { "case_number": "III CZP 8/22" }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 8,
  "result": { "content": [ { "type": "text", "text": "{\"verdict\":\"verified\",\"checked_sources\":[{\"source\":\"prawmi_db\",\"status\":\"hit\"}]}" } ] }
}
verify_article_reference

Audytuje fragment tekstu prawnego - wyciąga wszystkie powołania na artykuły i sygnatury, sprawdza je jednym wywołaniem i wskazuje halucynacje przed wysłaniem pisma.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 9,
  "method": "tools/call",
  "params": {
    "name": "verify_article_reference",
    "arguments": { "fragment": "Zgodnie z art. 415 KC oraz wyrokiem SN z 2022-04-15, III CZP 8/22..." }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 9,
  "result": { "content": [ { "type": "text", "text": "{\"articles\":[{\"reference\":\"art. 415 KC\",\"verdict\":\"verified\"}],\"rulings\":[{\"case_number\":\"III CZP 8/22\",\"verdict\":\"verified\"}]}" } ] }
}
search_tax_interpretations

Wyszukuje dokumenty podatkowe MF z systemu Eureka - interpretacje indywidualne i ogólne, objaśnienia podatkowe, wytyczne i WIS. Hybryda semantyki po tezie i pytaniu wnioskodawcy z dopasowaniem dokładnych fraz, numerów artykułów i kodów PKWiU.

get_tax_document

Odczytuje dokument podatkowy zwrócony przez search_tax_interpretations. Bez parametru section dostajesz konspekt sekcji, z sekcją - jej treść. Rozstrzygnięcie organu jest w sekcjach ocena i uzasadnienie, stanowisko to pogląd wnioskodawcy.

search_uodo_decisions

Decyzje Prezesa UODO w sprawach RODO - kary, nakazy, rozstrzygnięcia skarg. Wyszukiwanie semantyczne po streszczeniach decyzji, zapytanie po polsku. Korpus obejmuje decyzje UODO, a nie wytyczne EROD.

search_uokik_decisions

Decyzje Prezesa UOKiK - antymonopol, klauzule abuzywne, praktyki naruszające zbiorowe interesy konsumentów, kontrola koncentracji. Wyszukiwanie semantyczne po streszczeniach albo pobranie konkretnej decyzji po identyfikatorze. Zapytanie po polsku.

search_knf_positions

Stanowiska, rekomendacje i wytyczne KNF dla sektora finansowego - banki, rynek kapitałowy, ubezpieczenia, emerytury, usługi płatnicze, SKOK-i. To dokumenty nadzorcze, nie decyzje administracyjne ani komunikaty prasowe. Filtr sector potrafi odciąć dokumenty wielosektorowe.

search_eu_regulations

Rozporządzenia i dyrektywy UE z EUR-Lex w polskich wersjach językowych - RODO, DSA, DMA, AI Act, prawo konsumenckie i bezpieczeństwo produktów. Zapytanie musi być po polsku, bo indeks zawiera polskie streszczenia. Zwraca numery CELEX do użycia w get_eu_regulation_text.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "search_eu_regulations",
    "arguments": { "query": "prawo do usuniecia danych osobowych", "limit": 3 }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 10,
  "result": { "content": [ { "type": "text", "text": "{\"success\":true,\"regulations\":[{\"celex_id\":\"32016R0679\",\"title\":\"Rozporzadzenie (UE) 2016/679 (RODO)\",\"summary\":\"...\",\"url\":\"https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32016R0679\",\"publication_date\":\"2016-05-04\",\"relevance_score\":0.81}],\"count\":1}" } ] }
}
get_eu_regulation_text

Pobiera pełny tekst (przycięty) albo pojedynczy artykuł aktu UE po numerze CELEX, w polskiej wersji językowej. Numer CELEX znajdziesz wcześniej przez search_eu_regulations.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 11,
  "method": "tools/call",
  "params": {
    "name": "get_eu_regulation_text",
    "arguments": { "celex_id": "32016R0679", "article_number": "17" }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 11,
  "result": { "content": [ { "type": "text", "text": "{\"success\":true,\"celex_id\":\"32016R0679\",\"title\":\"Rozporzadzenie (UE) 2016/679 (RODO)\",\"url\":\"https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32016R0679\",\"publication_date\":\"2016-05-04\",\"article_number\":\"17\",\"text\":\"Artykul 17 Prawo do usuniecia danych (prawo do bycia zapomnianym) ...\",\"char_count\":3184,\"truncated\":false}" } ] }
}
get_krs_extract

Odpis aktualny albo pełny z KRS pobierany na żywo z otwartego API Ministerstwa Sprawiedliwości. Zwraca nazwę, formę prawną, NIP i REGON, adres, reprezentację, kapitał, kody PKD i adres źródła. Działa po numerze KRS, bo API nie ma wyszukiwania po nazwie.

Przykład żądania

{
  "jsonrpc": "2.0",
  "id": 13,
  "method": "tools/call",
  "params": {
    "name": "get_krs_extract",
    "arguments": { "krs_number": "0000123456", "register": "P", "full": false }
  }
}

Przykład odpowiedzi

{
  "jsonrpc": "2.0",
  "id": 13,
  "result": { "content": [ { "type": "text", "text": "{\"success\":true,\"krs_number\":\"0000123456\",\"register\":\"P\",\"extract_type\":\"aktualny\",\"name\":\"...\",\"legal_form\":\"SPOLKA Z OGRANICZONA ODPOWIEDZIALNOSCIA\",\"nip\":\"...\",\"regon\":\"...\",\"source_url\":\"https://api-krs.ms.gov.pl/api/krs/OdpisAktualny/0000123456?rejestr=P&format=json\"}" } ] }
}

Limity i przepustowość

Zabezpieczamy serwer dwiema warstwami - ograniczeniem ruchu po IP oraz dziennym limitem na konto zależnym od planu (wszystkie klucze konta dzielą jedną pulę).

Burst per IP

30 żądań na 60 sekund (sliding window). Po przekroczeniu serwer odpowiada HTTP 429.

Dzienny limit na konto (wszystkie klucze dzielą jedną pulę)

Reset o północy czasu warszawskiego. Plan zmieniasz w Panelu konta - limit aktualizuje się w ciągu kilku minut. Wyszukiwanie orzeczeń (search_rulings) liczy się jako 3 jednostki, każde inne narzędzie jako 1.

  • free100 wywołań / dzień
  • start200 wywołań / dzień
  • pro1 000 wywołań / dzień
  • ekspert5 000 wywołań / dzień
  • MCP 1000 (plan API, 49 zł/mies.)1 000 jednostek / dzień
  • MCP 3000 (plan API, 199 zł/mies.)3 000 jednostek / dzień

Potrzebujesz wyższego limitu lub planu enterprise? Napisz na kontakt - dla zespołów ustalamy indywidualne pakiety. /kontakt

Kody błędów

Błędy transportu (401, 429) są zwracane przez warstwę HTTP. Błędy logiczne wracają jako standardowe error JSON-RPC w body z kodem -32xxx.

Błędy HTTP

  • 401Brak lub niepoprawny X-API-Key. Sprawdź, czy klucz nie został zrotowany.
  • 429 (rate limit)Przekroczyłeś burst per IP (30/60 s) lub dzienny limit klucza. Body zawiera szczegół.
  • 500Wewnętrzny błąd serwera. Powtórz po krótkiej przerwie - jeśli się powtarza, napisz na kontakt.
  • 503Usługa kwot tymczasowo niedostępna (np. odcięcie Firestore). Powtórz za moment.

Błędy JSON-RPC

  • -32700Parse error - body żądania nie jest poprawnym JSON-em.
  • -32600Invalid Request - struktura JSON-RPC niezgodna z protokołem.
  • -32601Method not found - wywołałeś metodę, której serwer nie wspiera (np. notifications/cancelled).
  • -32602Invalid params - parametry tools/call nie pasują do schematu narzędzia.
  • -32603Internal error - błąd po stronie narzędzia. Body zawiera szczegół, który możesz zalogować.

Bezpieczeństwo

  • Generowanie i rotacja kluczy

    Każdy klucz tworzysz w Panelu konta. Klucz jest pokazywany tylko raz - po zamknięciu okna nie da się go odzyskać, trzeba wygenerować nowy. Stary klucz odwołuje się przyciskiem revoke i przestaje działać natychmiast.

  • Przechowywanie

    Klucz traktuj jak hasło - nigdy nie commituj do repo, nie wklejaj na publiczne kanały, używaj zmiennych środowiskowych albo menedżera sekretów (1Password, Bitwarden, Vault).

  • Zakres dostępu

    Klucz daje dostęp wyłącznie do publicznych baz prawnych PrawMi (ustawy, orzeczenia, dokumenty podatkowe MF, decyzje UODO i UOKiK, stanowiska KNF, akty UE). Nie udostępnia konwersacji, dokumentów ani danych klientów - to są oddzielne kanały, chronione Firebase Auth.

  • Logowanie wywołań

    Każde wywołanie jest logowane (klient, narzędzie, czas, status) na potrzeby kwot i diagnostyki. Treść zapytań nie jest archiwizowana poza standardowym logiem aplikacji.

Wersje i changelog

Aktualna wersja serwera - 1.3.0. Protokół MCP - 2025-03-26.

  • v1.3.02026-09-04

    Wyszukiwanie w KRS na żywo przez API Ministerstwa Sprawiedliwości (get_krs_extract), pełny tekst ustawy po identyfikatorze ISAP, Dz.U. albo ELI (get_act_text), identyfikatory ISAP, ELI i linki SAOS w wynikach dla ustaw i orzeczeń oraz publiczny endpoint bez klucza /mcp/public z limitem 20 wywołań dziennie na adres IP. Łącznie 17 narzędzi.

  • v1.2.02026-09

    Pięć nowych narzędzi do dokumentów organów i prawa UE - search_uodo_decisions, search_uokik_decisions, search_knf_positions, search_eu_regulations, get_eu_regulation_text. Łącznie 17 narzędzi (wcześniej doszły search_tax_interpretations i get_tax_document). Akty UE to polskie wersje językowe z EUR-Lex, więc zapytania kierujesz po polsku.

  • v0.1.02026-01

    Pierwsza publiczna wersja serwera MCP PrawMi. 8 narzędzi (search_acts, get_article, search_act_articles, search_rulings, search_rulings_by_article, get_ruling_text, verify_ruling, verify_article_reference). Autentykacja przez X-API-Key, dzienne limity per plan, sliding-window rate limiter.

Brakuje narzędzia? Masz pomysł na rozszerzenie schematu? Najlepiej napisać bezpośrednio - traktujemy to jako roadmapę.