cyanheads avatar

Cdc Health Mcp Server

cyanheads/cdc-health-mcp-server

Connects Claude to the CDC's Socrata SODA API across 1,487+ public health datasets covering mortality, vaccinations, NNDSS surveillance, and behavioral risk factors. Three tools handle the full workflow: discover datasets by keyword or category, fetch column schemas with row counts and types, then execute SoQL queries with filtering, aggregation, and full-text search. All responses return as strings per SODA v2.1 spec, so you'll need the schema metadata to parse correctly. Ships with a guided five-step prompt for trend analysis and two resources for quick dataset orientation. No auth required for basic use, optional app token bumps rate limits. Available as a public hosted instance or self-hosted via stdio, Docker, or Streamable HTTP.

GitHub stars
5
tools
5
transport
STDIO, HTTP
env vars
7
last updated
Nov 1, 2026

Install

From registry metadata
$ npx add-mcp https://cdc.caseyjhand.com/mcp --name cdc-health

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http cdc-health https://cdc.caseyjhand.com/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 5 tools

Verified live against the running server on Nov 6, 2026.

cdc_discover_datasetsSearch the CDC dataset catalog by keyword, category, tag, or asset type. Returns IDs, names, truncated descriptions, asset types, column counts, update timestamps, and portal links. The catalog also holds charts, maps, stories, files, and links; an entry whose columnCount is 0...8 params

Search the CDC dataset catalog by keyword, category, tag, or asset type. Returns IDs, names, truncated descriptions, asset types, column counts, update timestamps, and portal links. The catalog also holds charts, maps, stories, files, and links; an entry whose columnCount is 0...

Parameters* required
asset_typesarray
Limit the search to these catalog asset types, spelled as assetType reports them. An entry matches when it is any one of them, and totalCount counts only those; ["dataset", "filter"] returns just t...
categorystring
Filter by domain category (e.g., "NNDSS", "Vaccinations", "Behavioral Risk Factors"). Values come from the catalog's own vocabulary and are matched exactly, ignoring case — "Vaccinations" and "vacc...
domainstring
CDC Socrata host to search. "data.cdc.gov" (default) and "chronicdata.cdc.gov" front the same catalog and return the same entries, so switching hosts neither widens nor narrows a search — chronic-d...one of data.cdc.gov · chronicdata.cdc.govdefault: data.cdc.gov
limitinteger
Results to return (default 10, max 10,000). offset plus limit must not exceed 10000.default: 10
offsetinteger
Pagination offset for browsing beyond first page (max 9999). offset plus limit must not exceed 10000; both CDC portals hold well under two thousand entries, so offsets near that ceiling page past t...default: 0
orderstring
Result ordering. Defaults to "relevance" when query is set and to "dataset_id" otherwise, at every offset; an explicit value always wins. "relevance" ranks the best matches for the query first, but...one of dataset_id · relevance
querystring
Full-text search across dataset names and descriptions (e.g., "diabetes mortality", "lead exposure children").
tagsarray
Filter by domain tags (e.g., ["covid19", "surveillance"]). Tags widen the search instead of narrowing it — a dataset matches when it carries any one of them, so every tag added returns more results...
cdc_get_dataset_schemaFetch the column schema for a CDC dataset — names, data types, descriptions, row count, last-updated timestamp, and, for a filter, the dataset it is a view of — with the period and area it covers, how often it is updated, its suggested citation, license, and attribution wherev...5 params

Fetch the column schema for a CDC dataset — names, data types, descriptions, row count, last-updated timestamp, and, for a filter, the dataset it is a view of — with the period and area it covers, how often it is updated, its suggested citation, license, and attribution wherev...

Parameters* required
column_limitinteger
Columns to return in this call (default 100). Every dataset under the default arrives whole; past it the response reports totalCount and a nextOffset to pass back as column_offset. Raise this to pu...default: 100
column_offsetinteger
Index of the first column to return, for continuing past a previous call (default 0). Columns keep the order the dataset declares, so column_offset plus column_limit walks the schema without gaps o...default: 0
datasetId*string
Four-by-four dataset identifier (e.g., "bi63-dtpu"). Obtain from cdc_discover_datasets.
domainstring
CDC Socrata host to fetch the dataset from. "data.cdc.gov" (default) and "chronicdata.cdc.gov" front the same catalog, so a four-by-four ID resolves on either and the default works whichever host t...one of data.cdc.gov · chronicdata.cdc.govdefault: data.cdc.gov
full_descriptionboolean
Return the dataset description whole (default false). By default a description longer than 4,000 characters is cut there, and the response sets descriptionTruncated and descriptionLength. Column de...default: false
cdc_list_catalog_vocabularyList 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...4 params

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...

Parameters* required
domainstring
CDC Socrata host to read the vocabulary from. "data.cdc.gov" (default) and "chronicdata.cdc.gov" front the same catalog and publish the same vocabulary, so this selects which host answers, never wh...one of data.cdc.gov · chronicdata.cdc.govdefault: data.cdc.gov
filterstring
Narrow both vocabularies to the values related to this text (at most 500 characters). A value matches when every word of the filter appears inside one of its words ("vaccin" reaches "Vaccinations"...
tag_limitinteger
Tags to return in this call (default 50). Tags are ranked by entry count, so the default page is the most-used end of the vocabulary; the response reports how many matched and a nextOffset while mo...default: 50
tag_offsetinteger
Index of the first tag to return, for continuing past a previous call (default 0). Ranking is stable, so tag_offset plus tag_limit walks the vocabulary without gaps or repeats. An offset at or past...default: 0
cdc_query_datasetExecute 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.10 params

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.

Parameters* required
datasetId*string
Four-by-four dataset identifier (e.g., "bi63-dtpu"). Obtain from cdc_discover_datasets.
domainstring
CDC Socrata host to query. "data.cdc.gov" (default) and "chronicdata.cdc.gov" front the same catalog, so a four-by-four ID returns the same rows from either and the default works whichever host the...one of data.cdc.gov · chronicdata.cdc.govdefault: data.cdc.gov
groupstring
SoQL GROUP BY clause. Requires aggregate functions in select.
havingstring
SoQL HAVING clause. Filters aggregated results.
limitinteger
Rows to return (default 100). One call returns at most 1,000 rows: a larger limit, up to 1,000,000, is capped at 1,000, and the response says so and gives a nextOffset when more rows remain. Up to...default: 100
offsetinteger
Row offset for pagination (max 1,000,000). Pair with a deterministic order clause — an offset walk over unordered results can skip or repeat rows.default: 0
orderstring
SoQL ORDER BY clause. Field name with optional ASC/DESC: "total_deaths DESC". Set one from the first page whenever paging with offset, and keep it for the whole walk: SODA does not order results im...
searchstring
Full-text search across all text columns. For precise filtering use the where parameter instead.
selectstring
SoQL SELECT clause — column names, aliases, or aggregates: "state, sum(deaths) as total_deaths". Omit for all columns. To enumerate distinct values of a column, set select to "{column}, count(*) as...
wherestring
SoQL WHERE clause. Strings must be single-quoted: "state='California' AND year=2020". If a column name matches a SoQL keyword (group, select, where, order, limit, offset, having, search), wrap it i...
cdc_query_wonderQuery 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 runnin...9 params

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 runnin...

Parameters* required
age_groupsarray
Restrict to deaths in any of the listed age groups — e.g. ["25-34","35-44"] covers both; a repeated group counts once. "1" is the under-1-year group. "NS" is the group CDC puts a death in when the...
cause_icd10value
Filter to ICD-10 underlying causes of death — the single condition CDC certified as having started the chain of events leading to death. Takes one code or range, or a list of them for a cause defin...
databasestring
Which WONDER mortality database to query. "underlying_1999_2020" (D76) is final data for 1999–2020 and the default. "provisional" (D176) runs 2018 through the current year, updated weekly, and retu...one of underlying_1999_2020 · provisional · underlying_2018_2024 · multiple_1999_2020 · multiple_2018_2024default: underlying_1999_2020
group_byarray
Dimensions to break results out by (1–4, each at most once), in output-column order — e.g. ["year"], ["year","sex"], ["icd_chapter","year"]. Results are always national. "race" resolves to whicheve...
limitinteger
Rows to return from the table CDC sent — any positive integer. Omit to take the rest of the table from offset, up to 10,000 rows. One call returns at most 10,000 rows: a larger limit is lowered to...
mcd_icd10value
Filter to deaths with any of these ICD-10 codes recorded anywhere on the death certificate, whether or not it was the underlying cause — e.g. "died with a respiratory condition listed", a populatio...
offsetinteger
Index of the first row to return, for continuing past a previous call (default 0, max 10,000). Rows keep the order CDC returned them in, which is stable for a given query, so offset plus limit walk...default: 0
sexstring
Filter by sex.one of all · male · femaledefault: all
year_rangeobject
Inclusive year range; from must not be later than to. These bounds span every database (1999–2026); the years the selected one actually holds are narrower, and a range outside them is rejected with...

Sponsors

Configuration

CDC_APP_TOKEN

Socrata app token for higher rate limits.

MCP_LOG_LEVELdefault: info

Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').

MCP_TRANSPORT_TYPEdefault: http

Selects the HTTP transport.

MCP_HTTP_HOSTdefault: 127.0.0.1

The hostname for the HTTP server.

MCP_HTTP_PORTdefault: 3010

The port to run the HTTP server on.

MCP_HTTP_ENDPOINT_PATHdefault: /mcp

The endpoint path for the MCP server.

MCP_AUTH_MODEdefault: none

Authentication mode to use: 'none', 'jwt', or 'oauth'.

Readme

@cyanheads/cdc-health-mcp-server

Search and query CDC public health data — mortality, vaccinations, surveillance, behavioral risk (Socrata SODA API) via MCP. STDIO or Streamable HTTP.

5 Tools • 2 Resources • 1 Prompt

Details

Repository
github.com/cyanheads/cdc-health-mcp-server
Categories
Search & Web Crawling, Data & Analytics
Package
@cyanheads/cdc-health-mcp-server
Transport
STDIO, HTTP
Registry
MCP registry, active
Resources
4
Prompts
1
Tools verified
Nov 6, 2026

More from cyanheads

Related Search & Web Crawling MCP servers

View all
1bamchi avatarScrapibamchi/scrapi-mcp-serverWeb scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.5stars
2talonicdev avatarTalonictalonicdev/talonic-mcpExtract structured, schema-validated data from PDFs, scans, images, spreadsheets, and forms.5stars
3cyanheads avatarBiorxiv Mcp Servercyanheads/biorxiv-mcp-serverSearch and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP.4stars
4cyanheads avatarSocrata Mcp Servercyanheads/socrata-mcp-serverSearch and query government open-data portals (Socrata SODA API).4stars
5gauraviitkgp avatarNewzAI MCP Servergauraviitkgp/news-mcpNews MCP: real-time headlines & custom news search across 7 regions. Free, just sign in with Google.4stars
6sintexer avatarJVM Source Lenssintexer/jvm-source-lensGradle-accurate JVM classpath; fetch Java source, signatures, and class structure for agents.4stars