MCP server for Swiss Federal Office of Public Health (BAG) infectious disease surveillance — IDD API
Strong foundation with clear, well-structured tool definitions. All 10 tools have descriptions (avg ~180 chars) and input schemas with typed parameters. Naming follows verb_noun convention consistently (list_, get_, download_). Key strengths: discovery tools (list_diseases, list_series) include explicit use-case guidance and dependency hints. Weaknesses: output schemas not documented in source; some parameter descriptions lack format/constraint details (e.g., canton codes not enumerated); no error handling guidance visible; tools 8-10 have minimal descriptions (<50 chars). Per-tool variance is significant, tools 1-4 are well-crafted (75-80 range), tools 5-10 drop to 55-65 due to sparse documentation.
Get the current disease situation for a specific canton.
Download an export file from the BAG IDD API.
Get the current data version and last update timestamp from the BAG IDD API.
Fetch time-series surveillance data for a disease from the BAG IDD. Returns weekly or yearly case counts, incidence rates, or other metrics. Data updated every Wednesday. <use_case>Get the actual numbers/trend for a disease in a canton over time — the core data-retrieval tool.</use_case><important_notes>Call bag_health_mcp__get_series_details first for valid filters. 'incValue' = incidence per 100'000; 'value' = absolute count.</important_notes><example>bag_health_mcp__get_disease_data(series_id='influenza/cases/incValue/iso_week', canton='ZH') -> weekly influenza incidence for Zurich.</example>
Get metadata and available filter values for a specific data series. Shows which canton, age group, sex, and other dimensions are available. Always call this before bag_health_mcp__get_disease_data to know valid filter options. <use_case>Learn the valid filter values (cantons, age groups, sex) for a series so a subsequent data query uses accepted parameters.</use_case><important_notes>Available dimensions vary by series — always check here rather than assuming.</important_notes><example>bag_health_mcp__get_series_details(series_id='influenza/cases/incValue/iso_week') -> cantons=['ZH','BE',...], age_groups=[...].</example>
Output schemas not documented. Tools return data but LLMs cannot see what fields to expect, forcing them to guess downstream field names and breaking tool chaining. All 10 tools lack visible output schema definitions.
Parameter constraints not enumerated. 'canton' parameter accepts string but valid values (ZH, BE, etc.) are not declared as enum. LLMs will hallucinate invalid canton codes instead of picking from a constrained set.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2025-06-18+ | v2 |
Get health indicators from the Swiss Health Observatory (Obsan).
Get health indicators from the Swiss Healthcare Supply Atlas (Versorgungsatlas).
List all 51 disease topics available in the BAG Infectious Disease Dashboard (IDD). Returns the topic slug needed for other tools, grouped by category (respiratory, enteric, STI, vector-borne, wastewater). <use_case>Discover what diseases are available before querying data.</use_case><important_notes>Start here; the topic slugs returned are required inputs for the other tools.</important_notes><example>bag_health_mcp__list_diseases() -> categories incl. 'influenza', 'measles', 'covid19'.</example>
List available export files from the BAG IDD API.
List all available data series for a specific disease topic. Each series is identified by 'topic/chapter/aggregation/temporality'. Returns series IDs to use with bag_health_mcp__get_series_details and bag_health_mcp__get_disease_data. <use_case>Find which exact series exist for a disease (e.g. weekly cases vs yearly incidence) before fetching data.</use_case><important_notes>Needs a valid topic slug from bag_health_mcp__list_diseases.</important_notes><example>bag_health_mcp__list_series(topic='influenza') -> 'influenza/cases/incValue/iso_week', ...</example>
Sparse descriptions on tools 5-10. get_data_version, list_export_files, download_export, canton_situation, and both health_indicator tools have descriptions under 50 characters. LLMs cannot determine when to select these tools vs similar ones.
No error handling guidance. Tools lack descriptions of failure modes, recovery steps, or actionable error messages. If a canton code is invalid or API returns 404, LLMs have no guidance on what to do next.
Parameter descriptions lack format/range details. 'series_id' is described as 'Series identifier in format topic/chapter/aggregation/temporality' in one tool but not in others. 'age_group' and 'sex' parameters have no description of valid values or format.