icdwise
This server provides lookup, validation, and search of official U.S. ICD-10-CM diagnosis codes using verified government data, avoiding AI-fabricated descriptions.
lookup_icd10: Get the official description, canonical dotted form, and 3-character category for a given code (e.g.,E11.9→ "Type 2 diabetes mellitus without complications"). Returns an honest "not found" if the code isn't in the official dataset rather than guessing.validate_icd10: Check whether a code is both well-formed and exists in the official ICD-10-CM dataset — useful for catching fabricated, retired, or non-existent codes.search_icd10: Reverse lookup to find codes by condition keywords (e.g., "generalized anxiety" → F41.1). Results are sorted shortest (most general) first, with a configurable result limit (default 20).
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@icdwiselook up ICD-10 code E11.9"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
icdwise
Verified ICD-10-CM code lookup & validation for AI agents — official descriptions, not guesses.
Verified, trustworthy data tools for AI agents. "Qiniso" means "truth" in Zulu.
Website · npm · MCP endpoint · MCP Registry
Ask an LLM what an ICD-10-CM code means and it will answer confidently — and often wrongly: the wrong laterality, the wrong severity, the wrong condition entirely, and it will happily invent a description for a code that doesn't exist. icdwise looks the code up in the official U.S. ICD-10-CM code set and returns the real description — or an honest "not found" instead of a guess.
Asked to describe real ICD-10-CM codes, a frontier model with no tools was wrong ~38% of the time — e.g. it called
H40.1131"severe stage, right eye" (it's mild, bilateral) andT63.011A"ingested mushrooms" (it's rattlesnake venom) — and it fabricated a description for a code that doesn't exist. icdwise: the official text, or "not found." Never a guess.
Add it to Claude
Settings → Connectors → Add custom connector, and paste — no login, no key:
https://icdwise.qinisolabs.workers.dev/mcpStateless, reads no user data, requires no secrets. Prefer to run it locally over stdio? Add { "command": "npx", "args": ["-y", "icdwise"] } under mcpServers in your client config.
Related MCP server: mymedi-ai-mcp-server
Use it as a library
npm i icdwiseimport { lookupIcd10, validateIcd10, searchIcd10 } from "icdwise";
lookupIcd10("E11.9").description; // "Type 2 diabetes mellitus without complications"
lookupIcd10("H40.1131").description; // "Primary open-angle glaucoma, bilateral, mild stage"
validateIcd10("E11.99").valid; // false — well-formed but not a real code
searchIcd10("generalized anxiety"); // → [{ code: "F41.1", description: "Generalized anxiety disorder" }, ...]Codes are accepted with or without the dot (E11.9 or E119). A well-formed code that isn't in the official set returns found: false with a clear note — it never invents a description.
Tools — 3
Tool | What it answers |
lookup_icd10 | The official description of a code (+ canonical form and 3-char category) |
validate_icd10 | Is this a real ICD-10-CM code? (well-formed and in the official set) |
search_icd10 | Reverse lookup — find the code(s) for a condition by keywords |
Data
ICD-10-CM is U.S. public-domain data (NCHS/CMS). The full code set (~74,000 codes) is bundled and generated from the official CMS release via npm run build-data <icd10cm-codes-YYYY.txt> (see scripts/build-data.mjs); every response reports the datasetVersion it used. Descriptions are the official text — the curated, versioned dataset kept current is the moat.
What it is not
Not medical advice, and not a determination of billability, coverage, or clinical appropriateness.
Not ICD-10 (WHO) or ICD-11 — this is ICD-10-CM (the U.S. Clinical Modification).
Not a guesser — unknown/retired/non-leaf codes return an honest "not found", never a fabricated description.
Architecture
A single TypeScript package exposing one MCP server over two transports — stdio (local / npx) and a Cloudflare Worker (hosted edge endpoint) — both driven by the same core.ts tool definitions, which also power the importable library.
npm install
npm run build
npm testPrivacy
This tool runs locally on your machine and is built not to collect, store, or transmit your data — no analytics, no telemetry, no account. All reference data is bundled — no network calls, and nothing leaves your device. Full policy: https://qinisolabs.github.io/privacy.html.
License
Apache-2.0. ICD-10-CM data is U.S. public domain (NCHS/CMS); see NOTICE.
Available Tools
3 toolslookup_icd10A
USE THIS to get the OFFICIAL description of an ICD-10-CM diagnosis code instead of recalling it — models confidently misstate the specifics (laterality, severity, encounter type) and invent descriptions for codes that don't exist. Returns the official description, the canonical dotted form, and its 3-character category; if the code is well-formed but not in the dataset it says so rather than guessing. Accepts codes with or without the dot (E11.9 or E119).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The ICD-10-CM code, e.g. E11.9 or E119. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: returns official description, dotted form, category; handles missing codes gracefully; accepts codes with or without dot.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, well-structured paragraph. Every sentence adds necessary information, starting with a clear directive. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema or annotations, the description covers purpose, input format, return content, and error handling comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the code parameter with an example. The description adds value by clarifying that dots are optional, which is a behavioral nuance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to get the official ICD-10-CM description, using the verb 'get' and specifying the resource. It distinguishes from sibling tools by addressing the problem of model misrecall.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (when needing official description instead of recalling) and provides edge-case behavior (code not found). Implicitly contrasts with sibling tools search_icd10 and validate_icd10.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_icd10A
USE THIS to find the ICD-10-CM code for a condition (reverse lookup) instead of guessing the code — e.g. 'type 2 diabetes' or 'generalized anxiety'. Returns official codes whose description contains all your search words, shortest (most general) first.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Condition or keywords to search descriptions for. | |
| limit | No | Max results (default 20). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool returns official codes, uses word-matching logic ('contains all your search words'), and orders results by shortest most general code. This is adequate for a read-only search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the purpose and usage, then explains behavior. Every sentence contributes meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with 2 parameters and no output schema, the description explains input behavior, matching logic, and ordering. It is sufficiently complete for an agent to use correctly, though it could mention that results are codes with matched descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description adds value by providing specific examples for 'query' (e.g., 'type 2 diabetes') and noting that 'limit' defaults to 20, which the schema does not specify.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to find ICD-10-CM codes for a condition via reverse lookup, distinguishing it from siblings like lookup_icd10 and validate_icd10. The verb 'find' and resource 'ICD-10-CM code' are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'USE THIS to find the ICD-10-CM code for a condition (reverse lookup) instead of guessing the code', providing clear when-to-use guidance. It lacks explicit when-not-to-use or direct sibling comparisons, but the context includes sibling names for inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_icd10A
USE THIS to check whether an ICD-10-CM code is real before relying on it — never assume a plausible-looking code exists. Returns whether it is well-formed AND present in the official code set, plus the description when valid. Catches fabricated or retired codes a model would otherwise accept.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | The ICD-10-CM code to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that the tool returns validity and description, and catches fabricated/retired codes. Lacks explicit statement on no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff. First sentence is imperative and action-oriented; second adds behavioral detail. Every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and no output schema, description is fully sufficient. It covers purpose, usage, behavior, and return information. Sibling tools are mentioned in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds context beyond schema by explaining that 'validate' means checking both well-formedness and presence in official set, and mentions catching fabricated codes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to validate an ICD-10-CM code's existence and correctness. It distinguishes from siblings by focusing on validation vs. lookup or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit instruction to use this tool before relying on a code and warns against assuming codes are valid. Implicitly differentiates from searching or looking up codes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
3 tool updates
v0.1.1- First observed
lookup_icd10 - First observed
search_icd10 - First observed
validate_icd10
TDQS
Each tool has a clearly distinct purpose: lookup retrieves description for a given code, search finds codes for a condition, and validate checks code existence. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern (lookup_icd10, search_icd10, validate_icd10) using snake_case, making their actions predictable and clear.
Three tools are well-scoped for the domain of ICD-10-CM code management—lookup, search, and validate—each earning its place without redundancy or excess.
The tool set covers the fundamental operations for ICD-10-CM codes: lookup, reverse search, and validation. Minor gaps like hierarchical navigation exist, but the core workflow is complete.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
ICD-10-CM / HCC medical coding tools with database-verified accuracy and denial-prevention rules.
ICD-10-GM, OPS, DRG, ZE, PEPP, DKR, SEG-4, ATC lookup for German coding, 2010-2027
WHO ICD-10/ICD-11 diagnosis codes. Lookup, search, chapters via official WHO API.
NIH Clinical Tables: ICD-10/9, RxTerms, LOINC, NPI, conditions search. Keyless.
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for automated ICD-10 medical coding. Code clinical text to ICD-10-CM diagnoses, search 74,000+ codes, and de-identify PHI via the AutoICD API.653MIT
- AlicenseAqualityBmaintenanceHealthcare billing AI for agents — 12 tools for ICD-10/CPT/HCPCS code lookup (80K+ codes), prior auth prediction, medical NER, claims validation, HIPAA compliance auditing, and provider/drug enrichment. Pay-per-call via credits or USDC.20442MIT
- AlicenseAqualityDmaintenanceMedical terminology MCP server — ICD-10, MedDRA, RxNorm, CTCAE for AI agents614MIT
- AlicenseNot gradedqualityCmaintenanceProvides keyless access to NIH clinical data including ICD-10/9, RxTerms, LOINC, NPI, and conditions search, allowing AI agents to query medical terminologies without authentication.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/qinisolabs/icdwise'
If you have feedback or need assistance with the MCP directory API, please join our Discord server