ICD-10 Codes MCP Server
Community MCP server for ICD-10-CM medical code search, lookup, validation, and hierarchy navigation. Runs offline with bundled CDC data.
The ICD-10-CM MCP Server is a community-maintained, open-source Python FastAPI service that exposes ICD-10-CM (Clinical Modification) diagnosis codes to AI assistants over the Model Context Protocol. It bundles CDC ICD-10-CM data into a local SQLite database with FTS5 full-text search, so all lookups happen offline with no external API dependencies. The project is licensed Apache 2.0 and is listed in the PulseMCP registry as a community server.
Capabilities include full-text code search, single-code lookup, date-aware validation against effective release dates, parent/child hierarchy traversal, includes and excludes notes, specificity checks to determine whether a code is sufficiently granular for billing, batch normalization of diagnosis lists, and human-readable explanations of individual codes. The server supports multiple ICD-10-CM releases via a rolling retention window, so historical service dates can be validated against the release that was active at the time.
Note that this is a community implementation, not an official tool from the CDC, CMS, or WHO. It is best suited for development, prototyping, and internal tooling rather than as a system of record for clinical or billing workflows. ICD-10-PCS (procedure coding) is not currently in scope; the server focuses on ICD-10-CM diagnosis codes.
Tools
| Tool | Description |
|---|---|
search_codes |
Full-text search across ICD-10-CM codes and descriptions using SQLite FTS5. |
lookup |
Retrieve detailed information for a specific ICD-10-CM code. |
validate |
Validate that a code exists and is effective on a given service date. |
hierarchy |
Return parent and child codes for hierarchy navigation. |
includes |
Return the inclusion notes attached to a code. |
excludes |
Return the Excludes1 and Excludes2 notes attached to a code. |
specificity |
Determine whether a code is sufficiently specific or has more granular children. |
normalize |
Normalize a free-form list of diagnoses into ICD-10-CM codes. |
explain |
Generate a human-readable explanation of an ICD-10-CM code, including parents and notes. |
Prerequisites
- Python 3.x (or Docker)
- CDC ICD-10-CM data files (loaded via the included script)
Local install
git clone https://github.com/rradhakr-git/icd10-mcp-server.git
cd icd10-mcp-server
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --port 8000
Load a release
python3 scripts/load_data.py \
--release-date 2026-04-01 \
--effective-from 2026-04-01 \
--source-url "https://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD10CM/..."
Docker
docker build -t icd10-mcp .
docker run -p 8000:8000 icd10-mcp
Claude Desktop config
{
"mcpServers": {
"icd10": {
"url": "http://localhost:8000/mcp"
}
}
}
Environment variables
| Variable | Default | Purpose |
|---|---|---|
DATABASE_PATH |
./data/icd10cm.db |
SQLite database location |
LOG_LEVEL |
INFO |
Logging verbosity |
PORT |
8000 |
Server port |
DATA_RETENTION_YEARS |
2 |
Rolling window for old releases |
No API keys or authentication are required for local deployments.
- Search ICD-10-CM codes by clinical term or symptom from inside an AI chat or IDE assistant
- Validate billed diagnosis codes against the release effective on a given service date to catch retired or future-dated codes
- Walk a code's parent/child hierarchy to find a more specific or more general diagnosis for documentation review
- Check Excludes1/Excludes2 notes before pairing codes on a claim to avoid known coding conflicts
- Normalize a free-text problem list (e.g. from a draft note) into structured ICD-10-CM codes for downstream EHR or analytics use
- "Search ICD-10-CM for codes related to type 2 diabetes with neuropathy."
- "Validate code E11.9 for a service date of 2024-08-15."
- "Show me the parent and child codes of I10 in the ICD-10-CM hierarchy."
- "Is J45.20 specific enough to bill, or are there more granular children?"
- "Get the Excludes1 notes for F32.A and tell me which codes I cannot bill alongside it."
- Fully offline: bundles a local SQLite database, so no rate limits or third-party API keys
- Supports multiple ICD-10-CM releases with date-aware validation, useful for back-dated claims
- Exposes both an MCP endpoint and a REST API, so the same data is usable from agents and traditional services
- Apache 2.0 licensed and self-hostable via Python or Docker
- Community project with very low GitHub adoption; not maintained by CDC, CMS, or any official body
- ICD-10-PCS (inpatient procedure codes) is not covered; the server is ICD-10-CM diagnosis only
- Requires you to manually load CDC data files via a script before the server is useful
- No built-in authentication, so any deployment beyond localhost needs a reverse proxy or gateway
- openpharma-org/nlm-codes-mcp: MCP server for medical coding systems (ICD-10/11, HCPCS, NPI, HPO) via the NLM Clinical Tables API
- stayce/icd-mcp-cloudflare: WHO ICD-10/ICD-11 classification MCP server backed by the official WHO ICD-API
- contextkits/healthcare-billing-codes: MCP server for CPT, ICD-10, and denial code lookup