SkillAgentSearch skills...

mcp-icd10

Offline MCP server for ICD-10-CM, ICD-9-CM, ICD-10 WHO code lookup with GEMs crosswalk. 124K codes, 102K mappings. Zero API keys, zero network calls.

Install / Use

claude mcp add stabgan -- npx -y github:stabgan/mcp-icd10

If the server publishes to npm under a different name, use that package instead — check the repo README.

About this skill
🔌

MCP Server

Model Context Protocol server

Quality Score

77/100

Supported Platforms

Claude Code
Claude Desktop

Our assessment of mcp-icd10

mcp-icd10 scores 77/100 on our quality scale, 663rd of 841 AI & Machine Learning skills we index.

Its MCP Server is 6.3 KB long, well organised into 19 sections with 9 code examples: a thorough specification that gives an agent plenty to work with.

It has 3 GitHub stars, so there is little community track record yet; judge it on its content.

Substance
29/30
Structure
20/20
Description
15/15
Adoption
3/20
Freshness
11/15

Maintenance, license and trust

  • The repository was last updated about 7 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
  • Our last check on 2026-09-18 found the source still online.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 86/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

Safety scan

No issues found

Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.

AI review by kimi-k2.7-code on 2026-09-24. Automated pattern scan on 2026-09-24. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.

mcp-icd10 compared with similar skills

All 4 of these similar skills score higher than mcp-icd10; compare them before choosing.

SkillScoreStarsUpdatedFormat
mcp-icd10 (this skill)by stabgan7737mo agoMCP Server
claude-memby thedotmack10094.9ktodayCLAUDE.md
Agent-Reachby Panniantong10086.2k14d agoCLAUDE.md
Understand-Anythingby Egonex-AI10084.7k1d agoCLAUDE.md
headroomby headroomlabs-ai10074.1ktodayCLAUDE.md

Frequently asked questions

How do I install mcp-icd10?
Run claude mcp add stabgan -- npx -y github:stabgan/mcp-icd10. The install tabs above show the steps for each supported agent.
Which AI agents does mcp-icd10 work with?
It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
Is mcp-icd10 safe to use?
Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is MIT-licensed and scores 86/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is mcp-icd10 still maintained?
The repository was last updated about 7 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.

mcp-icd10

Offline MCP server for ICD medical code lookup, search, and crosswalk translation.

Zero API keys. Zero network calls. Zero data leakage.

124K codes across three coding systems with 102K bidirectional crosswalk mappings, all running locally in a SQLite database.

License: MIT Python 3.10+ MCP

Why?

Existing medical terminology services are thin wrappers around remote APIs — rate-limited, network-dependent, and they send your clinical queries to third-party servers. That's a non-starter for HIPAA-conscious workflows.

This server embeds everything locally. A pre-built SQLite database with FTS5 full-text search ships inside the package. Queries resolve in microseconds. Nothing leaves your machine.

What's included

| System | Codes | Source | |--------|------:|--------| | ICD-10-CM FY2026 | 98,186 | CMS.gov (incl. 74,719 billable) | | ICD-9-CM | 14,567 | CMS GEMs package | | ICD-10 WHO 2019 | 11,243 | WHO | | GEMs crosswalk | 102,591 | CMS (bidirectional ICD-9 ↔ ICD-10) |

Total: 123,996 codes + 102,591 crosswalk mappings

Performance

All benchmarks on Apple Silicon. Every query hits an index or FTS5 — no table scans.

| Operation | Latency | |-----------|---------| | Exact code lookup | 4.4 µs | | Full-text search | 0.23 ms | | Category browse | 0.04 ms | | Crosswalk translation | 5.9 µs | | DB decompress (first run only) | ~38 ms |

Quick start

Claude Desktop / Kiro / any MCP client

{
  "mcpServers": {
    "icd": {
      "command": "uvx",
      "args": ["mcp-icd10"]
    }
  }
}

Docker

docker build -t mcp-icd10 .
{
  "mcpServers": {
    "icd": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "mcp-icd10"]
    }
  }
}

Install from source

git clone https://github.com/stabgan/mcp-icd10.git
cd mcp-icd10
pip install .
mcp-icd10

Tools

lookup_code

Look up a medical code and return its description. Accepts codes with or without dots. Searches across all systems when no system is specified.

> lookup_code("E11.9")
[icd10cm] E119: Type 2 diabetes mellitus without complications

> lookup_code("250.00")
[icd9cm] 25000: Diabetes mellitus without mention of complication, type II or unspecified type, not stated as uncontrolled

search_codes

Full-text search across all 124K code descriptions. Supports natural language clinical queries.

> search_codes("acute myocardial infarction")
Found 20 result(s) for 'acute myocardial infarction':
  [icd10cm] I219: Acute myocardial infarction, unspecified
  [icd10cm] I2101: ST elevation (STEMI) myocardial infarction involving left main coronary artery
  [icd9cm] 41071: Acute myocardial infarction of subendocardial wall, initial episode of care
  ...

browse_category

Browse all codes under a category prefix within a specific system.

> browse_category("E11", system="icd10cm")
50 code(s) under 'E11' [icd10cm]:
  E1100: Type 2 diabetes mellitus with hyperosmolarity without nonketotic hyperglycemic-hyperosmolar coma
  E1101: Type 2 diabetes mellitus with hyperosmolarity with coma
  ...

translate_code

Translate between ICD-9-CM and ICD-10-CM using the CMS General Equivalence Mappings (GEMs).

> translate_code("250.00")
Crosswalk for '25000':
  25000 → [icd10cm] E119 — Type 2 diabetes mellitus without complications [≈]

> translate_code("E119", source_system="icd10cm")
Crosswalk for 'E119':
  E119 → [icd9cm] 25000 — Diabetes mellitus without mention of complication, type II ... [≈]

get_stats

Returns code counts per system and total crosswalk mappings.

Architecture

┌─────────────────────────────────────────────┐
│         Claude / Kiro / AI Agent            │
│              (MCP Client)                   │
└──────────────────┬──────────────────────────┘
                   │ MCP Protocol (stdio)
┌──────────────────▼──────────────────────────┐
│            mcp-icd10 Server                 │
│  ┌────────────────────────────────────────┐ │
│  │  FastMCP — 5 tools                     │ │
│  │  lookup · search · browse              │ │
│  │  translate · stats                     │ │
│  └──────────────┬─────────────────────────┘ │
│  ┌──────────────▼─────────────────────────┐ │
│  │  SQLite + FTS5 (read-only)             │ │
│  │  124K codes │ 102K crosswalk mappings  │ │
│  │  Integer system IDs │ Bitmask flags    │ │
│  └──────────────┬─────────────────────────┘ │
│  ┌──────────────▼─────────────────────────┐ │
│  │  Pre-built DB (5.2 MB gzipped)         │ │
│  │  Decompresses on first run → 23 MB     │ │
│  └────────────────────────────────────────┘ │
└─────────────────────────────────────────────┘
           100% local · zero network calls

How it works

The package ships a pre-built, gzipped SQLite database (icd.db.gz, ~5 MB). On first run, it decompresses to ~23 MB and opens in read-only mode with memory-mapped I/O.

Key design decisions:

  • Integer system IDs (0/1/2) instead of text strings for compact storage and fast comparisons
  • CROSS JOIN in FTS queries forces SQLite's query planner to use the FTS index first, avoiding full table scans on broad search terms
  • No FTS5 ranking — ORDER BY rank forces full-scan scoring on all matches. Instead, we cap at 500 FTS candidates and sort by description length (shorter = more specific = better relevance proxy for medical codes)
  • Bitmask flags on crosswalk entries pack approximate/no-map/combination into a single integer
  • WITHOUT ROWID on the crosswalk table for clustered primary key access

Data sources

Limitations

  • No ICD-10-PCS (procedure codes), ICD-11, or SNOMED CT
  • GEMs crosswalk covers ICD-9-CM ↔ ICD-10-CM only (not WHO codes)
  • FTS5 uses Porter stemming — some medical abbreviations may not stem perfectly
  • Update frequency depends on new package releases

License

MIT

Related Skills

View on GitHub
GitHub Stars3
CategoryAI
Updated6mo ago
Forks2

Languages

Python

Trust signals

86/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

2 low