Sweden's municipal & regional key-performance-indicator (KPI) database MCP server. Provides access to ~5,000 indicators covering economy, schools, health, demographics, and personnel for Sweden's 290 municipalities and 21 regions.
Kolada MCP demonstrates solid fundamentals: all 4 tools have clear verb-noun naming (search_, list_, get_), complete input schemas with type definitions, and descriptions ranging 150 - 250 chars. However, output schemas are entirely undocumented, LLMs cannot predict what fields to expect from API responses. Parameter descriptions lack format constraints (e.g., 'year' should specify '4-digit YYYY format'). Error handling is minimal; no recovery guidance or actionable error messages. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only. Missing pagination guidance for list_municipalities and list_org_units, which could return large result sets.
Read KPI values for a municipality (or region) and year. Provide a kpiId from search_kpi and a municipalityId from list_municipalities. Returns values per gender ("T" total, "K" women, "M" men); non-gendered KPIs report only "T".
Find Sweden municipality/region ids by name substring. Returns id, title, and type ("K" = municipality of 290, "L" = region/landsting of 21). Use the returned id with get_data. Omit title to list all.
List organizational units (schools, preschools, eldercare facilities, etc.) within a municipality. Returns id, title, municipality. OU ids can be used for unit-level data drilldowns. Filter by title substring and/or municipality id.
Find Kolada KPI (indicator) ids by title substring (Swedish). Searches ~5,000 indicators covering economy, schools, health, demographics, and personnel. Returns id, title, description, operating_area, and is_divided_by_gender. Use the returned id with get_data.
Output schemas completely undocumented. LLMs cannot predict response structure (fields, types, nesting). Kolada API returns ~5000 KPI records or municipality lists, LLMs need to know what fields to extract for downstream calls.
No pagination limits or guidance. list_municipalities and list_org_units accept optional filters but no limit/offset/page parameters. Kolada has 290+ municipalities and potentially thousands of org units, unbounded results risk context window exhaustion.
Parameter format constraints missing. 'year' parameter lacks '4-digit YYYY' specification. 'kpiId' and 'municipalityId' lack format hints (e.g., 'N-prefixed' or '4-digit code'). LLMs may pass invalid formats.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
No tool annotations despite all tools being read-only and idempotent. Missing readOnlyHint and idempotentHint annotations prevent agents from optimizing retry logic and caching strategies.
Error handling lacks recovery guidance. callTool() throws generic Error objects with minimal context. No distinction between retryable (network timeout) vs user-fixable (invalid KPI id) vs fatal errors. LLMs cannot self-correct.