medicaid-mcp
An MCP server that lets Claude, or any MCP client, explore US Medicaid and CHIP open data from data.medicaid.gov and the Medicaid datasets CMS publishes on data.cms.gov. It runs on your own computer, reads only public data, and needs no account or API key.
Ask things like "How has Ohio's Medicaid enrollment changed over the last year?", "What have pharmacies paid for metformin lately?" or "Which datasets were updated this month?"
Setup instructions are also on the docs page.
Install
Install uv (curl -LsSf https://astral.sh/uv/install.sh | sh on macOS or Linux). Then run the server once in a terminal, so the first download doesn't happen while your client waits. Press Ctrl-C to stop it.
uvx medicaid-mcp@0.1.1
Claude Code:
claude mcp add --scope user medicaid -- uvx medicaid-mcp@0.1.1
Claude Desktop: add this to claude_desktop_config.json (Settings → Developer → Edit Config), then restart. Desktop apps don't get your shell's PATH, so use the full path that which uvx prints.
{
"mcpServers": {
"medicaid": {
"command": "/absolute/path/to/uvx",
"args": ["medicaid-mcp@0.1.1"]
}
}
}
Other MCP clients: any client that launches stdio servers works. The command is uvx and the argument is medicaid-mcp@0.1.1. claude.ai on the web isn't supported, because it needs a hosted URL. So far this has been tested on macOS only.
Updating: replace 0.1.1 in your config with the newest version on PyPI.
What it does
A server over two open, unauthenticated CMS APIs:
- data.medicaid.gov, the primary source, covering its whole catalog.
- data.cms.gov, limited to three Medicaid datasets that live only there: Medicaid Spending by Drug, Medicaid Opioid Prescribing Rates, and Medicaid Managed Care service utilization. Their dataset ids are prefixed
cms:. Medicare program data is out of scope.
It is distinct from Anthropic's CMS Coverage connector, which covers Medicare Part B coverage policy (NCDs/LCDs, billing articles). The two are complementary: whether Medicare covers a drug there, what Medicaid pays for it (NADAC) here.
General tools
| Tool | Purpose |
|---|---|
search_datasets |
Search the catalog by query, publisher, keyword, or theme. |
get_dataset |
Full metadata for one dataset, plus a synthesized columns array. |
list_dataset_columns |
Just the columns — the cheap orientation call. |
query_dataset |
Filter, select, sort, and paginate rows via a friendly filter DSL. |
The usual pattern is search_datasets → list_dataset_columns → query_dataset, or one of the shortcuts below.
Shortcuts for common questions
get_state_enrollment_snapshot— recent monthly Medicaid/CHIP enrollment for one state.compare_states_enrollment_trend— multi-state trend, shaped for summarization or charting.get_state_eligibility_renewals— renewal/termination churn.get_drug_price_nadac— National Average Drug Acquisition Cost lookups.get_state_drug_utilization— units, prescriptions, and amounts reimbursed.get_managed_care_enrollment— enrollment by plan and program type.get_quality_measures— Child/Adult Core Set performance measures.whats_new_medicaid— recently modified datasets.get_medicaid_drug_spending— Medicaid spending, claims, and units by drug, 2020–2024 (data.cms.gov).get_opioid_prescribing_rates— Medicaid opioid prescribing rates by state and plan type (data.cms.gov).
How it handles the data
- Results are the published figures, with notes on the rules applied (e.g. updated months preferred over preliminary ones).
- Suppressed values (
NR,DS,*, nulls) are passed through as published, never turned into zero. - Most numeric-looking columns are published as text, which compares as text (
"9" > "10"). Range filters (<,>) are refused on those columns rather than returning wrong rows. - Unknown column names, operators and arguments are errors, never silently ignored. Every error says what to call next.
- The data is only as current as what the agencies publish. Most datasets update monthly or yearly.
Configuration
Optional environment variables. None are secrets — the upstream APIs are open.
| Variable | Default | Purpose |
|---|---|---|
MEDICAID_MCP_BASE_URL |
https://data.medicaid.gov |
Upstream API root |
MEDICAID_MCP_CMS_BASE_URL |
https://data.cms.gov |
data.cms.gov root, for the cms: registry datasets |
MEDICAID_MCP_TIMEOUT |
30 |
Request timeout, seconds |
MEDICAID_MCP_CACHE_TTL_SEARCH |
900 |
Search-result cache lifetime, seconds |
MEDICAID_MCP_CACHE_TTL_META |
3600 |
Dataset-metadata cache lifetime, seconds |
MEDICAID_MCP_LOG_LEVEL |
INFO |
Log level |
PORT |
8000 |
HTTP listen port; unprefixed because hosting platforms set it |
Row data is never cached.
License
MIT — free to use, modify, and redistribute, including commercially. Copyright (c) 2026 Anna Lulushi.
Metadata
Release files for medicaid-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| medicaid_mcp-0.1.1.tar.gz | 39.8 kB | With provenance | Details for medicaid_mcp-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| medicaid_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for medicaid_mcp-0.1.1-py3-none-any.whl |
Total release size: 86.5 kB
Release files / medicaid_mcp-0.1.1.tar.gz
| Download URL | medicaid_mcp-0.1.1.tar.gz |
|---|---|
| Size | 39.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c651ad3c7eca6aaad0d16a51b6ad76cdadab30efb6af0916823e4a11a657dc66
|
|
BLAKE2b-256 checksum How to use checksums |
ef9dc1e698b1b8782a46885e6ceb0822e23e0a4925190548259680351a33af87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logRelease files / medicaid_mcp-0.1.1-py3-none-any.whl
| Download URL | medicaid_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 46.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9aaf0a8ecb6607c26a08323b8fb23ef6097caab75f27b6313f96769692a25de2
|
|
BLAKE2b-256 checksum How to use checksums |
b6bc3aa0455d819fe23b9daf5d4b3578e38d6940b2e6b2f78066db6c2d00a921
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logSecurity for medicaid-mcp 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for medicaid_mcp-0.1.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 9, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.