Skip to main content
Glama
pwasniowski

mcp-sejm-proces

by pwasniowski
README.md
# 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

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

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.

Naming Consistency5/5

All tool names follow the verb_noun pattern with snake_case: search_prints, get_print, get_process. This is fully consistent and predictable.

Tool Count5/5

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.

Completeness5/5

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues