MCP server for ICF (International Classification of Functioning) code lookup via WHO ICD-API v2
Strong foundation with 9 well-named, verb-prefixed tools (search_, get_, browse_, autocode_, validate_) and comprehensive parameter schemas using Zod validation. All tools have descriptions (avg ~150 chars, within baseline 34-392 range). Input schemas are complete with types, enums, patterns, and min/max constraints. However, output schemas are not explicitly documented in the visible code, responses are JSON-stringified via textResult() helper without formal schema declarations. Error handling is present but generic (errorResult() returns JSON without recovery guidance). No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being read-only. Parameter descriptions are solid (e.g., 'Search query (clinical term, body function, activity, etc.)') but some lack actionable format hints. Missing: documented return types, pagination guidance for large result sets, and error classification (retryable vs. fatal).
Automatically match free text to ICF codes using the WHO API's autocode endpoint. Returns the best matching code(s) with match type and confidence score. Useful for rapid coding of clinical narratives.
Browse the ICF hierarchy starting from a code or chapter. Returns parent, siblings, and child codes with titles. Useful for exploring the classification structure and finding related codes.
Get detailed information about a specific ICF code, including its title, definition, inclusions, exclusions, and position in the hierarchy.
Get the ICF Core Set for a specific condition. Core Sets are condition-specific subsets of ICF codes recommended by WHO for assessment and outcome measurement. Returns codes organized by component (brief or comprehensive).
Get the applicable qualifier scales for an ICF code. Qualifiers are numeric scales (0-4, 8, 9) used to rate the severity or extent of a functioning problem. Different components (b, s, d, e) have different qualifier structures.
Output schemas not formally documented. Tools return JSON via textResult() helper without declaring expected response structure (fields, types, nesting). LLMs cannot plan downstream tool calls or extract specific fields reliably.
No tool annotations despite all 9 tools being read-only. Missing readOnlyHint declarations prevent agents from understanding which tools are safe to call speculatively vs. which require confirmation.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Get related ICF codes for a given code, including parent, siblings, and children. Useful for understanding the context and relationships of a code within the classification.
Get terminology system metadata for an ICF code, including FHIR system URI, OID, openEHR terminology ID, and WHO browser URL. Useful for interoperability and standards mapping.
Search the ICF (International Classification of Functioning, Disability and Health) for codes matching a query. Returns matching codes with titles, chapters, and relevance scores. If no results are found, returns alternative query suggestions using clinical terminology. Use this as the primary entry point for finding ICF codes. Supports lay and clinical terminology.
Validate and parse a qualified ICF notation string (e.g., d450.2.3, s730.3.2.1, e110+3). Returns the parsed code, component, and qualifier values with labels and percentage ranges.
Error handling is generic. errorResult() returns JSON without recovery guidance or error classification. When search_icf finds no results, it returns suggestions via generateSearchSuggestions(), but other tools (get_icf_code, get_qualifiers) lack similar fallback logic. LLMs cannot distinguish retryable from fatal errors.
Parameter descriptions lack actionable format hints. E.g., 'code' parameter uses regex pattern '^[bdseBDSE]\d{1,5}$' but description does not explain the format (e.g., 'ICF code: letter (b/s/d/e) + 1-5 digits, e.g., b280, d450'). LLMs cannot read JSON Schema patterns, they rely on description text.
No pagination or result-limiting guidance. search_icf accepts max_results (1-25, default 10), but other tools (browse_icf_hierarchy, get_related_codes) do not document how many results they return or whether results are truncated. Large hierarchies could blow context windows.