FHIR MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FHIR_SCOPE | No | OAuth2 scopes (space-separated). Default: all supported resources | |
| FHIR_BASE_URL | No | Base URL of the FHIR server. Default: https://fhir-ehr.cerner.com/r4 | https://fhir-ehr.cerner.com/r4 |
| FHIR_CLIENT_ID | Yes | OAuth2 client ID for authentication | |
| FHIR_TENANT_ID | No | Tenant ID for your FHIR server instance. Default: ec2458f2-1e24-41c8-b71b-0e701af7583d | ec2458f2-1e24-41c8-b71b-0e701af7583d |
| FHIR_CLIENT_SECRET | Yes | OAuth2 client secret for authentication | |
| FHIR_TOKEN_ENDPOINT | No | OAuth2 token endpoint URL. Auto-generated from tenant ID if not provided. | |
| FHIR_REQUEST_TIMEOUT | No | Request timeout in seconds. Default: 60.0 | 60.0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_patient_by_idA | Retrieve a specific patient by their FHIR patient ID. Args: patient_id: The FHIR patient ID to retrieve Returns: Dictionary containing the patient information |
| search_patients_by_nameC | Search for patients by name using FHIR search parameters. Args: given_name: Patient's given (first) name family_name: Patient's family (last) name Returns: Dictionary containing the search results |
| search_patients_by_identifierA | Search for patients by identifier (e.g., MRN, SSN). Args: identifier_type: Type of identifier (e.g., "MR", "SS") identifier_value: The identifier value to search for Returns: Dictionary containing the search results |
| search_patients_by_birthdateA | Search for patients by birth date. Args: birthdate: Patient's birth date in YYYY-MM-DD format Returns: Dictionary containing the search results |
| search_patients_by_phoneC | Search for patients by phone number. Args: phone_number: Patient's phone number Returns: Dictionary containing the search results |
| search_patients_by_emailB | Search for patients by email address. Args: email: Patient's email address Returns: Dictionary containing the search results |
| search_patients_by_addressB | Search for patients by address components. Args: postal_code: Patient's postal/ZIP code city: Patient's city state: Patient's state Returns: Dictionary containing the search results |
| get_allergy_by_idB | Retrieve a specific allergy intolerance by ID. Args: allergy_id: The FHIR AllergyIntolerance ID Returns: Dictionary containing the allergy intolerance information |
| get_patient_allergiesA | Retrieve allergies for a specific patient. Args: patient_id: The FHIR patient ID clinical_status: Optional filter by clinical status (active, inactive, resolved) Returns: Dictionary containing the patient's allergies |
| get_condition_by_idB | Retrieve a specific condition by ID. Args: condition_id: The FHIR Condition ID Returns: Dictionary containing the condition information |
| get_patient_conditionsA | Retrieve conditions for a specific patient. Args: patient_id: The FHIR patient ID clinical_status: Optional filter by clinical status (active, inactive, resolved) category: Optional filter by category (problem-list-item, encounter-diagnosis) Returns: Dictionary containing the patient's conditions |
| get_procedure_by_idC | Retrieve a specific procedure by ID. Args: procedure_id: The FHIR Procedure ID Returns: Dictionary containing the procedure information |
| get_patient_proceduresA | Retrieve procedures for a specific patient. Args: patient_id: The FHIR patient ID date: Optional filter by date (YYYY-MM-DD format or date range) status: Optional filter by status (preparation, in-progress, completed) Returns: Dictionary containing the patient's procedures |
| get_encounter_by_idB | Retrieve a specific encounter by ID. Args: encounter_id: The FHIR Encounter ID Returns: Dictionary containing the encounter information |
| get_patient_encountersA | Retrieve encounters for a specific patient. Args: patient_id: The FHIR patient ID date: Optional filter by date (YYYY-MM-DD format or date range) status: Optional filter by status (planned, arrived, in-progress, finished) encounter_class: Optional filter by class (ambulatory, emergency, inpatient) Returns: Dictionary containing the patient's encounters |
| get_diagnostic_report_by_idB | Retrieve a specific diagnostic report by ID. Args: report_id: The FHIR DiagnosticReport ID Returns: Dictionary containing the diagnostic report information |
| get_patient_diagnostic_reportsB | Retrieve diagnostic reports for a specific patient. Args: patient_id: The FHIR patient ID category: Optional filter by category (LAB, RAD, etc.) date: Optional filter by date (YYYY-MM-DD format or date range) status: Optional filter by status (registered, partial, final, corrected) Returns: Dictionary containing the patient's diagnostic reports |
| get_observation_by_idB | Retrieve a specific observation by ID. Args: observation_id: The FHIR Observation ID Returns: Dictionary containing the observation information |
| get_patient_observationsA | Retrieve observations for a specific patient. Args: patient_id: The FHIR patient ID category: Optional filter by category (vital-signs, laboratory, etc.) code: Optional filter by observation code (LOINC code) date: Optional filter by date (YYYY-MM-DD format or date range) Returns: Dictionary containing the patient's observations |
| get_patient_vital_signsA | Retrieve vital signs observations for a specific patient. Args: patient_id: The FHIR patient ID date: Optional filter by date (YYYY-MM-DD format or date range) Returns: Dictionary containing the patient's vital signs |
| get_patient_lab_resultsC | Retrieve laboratory observations for a specific patient. Args: patient_id: The FHIR patient ID date: Optional filter by date (YYYY-MM-DD format or date range) Returns: Dictionary containing the patient's lab results |
| get_immunization_by_idA | Retrieve a specific immunization by ID. Args: immunization_id: The FHIR Immunization ID Returns: Dictionary containing the immunization information |
| get_patient_immunizationsA | Retrieve immunizations for a specific patient. Args: patient_id: The FHIR patient ID date: Optional filter by date (YYYY-MM-DD format or date range) status: Optional filter by status (completed, not-done) Returns: Dictionary containing the patient's immunizations |
| get_medication_request_by_idA | Retrieve a specific medication request by ID. Args: medication_request_id: The FHIR MedicationRequest ID Returns: Dictionary containing the medication request information |
| get_patient_medication_requestsA | Retrieve medication requests for a specific patient. Args: patient_id: The FHIR patient ID status: Optional filter by status (active, completed, cancelled) intent: Optional filter by intent (order, plan, proposal) Returns: Dictionary containing the patient's medication requests |
| get_appointment_by_idB | Retrieve a specific appointment by ID. Args: appointment_id: The FHIR Appointment ID Returns: Dictionary containing the appointment information |
| get_patient_appointmentsA | Retrieve appointments for a specific patient. Args: patient_id: The FHIR patient ID date: Optional filter by date (YYYY-MM-DD format, automatically formatted with time component) status: Optional filter by status (proposed, pending, booked, arrived, fulfilled, cancelled) Returns: Dictionary containing the patient's appointments |
| search_appointments_by_dateA | Search for appointments by date. Args: date: Appointment date (YYYY-MM-DD format, automatically formatted with time component) status: Optional filter by status (proposed, pending, booked, arrived, fulfilled, cancelled) Returns: Dictionary containing the appointments |
| get_fhir_capability_statementA | Retrieve the FHIR server's capability statement (metadata). This provides information about the server's capabilities and supported resources. Returns: Dictionary containing the FHIR server capabilities |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 29 tools
Most tools target distinct resources, with clear patterns like get_<resource>_by_id and get_patient_<resource>. However, there is potential overlap between get_patient_lab_results, get_patient_vital_signs, and get_patient_observations, as lab results and vital signs are subsets of observations. Descriptions help distinguish them, but an agent could still be confused.
All tool names follow a consistent verb_noun pattern using snake_case. get_ and search_ prefixes are used appropriately, and resource names are pluralized uniformly. No mixed conventions or irregular naming.
With 29 tools, the server covers a wide range of FHIR resources and search capabilities without being overwhelming. The count is well-scoped for a FHIR client, providing both individual resource retrieval by ID and patient-centric queries, plus a capability statement.
The tool set covers the most common FHIR resources and operations (read, search by patient) effectively. Minor gaps exist, such as missing direct access to Medication or Practitioner resources, but these are not critical for a patient-centric server. Overall, it provides a complete surface for typical use cases.