Back to MCP Servers

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.

Healthcare & Life Sciences by rradhakr-git (community) None active
Overview

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

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.

Use Cases
  • 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
Example Prompts
  • "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."
Pros
  • 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
Limitations
  • 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
Alternatives