MCP server for WHO ICF (International Classification of Functioning, Disability and Health) - provides tools for looking up and searching ICF codes, browsing ICF categories, and understanding functional health classifications
The server provides 9 tools with consistent descriptions and schemas. Naming follows verb_noun conventions (icf_lookup, icf_search, icf_browse_category, icf_get_children, icf_explain_qualifier, icf_get_parent, score_instrument, list_instruments, get_instrument_details). All tool descriptions are present and substantial (ranging 150-400+ chars). Input schemas are visible with type definitions and parameter descriptions. However, output schemas are NOT documented, the code returns formatted strings or lists without explicit schema definition, which violates the pattern:tool-description baseline of 100% A+ tools having documented return types. Parameter descriptions are clear and specific (e.g., 'Component letter (b, s, d, e) or sub-chapter code (b1, d4, etc.)'), but several tools lack actionable constraints (e.g., no enum definition for 'component' parameter in icf_explain_qualifier, accepted as free-form string). Error handling is basic, tools return human-readable error strings but do NOT provide recovery guidance ('Try search_users() first') or categorize errors as retryable vs. fatal. The tool descriptions include helpful context (e.g., ICF code hierarchy explanation in icf_get_children) but lack dependency hints. score_instrument and get_instrument_details accept free-form instrument names without enum validation, inviting hallucinated values.
Get detailed information about a specific clinical assessment instrument. Includes full item text, response options, scoring instructions, ICF mappings, clinical interpretation guides, and references.
Browse an ICF category or sub-chapter to explore available codes. Accepts top-level components or sub-chapter codes: - "b", "s", "d", "e": Top-level components - "b1": Mental functions chapter - "b2": Sensory functions and pain - "d4": Mobility chapter - "e1": Products and technology - Any valid sub-chapter code (e.g., "b1", "s7", "d45", "e3")
Explain ICF qualifier systems. Each ICF component uses different qualifiers. ICF qualifier types vary by component: - Body Functions (b): 1 qualifier — extent of impairment (0-4) - Body Structures (s): 3 qualifiers — extent, nature of change, location - Activities & Participation (d): 2 qualifiers — performance, capacity - Environmental Factors (e): 1 qualifier — barrier (0-4) or facilitator (+0 to +4)
Get the child codes (subcategories) of an ICF code. ICF codes are hierarchical. For example: - d4 (Mobility) contains d410-d499 - d45 (Walking and moving) contains d450-d459 - d450 (Walking) is a specific activity Use this to drill down into more specific codes.
Output schemas are not documented. Tools return formatted strings (format_entity) or lists without explicit return type definitions. LLMs cannot plan downstream operations without knowing what fields and structure to expect. Baselines show 100% of A+ tools have documented return types.
Free-form parameters without enum constraints. 'component' in icf_explain_qualifier accepts free-form string (documented as 'generic', 'b', 's', 'd', 'e' but not enforced). 'instrument' in score_instrument and get_instrument_details same issue (accepts 'GAD-7', 'PHQ-9', etc. but not validated). Invites hallucinated values like 'b-invalid' or 'CUSTOM-SCALE'. Per pattern:constrained-input, enums are self-documenting and prevent invalid LLM selections.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 45 | - | v1 |
Get the parent code of an ICF code. ICF codes are hierarchical. This tool returns the broader category that contains the specified code. For example: - Parent of d450 (Walking) is d45 (Walking and moving) - Parent of d45 is d4 (Mobility)
Look up an ICF code and get its full details. The ICF (International Classification of Functioning, Disability and Health) codes describe how health conditions affect functioning. Code prefixes: - b: Body Functions (e.g., b280 = sensation of pain) - s: Body Structures (e.g., s750 = structure of lower extremity) - d: Activities and Participation (e.g., d450 = walking) - e: Environmental Factors (e.g., e120 = assistive products for mobility)
Search the ICF classification by keywords or description. Use this to find ICF codes when you know what functional area you're looking for but don't know the specific code. For example: - "walking" to find mobility-related codes - "pain" to find pain-related body function codes - "memory" to find cognitive function codes
List all available clinical assessment instruments with their details. Returns information about each instrument including: - Name and abbreviation - Description and domain (mental health, rheumatology, etc.) - Scoring method and score range - ICF code mappings - Recommended assessment frequency for RPM (Remote Patient Monitoring)
Score a clinical assessment instrument and map results to ICF qualifiers. Supported instruments: - GAD-7: Generalized Anxiety Disorder (7 items, score 0-21) - PHQ-9: Patient Health Questionnaire (9 items, score 0-27) - RADAI-5: Rheumatoid Arthritis Disease Activity (5 items, score 0-10) - RAPS4: Rheumatoid Arthritis Pain Scale (4 items, score 0-20) - HAQ-DI: Health Assessment Questionnaire (20 items, score 0-3) - AIMS2: Arthritis Impact Measurement Scale (various domains) Provide responses as a list of integers corresponding to item responses.
Error handling lacks recovery guidance and error classification. When icf_lookup() returns 'ICF code not found', the LLM does not know whether to retry, search for a similar code, or ask the user. Per pattern:recovery-guide, errors must tell the agent what to do next. No retryable vs. fatal distinction. No actionable errors (e.g., 'Invalid code format: must match b/s/d/e followed by digits').
Parameter descriptions lack format/range constraints. 'max_results' in icf_search documented as 'Maximum number of results' but no bounds stated (is 1000 valid? 10000?). Per review:param-validation-rules, state expected range directly in description. icf_explain_qualifier 'qualifier' param lacks min/max (0-9 is documented but not enforced).
No pagination support in list/search tools. icf_search and icf_browse_category cap results at 10-20 items but do not return total_count, next_cursor, or page/offset parameters. Per pattern:paginated-result, large result sets must support pagination to prevent context window exhaustion. If an ICF category contains 100+ codes, the current design cannot retrieve them all.