A comprehensive MCP server suite for FHIR R4 healthcare data access, terminology services, and clinical reasoning with SMART-on-FHIR authentication support
Mixed quality across 13 tools. FHIR server tools (fhir_capabilities, fhir_read, fhir_search, fhir_search_next, validate_against_profile) have solid descriptions (100-200 chars) and complete schemas with typed parameters. Terminology tools (lookup_code, search_codes, translate_code, expand_valueset) are well-described but lack visible implementation. Clinical reasoner tools (lookup_drug, check_drug_interactions, check_dose, check_allergy_conflicts) have good descriptions but are stub implementations (Dockerfile shows 'coming in Phase 3.4'). Critical issue: 6 of 13 tools are not yet implemented, only fhir_read and validate_against_profile have visible source code. Descriptions average 150 chars (within baseline 194), but parameter descriptions are sparse for some tools.
Check a drug for potential allergy conflicts using a built-in cross-reactivity table. Supports drug class allergies (e.g. 'penicillin', 'nsaid', 'sulfonamide') and specific drug names. No network calls — uses built-in rules only.
Check a proposed drug dose against the built-in reference table (~20 common drugs). Returns assessment: within_range, exceeds_single_dose, exceeds_daily_dose, below_typical, or unknown_drug (if not in table). No network calls — uses built-in rules only.
Check for drug-drug interactions (DDIs) among 2–10 drugs by name. Uses the FDA drug label database (api.fda.gov) — interaction text from official FDA-approved labeling. No API key required.
Expand a FHIR ValueSet to retrieve all (or filtered) codes it contains. Accepts any canonical ValueSet URL hosted on tx.fhir.org. Useful for exploring allowed values for coded FHIR elements.
Retrieve a summary of the FHIR server's CapabilityStatement: FHIR version, software, supported resource types, and available search parameters. Call this first to understand what the server supports.
6 of 13 tools are stub implementations (mcp-terminology, mcp-clinical-reasoner packages). Dockerfiles show 'coming in Phase 3.3/3.4' with exit 1. Tool definitions exist in spec but no actual server code.
Parameter descriptions are minimal for some tools. E.g., fhir_search 'params' field has only 'FHIR search parameters as key-value pairs' without examples of valid keys or format constraints. LLMs cannot infer valid parameter names.
No output schemas documented for any tool. Tool descriptions state what is returned (e.g., 'Returns FHIR Bundle', 'Returns conformance status') but no structured schema showing field names, types, or required fields. LLMs cannot plan downstream calls without knowing response structure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 45 | <=2025-11-25 | v2 |
Read a single FHIR R4 resource by type and logical ID. Returns the full resource JSON.
Search a FHIR R4 resource type. Returns a FHIR Bundle (searchset) with matching entries.
Follow a Bundle pagination link returned by fhir_search. Pass the '_next_url' value from the previous search result. Returns the next page as a FHIR Bundle, again with '_next_url' if more pages exist.
Look up a single code in a medical terminology system using FHIR $lookup. Returns display name, definition, and alternate designations. Supports LOINC, SNOMED CT, RxNorm, ICD-10, ICD-10-CM, CVX, UCUM, NDC, CPT.
Look up a drug by name or RxNorm CUI. Returns the canonical RxNorm name, RxCUI, drug class membership, dose reference info (if available), and allergen class. Use this first to get the RxCUI before calling check_drug_interactions.
Search for codes by free text within a terminology system. Uses FHIR ValueSet/$expand. Supported systems: loinc, snomed, rxnorm. For exact code lookup use lookup_code instead.
Translate a code from one terminology system to another using FHIR ConceptMap/$translate. Common supported mappings: SNOMED ↔ ICD-10-CM, LOINC ↔ SNOMED, RxNorm ↔ NDC.
Validate a FHIR R4 resource against a StructureDefinition profile using the HAPI validator. Supports US Core and IPS profiles as well as base FHIR R4 conformance. Returns conformance status, error count, and issue details.
No error handling guidance in tool descriptions. Tools that call external APIs (lookup_code, search_codes, translate_code, expand_valueset) do not document failure modes, retry logic, or recovery steps. LLMs have no guidance on what to do if a lookup fails.
Tool names use underscores (fhir_read, fhir_search) which is correct, but some names are slightly ambiguous. 'fhir_search_next' could be clearer as 'fhir_search_paginate' or 'fhir_get_next_page'. 'validate_against_profile' is verbose; 'validate_fhir_resource' would be clearer.