FHIR R4 MCP server — SMART-on-FHIR auth, vendor normalization, ClinicalContextBundle. Epic sandbox tested.
EHR-MCP provides well-structured FHIR tools with clear naming (verb_noun pattern: get_patient, get_conditions) and reasonable descriptions (avg ~120 chars). All 9 tools have input schemas with type definitions and required fields. However, parameter descriptions are sparse or missing entirely, most params lack guidance on format, constraints, or when to use them. Output schemas are not documented, forcing LLMs to infer response structure. Error handling is absent from tool definitions. No tool annotations (readOnlyHint, destructiveHint) despite all being read-only. The server targets a specialized domain (healthcare/FHIR) with domain-appropriate tool composition, but lacks the LLM-optimization details (constraints, examples, recovery guidance) that distinguish A-grade tools.
Retrieve allergy and intolerance records for a patient.
Retrieve active conditions (diagnoses) for a patient.
Retrieve diagnostic reports for a patient.
Retrieve encounter history for a patient.
Retrieve active medication requests for a patient.
Retrieve observations (labs, vitals) for a patient.
Parameter descriptions missing or minimal. 'count' param appears in 7 tools with no description of its purpose, range (1 - 100?), or default behavior. 'additional_params' in search_fhir lacks guidance on valid FHIR search parameters.
Output schemas not documented. Tool descriptions do not specify what fields are returned (e.g., does get_patient return FHIR Patient resource as-is, or a normalized summary?). LLMs cannot plan downstream calls without knowing response structure.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | <=2025-11-25 | v2 |
Retrieve a single Patient FHIR resource by ID.
Retrieve a full clinical context bundle for a patient. Returns patient demographics, conditions, medications, allergies, observations, encounters, and diagnostic reports in a single call. Use this as the primary tool for any clinical workflow agent.
Raw FHIR R4 resource search. Use when specific resource types or custom search parameters are needed beyond the standard tools.
No tool annotations despite all tools being read-only. Missing readOnlyHint on all 9 tools. This prevents MCP clients from optimizing caching, retry logic, or safety checks for read-only operations.
No error handling guidance in tool definitions. No documentation of what errors can occur (e.g., patient not found, FHIR server unreachable), how to recover, or whether errors are retryable. Agents cannot self-correct on failures.
Pagination not documented. Tools like get_conditions accept 'count' but no description of offset/page behavior, total count in response, or next_cursor. Large result sets risk context window exhaustion.