Szybki start
Trzy kroki do działającej integracji - wygenerowanie klucza, wpis konfiguracyjny u klienta, restart aplikacji.
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 konta2. 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ę konfiguracji3. 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_actsWyszukiwanie 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_articlePobiera 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_articlesWyszukuje 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_textPobiera 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_rulingsSemantyczne 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_articleWyszukuje 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_textPobiera 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_rulingWeryfikuje 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_referenceAudytuje 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_interpretationsWyszukuje 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_documentOdczytuje 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_decisionsDecyzje 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_decisionsDecyzje 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_positionsStanowiska, 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_regulationsRozporzą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_textPobiera 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_extractOdpis 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-04Wyszukiwanie 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-09Pięć 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-01Pierwsza 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ę.

