LINDAS cube.link domain MCP server, base tier (L2.7): the 44 political cubes of politics.ld.admin.ch, built from TOOLSET-v0.md
Strong foundation with 8 well-named, read-only tools accessing a curated political data domain. All tools have descriptions (10 - 160 chars, verb-first, ending with 'norm.' or 'hint.' per contract §5). Input schemas are complete with JsonSchema derivation and deny_unknown_fields validation (audit-hardened after a 2026-01-09 incident where silent key-dropping caused 18k-row data leaks). Parameter descriptions are present but sparse, many lack format/range guidance. Output schemas are not documented in the source; responses are pretty-printed JSON but structure is opaque to LLMs. Error handling returns typed JSON with 'error' field but lacks recovery guidance or actionable next steps.
Show a cube's declared dimensions and profile — the record may carry more: use to learn the filters a question needs. norm.
List the values one dimension takes (Kantone, Abstimmungstypen, Geschäftsstände): use to filter by IRI instead of by text. hint.
Find the cube behind a question by a word of its name («Volksinitiative», «Petition», «Parteienregister»): use before reading rows. hint.
Describe any IRI the store knows about (canton, country, legal form, gender, party): use to label a dimension value. hint.
The label of any IRI in one language (canton, country, legal form, gender, party): use to show a value to a user. hint.
List the 44 political data cubes of the Confederation (Abstimmungen, Wahlen, Bundesrat, Interessenbindungen): use to see what data exists. norm.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Responses are pretty-printed JSON but lack formal schema declarations.
Parameter descriptions lack format/range guidance. E.g., 'limit' and 'offset' have no min/max; 'lang' accepts 'de|fr|it|en|rm' but description does not enumerate or constrain. LLMs must guess valid values.
Error responses return typed JSON with 'error' field but lack recovery guidance. E.g., 'error: invalid_cube' does not suggest 'call lindas.find_cube() first' or list available cubes. Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Read rows of a cube, filtered and projected: use to answer a question. norm.
List the versions of a cube family (2019, 2020, 2021 …): use to find the year a question asks for. hint.
Tool descriptions are terse (65 - 80 chars). While verb-first and ending with 'norm.'/'hint.', they lack explicit WHEN-to-use guidance beyond trigger words. E.g., 'lindas.iri' says 'Describe any IRI' but not 'call after lindas.dimension_values() returns an IRI you need to label'.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All 8 tools are read-only, but this is not declared in the schema. Agents cannot infer safety/retry semantics.