sweden-parliament-mcp-server
Search Swedish parliamentary documents, speeches, votes, members, and statutes via MCP. Supports STDIO or Streamable HTTP transport with 7 tools for querying Riksdagen open data.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://sweden-parliament.caseyjhand.com/mcpWhat you can do with it
- Search parliamentary documents and consolidated SFS statutes by keywords or metadata
- Read publication metadata, decisions, and paginated text for specific documents
- Find speeches within a session by debate heading, member, or party
- Read report decisions, party main-vote totals, and individual ballots
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- sweden-parliament-mcp-server 0.1.2
- MCP protocol
- 2025-06-18
- Tools
- 7 advertised
- Resources
- 0 advertised
- Resource templates
- 0 advertised
- Prompts
- 0 advertised
{
"tools": {
"listChanged": true
},
"logging": {},
"prompts": {
"listChanged": true
},
"resources": {
"subscribe": true,
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
7 advertised
riksdag_list_reference — Riksdag List Reference
Look up official document types, committees, parties, constituencies, speech reply filters, sessions, identifier conventions and source coverage. The offline snapshot is dated; follow nextCall to read every entry. Document subtypes remain distinct from parent document-type codes, and the session catalog can lag current sessions.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"topic"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested entries; values above 100 are clamped with a notice."
},
"topic": {
"enum": [
"document_types",
"committees",
"parties",
"constituencies",
"speech_types",
"sessions",
"identifiers",
"coverage"
],
"type": "string",
"description": "Vocabulary or guidance topic to browse."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Zero-based local entry offset."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"topic",
"entries",
"referenceSourceUrl",
"referenceVerifiedAt",
"offset",
"limit",
"requestedLimit",
"returnedCount",
"totalCount",
"hasMore",
"truncated",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"description": "Machine-readable failure mode."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied maximum page length after clamping and whole-entry fitting."
},
"topic": {
"enum": [
"document_types",
"committees",
"parties",
"constituencies",
"speech_types",
"sessions",
"identifiers",
"coverage"
],
"type": "string",
"description": "Selected reference topic."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied zero-based local offset."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"entries": {
"type": "array",
"items": {
"type": "object",
"required": [
"code",
"labelSv",
"explanation"
],
"properties": {
"end": {
"type": "string",
"description": "Published session end with original date/time precision."
},
"code": {
"type": "string",
"description": "Official filter code, or the documented convention identifier."
},
"term": {
"type": "string",
"description": "Published parliamentary term."
},
"group": {
"type": "string",
"description": "Published catalog group."
},
"start": {
"type": "string",
"description": "Published session start with original date/time precision."
},
"family": {
"type": "string",
"description": "Published document family."
},
"labelEn": {
"type": "string",
"description": "Available English label published by the source, without invented translation."
},
"labelSv": {
"type": "string",
"description": "Swedish source label; explanatory guidance has Swedish topic labels."
},
"subtype": {
"type": "string",
"description": "Document subtype, distinct from the parent document-type code; empty means parent row."
},
"sessionId": {
"type": "string",
"description": "Source session identifier, distinct from the public session string."
},
"sortOrder": {
"type": "string",
"description": "Published catalog sort value."
},
"seriesCode": {
"type": "string",
"description": "Published series code, preserving leading zeros."
},
"sourceType": {
"type": "string",
"description": "Original typ value in the document catalog."
},
"explanation": {
"type": "string",
"description": "Published description or explicit server guidance for this convention."
},
"pluralLabelSv": {
"type": "string",
"description": "Published Swedish plural label."
}
},
"description": "One official vocabulary entry or documented source convention.",
"additionalProperties": false
},
"description": "Complete entries on this page, retaining Swedish source labels and distinct subtypes."
},
"hasMore": {
"type": "boolean",
"description": "Whether further bundled entries remain."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"topic",
"offset",
"limit"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied maximum page length."
},
"topic": {
"enum": [
"document_types",
"committees",
"parties",
"constituencies",
"speech_types",
"sessions",
"identifiers",
"coverage"
],
"type": "string",
"description": "Same reference topic."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Next unread entry offset."
}
},
"description": "Complete arguments for the next reference page.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_list_reference",
"description": "Tool to retrieve the next page."
}
},
"description": "Continuation covering every remaining entry.",
"additionalProperties": false
},
"truncated": {
"type": "boolean",
"description": "Whether response fitting shortened this page."
},
"totalCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Exact number of bundled entries for this topic."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"returnedCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Actual entries on this page."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"requestedLimit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Caller-requested page length before clamping."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
},
"referenceSourceUrl": {
"type": "string",
"description": "Official source URL for this topic."
},
"referenceVerifiedAt": {
"type": "string",
"description": "Snapshot verification date."
},
"referenceCatalogTimestamp": {
"type": "string",
"description": "Original catalog generation timestamp without an inferred timezone."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true
}riksdag_search_documents — Search parliamentary documents
Search Swedish parliamentary documents and consolidated SFS statutes by words, document type, session, committee, party, member IID or dates. Choose relevance or descending date ordering and follow complete continuation calls. Read document status and text with riksdag_get_document.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Remote page number, starting at 1."
},
"sort": {
"enum": [
"relevance",
"date"
],
"type": "string",
"description": "Source ordering; relevance for nonblank queries and descending date otherwise."
},
"party": {
"type": "string",
"description": "Party code or exact reference label."
},
"query": {
"type": "string",
"description": "Source full-text query; narrow slow searches with session or type."
},
"dateTo": {
"type": "string",
"description": "Inclusive latest ISO calendar date, YYYY-MM-DD."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "In-page row offset; follow nextCall without changing the remote page size."
},
"session": {
"type": "string",
"description": "Parliamentary session; omission searches all available sessions."
},
"dateFrom": {
"type": "string",
"description": "Inclusive earliest ISO calendar date, YYYY-MM-DD."
},
"memberId": {
"type": "string",
"description": "Numeric member IID from riksdag_search_members; leading zeros are preserved."
},
"pageSize": {
"type": "integer",
"default": 10,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested remote page size; maximum applied size 50."
},
"revision": {
"type": "string",
"description": "Remote-page revision from continuation; rejects changed pages."
},
"committee": {
"type": "string",
"description": "Committee code or exact reference label."
},
"documentType": {
"type": "string",
"description": "Document type code or exact reference label, including sfs."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"items",
"page",
"pageSize",
"returnedCount",
"offset",
"remoteReturnedCount",
"revision",
"truncated",
"hasMore",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "number",
"description": "Applied remote page."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"revision_changed",
"invalid_filter",
"upstream_identity_mismatch",
"upstream_schema_invalid",
"upstream_unavailable",
"upstream_queue_full"
],
"description": "Machine-readable failure mode. Declared by this tool: `revision_changed`: The remote page changed between continuation calls. `invalid_filter`: Unknown code or malformed date or session. `upstream_identity_mismatch`: Source rows contradict required filter identities. `upstream_schema_invalid`: Present payload violates the wire contract. `upstream_unavailable`: The source remains unavailable after retries. `upstream_queue_full`: The process upstream queue is full. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"documentId",
"sourceUrl",
"statusUrl"
],
"properties": {
"date": {
"type": "string",
"description": "Document date at source precision."
},
"title": {
"type": "string",
"description": "Source-authored title."
},
"session": {
"type": "string",
"description": "Published parliamentary session."
},
"subtype": {
"type": "string",
"description": "Source document subtype code."
},
"subtitle": {
"type": "string",
"description": "Source-authored subtitle."
},
"committee": {
"type": "string",
"description": "Published responsible organ."
},
"sourceUrl": {
"type": "string",
"description": "Source document link."
},
"statusUrl": {
"type": "string",
"description": "Fixed-origin source status JSON link."
},
"documentId": {
"type": "string",
"description": "Canonical document ID."
},
"systemDate": {
"type": "string",
"description": "Source system timestamp at published precision."
},
"designation": {
"type": "string",
"description": "Published document designation, distinct from its ID."
},
"publishedAt": {
"type": "string",
"description": "Publication timestamp at source precision."
},
"versionKind": {
"type": "string",
"const": "consolidated",
"description": "SFS published consolidation, not a point-in-time legal version."
},
"documentType": {
"type": "string",
"description": "Source document type code."
},
"chamberStatus": {
"type": "string",
"description": "Authoritative chamber status property, when published."
},
"sourceTextUrl": {
"type": "string",
"description": "Published source text-route link; not necessarily plain text."
},
"publicationStatus": {
"type": "string",
"description": "Publication status; separate from chamber decision status."
},
"consolidationLabel": {
"type": "string",
"description": "Published SFS consolidation subtitle."
}
},
"description": "Document identity, publication metadata and source links.",
"additionalProperties": false
},
"description": "Complete rows selected from the fetched remote page."
},
"offset": {
"type": "number",
"description": "Applied in-page row offset."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"hasMore": {
"type": "boolean",
"description": "Whether local rows or another remote page remain."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"offset",
"page",
"pageSize"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Remote page number, starting at 1."
},
"sort": {
"enum": [
"relevance",
"date"
],
"type": "string",
"description": "Source ordering; relevance for nonblank queries and descending date otherwise."
},
"party": {
"type": "string",
"description": "Party code or exact reference label."
},
"query": {
"type": "string",
"description": "Source full-text query; narrow slow searches with session or type."
},
"dateTo": {
"type": "string",
"description": "Inclusive latest ISO calendar date, YYYY-MM-DD."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "In-page row offset; follow nextCall without changing the remote page size."
},
"session": {
"type": "string",
"description": "Parliamentary session; omission searches all available sessions."
},
"dateFrom": {
"type": "string",
"description": "Inclusive earliest ISO calendar date, YYYY-MM-DD."
},
"memberId": {
"type": "string",
"description": "Numeric member IID from riksdag_search_members; leading zeros are preserved."
},
"pageSize": {
"type": "integer",
"default": 10,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested remote page size; maximum applied size 50."
},
"revision": {
"type": "string",
"description": "Remote-page revision from continuation; rejects changed pages."
},
"committee": {
"type": "string",
"description": "Committee code or exact reference label."
},
"documentType": {
"type": "string",
"description": "Document type code or exact reference label, including sfs."
}
},
"description": "Complete normalized next-page arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_search_documents",
"description": "Tool to call next."
}
},
"description": "Complete next-page call with unchanged filters and page size.",
"additionalProperties": false
},
"pageSize": {
"type": "number",
"description": "Applied remote page size."
},
"revision": {
"type": "string",
"description": "Hash of the complete normalized remote page."
},
"truncated": {
"type": "boolean",
"description": "Whether response fitting shortened this local page."
},
"totalCount": {
"type": "number",
"description": "Authoritative source hit count, when published."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"returnedCount": {
"type": "number",
"description": "Actual rows returned."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
},
"remoteReturnedCount": {
"type": "number",
"description": "Complete fetched remote-page row count."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}riksdag_get_document — Read parliamentary document
Read a document status, decisions, linked records and text. Select sections and follow complete continuation calls to read long reports or consolidated SFS statutes. SFS text is consolidated published text, not a point-in-time legal version.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"documentId"
],
"properties": {
"revision": {
"type": "string",
"description": "Revision returned by a previous call; rejects changed records."
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Select metadata, decisions, reservations, activities, properties, attachments, references, stakeholders, text or source_html. Omit for metadata, complete outline and first text page."
},
"documentId": {
"type": "string",
"minLength": 1,
"description": "Document ID from riksdag_search_documents, or unambiguous SFS YYYY:N identifier."
},
"htmlLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit source HTML length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"htmlOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Source HTML offset in Unicode code points."
},
"textLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit text length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"textOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Text offset in Unicode code points."
},
"sectionLimit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested entries per selected array section; applied maximum 100."
},
"sectionOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Offset applied independently to each selected array section."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"found",
"documentId",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"text": {
"type": "string",
"description": "Selected canonical text page, unchanged on both surfaces."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_filter",
"revision_changed",
"unknown_section",
"upstream_identity_mismatch",
"upstream_schema_invalid",
"upstream_unavailable",
"upstream_queue_full"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: A malformed document identifier is supplied. `revision_changed`: The source record changed between continuation calls. `unknown_section`: A selected document section is unrecognized. `upstream_identity_mismatch`: The status response contradicts the requested document ID. `upstream_schema_invalid`: Present payload violates the wire contract. `upstream_unavailable`: The source remains unavailable after retries. `upstream_queue_full`: The process upstream queue is full. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "Whether the source record exists."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"outline": {
"type": "array",
"items": {
"type": "object",
"required": [
"section",
"available"
],
"properties": {
"section": {
"enum": [
"metadata",
"decisions",
"reservations",
"activities",
"properties",
"attachments",
"references",
"stakeholders",
"text",
"source_html"
],
"type": "string",
"description": "Selectable section key."
},
"available": {
"type": "boolean",
"description": "Whether the source publishes this section."
},
"itemCount": {
"type": "number",
"description": "Complete section entry count."
},
"textLength": {
"type": "number",
"description": "Complete text length in Unicode code points."
}
},
"description": "One section and its complete available size.",
"additionalProperties": false
},
"description": "Every selectable section and its complete size."
},
"guidance": {
"type": "string",
"description": "How to resolve a missing identifier."
},
"metadata": {
"type": "object",
"required": [
"documentId",
"sourceUrl",
"statusUrl"
],
"properties": {
"date": {
"type": "string",
"description": "Document date at source precision."
},
"title": {
"type": "string",
"description": "Source-authored title."
},
"session": {
"type": "string",
"description": "Published parliamentary session."
},
"subtype": {
"type": "string",
"description": "Source document subtype code."
},
"subtitle": {
"type": "string",
"description": "Source-authored subtitle."
},
"committee": {
"type": "string",
"description": "Published responsible organ."
},
"sourceUrl": {
"type": "string",
"description": "Source document link."
},
"statusUrl": {
"type": "string",
"description": "Fixed-origin source status JSON link."
},
"documentId": {
"type": "string",
"description": "Canonical document ID."
},
"systemDate": {
"type": "string",
"description": "Source system timestamp at published precision."
},
"designation": {
"type": "string",
"description": "Published document designation, distinct from its ID."
},
"publishedAt": {
"type": "string",
"description": "Publication timestamp at source precision."
},
"versionKind": {
"type": "string",
"const": "consolidated",
"description": "SFS published consolidation, not a point-in-time legal version."
},
"documentType": {
"type": "string",
"description": "Source document type code."
},
"chamberStatus": {
"type": "string",
"description": "Authoritative chamber status property, when published."
},
"sourceTextUrl": {
"type": "string",
"description": "Published source text-route link; not necessarily plain text."
},
"publicationStatus": {
"type": "string",
"description": "Publication status; separate from chamber decision status."
},
"consolidationLabel": {
"type": "string",
"description": "Published SFS consolidation subtitle."
}
},
"description": "Source publication metadata and links.",
"additionalProperties": false
},
"revision": {
"type": "string",
"description": "Hash of the complete normalized record."
},
"decisions": {
"type": "array",
"items": {
"type": "object",
"required": [
"point"
],
"properties": {
"point": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive report point number.",
"exclusiveMinimum": 0
},
"report": {
"type": "string",
"description": "Decision committee-report designation."
},
"voteId": {
"type": "string",
"description": "Published roll-call identifier."
},
"winner": {
"type": "string",
"description": "Published winning proposal label."
},
"heading": {
"type": "string",
"description": "Source-authored point heading."
},
"session": {
"type": "string",
"description": "Decision parliamentary session."
},
"summary": {
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "One published summary row.",
"additionalProperties": false
},
"description": "Ordered published body rows when a body is available."
},
"text": {
"type": "string",
"description": "Published summary text when the source provides a string instead of a table."
},
"footer": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "Published totals row, when available.",
"additionalProperties": false
},
"caption": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Published caption text, separate from its heading."
},
"heading": {
"type": "string",
"description": "Published bold caption."
}
},
"description": "Published caption components.",
"additionalProperties": false
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ordered published column headings when a header is available."
},
"heading": {
"type": "string",
"description": "Published heading of a historical summary."
},
"proposal": {
"type": "string",
"description": "Published proposal of a historical summary."
}
},
"description": "Published singleton summary text or normalized table.",
"additionalProperties": false
},
"proposal": {
"type": "string",
"description": "Readable source-authored proposal in Markdown."
},
"pointType": {
"type": "string",
"description": "Published point-type label."
},
"sourceUrl": {
"type": "string",
"description": "Published roll-call source link."
},
"summaries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "One published summary row.",
"additionalProperties": false
},
"description": "Ordered published body rows when a body is available."
},
"text": {
"type": "string",
"description": "Published summary text when the source provides a string instead of a table."
},
"footer": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "Published totals row, when available.",
"additionalProperties": false
},
"caption": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Published caption text, separate from its heading."
},
"heading": {
"type": "string",
"description": "Published bold caption."
}
},
"description": "Published caption components.",
"additionalProperties": false
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ordered published column headings when a header is available."
},
"heading": {
"type": "string",
"description": "Published heading of a historical summary."
},
"proposal": {
"type": "string",
"description": "Published proposal of a historical summary."
}
},
"description": "Published vote-summary table without HTML wrapper layers.",
"additionalProperties": false
},
"description": "Every published summary when the source supplies an array."
},
"decisionType": {
"type": "string",
"description": "Published decision method; acclamation is authoritative only here."
},
"decisionRuleQuota": {
"type": "string",
"description": "Published decision-rule quota."
},
"votingRequirement": {
"type": "string",
"description": "Published voting requirement."
},
"proposalSourceHtml": {
"type": "string",
"description": "Original source proposal HTML."
},
"counterProposalNumber": {
"type": "string",
"description": "Source counterproposal number."
},
"decisionRuleParagraph": {
"type": "string",
"description": "Published decision-rule provision."
},
"counterProposalParties": {
"type": "string",
"description": "Source counterproposal party expression."
}
},
"description": "One complete published report decision.",
"additionalProperties": false
},
"description": "Selected page of authoritative report points."
},
"truncated": {
"type": "boolean",
"description": "At least one selected array section has more entries or a response-fitted page; follow its sectionPages continuation."
},
"activities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Source event code."
},
"date": {
"type": "string",
"description": "Event date at source precision."
},
"name": {
"type": "string",
"description": "Source event name."
},
"status": {
"type": "string",
"description": "Published event status."
},
"process": {
"type": "string",
"description": "Published process label."
}
},
"description": "One source process event.",
"additionalProperties": false
},
"description": "Selected process-event page."
},
"documentId": {
"type": "string",
"description": "Normalized document identifier."
},
"htmlOffset": {
"type": "number",
"description": "Returned HTML offset in code points."
},
"properties": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "Source property code."
},
"name": {
"type": "string",
"description": "Source property name."
},
"text": {
"type": "string",
"description": "Published property value; HTML notice properties are readable Markdown."
},
"sourceHtml": {
"type": "string",
"description": "Original HTML of a published notice property."
}
},
"description": "One published document property.",
"additionalProperties": false
},
"description": "Selected property page."
},
"references": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Linked source title."
},
"session": {
"type": "string",
"description": "Linked document session."
},
"subtitle": {
"type": "string",
"description": "Linked source subtitle."
},
"documentId": {
"type": "string",
"description": "Linked canonical document ID."
},
"description": {
"type": "string",
"description": "Source relationship description."
},
"designation": {
"type": "string",
"description": "Linked document designation."
},
"documentType": {
"type": "string",
"description": "Linked document type code."
},
"relationship": {
"type": "string",
"description": "Published relationship type."
}
},
"description": "One source-provided relationship.",
"additionalProperties": false
},
"description": "Selected relationship page."
},
"sourceHtml": {
"type": "string",
"description": "Separately selected original source HTML page."
},
"textOffset": {
"type": "number",
"description": "Returned text offset in Unicode code points."
},
"attachments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Published file type."
},
"title": {
"type": "string",
"description": "Source attachment title."
},
"filename": {
"type": "string",
"description": "Published attachment filename."
},
"subtitle": {
"type": "string",
"description": "Source attachment subtitle."
},
"sizeBytes": {
"type": "string",
"description": "Published file size in bytes, retained as a source string."
},
"sourceUrl": {
"type": "string",
"description": "Attachment download link; never fetched by this tool."
}
},
"description": "One source attachment link.",
"additionalProperties": false
},
"description": "Selected linked-attachment page."
},
"htmlHasMore": {
"type": "boolean",
"description": "Whether source HTML remains."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"textHasMore": {
"type": "boolean",
"description": "Whether canonical text remains."
},
"nextHtmlCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"documentId",
"textOffset",
"htmlOffset",
"sectionOffset",
"sectionLimit"
],
"properties": {
"revision": {
"type": "string",
"description": "Revision returned by a previous call; rejects changed records."
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Select metadata, decisions, reservations, activities, properties, attachments, references, stakeholders, text or source_html. Omit for metadata, complete outline and first text page."
},
"documentId": {
"type": "string",
"minLength": 1,
"description": "Document ID from riksdag_search_documents, or unambiguous SFS YYYY:N identifier."
},
"htmlLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit source HTML length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"htmlOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Source HTML offset in Unicode code points."
},
"textLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit text length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"textOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Text offset in Unicode code points."
},
"sectionLimit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested entries per selected array section; applied maximum 100."
},
"sectionOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Offset applied independently to each selected array section."
}
},
"description": "Complete normalized continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_get_document",
"description": "Tool to call next."
}
},
"description": "Complete continuation for source HTML.",
"additionalProperties": false
},
"nextTextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"documentId",
"textOffset",
"htmlOffset",
"sectionOffset",
"sectionLimit"
],
"properties": {
"revision": {
"type": "string",
"description": "Revision returned by a previous call; rejects changed records."
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Select metadata, decisions, reservations, activities, properties, attachments, references, stakeholders, text or source_html. Omit for metadata, complete outline and first text page."
},
"documentId": {
"type": "string",
"minLength": 1,
"description": "Document ID from riksdag_search_documents, or unambiguous SFS YYYY:N identifier."
},
"htmlLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit source HTML length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"htmlOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Source HTML offset in Unicode code points."
},
"textLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit text length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"textOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Text offset in Unicode code points."
},
"sectionLimit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested entries per selected array section; applied maximum 100."
},
"sectionOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Offset applied independently to each selected array section."
}
},
"description": "Complete normalized continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_get_document",
"description": "Tool to call next."
}
},
"description": "Complete continuation for canonical text.",
"additionalProperties": false
},
"reservations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "Published reservation type."
},
"point": {
"type": "string",
"description": "Related report point."
},
"number": {
"type": "string",
"description": "Published reservation number."
},
"heading": {
"type": "string",
"description": "Source reservation heading."
},
"parties": {
"type": "string",
"description": "Source party expression."
}
},
"description": "One source reservation.",
"additionalProperties": false
},
"description": "Selected reservation page."
},
"sectionPages": {
"type": "array",
"items": {
"type": "object",
"required": [
"section",
"totalCount",
"offset",
"limit",
"requestedLimit",
"truncated",
"returnedCount",
"hasMore"
],
"properties": {
"limit": {
"type": "number",
"description": "Applied page limit after response fitting."
},
"offset": {
"type": "number",
"description": "Applied entry offset."
},
"hasMore": {
"type": "boolean",
"description": "Whether entries remain after this section page."
},
"section": {
"enum": [
"decisions",
"reservations",
"activities",
"properties",
"attachments",
"references",
"stakeholders"
],
"type": "string",
"description": "Selected array section."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"documentId",
"textOffset",
"htmlOffset",
"sectionOffset",
"sectionLimit"
],
"properties": {
"revision": {
"type": "string",
"description": "Revision returned by a previous call; rejects changed records."
},
"sections": {
"type": "array",
"items": {
"type": "string"
},
"description": "Select metadata, decisions, reservations, activities, properties, attachments, references, stakeholders, text or source_html. Omit for metadata, complete outline and first text page."
},
"documentId": {
"type": "string",
"minLength": 1,
"description": "Document ID from riksdag_search_documents, or unambiguous SFS YYYY:N identifier."
},
"htmlLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit source HTML length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"htmlOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Source HTML offset in Unicode code points."
},
"textLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Explicit text length in code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"textOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Text offset in Unicode code points."
},
"sectionLimit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested entries per selected array section; applied maximum 100."
},
"sectionOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Offset applied independently to each selected array section."
}
},
"description": "Complete normalized continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_get_document",
"description": "Tool to call next."
}
},
"description": "Complete continuation for this section only.",
"additionalProperties": false
},
"truncated": {
"type": "boolean",
"description": "Whether response fitting shortened this section page."
},
"totalCount": {
"type": "number",
"description": "Complete entry count in this section."
},
"returnedCount": {
"type": "number",
"description": "Actual returned section entries."
},
"requestedLimit": {
"type": "number",
"description": "Original requested section limit."
}
},
"description": "Independent pagination for one selected section.",
"additionalProperties": false
},
"description": "Independent counts and complete continuation for every selected array."
},
"stakeholders": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Published participant name."
},
"role": {
"type": "string",
"description": "Published participant role."
},
"order": {
"type": "string",
"description": "Published order value."
},
"party": {
"type": "string",
"description": "Published party expression."
},
"memberId": {
"type": "string",
"description": "Published numeric IID, preserving leading zeros."
}
},
"description": "One source stakeholder, including entries without an IID.",
"additionalProperties": false
},
"description": "Selected page of source participants, retaining entries without an IID."
},
"textAvailable": {
"type": "boolean",
"description": "Whether a published canonical body exists."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"htmlTotalLength": {
"type": "number",
"description": "Complete HTML code-point length."
},
"textTotalLength": {
"type": "number",
"description": "Complete canonical text length in code points."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
},
"htmlReturnedLength": {
"type": "number",
"description": "Returned HTML code points."
},
"textRepresentation": {
"enum": [
"source_text",
"markdown"
],
"type": "string",
"description": "Source SFS text or canonical converted Markdown."
},
"textReturnedLength": {
"type": "number",
"description": "Actual returned text code points."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}riksdag_search_members — Search parliamentary members
Find members and ministers by name, party, constituency and service status. Defaults to the service register; register all includes earlier source records through a larger cold request that may time out. Use numeric memberId with riksdag_get_member for assignment history.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested rows; applied maximum 100."
},
"party": {
"type": "string",
"description": "Party code or exact reference label."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Local row offset."
},
"sitting": {
"enum": [
"all",
"serving",
"not_serving"
],
"type": "string",
"default": "all",
"description": "Source service classification; all retains unknown status."
},
"register": {
"enum": [
"service",
"all"
],
"type": "string",
"default": "service",
"description": "Register scope; all includes historical records and can require a large cold request that reaches the normal timeout."
},
"revision": {
"type": "string",
"description": "Revision returned by a preceding page."
},
"constituency": {
"type": "string",
"description": "Exact constituency reference label or code, applied locally."
},
"nameContains": {
"type": "string",
"description": "Strict all-token local name filter, ignoring case and diacritics."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"items",
"candidateCount",
"sourceReportedCount",
"totalCount",
"returnedCount",
"offset",
"limit",
"requestedLimit",
"truncated",
"hasMore",
"revision",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_filter",
"revision_changed",
"upstream_identity_mismatch",
"upstream_schema_invalid",
"upstream_unavailable",
"upstream_queue_full",
"candidate_limit_reached"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: Unknown code or malformed identifier. `revision_changed`: Continuation revision no longer matches. `upstream_identity_mismatch`: Detail identity or filter rows contradict required identity. `upstream_schema_invalid`: Present payload violates wire contract. `upstream_unavailable`: Network or service error after retries. `upstream_queue_full`: Process upstream queue is full. `candidate_limit_reached`: Complete-list safety boundary reached. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"detailAvailable",
"serviceClassification",
"sourceUrl"
],
"properties": {
"name": {
"type": "string",
"description": "Published given and family names, when present."
},
"party": {
"type": "string",
"description": "Published party code."
},
"status": {
"type": "string",
"description": "Unmodified source service-status label."
},
"memberId": {
"type": "string",
"description": "Numeric register IID, including leading zeros; absent for some historical and European Parliament entries."
},
"givenName": {
"type": "string",
"description": "Published given name."
},
"sourceUrl": {
"type": "string",
"description": "Public register source URL."
},
"familyName": {
"type": "string",
"description": "Published family name."
},
"constituency": {
"type": "string",
"description": "Published constituency label."
},
"sourceRecordId": {
"type": "string",
"description": "Source register UUID, distinct from the member IID."
},
"detailAvailable": {
"type": "boolean",
"description": "Whether a numeric member IID is published for riksdag_get_member."
},
"serviceClassification": {
"enum": [
"serving",
"not_serving",
"unknown"
],
"type": "string",
"description": "Source-defined Swedish chamber service; unknown is retained."
}
},
"description": "Public member register metadata.",
"additionalProperties": false
},
"description": "Filtered member-register rows."
},
"limit": {
"type": "number",
"description": "Applied row limit."
},
"offset": {
"type": "number",
"description": "Applied local offset."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"hasMore": {
"type": "boolean",
"description": "Whether filtered rows remain."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"register",
"sitting",
"offset",
"limit"
],
"properties": {
"limit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested rows; applied maximum 100."
},
"party": {
"type": "string",
"description": "Party code or exact reference label."
},
"offset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Local row offset."
},
"sitting": {
"enum": [
"all",
"serving",
"not_serving"
],
"type": "string",
"default": "all",
"description": "Source service classification; all retains unknown status."
},
"register": {
"enum": [
"service",
"all"
],
"type": "string",
"default": "service",
"description": "Register scope; all includes historical records and can require a large cold request that reaches the normal timeout."
},
"revision": {
"type": "string",
"description": "Revision returned by a preceding page."
},
"constituency": {
"type": "string",
"description": "Exact constituency reference label or code, applied locally."
},
"nameContains": {
"type": "string",
"description": "Strict all-token local name filter, ignoring case and diacritics."
}
},
"description": "Complete normalized next-page arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_search_members",
"description": "Tool to call next."
}
},
"description": "Complete next-page call.",
"additionalProperties": false
},
"revision": {
"type": "string",
"description": "Complete candidate-set revision."
},
"truncated": {
"type": "boolean",
"description": "Whether response fitting shortened the selected page."
},
"totalCount": {
"type": "number",
"description": "Exact count after local filtering."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"returnedCount": {
"type": "number",
"description": "Rows in this page."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"candidateCount": {
"type": "number",
"description": "Actual returned candidate records in the selected register scope."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"requestedLimit": {
"type": "number",
"description": "Requested row limit before clamping and fitting."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
},
"sourceReportedCount": {
"type": "number",
"description": "Source-reported register hits; may differ from actual returned candidates in all scope."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}riksdag_get_member — Read parliamentary member
Read one member register entry and assignment history by exact member ID. Assignment dates preserve source precision and do not establish historical sitting status.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"memberId"
],
"properties": {
"memberId": {
"type": "string",
"minLength": 1,
"description": "Numeric memberId from riksdag_search_members, including leading zeros."
},
"revision": {
"type": "string",
"description": "Revision returned by the preceding assignment page."
},
"assignmentLimit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested assignments; applied maximum 100."
},
"assignmentOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Assignment offset in published source order."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"found",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"description": "Published given and family names, when present."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_filter",
"revision_changed",
"upstream_identity_mismatch",
"upstream_schema_invalid",
"upstream_unavailable",
"upstream_queue_full",
"candidate_limit_reached"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: Unknown code or malformed identifier. `revision_changed`: Continuation revision no longer matches. `upstream_identity_mismatch`: Detail identity or filter rows contradict required identity. `upstream_schema_invalid`: Present payload violates wire contract. `upstream_unavailable`: Network or service error after retries. `upstream_queue_full`: Process upstream queue is full. `candidate_limit_reached`: Complete-list safety boundary reached. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "Whether the exact member IID exists."
},
"party": {
"type": "string",
"description": "Published party code."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"status": {
"type": "string",
"description": "Unmodified source service-status label."
},
"hasMore": {
"type": "boolean",
"description": "Whether assignments remain."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"guidance": {
"type": "string",
"description": "Next step when the member IID is absent."
},
"memberId": {
"type": "string",
"description": "Numeric register IID, including leading zeros; absent for some historical and European Parliament entries."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"memberId",
"assignmentOffset",
"assignmentLimit"
],
"properties": {
"memberId": {
"type": "string",
"minLength": 1,
"description": "Numeric memberId from riksdag_search_members, including leading zeros."
},
"revision": {
"type": "string",
"description": "Revision returned by the preceding assignment page."
},
"assignmentLimit": {
"type": "integer",
"default": 20,
"maximum": 9007199254740991,
"minimum": 1,
"description": "Requested assignments; applied maximum 100."
},
"assignmentOffset": {
"type": "integer",
"default": 0,
"maximum": 9007199254740991,
"minimum": 0,
"description": "Assignment offset in published source order."
}
},
"description": "Complete normalized next-assignment arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_get_member",
"description": "Tool to call next."
}
},
"description": "Complete next-assignment call.",
"additionalProperties": false
},
"revision": {
"type": "string",
"description": "Complete normalized member record revision."
},
"givenName": {
"type": "string",
"description": "Published given name."
},
"sourceUrl": {
"type": "string",
"description": "Public register source URL."
},
"truncated": {
"type": "boolean",
"description": "Whether further assignments remain available through nextCall."
},
"familyName": {
"type": "string",
"description": "Published family name."
},
"assignments": {
"type": "array",
"items": {
"type": "object",
"required": [
"descriptions"
],
"properties": {
"to": {
"type": "string",
"description": "Source end date or timestamp; not proof of current service."
},
"from": {
"type": "string",
"description": "Source start date or timestamp, without inferred timezone."
},
"role": {
"type": "string",
"description": "Source role label."
},
"type": {
"type": "string",
"description": "Source assignment type."
},
"organ": {
"type": "string",
"description": "Source organ code."
},
"status": {
"type": "string",
"description": "Source assignment status."
},
"descriptions": {
"type": "array",
"items": {
"type": "string",
"description": "Unmodified assignment description."
},
"description": "Published descriptions in source order."
}
},
"description": "A published assignment.",
"additionalProperties": false
},
"description": "Published assignments in source order."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"constituency": {
"type": "string",
"description": "Published constituency label."
},
"returnedCount": {
"type": "number",
"description": "Assignments returned on this page."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"sourceRecordId": {
"type": "string",
"description": "Source register UUID, distinct from the member IID."
},
"assignmentLimit": {
"type": "number",
"description": "Applied assignment limit."
},
"assignmentTotal": {
"type": "number",
"description": "Exact total published assignments."
},
"detailAvailable": {
"type": "boolean",
"description": "Whether a numeric member IID is published for riksdag_get_member."
},
"assignmentOffset": {
"type": "number",
"description": "Applied assignment offset."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
},
"serviceClassification": {
"enum": [
"serving",
"not_serving",
"unknown"
],
"type": "string",
"description": "Source-defined Swedish chamber service; unknown is retained."
},
"requestedAssignmentLimit": {
"type": "number",
"description": "Requested assignment limit before clamping and fitting."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}riksdag_search_speeches — Search and read parliamentary speeches
Search speeches within a required parliamentary session, optionally by member, party, reply exclusion and heading tokens. Heading matching searches debate headings only, never body text. Search hydrates one text page by default; use get mode with an item speechId to read all remaining text and retain the returned revision for continuation.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"mode": {
"enum": [
"search",
"get"
],
"type": "string",
"description": "Search by default; get reads one retrieval speechId."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Search only: requested rows, default 5 and applied maximum 20."
},
"party": {
"type": "string",
"description": "Search only: official party code or exact reference label."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Search only: local row offset, default 0."
},
"session": {
"type": "string",
"description": "Required in search mode; parliamentary session such as 2024/25."
},
"memberId": {
"type": "string",
"description": "Search only: numeric memberId from riksdag_search_members, retaining leading zeros."
},
"revision": {
"type": "string",
"description": "Search candidate revision or get textRevision copied from the preceding page."
},
"speechId": {
"type": "string",
"description": "Required in get mode: retrieval ID copied from a search item, never the source UUID."
},
"textCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Search only: maximum speeches to request text for, default 1 and applied maximum 5; 0 returns metadata."
},
"speechType": {
"enum": [
"all",
"speech"
],
"type": "string",
"description": "Search only: all by default; speech excludes replies."
},
"textLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Get only: requested Unicode code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"textOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Get only: Unicode code-point offset, default 0."
},
"headingContains": {
"type": "string",
"description": "Search only: all-token local heading and subheading filter, ignoring case and diacritics; never body search."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"item": {
"type": "object",
"required": [
"speechId",
"protocolDocumentId",
"sourceUrl",
"textState"
],
"properties": {
"date": {
"type": "string",
"description": "Published date or date-time with source precision."
},
"text": {
"type": "string",
"description": "Canonical Markdown body page, preserving Unicode code points."
},
"party": {
"type": "string",
"description": "Published party code."
},
"reply": {
"type": "boolean",
"description": "Whether the source explicitly marks this as a reply."
},
"heading": {
"type": "string",
"description": "Published debate heading."
},
"session": {
"type": "string",
"description": "Published parliamentary session."
},
"speaker": {
"type": "string",
"description": "Published speaker name and title."
},
"activity": {
"type": "string",
"description": "Published chamber activity."
},
"memberId": {
"type": "string",
"description": "Published member IID, including leading zeros."
},
"speechId": {
"type": "string",
"description": "Retrieval ID for get mode; protocol document ID and speech number."
},
"sourceUrl": {
"type": "string",
"description": "Fixed-origin speech detail source link."
},
"textState": {
"enum": [
"included",
"not_requested",
"unavailable",
"failed"
],
"type": "string",
"description": "Whether text is included, deferred, unpublished or failed to load."
},
"subheading": {
"type": "string",
"description": "Published debate subheading."
},
"textOffset": {
"type": "number",
"description": "Applied Unicode code-point offset."
},
"protocolUrl": {
"type": "string",
"description": "Published protocol link and speech anchor."
},
"textFailure": {
"type": "object",
"required": [
"code",
"reason",
"recovery"
],
"properties": {
"code": {
"type": "number",
"description": "Classified transient upstream error code."
},
"reason": {
"type": "string",
"description": "Stable transient failure reason."
},
"recovery": {
"type": "string",
"description": "How to retry this speech detail."
}
},
"description": "Explicit transient detail failure; never an empty-body assertion.",
"additionalProperties": false
},
"textHasMore": {
"type": "boolean",
"description": "Whether canonical body text remains."
},
"nextTextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"mode",
"speechId"
],
"properties": {
"mode": {
"type": "string",
"const": "get",
"description": "Read a single speech."
},
"revision": {
"type": "string",
"description": "Complete detail record revision."
},
"speechId": {
"type": "string",
"description": "Exact speech retrieval ID."
},
"textLength": {
"type": "number",
"description": "Explicit text-page size when supplied."
},
"textOffset": {
"type": "number",
"description": "Next Unicode code-point offset."
}
},
"description": "Complete get-mode continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_search_speeches",
"description": "Tool to call for speech text."
}
},
"description": "Complete get call to retrieve deferred or remaining body text.",
"additionalProperties": false
},
"textRevision": {
"type": "string",
"description": "Complete normalized detail record and canonical body revision."
},
"protocolTitle": {
"type": "string",
"description": "Published protocol title."
},
"sourceHtmlUrl": {
"type": "string",
"description": "Published speech HTML link."
},
"sourceSpeechId": {
"type": "string",
"description": "Source speech UUID, distinct from the retrieval ID."
},
"textTotalLength": {
"type": "number",
"description": "Complete canonical body length in Unicode code points."
},
"relatedDocumentId": {
"type": "string",
"description": "Source-linked related document ID."
},
"protocolDocumentId": {
"type": "string",
"description": "Document ID of the chamber protocol."
},
"textReturnedLength": {
"type": "number",
"description": "Code points returned in this page."
}
},
"description": "Get mode: exact speech metadata and text page.",
"additionalProperties": false
},
"mode": {
"enum": [
"search",
"get"
],
"type": "string",
"description": "Applied search or detail mode."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_filter",
"revision_changed",
"upstream_identity_mismatch",
"upstream_schema_invalid",
"upstream_unavailable",
"upstream_queue_full",
"candidate_limit_reached"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: Unknown code, conflicting mode fields or malformed identifier. `revision_changed`: Continuation revision no longer matches. `upstream_identity_mismatch`: Detail identity/filter rows contradict required identity. `upstream_schema_invalid`: Present payload violates wire contract. `upstream_unavailable`: Network/5xx or HTML error page after retries. `upstream_queue_full`: Process upstream queue is full. `candidate_limit_reached`: Complete-list safety boundary reached. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "Get mode: whether the retrieval ID exists."
},
"items": {
"type": "array",
"items": {
"type": "object",
"required": [
"speechId",
"protocolDocumentId",
"sourceUrl",
"textState"
],
"properties": {
"date": {
"type": "string",
"description": "Published date or date-time with source precision."
},
"text": {
"type": "string",
"description": "Canonical Markdown body page, preserving Unicode code points."
},
"party": {
"type": "string",
"description": "Published party code."
},
"reply": {
"type": "boolean",
"description": "Whether the source explicitly marks this as a reply."
},
"heading": {
"type": "string",
"description": "Published debate heading."
},
"session": {
"type": "string",
"description": "Published parliamentary session."
},
"speaker": {
"type": "string",
"description": "Published speaker name and title."
},
"activity": {
"type": "string",
"description": "Published chamber activity."
},
"memberId": {
"type": "string",
"description": "Published member IID, including leading zeros."
},
"speechId": {
"type": "string",
"description": "Retrieval ID for get mode; protocol document ID and speech number."
},
"sourceUrl": {
"type": "string",
"description": "Fixed-origin speech detail source link."
},
"textState": {
"enum": [
"included",
"not_requested",
"unavailable",
"failed"
],
"type": "string",
"description": "Whether text is included, deferred, unpublished or failed to load."
},
"subheading": {
"type": "string",
"description": "Published debate subheading."
},
"textOffset": {
"type": "number",
"description": "Applied Unicode code-point offset."
},
"protocolUrl": {
"type": "string",
"description": "Published protocol link and speech anchor."
},
"textFailure": {
"type": "object",
"required": [
"code",
"reason",
"recovery"
],
"properties": {
"code": {
"type": "number",
"description": "Classified transient upstream error code."
},
"reason": {
"type": "string",
"description": "Stable transient failure reason."
},
"recovery": {
"type": "string",
"description": "How to retry this speech detail."
}
},
"description": "Explicit transient detail failure; never an empty-body assertion.",
"additionalProperties": false
},
"textHasMore": {
"type": "boolean",
"description": "Whether canonical body text remains."
},
"nextTextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"mode",
"speechId"
],
"properties": {
"mode": {
"type": "string",
"const": "get",
"description": "Read a single speech."
},
"revision": {
"type": "string",
"description": "Complete detail record revision."
},
"speechId": {
"type": "string",
"description": "Exact speech retrieval ID."
},
"textLength": {
"type": "number",
"description": "Explicit text-page size when supplied."
},
"textOffset": {
"type": "number",
"description": "Next Unicode code-point offset."
}
},
"description": "Complete get-mode continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_search_speeches",
"description": "Tool to call for speech text."
}
},
"description": "Complete get call to retrieve deferred or remaining body text.",
"additionalProperties": false
},
"textRevision": {
"type": "string",
"description": "Complete normalized detail record and canonical body revision."
},
"protocolTitle": {
"type": "string",
"description": "Published protocol title."
},
"sourceHtmlUrl": {
"type": "string",
"description": "Published speech HTML link."
},
"sourceSpeechId": {
"type": "string",
"description": "Source speech UUID, distinct from the retrieval ID."
},
"textTotalLength": {
"type": "number",
"description": "Complete canonical body length in Unicode code points."
},
"relatedDocumentId": {
"type": "string",
"description": "Source-linked related document ID."
},
"protocolDocumentId": {
"type": "string",
"description": "Document ID of the chamber protocol."
},
"textReturnedLength": {
"type": "number",
"description": "Code points returned in this page."
}
},
"description": "Speech metadata and explicit text retrieval state.",
"additionalProperties": false
},
"description": "Search mode: local speech page after heading filtering."
},
"limit": {
"type": "number",
"description": "Applied search page size after clamp and response fitting."
},
"offset": {
"type": "number",
"description": "Applied local row offset."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"hasMore": {
"type": "boolean",
"description": "Whether filtered speech rows remain."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"guidance": {
"type": "string",
"description": "Recovery guidance for an expected detail miss."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"properties": {
"mode": {
"enum": [
"search",
"get"
],
"type": "string",
"description": "Search by default; get reads one retrieval speechId."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Search only: requested rows, default 5 and applied maximum 20."
},
"party": {
"type": "string",
"description": "Search only: official party code or exact reference label."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Search only: local row offset, default 0."
},
"session": {
"type": "string",
"description": "Required in search mode; parliamentary session such as 2024/25."
},
"memberId": {
"type": "string",
"description": "Search only: numeric memberId from riksdag_search_members, retaining leading zeros."
},
"revision": {
"type": "string",
"description": "Search candidate revision or get textRevision copied from the preceding page."
},
"speechId": {
"type": "string",
"description": "Required in get mode: retrieval ID copied from a search item, never the source UUID."
},
"textCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Search only: maximum speeches to request text for, default 1 and applied maximum 5; 0 returns metadata."
},
"speechType": {
"enum": [
"all",
"speech"
],
"type": "string",
"description": "Search only: all by default; speech excludes replies."
},
"textLength": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 1,
"description": "Get only: requested Unicode code points; defaults start at 8000 and fit the complete response; explicit lengths are honored."
},
"textOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Get only: Unicode code-point offset, default 0."
},
"headingContains": {
"type": "string",
"description": "Search only: all-token local heading and subheading filter, ignoring case and diacritics; never body search."
}
},
"description": "Complete normalized next-page arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_search_speeches",
"description": "Tool to call for the next local row page."
}
},
"description": "Complete next local search-page call.",
"additionalProperties": false
},
"revision": {
"type": "string",
"description": "Search candidate-set revision or complete get detail revision."
},
"speechId": {
"type": "string",
"description": "Get mode: requested retrieval ID."
},
"textCount": {
"type": "number",
"description": "Applied maximum speeches selected for text retrieval."
},
"truncated": {
"type": "boolean",
"description": "Whether response fitting shortened the local row page."
},
"totalCount": {
"type": "number",
"description": "Exact local heading-filtered match count."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"returnedCount": {
"type": "number",
"description": "Speech rows returned on this page."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"candidateCount": {
"type": "number",
"description": "Complete validated upstream candidate count."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"requestedLimit": {
"type": "number",
"description": "Original requested search page size."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}riksdag_get_votes — Read parliamentary main votes
Read authoritative report decisions and party main-vote groups separated by avser, or a member’s session main votes. Report mode requires report or documentId; ballots true with an explicit point adds individual member ballots and independent ballotPage continuation. Member mode requires memberId. Follow complete local continuation calls. Main votes do not include every ballot round; empty rows never prove acclamation.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"mode",
"session"
],
"properties": {
"mode": {
"enum": [
"report",
"member"
],
"type": "string",
"description": "Report decision points or one member’s session main votes."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Member or report-ballot requested rows; default 20, applied maximum 500.",
"exclusiveMinimum": 0
},
"party": {
"type": "string",
"description": "Member-mode local party filter; report party groups are always complete."
},
"point": {
"type": "integer",
"maximum": 9007199254740991,
"description": "One authoritative report point; omit to traverse all points.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Member or explicit report-ballot local row offset; default 0."
},
"report": {
"type": "string",
"description": "Report designation or session:designation; report mode only."
},
"ballots": {
"type": "boolean",
"description": "Report mode only: include individual ballots for an explicit point; default false."
},
"session": {
"type": "string",
"minLength": 1,
"description": "Required parliamentary session, for example 2024/25."
},
"memberId": {
"type": "string",
"description": "Required in member mode: numeric memberId from riksdag_search_members, including leading zeros."
},
"revision": {
"type": "string",
"description": "Returned complete-candidate or report-catalog revision for consistent continuation."
},
"documentId": {
"type": "string",
"description": "Report mode: documentId from riksdag_search_documents with documentType bet; alternative to report."
},
"pointLimit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "All-points report page size; default 5, applied maximum 10.",
"exclusiveMinimum": 0
},
"pointOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "All-points report local offset; default 0."
},
"ballotRevision": {
"type": "string",
"description": "Returned ballot-page revision for consistent report-ballot continuation."
}
},
"additionalProperties": false
}{
"type": "object",
"anyOf": [
{
"not": {
"required": [
"error"
]
},
"required": [
"mode",
"session",
"found",
"effectiveQuery",
"source",
"retrievedAt",
"notices"
]
},
{
"required": [
"error"
]
}
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"mode": {
"enum": [
"report",
"member"
],
"type": "string",
"description": "Applied workflow."
},
"error": {
"type": "object",
"required": [
"code",
"message"
],
"properties": {
"code": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "JSON-RPC error code for this failure."
},
"data": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"examples": [
"invalid_filter",
"revision_changed",
"unknown_point",
"ambiguous_report",
"upstream_identity_mismatch",
"upstream_schema_invalid",
"upstream_unavailable",
"upstream_queue_full",
"candidate_limit_reached"
],
"description": "Machine-readable failure mode. Declared by this tool: `invalid_filter`: Mode fields conflict, a required mode identifier is missing, or a filter is invalid. `revision_changed`: The complete record changed during continuation. `unknown_point`: The existing report lacks the requested point. `ambiguous_report`: More than one exact report matched. `upstream_identity_mismatch`: Source identities contradict the required selection. `upstream_schema_invalid`: Present payload violates the wire contract. `upstream_unavailable`: Network or source failure remains after retries. `upstream_queue_full`: Process upstream queue is full. `candidate_limit_reached`: The complete main-ballot candidate boundary is reached. Other values are possible when a failure originates below the handler."
},
"recovery": {
"type": "object",
"required": [
"hint"
],
"properties": {
"hint": {
"type": "string"
}
},
"description": "Actionable next step for the caller.",
"additionalProperties": {}
},
"retryable": {
"type": "boolean",
"description": "Whether retrying may succeed."
}
},
"additionalProperties": {}
},
"message": {
"type": "string",
"description": "Human-readable description of what went wrong."
}
},
"description": "Present when the call failed. Absent on success.",
"additionalProperties": {}
},
"found": {
"type": "boolean",
"description": "Whether the selected report or member-vote selection is available; empty member rows remain a successful selection."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied member row limit after fitting."
},
"party": {
"type": "string",
"description": "Applied member-mode party filter."
},
"votes": {
"type": "array",
"items": {
"type": "object",
"required": [
"voteId",
"memberId",
"session"
],
"properties": {
"date": {
"type": "string",
"description": "Vote date at source precision."
},
"name": {
"type": "string",
"description": "Source-authored member name."
},
"vote": {
"type": "string",
"description": "Published vote label, without restricting its vocabulary."
},
"avser": {
"type": "string",
"description": "Whether the main vote concerns the substantive issue or motivation, as published."
},
"party": {
"type": "string",
"description": "Published party code for this vote."
},
"point": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Published report point.",
"exclusiveMinimum": 0
},
"report": {
"type": "string",
"description": "Published committee-report designation."
},
"voteId": {
"type": "string",
"description": "Published main-vote identifier."
},
"session": {
"type": "string",
"description": "Published parliamentary session."
},
"memberId": {
"type": "string",
"description": "Numeric source member ID, retaining leading zeros."
},
"sourceUrl": {
"type": "string",
"description": "Published main-vote source link."
},
"documentId": {
"type": "string",
"description": "Published linked report document ID."
},
"systemDate": {
"type": "string",
"description": "Source system timestamp at published precision."
},
"constituency": {
"type": "string",
"description": "Published constituency."
}
},
"description": "One published member main vote.",
"additionalProperties": false
},
"description": "Whole member or explicit report-point main ballots after local pagination."
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied member row offset."
},
"points": {
"type": "array",
"items": {
"type": "object",
"required": [
"decision",
"rollCallState",
"parties",
"provenance"
],
"properties": {
"parties": {
"type": "array",
"items": {
"type": "object",
"required": [
"party",
"otherVotes"
],
"properties": {
"no": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exact Nej ballot count; absent when any group ballot lacks its label."
},
"yes": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exact Ja ballot count; absent when any group ballot lacks its label."
},
"avser": {
"type": "string",
"description": "Published subject of this main-vote group."
},
"party": {
"type": "string",
"description": "Published party code."
},
"absent": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exact Frånvarande ballot count; absent when any group ballot lacks its label."
},
"abstain": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exact Avstår ballot count; absent when any group ballot lacks its label."
},
"otherVotes": {
"type": "array",
"items": {
"type": "object",
"required": [
"vote"
],
"properties": {
"vote": {
"type": "string",
"description": "Other published vote label."
},
"count": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exact counted ballots with this label; absent when the group has ballots without published labels."
}
},
"description": "A published vote label outside the four standard labels.",
"additionalProperties": false
},
"description": "Every additional published vote-label count."
},
"observedVoteLabels": {
"type": "array",
"items": {
"type": "string",
"description": "A published ballot label."
},
"description": "Observed labels in an incomplete group; these observations do not establish exact totals."
}
},
"description": "One complete party aggregate with no invented counts.",
"additionalProperties": false
},
"description": "Every identifiable party/avser aggregate derived from complete published point ballots."
},
"decision": {
"type": "object",
"required": [
"point"
],
"properties": {
"point": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Positive report point number.",
"exclusiveMinimum": 0
},
"report": {
"type": "string",
"description": "Decision committee-report designation."
},
"voteId": {
"type": "string",
"description": "Published roll-call identifier."
},
"winner": {
"type": "string",
"description": "Published winning proposal label."
},
"heading": {
"type": "string",
"description": "Source-authored point heading."
},
"session": {
"type": "string",
"description": "Decision parliamentary session."
},
"summary": {
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "One published summary row.",
"additionalProperties": false
},
"description": "Ordered published body rows when a body is available."
},
"text": {
"type": "string",
"description": "Published summary text when the source provides a string instead of a table."
},
"footer": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "Published totals row, when available.",
"additionalProperties": false
},
"caption": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Published caption text, separate from its heading."
},
"heading": {
"type": "string",
"description": "Published bold caption."
}
},
"description": "Published caption components.",
"additionalProperties": false
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ordered published column headings when a header is available."
},
"heading": {
"type": "string",
"description": "Published heading of a historical summary."
},
"proposal": {
"type": "string",
"description": "Published proposal of a historical summary."
}
},
"description": "Published singleton summary text or normalized table.",
"additionalProperties": false
},
"proposal": {
"type": "string",
"description": "Readable source-authored proposal in Markdown."
},
"pointType": {
"type": "string",
"description": "Published point-type label."
},
"sourceUrl": {
"type": "string",
"description": "Published roll-call source link."
},
"summaries": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "One published summary row.",
"additionalProperties": false
},
"description": "Ordered published body rows when a body is available."
},
"text": {
"type": "string",
"description": "Published summary text when the source provides a string instead of a table."
},
"footer": {
"type": "object",
"required": [
"cells"
],
"properties": {
"cells": {
"type": "array",
"items": {
"type": [
"string",
"null"
],
"description": "Published cell text, preserving blank and zero; null means absent structured text."
},
"description": "Ordered source cells; blank and zero values remain distinct."
},
"label": {
"type": "string",
"description": "Published row heading."
}
},
"description": "Published totals row, when available.",
"additionalProperties": false
},
"caption": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Published caption text, separate from its heading."
},
"heading": {
"type": "string",
"description": "Published bold caption."
}
},
"description": "Published caption components.",
"additionalProperties": false
},
"columns": {
"type": "array",
"items": {
"type": "string"
},
"description": "Ordered published column headings when a header is available."
},
"heading": {
"type": "string",
"description": "Published heading of a historical summary."
},
"proposal": {
"type": "string",
"description": "Published proposal of a historical summary."
}
},
"description": "Published vote-summary table without HTML wrapper layers.",
"additionalProperties": false
},
"description": "Every published summary when the source supplies an array."
},
"decisionType": {
"type": "string",
"description": "Published decision method; acclamation is authoritative only here."
},
"decisionRuleQuota": {
"type": "string",
"description": "Published decision-rule quota."
},
"votingRequirement": {
"type": "string",
"description": "Published voting requirement."
},
"proposalSourceHtml": {
"type": "string",
"description": "Original source proposal HTML."
},
"counterProposalNumber": {
"type": "string",
"description": "Source counterproposal number."
},
"decisionRuleParagraph": {
"type": "string",
"description": "Published decision-rule provision."
},
"counterProposalParties": {
"type": "string",
"description": "Source counterproposal party expression."
}
},
"description": "Complete authoritative decision for this point.",
"additionalProperties": false
},
"provenance": {
"type": "object",
"required": [
"decisionSourceUrl",
"votesSourceUrl",
"retrievedAt"
],
"properties": {
"retrievedAt": {
"type": "string",
"description": "Main-vote source-fetch time."
},
"upstreamQuery": {
"type": "string",
"description": "Published query echo, not independent identity proof."
},
"votesSourceUrl": {
"type": "string",
"description": "Fixed-origin complete ungrouped main-vote query."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "A published source warning."
},
"description": "Every published warning for this main-vote query."
},
"decisionSourceUrl": {
"type": "string",
"description": "Authoritative report-status source."
}
},
"description": "Separate authoritative decision and complete-ballot sources.",
"additionalProperties": false
},
"rollCallState": {
"enum": [
"available",
"acclamation",
"not_published",
"unknown"
],
"type": "string",
"description": "Published roll-call availability; acclamation requires explicit decision evidence."
}
},
"description": "One report point with complete party results and source evidence.",
"additionalProperties": false
},
"description": "Whole report points with every party aggregate and complete decision evidence."
},
"report": {
"type": "string",
"description": "Normalized report designation."
},
"source": {
"type": "string",
"description": "Required attribution to the Swedish Parliament."
},
"hasMore": {
"type": "boolean",
"description": "More whole rows or report points remain."
},
"notices": {
"type": "array",
"items": {
"type": "string",
"description": "A source limitation, applied bound or next-step notice."
},
"description": "All applicable notices, including an empty list."
},
"session": {
"type": "string",
"description": "Normalized parliamentary session."
},
"guidance": {
"type": "string",
"description": "How to resolve a missing report."
},
"memberId": {
"type": "string",
"description": "Normalized member ID, preserving leading zeros."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"mode",
"session"
],
"properties": {
"mode": {
"enum": [
"report",
"member"
],
"type": "string",
"description": "Report decision points or one member’s session main votes."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Member or report-ballot requested rows; default 20, applied maximum 500.",
"exclusiveMinimum": 0
},
"party": {
"type": "string",
"description": "Member-mode local party filter; report party groups are always complete."
},
"point": {
"type": "integer",
"maximum": 9007199254740991,
"description": "One authoritative report point; omit to traverse all points.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Member or explicit report-ballot local row offset; default 0."
},
"report": {
"type": "string",
"description": "Report designation or session:designation; report mode only."
},
"ballots": {
"type": "boolean",
"description": "Report mode only: include individual ballots for an explicit point; default false."
},
"session": {
"type": "string",
"minLength": 1,
"description": "Required parliamentary session, for example 2024/25."
},
"memberId": {
"type": "string",
"description": "Required in member mode: numeric memberId from riksdag_search_members, including leading zeros."
},
"revision": {
"type": "string",
"description": "Returned complete-candidate or report-catalog revision for consistent continuation."
},
"documentId": {
"type": "string",
"description": "Report mode: documentId from riksdag_search_documents with documentType bet; alternative to report."
},
"pointLimit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "All-points report page size; default 5, applied maximum 10.",
"exclusiveMinimum": 0
},
"pointOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "All-points report local offset; default 0."
},
"ballotRevision": {
"type": "string",
"description": "Returned ballot-page revision for consistent report-ballot continuation."
}
},
"description": "Complete normalized continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_get_votes",
"description": "Tool to call next."
}
},
"description": "Complete continuation advancing by actual returned entries.",
"additionalProperties": false
},
"revision": {
"type": "string",
"description": "Hash of complete normalized candidates or authoritative point catalog."
},
"truncated": {
"type": "boolean",
"description": "Response fitting shortened the requested local page."
},
"ballotPage": {
"type": "object",
"required": [
"revision",
"totalCount",
"returnedCount",
"offset",
"limit",
"requestedLimit",
"truncated",
"hasMore"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Applied ballot limit after fitting.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Applied ballot row offset."
},
"hasMore": {
"type": "boolean",
"description": "More whole ballots remain."
},
"nextCall": {
"type": "object",
"required": [
"toolName",
"args"
],
"properties": {
"args": {
"type": "object",
"required": [
"mode",
"session"
],
"properties": {
"mode": {
"enum": [
"report",
"member"
],
"type": "string",
"description": "Report decision points or one member’s session main votes."
},
"limit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Member or report-ballot requested rows; default 20, applied maximum 500.",
"exclusiveMinimum": 0
},
"party": {
"type": "string",
"description": "Member-mode local party filter; report party groups are always complete."
},
"point": {
"type": "integer",
"maximum": 9007199254740991,
"description": "One authoritative report point; omit to traverse all points.",
"exclusiveMinimum": 0
},
"offset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Member or explicit report-ballot local row offset; default 0."
},
"report": {
"type": "string",
"description": "Report designation or session:designation; report mode only."
},
"ballots": {
"type": "boolean",
"description": "Report mode only: include individual ballots for an explicit point; default false."
},
"session": {
"type": "string",
"minLength": 1,
"description": "Required parliamentary session, for example 2024/25."
},
"memberId": {
"type": "string",
"description": "Required in member mode: numeric memberId from riksdag_search_members, including leading zeros."
},
"revision": {
"type": "string",
"description": "Returned complete-candidate or report-catalog revision for consistent continuation."
},
"documentId": {
"type": "string",
"description": "Report mode: documentId from riksdag_search_documents with documentType bet; alternative to report."
},
"pointLimit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "All-points report page size; default 5, applied maximum 10.",
"exclusiveMinimum": 0
},
"pointOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "All-points report local offset; default 0."
},
"ballotRevision": {
"type": "string",
"description": "Returned ballot-page revision for consistent report-ballot continuation."
}
},
"description": "Complete normalized continuation arguments.",
"additionalProperties": false
},
"toolName": {
"type": "string",
"const": "riksdag_get_votes",
"description": "Tool to call next."
}
},
"description": "Complete report-ballot continuation call.",
"additionalProperties": false
},
"revision": {
"type": "string",
"description": "Revision of the complete point-ballot selection."
},
"truncated": {
"type": "boolean",
"description": "Response fitting shortened this ballot page."
},
"totalCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Exact complete point-ballot count."
},
"returnedCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Returned whole ballot rows."
},
"requestedLimit": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Requested ballot row limit.",
"exclusiveMinimum": 0
}
},
"description": "Independent ballot pagination; report-point counts and revision retain their meanings.",
"additionalProperties": false
},
"documentId": {
"type": "string",
"description": "Authoritative report document ID."
},
"pointLimit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied report-point limit after measured fitting."
},
"totalCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Exact filtered member-vote total or selected report-point total."
},
"pointOffset": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Applied report-point offset."
},
"retrievedAt": {
"type": "string",
"description": "Source fetch time, retained unchanged on cache hits."
},
"returnedCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Actual returned whole rows or points."
},
"upstreamQuery": {
"type": "string",
"description": "Upstream query echo; not proof that a filter was applied."
},
"candidateCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Complete validated member/session candidate count, optionally narrowed upstream by party, before local filtering."
},
"effectiveQuery": {
"type": "string",
"description": "Deterministic normalized input, applied defaults and local filters."
},
"requestedLimit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Original requested member row limit."
},
"pointTotalCount": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Exact complete authoritative report-point catalog count."
},
"upstreamWarnings": {
"type": "array",
"items": {
"type": "string",
"description": "An upstream warning preserved verbatim."
},
"description": "Warnings supplied by the source."
},
"requestedPointLimit": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"description": "Original requested report-point limit."
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true
}Prompts
0 advertised
Resources
0 advertised
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 667 ms
- 95th percentile latency
- 667 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 667 ms · metadata changed · 7 tool(s), 0 resource(s), 0 resource template(s), 0 prompt(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http sweden-parliament-mcp-server https://sweden-parliament.caseyjhand.com/mcpCodex
codex mcp add sweden-parliament-mcp-server --url https://sweden-parliament.caseyjhand.com/mcpCursor
{
"mcpServers": {
"sweden-parliament-mcp-server": {
"url": "https://sweden-parliament.caseyjhand.com/mcp"
}
}
}Cline
{
"mcpServers": {
"sweden-parliament-mcp-server": {
"type": "streamableHttp",
"url": "https://sweden-parliament.caseyjhand.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"sweden-parliament-mcp-server": {
"type": "http",
"url": "https://sweden-parliament.caseyjhand.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http sweden-parliament-mcp-server https://sweden-parliament.caseyjhand.com/mcpClaude Desktop
{
"mcpServers": {
"sweden-parliament-mcp-server": {
"url": "https://sweden-parliament.caseyjhand.com/mcp"
}
}
}Windsurf
{
"mcpServers": {
"sweden-parliament-mcp-server": {
"serverUrl": "https://sweden-parliament.caseyjhand.com/mcp"
}
}
}Let your agent find its tools
Find servers like sweden-parliament-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.