mcp-sejm-proces
# mcp-sejm-proces
MCP server dla polskiego **procesu legislacyjnego** (druki sejmowe + historia procesu) przez
oficjalne, bezpłatne API Sejmu RP (`api.sejm.gov.pl`). Zero kluczy API.
Autor: Piotr Waśniowski, Legal Link.
Domyka trójkę z Twoim `mcp-isap` (ustawy, Dz.U./M.P.) i `mcp-eu-sparql`/`mcp-saos`/`mcp-nsa`
(orzecznictwo) — ten sam kontrakt `structuredContent.citations`, ten sam wzorzec kodów
błędów, ten sam `drift` test.
## Tools
- **`search_prints(title, term?, limit?)`** — szuka druków po fragmencie tytułu. API Sejmu
nie filtruje po swojej stronie — ten tool ściąga pełną listę druków danej kadencji
(~1.7 MB, kilka tysięcy pozycji) i filtruje lokalnie. Wynik cache'owany 10 minut.
- **`get_print(nr, term?)`** — metadane druku: tytuł, daty, załączniki PDF, numer procesu.
- **`get_process(nr, term?)`** — **serce serwera**: pełna historia procesu legislacyjnego —
etapy (czytania, prace komisji, głosowania), czy przyjęty, link do RCL, i **ELI wynikowego
aktu** jeśli proces zakończył się publikacją.
Domyślna kadencja: **10** (aktualna od 13.11.2023) — sprawdź, czy to się nie zmieniło, jeśli
uruchamiasz ten serwer po kolejnych wyborach.
## Domykanie pętli z mcp-isap
`get_process` zwraca `ELI` (np. `"DU/2024/1635"`), gdy proces zakończył się publikacją aktu.
To ten sam identyfikator, który przyjmuje `mcp-isap.get_act` / `get_act_text` — droga
"druk → proces → aktualny tekst ustawy" jest teraz w pełni przejezdna między tymi dwoma
serwerami.
## Ważne pułapki (potwierdzone empirycznie, 2026-08-05)
- **Nie każdy druk ma własny proces.** HTTP 404 na `get_process` dla realnie istniejącego
druku jest normalne (np. pisma dodatkowe, część raportów) — nie jest to błąd serwera.
Sprawdzone na żywo: druk 200 i 400 (kadencja 10) nie mają procesu, druk 300 ma proces, ale
`passed: false` i brak ELI.
- **`passed: false` nie znaczy "odrzucony przez Sejm".** Dla dokumentów typu "informacja
rządowa" czy "lista kandydatów" to pole bywa `false`, bo takie dokumenty nie "przechodzą"
w sensie ustawodawczym — to nie jest głosowanie, które przegrało.
- **Numer druku z sufiksem to inny dokument.** `"23-A"` (pismo dodatkowe do druku 23) ≠
`"23"` — potwierdzone na żywym API (term9/prints/23-A zwraca inny tytuł).
## Build + run
```
npm install
npm run build
npm start # stdio transport
npm run drift # offline - spójność INSTRUCTIONS/TOOLS/ErrorCode
npm run test:offline # offline - walidacja, formatowanie, fixtures z żywych odpowiedzi
npm run smoke # LIVE - api.sejm.gov.pl (brak udokumentowanego dziennego limitu)
```
## Konfiguracja Claude Desktop
```json
{
"mcpServers": {
"sejm-proces": {
"command": "node",
"args": ["<ścieżka>/mcp-sejm-proces/dist/index.js"]
}
}
}
```
## License
MIT.
TDQS
Scored across 3 tools
Each tool has a distinct purpose: search_prints finds prints by title fragment, get_print fetches detailed metadata for a specific print, and get_process retrieves the full legislative history. There is no overlap in their core functions, and the descriptions clearly differentiate them.
All tool names follow the verb_noun pattern with snake_case: search_prints, get_print, get_process. This is fully consistent and predictable.
Three tools is a well-scoped set for a focused server about Polish Sejm legislative processes. Each tool serves a necessary step in the workflow: search, retrieve, and process history, without unnecessary bloat.
The tool set covers the core read-only lifecycle: finding a print, getting its details, and accessing its legislative process. It appropriately references another server for act status, indicating a deliberate scope. There are no obvious dead ends for the intended domain.