Skip to main content
Glama
README.md
# Unofficial CDC MCP Server

A comprehensive MCP (Model Context Protocol) server providing access to CDC (Centers for Disease Control and Prevention) public health data through the Socrata Open Data API (SODA).

**Total Datasets**: 73 (no authentication required)
**Surveillance Systems**: 18 different CDC programs
**Health Measures**: 100+ indicators across chronic disease, behavioral risk, environmental health, outbreak detection, vaccination, and drug overdose

## Features

- **TypeScript Implementation**: Built with @modelcontextprotocol/sdk
- **Comprehensive Coverage**: 73 public datasets across 18 surveillance systems
- **Unified Interface**: Single tool with 18 specialized methods
- **Real-Time Surveillance**: NNDSS outbreak detection for 50+ notifiable diseases
- **COVID-19 Vaccination**: County-level tracking with equity metrics (SVI, urban/rural)
- **Drug Overdose Crisis**: Real-time monitoring with drug-specific tracking (fentanyl, opioids)
- **Rate Limiting**: Built-in rate limiting (500ms delay) to respect API quotas
- **App Token Support**: Enhanced rate limits (1,000 requests/hour) with valid app token
- **Flexible Querying**: Support for filtering, pagination, and custom SoQL queries
- **100% Public Data**: All datasets accessible without authentication

## Available Data Sources

### Dataset Coverage (73 Total)

| Category | Datasets | Key Features |
|----------|----------|--------------|
| **PLACES** | 5 | County, place, tract, ZCTA (40+ health measures) |
| **BRFSS** | 7 | Comprehensive 2011-present + historical 1995-2010 |
| **YRBSS** | 2 | Youth health surveillance (substance use, mental health) |
| **Respiratory** | 2 | Combined RSV/COVID/Flu + RSV-specific |
| **Vaccination** | 5 | Teen, pregnant, kindergarten, flu all ages, RSV |
| **Vital Statistics** | 5 | Birth, death, maternal, infant statistics |
| **Environmental** | 2 | Air quality, water fluoridation |
| **Tobacco** | 6 | Economic impact + 5 policy types |
| **Injury** | 2 | TBI surveillance, alcohol-impaired driving |
| **Infectious Disease** | 2 | Pneumococcal, foodborne/waterborne |
| **Maternal-Child** | 3 | Breastfeeding, PRAMS, birth statistics |
| **Oral/Vision** | 2 | NOHSS oral health, BRFSS vision |
| **Nutrition** | 3 | Behavioral, policy, youth-specific |
| **Disease-Specific** | 4 | Heart disease, diabetes, cancer, COVID |
| **Historical** | 1 | Pre-ACA health care access (1995-2010) |
| **NNDSS** | **14** | **Real-time outbreak detection (50+ notifiable diseases)** |
| **COVID-19 Vaccination** | **4** | **County-level tracking with equity metrics** |
| **Drug Overdose** | **6** | **Provisional + finalized overdose data by drug type** |

## Usage

```json
{
  "mcpServers": {
    "cdc-mcp-server": {
      "command": "node",
      "args": ["/path/to/cdc-mcp-server/build/index.js"],
      "env": {
        "CDC_APP_TOKEN": "your_app_token_here"
      }
    }
  }
}
```

**Note**: The `CDC_APP_TOKEN` environment variable is optional but recommended for enhanced rate limits (1,000 req/hour vs shared pool).

## MCP Methods

### Core Methods (5)

#### 1. `list_datasets`
List all 53 available CDC datasets.

```json
{
  "method": "list_datasets"
}
```

#### 2. `get_places_data`
Get PLACES local disease prevalence data (40+ health measures).

**Parameters**:
- `geography_level`: "county", "place", "tract", "zcta" (default: "county")
- `year`: "2023", "2024" (default: "2024")
- `state`: State abbreviation (e.g., "CA", "TX")
- `measure_id`: Disease measure (e.g., "DIABETES", "OBESITY", "CHD")
- `location`: Specific location name
- `limit`: Max results (default: 100)
- `offset`: Pagination offset (default: 0)

**Example**:
```json
{
  "method": "get_places_data",
  "geography_level": "county",
  "year": "2024",
  "state": "CA",
  "measure_id": "DIABETES"
}
```

#### 3. `get_brfss_data`
Get BRFSS behavioral risk factor data.

**Parameters**:
- `dataset_type`: "obesity_national", "obesity_state", "diabetes", "asthma"
- `year`: Specific year
- `state`: State abbreviation
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_brfss_data",
  "dataset_type": "diabetes",
  "year": 2023,
  "state": "NY"
}
```

#### 4. `search_dataset`
Generic search across any CDC dataset with custom SoQL queries.

**Parameters**:
- `dataset_name`: Dataset identifier (required)
- `select_fields`: Fields to return
- `where_clause`: SoQL WHERE clause
- `order_by`: Sort field
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "search_dataset",
  "dataset_name": "breastfeeding_nis",
  "where_clause": "state='Texas'",
  "limit": 100
}
```

#### 5. `get_available_measures`
List all available measures for a specific dataset.

**Example**:
```json
{
  "method": "get_available_measures",
  "dataset_name": "places_county_2024"
}
```

---

### Tier 1 Methods: High-Priority Health Surveillance (7)

#### 6. `get_yrbss_data`
Youth Risk Behavior Surveillance (substance use, mental health, violence).

**Parameters**:
- `state`: State abbreviation
- `topic`: "substance_use", "mental_health", "violence", "sexual_behaviors", "nutrition", "physical_activity"
- `year`: Survey year
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_yrbss_data",
  "state": "CA",
  "topic": "mental_health",
  "year": 2023
}
```

#### 7. `get_respiratory_surveillance`
Combined RSV/COVID-19/Flu hospitalization surveillance.

**Parameters**:
- `virus`: "rsv", "covid", "flu", "combined" (default: "combined")
- `state`: Jurisdiction
- `year`: Year filter
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_respiratory_surveillance",
  "virus": "rsv",
  "state": "NY",
  "year": 2024
}
```

#### 8. `get_vaccination_coverage`
Vaccination rates by age group.

**Parameters**:
- `age_group`: "teen", "pregnant", "kindergarten" (required)
- `state`: State abbreviation
- `vaccine_type`: "hpv", "tdap", "menacwy", "flu"
- `year`: Survey year
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_vaccination_coverage",
  "age_group": "teen",
  "state": "TX",
  "vaccine_type": "hpv",
  "year": 2023
}
```

#### 9. `get_birth_statistics`
Birth rates and birth outcome indicators.

**Parameters**:
- `indicator`: "birth_rate", "preterm", "cesarean", "low_birth_weight"
- `state`: Jurisdiction
- `year`: Year filter
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_birth_statistics",
  "indicator": "preterm",
  "state": "CA",
  "year": 2024
}
```

#### 10. `get_environmental_health`
Air quality measures with health tracking.

**Parameters**:
- `pollutant`: "pm25", "ozone", "combined" (default: "combined")
- `state`: State filter
- `county`: County name
- `year`: Year filter
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_environmental_health",
  "pollutant": "pm25",
  "county": "Los Angeles",
  "year": 2023
}
```

#### 11. `get_tobacco_impact`
Smoking-attributable mortality, morbidity, and economic costs.

**Parameters**:
- `impact_type`: "mortality", "morbidity", "economic_cost"
- `state`: State abbreviation
- `year`: Year filter
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_tobacco_impact",
  "impact_type": "economic_cost",
  "state": "OH",
  "year": 2022
}
```

#### 12. `get_oral_vision_health`
Oral and vision health surveillance.

**Parameters**:
- `health_domain`: "oral", "vision" (required)
- `state`: State abbreviation
- `year`: Year filter
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_oral_vision_health",
  "health_domain": "oral",
  "state": "FL",
  "year": 2023
}
```

---

### Tier 2 Methods: Policy-Relevant & Niche Specializations (3)

#### 13. `get_injury_surveillance`
TBI surveillance - emergency visits, hospitalizations, deaths by mechanism.

**Parameters**:
- `injury_type`: "tbi", "motor_vehicle", "all" (default: "tbi")
- `state`: State abbreviation
- `mechanism`: "fall", "motor_vehicle", "assault", "sports", "all"
- `year`: Year filter
- `limit`, `offset`: Pagination

**Example**:
```json
{
  "method": "get_injury_surveillance",
  "injury_type": "tbi",
  "mechanism": "fall",
  "state": "FL",
  "year": 2022
}
```

#### 14. `get_tobacco_policy`
Tobacco control policy tracking (5 policy types supported).

**Parameters**:
- `policy_type`: "smokefree_air", "medicaid_cessation", "licensure", "tax", "ecigarette" (required)
- `state`: State abbreviation
- `venue`: "workplace", "restaurant", "bar", "government", "school", "all" (for smokefree_air only)
- `year`: Year filter
- `limit`, `offset`: Pagination

**Examples**:

Smokefree air legislation:
```json
{
  "method": "get_tobacco_policy",
  "policy_type": "smokefree_air",
  "venue": "restaurant",
  "state": "CA"
}
```

Tobacco tax legislation:
```json
{
  "method": "get_tobacco_policy",
  "policy_type": "tax",
  "state": "NY",
  "year": 2023
}
```

E-cigarette regulation:
```json
{
  "method": "get_tobacco_policy",
  "policy_type": "ecigarette",
  "state": "MA"
}
```

#### 15. `get_infectious_disease`
Infectious disease surveillance (pneumococcal, foodborne, waterborne).

**Parameters**:
- `disease`: "pneumococcal", "foodborne", "waterborne" (required)
- `state`: State abbreviation
- `serotype`: Pneumococcal serotype filter (e.g., "19A", "3")
- `pathogen`: Pathogen name for foodborne/waterborne (e.g., "Salmonella", "E. coli")
- `year`: Year filter
- `limit`, `offset`: Pagination

**Examples**:

Pneumococcal disease by serotype:
```json
{
  "method": "get_infectious_disease",
  "disease": "pneumococcal",
  "serotype": "19A",
  "year": 2023
}
```

Foodborne outbreaks:
```json
{
  "method": "get_infectious_disease",
  "disease": "foodborne",
  "pathogen": "Salmonella",
  "state": "TX"
}
```

---

### Phase 4 Methods: Critical Surveillance Gaps (3)

#### 16. `get_nndss_surveillance`
National Notifiable Diseases Surveillance System - real-time outbreak detection for 50+ diseases.

**Parameters**:
- `nndss_disease`: "arboviral", "hepatitis", "tuberculosis", "rubella", "pertussis", "haemophilus", "qfever", "botulism", "all" (default: "all")
- `year`: Year filter (for historical TB data: 2014-2019)
- `state`: State abbreviation
- `limit`, `offset`: Pagination

**Examples**:

Arboviral disease surveillance:
```json
{
  "method": "get_nndss_surveillance",
  "nndss_disease": "arboviral",
  "state": "FL",
  "year": "2024"
}
```

Historical tuberculosis data:
```json
{
  "method": "get_nndss_surveillance",
  "nndss_disease": "tuberculosis",
  "year": "2019",
  "state": "CA"
}
```

#### 17. `get_covid_vaccination`
COVID-19 vaccination tracking with equity metrics.

**Parameters**:
- `vax_geography`: "national", "state", "county" (default: "state")
- `state`: State abbreviation
- `county`: County name
- `equity_metrics`: Include SVI and urban/rural classification (boolean)
- `limit`, `offset`: Pagination

**Examples**:

State-level vaccination rates:
```json
{
  "method": "get_covid_vaccination",
  "vax_geography": "state",
  "state": "TX"
}
```

County-level with equity metrics:
```json
{
  "method": "get_covid_vaccination",
  "vax_geography": "county",
  "state": "NY",
  "county": "New York",
  "equity_metrics": true
}
```

#### 18. `get_overdose_surveillance`
Drug overdose crisis monitoring with drug-specific tracking.

**Parameters**:
- `overdose_geography`: "national", "state", "county" (default: "state")
- `drug_type`: "opioid", "fentanyl", "heroin", "cocaine", "methamphetamine", "all" (default: "all")
- `provisional`: Use provisional data (true) or finalized (false) - default: true
- `state`: State abbreviation
- `county`: County name
- `limit`, `offset`: Pagination

**Examples**:

Fentanyl overdoses by state:
```json
{
  "method": "get_overdose_surveillance",
  "overdose_geography": "state",
  "drug_type": "fentanyl",
  "state": "OH",
  "provisional": true
}
```

County-level opioid deaths:
```json
{
  "method": "get_overdose_surveillance",
  "overdose_geography": "county",
  "drug_type": "opioid",
  "county": "Alameda",
  "state": "CA"
}
```

All overdoses (finalized data):
```json
{
  "method": "get_overdose_surveillance",
  "overdose_geography": "national",
  "drug_type": "all",
  "provisional": false
}
```

---

## Common PLACES Measure IDs

### Chronic Diseases
- `DIABETES`: Diagnosed diabetes
- `OBESITY`: Adult obesity (BMI ≥30)
- `CHD`: Coronary heart disease
- `COPD`: Chronic obstructive pulmonary disease
- `ASTHMA`: Current asthma
- `STROKE`: Stroke
- `BPHIGH`: High blood pressure
- `CANCER`: Cancer (excluding skin cancer)
- `KIDNEY`: Chronic kidney disease
- `ARTHRITIS`: Arthritis

### Mental Health
- `DEPRESSION`: Depression
- `MHLTH`: Mental health not good for ≥14 days

### Prevention
- `DENTAL`: Annual dental visit
- `ACCESS2`: Lack of health insurance (adults <65)
- `CHECKUP`: No annual checkup
- `CHOLSCREEN`: Cholesterol screening
- `CERVICAL`: Cervical cancer screening
- `COLON_SCREEN`: Colorectal cancer screening
- `MAMMOUSE`: Mammography

### Risk Factors
- `CSMOKING`: Current smoking
- `BINGE`: Binge drinking
- `LPA`: No leisure-time physical activity
- `SLEEP`: Sleep <7 hours

## Dataset Reference

### Complete Dataset List (73)

<details>
<summary>Click to expand full dataset list</summary>

**PLACES (5 datasets)**:
- `places_county_2024` - County-level 2024
- `places_county_2023` - County-level 2023
- `places_place_2024` - City/town-level 2024
- `places_tract_2024` - Census tract-level 2024
- `places_zcta_2024` - ZIP code-level 2024

**BRFSS (7 datasets)**:
- `brfss_comprehensive` - 2011-present (30+ measures)
- `brfss_obesity_national` - National obesity trends
- `brfss_obesity_state` - State obesity prevalence
- `brfss_diabetes` - Diabetes prevalence
- `brfss_asthma` - Asthma prevalence
- `brfss_smart_county` - Metropolitan county-level
- `brfss_healthcare_access_historical` - 1995-2010

**Youth Health (2 datasets)**:
- `yrbss_high_school` - Youth risk behaviors
- `youth_nutrition_activity` - Youth nutrition/activity

**Respiratory (2 datasets)**:
- `respiratory_combined` - RSV/COVID/Flu combined
- `rsv_hospitalizations` - RSV-specific

**Vaccination (5 datasets)**:
- `teen_vaccinations` - HPV, Tdap, MenACWY
- `flu_vaccination_coverage` - All ages 6+ months
- `pregnant_vaccinations` - Flu, Tdap during pregnancy
- `kindergarten_vaccinations` - School entry rates

**Vital Statistics (5 datasets)**:
- `vsrr_birth_quarterly` - Birth indicators
- `birth_rates_age` - Age-specific fertility
- `vsrr_quarterly_mortality` - Mortality estimates
- `vsrr_maternal_mortality` - Maternal deaths
- `vsrr_infant_mortality` - Infant mortality

**Environmental (2 datasets)**:
- `air_quality_tracking` - PM2.5, ozone
- `water_fluoridation` - Fluoridation statistics

**Tobacco (6 datasets)**:
- `sammec_smoking_impact` - Economic costs
- `smokefree_air_legislation` - Smokefree laws
- `medicaid_cessation_coverage` - Cessation coverage
- `tobacco_licensure` - Retailer licensure
- `tobacco_tax` - Tax legislation
- `ecigarette_legislation` - E-cigarette regulation

**Injury (2 datasets)**:
- `tbi_surveillance` - TBI surveillance
- `alcohol_impaired_driving` - Drunk driving deaths

**Infectious Disease (2 datasets)**:
- `pneumococcal_disease` - 25-year serotype data
- `foodborne_outbreaks` - Foodborne/waterborne

**Maternal-Child (3 datasets)**:
- `breastfeeding_nis` - Breastfeeding rates
- `pramstat_2009` - PRAMS 2009

**Oral/Vision (2 datasets)**:
- `oral_health_indicators` - NOHSS
- `vision_health` - BRFSS vision module

**Nutrition (3 datasets)**:
- `nutrition_obesity` - Behavioral
- `nutrition_policy_environmental` - Policy/environmental
- `nutrition_commute_patterns` - Commuting

**Disease-Specific (4 datasets)**:
- `heart_disease_mortality` - Heart disease
- `diabetes_indicators` - Diabetes surveillance
- `cancer_incidence` - Cancer statistics
- `covid_cases` - COVID-19

**Historical (1 dataset)**:
- Already listed under BRFSS

**NNDSS - National Notifiable Diseases Surveillance (14 datasets)**:
- `nndss_arboviral` - Arboviral diseases (Zika, West Nile, etc.)
- `nndss_hepatitis` - Viral hepatitis A, B, C
- `nndss_tuberculosis` - Current TB surveillance
- `nndss_rubella` - Rubella and congenital rubella
- `nndss_pertussis` - Whooping cough surveillance
- `nndss_haemophilus` - Haemophilus influenzae disease
- `nndss_qfever` - Q fever surveillance
- `nndss_botulism` - Botulism surveillance
- `nndss_tb_2019` - Historical TB 2019
- `nndss_tb_2018` - Historical TB 2018
- `nndss_tb_2017` - Historical TB 2017
- `nndss_tb_2016` - Historical TB 2016
- `nndss_tb_2015` - Historical TB 2015
- `nndss_tb_2014` - Historical TB 2014

**COVID-19 Vaccination (4 datasets)**:
- `covid_vax_jurisdiction` - State/territory vaccination rates
- `covid_vax_county` - County-level vaccination coverage
- `covid_vax_respiratory_weekly` - Weekly respiratory virus vaccination
- `covid_vax_age_trends` - Age-stratified vaccination trends

**Drug Overdose Surveillance (6 datasets)**:
- `overdose_provisional_state` - Provisional state-level overdose deaths
- `overdose_county` - County-level overdose mortality
- `overdose_by_drug` - Drug-specific overdose deaths
- `overdose_demographics` - Demographic-stratified overdose data
- `overdose_nowcast` - Lag-adjusted overdose estimates
- `nchs_injury_mortality` - Comprehensive injury mortality data

</details>

## Rate Limiting

The server implements conservative rate limiting (500ms between requests):

- **Without app token**: Shared pool (may be throttled)
- **With app token**: 1,000 requests/hour

To increase limits, register for a free app token at https://data.cdc.gov/profile/app_tokens

## Response Format

All methods return JSON with consistent structure:

```json
{
  "dataset": "places_county_2024",
  "count": 58,
  "data": [
    {
      "year": "2022",
      "stateabbr": "CA",
      "locationname": "Los Angeles County",
      "measureid": "DIABETES",
      "data_value": "11.2",
      "data_value_unit": "%",
      "low_confidence_limit": "10.8",
      "high_confidence_limit": "11.6"
    }
  ]
}
```

## SoQL Query Language

CDC datasets support Socrata Query Language (SoQL):

### Common Parameters
- `$select`: Choose specific fields
- `$where`: Filter conditions
- `$order`: Sort results
- `$limit`: Max results
- `$offset`: Pagination start

### Example SoQL Clauses

**Filtering**:
```
stateabbr='CA' AND data_value>15.0
year>=2020 AND year<=2024
measureid IN ('DIABETES', 'OBESITY', 'CHD')
```

**Sorting**:
```
data_value DESC
year ASC, data_value DESC
```

## Data Sources

All data comes from official CDC sources:
- https://data.cdc.gov
- https://chronicdata.cdc.gov