Offline MCP server for ICD-10-CM, ICD-9-CM, ICD-10 WHO code lookup with GEMs crosswalk. Zero API keys. Zero network calls. Zero data leakage.
Server has 5 well-named tools with complete input schemas and descriptions. Naming follows verb_noun pattern (lookup_code, search_codes, browse_category, translate_code, get_stats). All parameters have type definitions and descriptions. However, output schemas are not formally documented, responses are free-text strings rather than structured objects. Error handling is present but minimal (returns error strings rather than actionable recovery guidance). No tool annotations (readOnlyHint, etc.). Parameter descriptions are adequate but lack constraint details (e.g., 'limit' lacks explicit min/max in descriptions despite code enforcement). Missing pagination documentation for browse_category and search_codes despite implementing limits.
Browse all codes under a category prefix.
Database statistics: code counts per system and crosswalk mappings.
Look up a medical code and return its description.
Search codes by clinical description using full-text search.
Translate between ICD-9-CM and ICD-10-CM using GEMs crosswalk.
Output schemas not documented. All tools return free-text strings instead of structured JSON objects. LLMs cannot reliably parse results or extract fields for downstream tool calls.
Parameter constraints (limit ranges, system enum values) are enforced in code but not declared in parameter descriptions. LLMs cannot see that 'limit' has min=1, max=50 without reading implementation.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only but this is not declared in the tool definition, forcing LLMs to infer safety from descriptions.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
Error messages are helpful but not categorized. No distinction between retryable errors (e.g., 'code not found') and fatal errors. LLMs cannot determine whether to retry or ask the user.
Pagination not documented in tool descriptions. browse_category and search_codes accept 'limit' but descriptions do not explain that results are capped or how to retrieve additional pages.