Comparison

FHIR MCP servers compared

Open-source MCP servers whose public docs describe access to a FHIR API. Last EHR is one row in this table.

A FHIR MCP server exposes tools an MCP client, such as Claude or Cursor, can call against a FHIR backend. The columns are the language, the backends the project documents, what those docs say it can read, whether it can write, whether a person must approve each write, the license, and the latest commit on the default branch.

Checked on . Rows are alphabetical. This is not a ranking, and it is not a clinical, safety, or compliance claim. Last commit is the committer date of the default-branch HEAD from the GitHub API. A package version, when shown, is the npm or PyPI version returned the same day. Those are different facts. "Not described" means the linked README does not describe that behavior.

FHIR MCP servers compared, checked on 2026-11-11
NameLanguageFHIR backendsRead coverageWrite supportWrites require human approvalLicenseLast commit
Azure AHDS FHIR MCP Serverazure-fhir-mcp-server 1.2.0PythonAzure Health Data Services FHIR. The README sets fhirUrl with Azure AD client credentials, or an OAuth on-behalf-of HTTP mode.search_fhir, MCP resources such as fhir://Patient/{id}, and get_user_info when OAuth is on.No write tool is listed in the README tools section.Not applicable. No write tool is listed.MIT
Epic FHIR MCP ServerPythonEpic FHIR R4. The README walks through a non-production Epic sandbox app with backend-services JWT auth.Patient search and read, plus per-patient Condition, MedicationRequest, Observation, AllergyIntolerance, Immunization, and Procedure reads.No write tool is listed.Not applicable. No write tool is listed.Apache-2.0. The README badge says MIT; the GitHub license API reports Apache-2.0.
fhir-dsl MCP@fhir-dsl/mcp 1.2.2TypeScriptOne configured FHIR base URL. Auth can be a bearer token, SMART backend services, or a patient-launch refresh token. Resource types are a configured list.read, vread, search, history, capabilities, and operation. Read-only until writes are turned on.Opt-in create, update, patch, and delete.Optional, and it is not a separate approval screen. With confirmWrites, a write is rejected unless the tool call includes confirm: true. dryRun is a separate optional guard.MIT
fhir-mcpfhir-mcp 0.2.2PythonIn-memory synthetic patients by default. The README also describes FHIR_MCP_BACKEND=hapi and other FHIR R4 servers.search_patients, get_patient_summary, search_observations, search_conditions, get_medications, validate_code, and run_cds_hook. These are focused tools, not a generic resource browser.create_clinical_note creates a DocumentReference.Not described in the README.Apache-2.0
FHIR-MCPTypeScriptA FHIR base URL. The README example is the public HAPI R4 endpoint, plus a terminology base URL.fhir.read, fhir.search, and fhir.capabilities, plus terminology lookup, expand, and translate.fhir.create and fhir.update.Not described in the README.MIT
fhirHydrantfhirhydrant 0.17.3TypeScriptFHIR R4+ using SMART Backend Services (signed JWT). Resources and operations come from config and the server CapabilityStatement.Search, read, vread, and history. Terminology lookup and named operations are optional.Create, update, patch, and delete only when FHIR_WRITE_CAPABILITIES lists them. FHIR_WRITE_DRY_RUN can validate a write without sending it.Not described as required.Kopimi
healsens-fhirmcpGoOne configured FHIR R4 or R5 base URL, with a bearer token when the server requires one.fhir_read, fhir_search, capability and structure lookups, and operations the README limits to read-only.None. The README says the tool surface is read-only by design.Not applicable. There are no write tools.AGPL-3.0
health-record-mcp (archived)TypeScriptSMART on FHIR. Tool calls query a record already saved in a local SQLite file. The README includes Epic sandbox brand configuration. GitHub marks the repository archived.grep_record, query_record (SQL SELECT), and eval_record (JavaScript over the fetched record).No write tool is listed.Not applicable. No write tool is listed.MIT
LangCare MCP FHIR@langcare/langcare-mcp-fhir 2.5.0GoAny FHIR R4 server. The README names Epic, Cerner, OpenEMR, and Google Cloud Healthcare API.fhir_read and fhir_search for any R4 resource type.fhir_create and fhir_update.Not described as a server requirement.MIT
Last EHR@lastehr/mcp 0.5.2This site's MCP serverTypeScriptMedplum. This repository's local HAPI stack when FHIR_BACKEND=hapi. The public Epic sandbox, the public Oracle Health sandbox, and a generic SMART Backend Services server when LASTEHR_EXPERIMENTAL_FHIR_ADAPTERS=1 and LASTEHR_BACKEND is epic, oracle, or smart.Four read tools. The section reader covers 23 patient-scoped sections: 25 of 27 US Core 9.0.0 resource types, plus Communication, Task, and AuditEvent. Medication and PractitionerRole are not sections.Off by default. LASTEHR_MCP_WRITES=proposal adds creates for a note (Communication), a measurement or linked correction (Observation), and a follow-up task (Task). No update or delete tools.Yes. Each write waits for an explicit human decision in a client that supports MCP elicitation. Clients that cannot show that prompt are not offered the write tools.Apache-2.0
Medplum MCPTypeScriptMedplum, using MEDPLUM_BASE_URL and a client id and secret. The README example is a local Medplum server.Get and search tools for Patient, Practitioner, Organization, Encounter, Observation, MedicationRequest, Medication, and EpisodeOfCare, plus generalFhirSearch.Create and update tools for those types. The README lists create and search for Medication, and does not list an update tool for Medication.Not described in the README.MIT
Momentum FHIR MCP ServerPythonA FHIR server with OAuth2 client credentials. The README demo uses Medplum. LOINC and Pinecone are separate optional services.Named tools for Patient, Observation, Condition, Medication, Immunization, Encounter, AllergyIntolerance, FamilyMemberHistory, and DocumentReference, plus request_generic_resource for other types.The README says each FHIR resource tool supports create, read, update, and delete.Not described in the README.MIT
PyMedplumpymedplum 0.6.0PythonMedplum, hosted or self-hosted, via MEDPLUM_CLIENT_ID and MEDPLUM_CLIENT_SECRET. The MCP entry point is pymedplum-mcp.read, search, patient $everything, schema lookup, and terminology helpers. Write tools exist and stay blocked until writes are enabled.create, update, patch, delete, conditional create, and other mutation tools when MEDPLUM_ENABLE_WRITES=true.Not described as a required prompt. The MCP guide says review of tool calls belongs to the calling agent.Apache-2.0
WSO2 FHIR MCP Serverfhir-mcp-server 0.11.0PythonAny FHIR base URL set as FHIR_SERVER_BASE_URL. The README demos use HAPI and the Epic sandbox. Auth is SMART-on-FHIR client credentials, a static access token for local stdio, or authorization disabled.get_capabilities, search, and read, for a resource type the caller names.create, update, and delete tools.Not described in the README.Apache-2.0

Sources

Each link below was requested on 2026-11-11. The table uses the README or guide at that URL, plus the GitHub repository API for license metadata and the default-branch commit date. Package links were checked against the public npm registry or the PyPI JSON API.

Connect an agent

Questions about pointing Claude or Cursor at a FHIR server, Epic sandbox writes, human approval, and synthetic data are on the homepage FAQ. The Last EHR MCP guide is at /docs/mcp.