mcp-sejm-proces
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-sejm-procesSprawdź historię procesu dla druku sejmowego nr 300"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Related MCP server: KRS Poland MCP Server
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_processdla 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, alepassed: falsei brak ELI.passed: falsenie znaczy "odrzucony przez Sejm". Dla dokumentów typu "informacja rządowa" czy "lista kandydatów" to pole bywafalse, 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
{
"mcpServers": {
"sejm-proces": {
"command": "node",
"args": ["<ścieżka>/mcp-sejm-proces/dist/index.js"]
}
}
}License
MIT.
Available Tools
3 toolsget_printARead-onlyIdempotent
Szczegóły druku sejmowego po numerze: tytuł, daty, załączniki (PDF), i numer powiązanego procesu legislacyjnego (jeśli druk taki proces zainicjował - nie każdy druk ma własny proces, np. pisma dodatkowe do innego druku). Bledy: missing_arg, invalid_term, invalid_print_number, not_found, upstream_error.
| Name | Required | Description | Default |
|---|---|---|---|
| nr | Yes | Numer druku, np. '383', '23-A'. | |
| term | No | Kadencja Sejmu. Domyślnie 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only and idempotent. The description adds valuable behavioral context: it specifies what the tool returns (title, dates, PDF attachments, process number) and includes an important nuance that not every print has its own legislative process. It also lists the possible error codes, which goes beyond the annotations and clarifies expected outcomes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first concisely states the purpose and content, and the second lists the error codes. It is appropriately front-loaded with the primary function and contains no unnecessary words, fitting the 'every sentence earns its place' principle.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of explaining return values, and it does so by listing the main fields (title, dates, attachments, process number). It also covers potential error conditions and a domain-specific caveat about prints without a process. Minor omissions like date formats or attachment specifics prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides descriptions for both parameters (nr and term), with 100% coverage. The description mentions 'by number' but does not add any semantic detail about the parameters beyond what the schema offers, so it does not improve on the baseline for fully documented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool's function with a specific verb and resource: 'Szczegóły druku sejmowego po numerze' (details of a parliamentary print by number). It lists the specific pieces of information returned (title, dates, attachments, process number), which distinguishes it from siblings like search_prints (searching) and get_process (process details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: the tool is used when you already have a print number and need its details. However, the description does not explicitly mention when to use this tool over alternatives, such as search_prints when the number is unknown. It provides a useful caveat about prints that do not initiate a process, but no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_processARead-onlyIdempotent
Pełna historia procesu legislacyjnego dla danego druku: etapy (czytania, prace komisji, głosowania), czy został przyjęty, link do RCL, i ELI wynikowego aktu jeśli proces zakończył się publikacją (Dz.U. lub M.P.). NIE każdy druk ma proces - dokumenty typu 'informacja rządowa' czy 'lista kandydatów' zwykle nie mają ELI i passed bywa false bez żadnej wady - to nie znaczy 'odrzucony', tylko 'nie podlega przyjęciu w sensie ustawodawczym'. Dla aktualnego statusu obowiązywania wynikowego aktu użyj mcp-isap.get_act z ELI z tej odpowiedzi. Bledy: missing_arg, invalid_term, invalid_print_number, not_found, upstream_error.
| Name | Required | Description | Default |
|---|---|---|---|
| nr | Yes | Numer druku, dla którego szukamy procesu (zwykle = numerowi druku bazowego). | |
| term | No | Kadencja Sejmu. Domyślnie 10. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, idempotent, non-destructive), the description adds semantic nuances: the meaning of `passed` for non-legislative documents and the list of possible errors. This helps the agent avoid misinterpreting results and understand failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but every sentence contributes meaning: it explains outputs, caveats, alternative tool usage, and error types. It is front-loaded with the core purpose and remains structured, though the error list adds a bit of length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and lack of output schema, the description compensates well by detailing the return fields (stages, passed, link, ELI), clarifying edge cases, providing an explicit cross-reference to get_act, and listing errors. This is a thorough and self-sufficient description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full descriptions for both parameters (`nr` and `term`), achieving 100% coverage. The description does not add additional parameter-specific semantics beyond what the schema already states, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies a precise verb+resource: 'Pełna historia procesu legislacyjnego dla danego druku' and enumerates return contents (stages, adoption status, RCL link, ELI). It clearly distinguishes from sibling tools like search_prints and get_print by focusing on the legislative process history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to use `mcp-isap.get_act` for the current legal status, setting a clear boundary. It also warns that not every print has a process, explaining that `passed=false` does not mean 'rejected' but 'not subject to adoption', which is critical contextual guidance for proper interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_printsARead-onlyIdempotent
Szuka druków sejmowych po fragmencie tytułu (case-insensitive, polskie znaki). API Sejmu nie filtruje po swojej stronie - ten tool ściąga pełną listę druków danej kadencji (ok. 1.7MB, kilka tysięcy pozycji) i filtruje lokalnie, więc pierwsze wywołanie w sesji jest wolniejsze niż kolejne (cache 10 min). Bledy: missing_arg, invalid_term, upstream_error.
| Name | Required | Description | Default |
|---|---|---|---|
| term | No | Kadencja Sejmu. Domyślnie 10 (aktualna, od 13.11.2023). | |
| limit | No | Maks liczba wyników (1-50). Domyślnie 10. | |
| title | Yes | Fragment tytułu druku do wyszukania. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the read-only and idempotent annotations by disclosing implementation details: the Sejm API doesn't filter server-side, the tool downloads ~1.7MB of data, filters locally, and caches for 10 minutes. It also lists specific error types (missing_arg, invalid_term, upstream_error). This gives the agent a clear picture of expected latency and failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loaded with the core purpose. Every sentence adds useful information: purpose, performance/caching behavior, and error codes. There is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, behavior, performance, caching, and errors, which is substantial for a read-only search tool. However, since there is no output schema, it doesn't describe the return structure (e.g., a list of prints), which would improve completeness. Still, given the tool's simplicity, it is largely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides descriptions for all three parameters (term, limit, title) with 100% coverage. The description adds minor value by noting that title matching is case-insensitive and supports Polish characters, and that the term parameter corresponds to a parliamentary term. This is slightly beyond the schema, but not significantly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Szuka druków sejmowych po fragmencie tytułu' (searches parliamentary prints by title fragment), with a specific verb and resource. It doesn't explicitly differentiate from sibling tools like get_print or get_process, but the search vs. retrieval distinction is clear from the name and verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by explaining the behavior: it downloads the full list and filters locally, with caching. However, it doesn't explicitly state when to use this tool versus alternatives like get_print or get_process, nor does it mention any exclusions. The guidance is mostly implied through the performance characteristics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.0- First observed
get_print - First observed
get_process - First observed
search_prints
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.
Maintenance
Related MCP Connectors
Official EUR-Lex, UK, US, and gazette search, metadata fetch, and change-only watches.
Resolve, search and verify legal citations against the official sources, with provenance.
Polish law: search statutes (ISAP), court rulings, verify citations. Free tier + paid plans + x402.
Verified Polish open data for AI agents: debt, budget, 460 MPs, votings, judiciary search, RAG.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables AI-powered legal research and analysis of Polish legal acts from the Sejm API. Provides comprehensive search, document retrieval, metadata analysis, and content access for legal documents from Dziennik Ustaw and Monitor Polski.1321MIT
- AlicenseCqualityDmaintenanceEnables querying the Polish National Court Register (KRS) to retrieve current and historical entity data.284 npm4MIT
- AlicenseAqualityBmaintenanceMCP server for Polish legislation (ISAP / Sejm) — search acts (Dz.U., M.P.) and fetch full texts with ELI identifiers and verifiable citations.348 npm1MIT
- AlicenseAqualityCmaintenanceEnables searching and retrieving Czech legal acts from the e-Sbirka database via SPARQL, including metadata and full consolidated text with verifiable citations.345 PyPIApache 2.0