MCP server for the Lobbywatch.ch lobby database — conflicts of interest of Swiss parliamentarians
Server has 8 well-structured tools with consistent naming (all verb_noun with lobbywatch_ prefix), complete input schemas with types and descriptions, and documented return types via Pydantic models. Descriptions are adequate (100-200 chars typical) but lack WHEN-to-use guidance and dependency hints. Parameter descriptions are present but generic (e.g., 'Parliamentarian ID' without format/range). No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications. Error handling via MCPError is present but recovery guidance is minimal. Output schemas are well-defined via models but not explicitly documented in tool descriptions.
Get the current status of the cached Lobbywatch dump (age, record count, last refresh time)
Retrieve a single lobby group (Interessengruppe) by ID with full details
Retrieve a single parliamentarian by ID with full details including interests and commissions
Get a ranking of parliamentarians by number of interest declarations or primary employment declarations
Get transparency rating (Transparenzquote) for a parliamentarian
List all interest declarations (Interessenbindungen) for a parliamentarian, optionally filtered by organization or type
Tool annotations missing: no readOnlyHint or destructiveHint despite explicit risk classifications (READ_ONLY vs WRITE). LLMs cannot infer idempotency or side-effect safety from risk labels alone.
Parameter descriptions lack actionable constraints: 'Parliamentarian ID' does not specify format, range, or how to obtain one. 'Optional filter by organization name (substring match)' lacks examples of valid values.
Tool descriptions lack WHEN-to-use guidance and dependency hints. E.g., lobbywatch_search_parlamentarier_nach_branche does not explain when to call it vs lobbywatch_get_parlamentarier, or that it requires a branche value.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Manually trigger a refresh of the cached Lobbywatch dump from the remote source
Search parliamentarians by industry/sector (Branche) with fuzzy matching and optional filters
Error recovery guidance is minimal. MCPError is raised for upstream failures, but the error message does not suggest next steps (e.g., 'retry with different filters' or 'check cache status with lobbywatch_dump_status').
Output schemas are defined via Pydantic models but not documented in tool descriptions. LLMs cannot see what fields to expect without inspecting the code.