MCP server for Swedish statutes (SFS) via the Riksdagen open-data API — fetch consolidated acts with persistent identifiers and verifiable citations.
Four well-named, read-only tools with clear descriptions and proper input schemas. Tool names follow verb_noun pattern (se_search, se_get_act, se_get_text, se_coverage). All have descriptions 50+ chars. Input schemas present with type and description for parameters. Output schemas documented in code (SearchResult, SfsAct, LawText models). Error handling is structured with [code] prefixes and recovery guidance in INSTRUCTIONS. Main gaps: no pagination support for search results (capped at 20 hardcoded), no parameter constraints (enums/patterns), and output schema details not visible in tool signatures themselves.
Declare what this connector covers, how it is sourced, and what it does NOT cover.
Fetch metadata for a Swedish statute by its SFS number.
Fetch the full consolidated plain text of a Swedish statute by its SFS number.
Search Swedish statutes (SFS) by free text (title and full text).
Search result limit hardcoded at 20 with no pagination parameters (offset/limit/cursor). Large result sets cannot be iterated; LLM cannot request more results.
SFS number parameter (sfs_number) lacks regex pattern constraint in schema. Description mentions format 'e.g. 2018:218' but no formal pattern validation visible in input schema definition.
Output schemas (SearchResult, SfsAct, LawText) defined in models.py but not exposed in tool signatures. LLM cannot see field names/types from tool definition alone; must infer from INSTRUCTIONS prose.
se_coverage tool has empty input schema (no parameters). Description is brief (58 chars). Purpose is clear but could benefit from richer context on when/why to call it.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Error handling returns structured [code] errors but does not include the invalid value in the error message for invalid_arg cases. E.g., 'sfs_number=2018:999 must look like 2018:218' is good, but bare 'invalid_arg' without context wastes LLM recovery cycles.