MCP server for discovering and querying CDC public health datasets via the Socrata SODA API. Supports searching mortality, vaccinations, surveillance, behavioral risk data, and CDC WONDER mortality statistics.
CDC Health MCP Server demonstrates excellent definition quality with comprehensive schemas, detailed parameter descriptions, and clear operational guidance. All 5 tools have well-articulated input schemas with proper type constraints, enum declarations, and parameter ranges. Descriptions are domain-specific and actionable, guiding LLMs toward correct tool selection. Tool names follow verb_noun conventions clearly. Output structures are implied through description text (e.g., cdc_discover_datasets returns 'IDs, names, truncated descriptions, asset types, column counts, and update timestamps'). Error handling and recovery paths are documented inline (e.g., 'Call cdc_list_catalog_vocabulary for every value with its entry count rather than guessing'). Minor gaps: output schemas could be more formally declared in JSON Schema format for LLM consumption; some idempotency guarantees are implicit rather than explicit.
Search the CDC dataset catalog by keyword, category, or tag. Returns IDs, names, truncated descriptions, asset types, column counts, and update timestamps. The catalog also holds charts, maps, stories, files, and links; an entry whose columnCount is 0 is one of those and yields no data from the other tools. Use cdc_get_dataset_schema for the full column list of a chosen dataset.
Fetch the column schema for a CDC dataset — names, data types, descriptions, row count, and last-updated timestamp. Returns the first 100 columns by default; wide datasets continue via column_offset. Get dataset IDs from cdc_discover_datasets.
List the controlled vocabularies cdc_discover_datasets' category and tags filters are matched against — every domain category and domain tag the CDC catalog publishes, each with the number of entries carrying it. Call it before filtering a search: a value the catalog does not carry matches nothing and returns an empty page, which is indistinguishable from a real value with no results. All 55 categories come back whole; the tag vocabulary runs to roughly 1,600 values, so tags are ranked by entry count and returned one page at a time via tag_limit and tag_offset. Pass filter to narrow both vocabularies to the values whose words contain it.
Execute a SoQL query against any CDC dataset. Supports filtering, aggregation, sorting, full-text search, and field selection. Use cdc_discover_datasets to find dataset IDs and cdc_get_dataset_schema to inspect columns before querying.
Output schemas are documented in description text rather than formally declared as JSON Schema objects. LLMs cannot programmatically parse return types to plan downstream calls.
cdc_query_wonder parameter 'cause_icd10' type is declared as 'string|array' without clarifying when to use each form. LLMs may pass ambiguous values.
No explicit idempotency declarations on read-only discovery tools. While all tools are READ_ONLY (safe to retry), marking them with idempotentHint in tool annotations would help agents make safer retry decisions.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 75 | 2026-07-28+ | v2 |
Query CDC WONDER for national US mortality statistics — deaths, population, and crude/age-adjusted death rates — across its five mortality databases, selected with the database input: final underlying-cause data for 1999–2020 (the default) or 2018–2024, provisional data running from 2018 through the current year, and two multiple-cause databases covering the same two eras. Break results out by year, age group, sex, and/or race, and filter by ICD-10 cause of death, sex, age group, or year range; on a multiple-cause database, mcd_icd10 additionally matches a cause listed anywhere on the death certificate rather than only the one certified as underlying. Each database holds a different span of years across all of them and a request whose year_range falls outside the selected one's span is rejected with that span named.
Parameter descriptions in cdc_query_dataset mention SoQL syntax (e.g., "SoQL SELECT clause") but do not provide example syntax or explain SoQL for agents unfamiliar with it. Could reduce agent errors.