Skip to content

Connectors · Industry

Epic on FHIR MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Epic on FHIR and the rest of your systems. It gives your agent 264 Epic on FHIR actions (229 reads and 35 writes) and holds the Epic on FHIR credential itself, so the agent never does. It paces Epic on FHIR's limits and records every call. Connecting Epic on FHIR needs your own Epic on FHIR OAuth app and one admin sign-in.

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

claude mcp add --transport http actionlake https://connect.actionlake.com/mcp
the first call
do {  action: "epic_fhir.crd_services.discover",  intent: "check which Epic on FHIR account is connected"}# List the Coverage Requirements Discovery CDS services (FHIR R4) · read · 1 upstream call
  • 264actionsin one signed file
  • 229readlook, never change
  • 35writecreate and update
  • 0wait for a yesdestructive, confirmed first

Set up

Connect Epic on FHIR in three steps.

  1. 01

    Add actionlake to Claude.

    Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.

    https://connect.actionlake.com/mcp
  2. 02

    Connect Epic on FHIR.

    OAuth 2.0, authorization code. You register your own OAuth app with Epic on FHIR, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.

    Before the first sign-in, Epic on FHIR needs an OAuth app of your own, registered in its developer portal. actionlake has no Epic on FHIR app to lend you.

    • access_tokenAccess token from one sign-in with your own OAuth app
    • refresh_tokenRefresh token from the same sign-in; the access token is renewed from it
    • client_idNon-production or production Client ID of your app registered on fhir.epic.com (Build Apps)
    • client_secretThe client secret provisioned for this Epic organization (Build Apps > Review & Manage Downloads)
    • hostWhere your Epic on FHIR lives: your host
    • instance_pathWhere your Epic on FHIR lives: your instance path
    account { op: "connections.requirements", service: "epic_fhir" }
    # free: exactly what to paste, and what is found for you
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates the call and prices it, for free.

    do    { action: "epic_fhir.crd_services.discover" }# list the coverage requirements discovery cds services (fhir r4) · read · 1 upstream callcheck { action: "epic_fhir.claims.submit", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Epic on FHIR at a glance

Sign-in
OAuth 2.0, authorization code. You register your own OAuth app with Epic on FHIR, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.
You provide
access_tokenrefresh_tokenclient_idclient_secret
Setup fields
hostinstance_path
Limits we pace to
10 calls a second, per connection
API covered
Epic on FHIR (Epic EHR FHIR R4, STU3 and DSTU2 APIs) API Epic on FHIR, August 2026 release (FHIR R4 4.0.1, STU3 3.0.x, DSTU2 1.0.2), at your Epic on FHIR instance's API base URL, which you enter when connecting
Built from
Epic on FHIR's documentation, read 23 October 2026fhir.epic.comfhir.epic.comfhir.epic.com
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
4 of 229 reads, for up to an hour; a write clears what it affects
Shared entities
3, so ask can line Epic on FHIR up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Epic on FHIR.

264 actions in 70 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 229readlook, never change
  • 35writecreate and update
  • 0destructivewait for a confirmation
  1. Observations

    11

    7 read · 4 write · 0 destructive

    Create an Observation (FHIR R4) · Search Observation resources (FHIR R4) · Read an Observation by id (FHIR R4) · Update an Observation (FHIR R4)

  2. Patients

    10

    8 read · 2 write · 0 destructive

    Create a Patient (FHIR R4) · Match patients against demographics ($match) (FHIR R4) · Search Patient resources (FHIR R4) · Read a Patient by id (FHIR R4)

  3. Document references

    9

    6 read · 3 write · 0 destructive

    Create a DocumentReference (FHIR R4) · Search DocumentReference resources (FHIR R4) · Read a DocumentReference by id (FHIR R4) · Update a DocumentReference (FHIR R4)

  4. Allergy intolerances

    8

    6 read · 2 write · 0 destructive

    Create an AllergyIntolerance (FHIR R4) · Search AllergyIntolerance resources (FHIR R4) · Read an AllergyIntolerance by id (FHIR R4) · Search AllergyIntolerance resources (FHIR DSTU2)

  5. Conditions

    8

    6 read · 2 write · 0 destructive

    Create a Condition (FHIR R4) · Search Condition resources (FHIR R4) · Read a Condition by id (FHIR R4) · Search Condition resources (FHIR DSTU2)

  6. Procedures

    8

    6 read · 2 write · 0 destructive

    Create a Procedure (FHIR R4) · Search Procedure resources (FHIR R4) · Read a Procedure by id (FHIR R4) · Update a Procedure (FHIR R4)

  7. Devices

    7

    6 read · 1 write · 0 destructive

    Raise an auxiliary-function (staff duress) notification ($auxiliary-function) (FHIR R4) · Search Device resources (FHIR R4) · Read a Device by id (FHIR R4) · Search Device resources (FHIR DSTU2)

  8. Diagnostic reports

    7

    6 read · 1 write · 0 destructive

    Search DiagnosticReport resources (FHIR R4) · Read a DiagnosticReport by id (FHIR R4) · Update a DiagnosticReport (FHIR R4) · Search DiagnosticReport resources (FHIR DSTU2)

62 more areas · 196 actions
  • Goals 7
  • Appointments 6
  • Immunizations 6
  • Medication statements 6
  • Practitioners 6
  • Medications 5
  • Questionnaires 5
  • Binaries 4
  • Body structures 4
  • Capabilities 4
  • Care plans 4
  • Claims 4
  • Consents 4
  • Coverages 4
  • Device requests 4
  • Device use statements 4
  • Encounters 4
  • Flags 4
  • Immunization recommendations 4
  • Lists 4
  • Medication administrations 4
  • Medication dispenses 4
  • Medication requests 4
  • Nutrition orders 4
  • Practitioner roles 4
  • Service requests 4
  • Specimens 4
  • Communications 3
  • Criteria reviews 3
  • Endpoints 3
  • Family member histories 3
  • Locations 3
  • Organizations 3
  • Questionnaire responses 3
  • Review collections 3
  • Tasks 3
  • Value sets 3
  • Accounts 2
  • Adverse events 2
  • Care teams 2
  • CDS services 2
  • Concept maps 2
  • Contracts 2
  • Episode of cares 2
  • Explanation of benefits 2
  • Groups 2
  • Imaging studies 2
  • Measure reports 2
  • Measures 2
  • Media 2
  • Medication orders 2
  • Procedure requests 2
  • Related persons 2
  • Request groups 2
  • Research studies 2
  • Research subjects 2
  • Substances 2
  • Claim responses 1
  • Operations 1
  • Provenances 1
  • Schedules 1
  • Slots 1

Top actions

The Epic on FHIR API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems.

ActionWhat it doesEffectSame name in
epic_fhir.locations.searchSearch Location resources (FHIR R4)Search Location resources; results are Bundle entries.readthis connector
epic_fhir.appointments.searchSearch Appointment resources (FHIR R4)Search Appointment resources; results are Bundle entries.readthis connector
epic_fhir.organizations.searchSearch Organization resources (FHIR R4)Search Organization resources; results are Bundle entries.readthis connector
epic_fhir.flags.searchSearch Flag resources (FHIR R4)Search Flag resources; results are Bundle entries.readthis connector
epic_fhir.goals.searchSearch Goal resources (FHIR R4)Search Goal resources; results are Bundle entries.readthis connector
epic_fhir.lists.searchSearch List resources (FHIR R4)Search List resources; results are Bundle entries.readthis connector
epic_fhir.media.searchSearch Media resources (FHIR R4)Search Media resources; results are Bundle entries.readthis connector
epic_fhir.tasks.searchSearch Task resources (FHIR R4)Search Task resources; results are Bundle entries.readthis connector
epic_fhir.claims.searchSearch Claim resources (FHIR R4)Search Claim resources; results are Bundle entries.readthis connector
epic_fhir.claims.submitSubmit a prior authorization request ($submit) (FHIR R4)Submit a prior authorization request.writethis connector
epic_fhir.patients.createCreate a Patient (FHIR R4)Create a Patient resource from a complete FHIR Patient JSON document.writethis connector
epic_fhir.conditions.createCreate a Condition (FHIR R4)Create a Condition resource from a complete FHIR Condition JSON document.writethis connector

Try it

Prompts to paste into Claude.

Each one names the Epic on FHIR actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

    List the companies in Epic on FHIR and flag likely duplicates by name or domain.

    callsepic_fhir.organizations.search

  2. Writewrite

    Submit a prior authorization request ($submit) (FHIR R4) in Epic on FHIR. Show me exactly what you will send before you save it.

    callsepic_fhir.claims.submit

  3. Across systemsread

    Which Epic on FHIR companies have invoices in ConnectWise PSA, and how many each?

    callsepic_fhir.organizations.searchconnectwise_manage.invoices.list

Across your systems

Epic on FHIR, joined to the rest of your business.

One ask fetches from Epic on FHIR and another system, joins the rows on the same customer on our side, and hands your agent the answer, not every row.

  • Which Epic on FHIR companies have invoices in ConnectWise PSA, and how many each?

    epic_fhir.organizations.search + connectwise_manage.invoices.list, on crm.company · ConnectWise PSA

  • Which Epic on FHIR companies have invoices in NetSuite, and how many each?

    epic_fhir.organizations.search + netsuite.views.invoices, on crm.company · NetSuite

Also mapped by other connectorscrm.company 227crm.location 49service.service_appointment 9
ask
ask {  intent: "which Epic on FHIR companies have invoices in ConnectWise PSA, and how many each",  steps: [    { action: "epic_fhir.organizations.search", as: "co", input: {}, limit: 100, max_pages: 5 },    { action: "connectwise_manage.invoices.list", as: "inv", input: {}, limit: 100, max_pages: 5 },    { join: {        left: "co",        right: "inv",        on: "crm.company",        group_by: "co.name",        select: ["co.name", "count(inv.id) as invoices"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Epic on FHIR

Every write can wait for a yes.

None of Epic on FHIR's actions is destructive. A key can still be held to reads, capped, and set so a person confirms every write.

A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

a key for this connector
account {  op: "keys.create", name: "epic-fhir-agent",  allowed_actions: ["epic_fhir.*"], cap_calls: 2000,  confirm_policy: "human_for_writes"}
Illustrative. Scoped to Epic on FHIR only, capped at 2,000 upstream calls, every write confirmed.

Cost

What Epic on FHIR costs on actionlake.

Every Epic on FHIR action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Epic on FHIR refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

  • 1upstream call per actionall 264 Epic on FHIR actions
  • 264actions pageeach page of a long list is one call
  • 4reads can be cacheda cache hit costs nothing
  • 100,000calls a month, freepaid plans from US$49 a month for 250,000

See pricing

Action index

Every Epic on FHIR action.

264 actions by area: the id your agent calls, what it does, and its effect.

Observations11
  • epic_fhir.dstu2_observations.getRead an Observation by id (FHIR DSTU2)read
  • epic_fhir.dstu2_observations.searchSearch Observation resources (FHIR DSTU2)read
  • epic_fhir.observations.createCreate an Observation (FHIR R4)write
  • epic_fhir.observations.getRead an Observation by id (FHIR R4)read
  • epic_fhir.observations.searchSearch Observation resources (FHIR R4)read
  • epic_fhir.observations.updateUpdate an Observation (FHIR R4)write
  • epic_fhir.stu3_observations.createCreate an Observation (FHIR STU3)write
  • epic_fhir.stu3_observations.getRead an Observation by id (FHIR STU3)read
  • epic_fhir.stu3_observations.lastnGet the most recent observations per code ($lastn) (FHIR STU3)read
  • epic_fhir.stu3_observations.searchSearch Observation resources (FHIR STU3)read
  • epic_fhir.stu3_observations.updateUpdate an Observation (FHIR STU3)write
Patients10
  • epic_fhir.dstu2_patients.getRead a Patient by id (FHIR DSTU2)read
  • epic_fhir.dstu2_patients.searchSearch Patient resources (FHIR DSTU2)read
  • epic_fhir.patients.createCreate a Patient (FHIR R4)write
  • epic_fhir.patients.getRead a Patient by id (FHIR R4)read
  • epic_fhir.patients.matchMatch patients against demographics ($match) (FHIR R4)read
  • epic_fhir.patients.searchSearch Patient resources (FHIR R4)read
  • epic_fhir.patients.summaryGet the International Patient Summary for a patient ($summary) (FHIR R4)read
  • epic_fhir.stu3_patients.createCreate a Patient (FHIR STU3)write
  • epic_fhir.stu3_patients.getRead a Patient by id (FHIR STU3)read
  • epic_fhir.stu3_patients.searchSearch Patient resources (FHIR STU3)read
Document references9
  • epic_fhir.document_references.createCreate a DocumentReference (FHIR R4)write
  • epic_fhir.document_references.getRead a DocumentReference by id (FHIR R4)read
  • epic_fhir.document_references.searchSearch DocumentReference resources (FHIR R4)read
  • epic_fhir.document_references.updateUpdate a DocumentReference (FHIR R4)write
  • epic_fhir.dstu2_document_references.getRead a DocumentReference by id (FHIR DSTU2)read
  • epic_fhir.dstu2_document_references.searchSearch DocumentReference resources (FHIR DSTU2)read
  • epic_fhir.stu3_document_references.createCreate a DocumentReference (FHIR STU3)write
  • epic_fhir.stu3_document_references.getRead a DocumentReference by id (FHIR STU3)read
  • epic_fhir.stu3_document_references.searchSearch DocumentReference resources (FHIR STU3)read
Allergy intolerances8
  • epic_fhir.allergy_intolerances.createCreate an AllergyIntolerance (FHIR R4)write
  • epic_fhir.allergy_intolerances.getRead an AllergyIntolerance by id (FHIR R4)read
  • epic_fhir.allergy_intolerances.searchSearch AllergyIntolerance resources (FHIR R4)read
  • epic_fhir.dstu2_allergy_intolerances.getRead an AllergyIntolerance by id (FHIR DSTU2)read
  • epic_fhir.dstu2_allergy_intolerances.searchSearch AllergyIntolerance resources (FHIR DSTU2)read
  • epic_fhir.stu3_allergy_intolerances.createCreate an AllergyIntolerance (FHIR STU3)write
  • epic_fhir.stu3_allergy_intolerances.getRead an AllergyIntolerance by id (FHIR STU3)read
  • epic_fhir.stu3_allergy_intolerances.searchSearch AllergyIntolerance resources (FHIR STU3)read
Conditions8
  • epic_fhir.conditions.createCreate a Condition (FHIR R4)write
  • epic_fhir.conditions.getRead a Condition by id (FHIR R4)read
  • epic_fhir.conditions.searchSearch Condition resources (FHIR R4)read
  • epic_fhir.dstu2_conditions.getRead a Condition by id (FHIR DSTU2)read
  • epic_fhir.dstu2_conditions.searchSearch Condition resources (FHIR DSTU2)read
  • epic_fhir.stu3_conditions.createCreate a Condition (FHIR STU3)write
  • epic_fhir.stu3_conditions.getRead a Condition by id (FHIR STU3)read
  • epic_fhir.stu3_conditions.searchSearch Condition resources (FHIR STU3)read
Procedures8
  • epic_fhir.dstu2_procedures.getRead a Procedure by id (FHIR DSTU2)read
  • epic_fhir.dstu2_procedures.searchSearch Procedure resources (FHIR DSTU2)read
  • epic_fhir.procedures.createCreate a Procedure (FHIR R4)write
  • epic_fhir.procedures.getRead a Procedure by id (FHIR R4)read
  • epic_fhir.procedures.searchSearch Procedure resources (FHIR R4)read
  • epic_fhir.procedures.updateUpdate a Procedure (FHIR R4)write
  • epic_fhir.stu3_procedures.getRead a Procedure by id (FHIR STU3)read
  • epic_fhir.stu3_procedures.searchSearch Procedure resources (FHIR STU3)read
Devices7
  • epic_fhir.devices.auxiliary_functionRaise an auxiliary-function (staff duress) notification ($auxiliary-function) (FHIR R4)write
  • epic_fhir.devices.getRead a Device by id (FHIR R4)read
  • epic_fhir.devices.searchSearch Device resources (FHIR R4)read
  • epic_fhir.dstu2_devices.getRead a Device by id (FHIR DSTU2)read
  • epic_fhir.dstu2_devices.searchSearch Device resources (FHIR DSTU2)read
  • epic_fhir.stu3_devices.getRead a Device by id (FHIR STU3)read
  • epic_fhir.stu3_devices.searchSearch Device resources (FHIR STU3)read
Diagnostic reports7
  • epic_fhir.diagnostic_reports.getRead a DiagnosticReport by id (FHIR R4)read
  • epic_fhir.diagnostic_reports.searchSearch DiagnosticReport resources (FHIR R4)read
  • epic_fhir.diagnostic_reports.updateUpdate a DiagnosticReport (FHIR R4)write
  • epic_fhir.dstu2_diagnostic_reports.getRead a DiagnosticReport by id (FHIR DSTU2)read
  • epic_fhir.dstu2_diagnostic_reports.searchSearch DiagnosticReport resources (FHIR DSTU2)read
  • epic_fhir.stu3_diagnostic_reports.getRead a DiagnosticReport by id (FHIR STU3)read
  • epic_fhir.stu3_diagnostic_reports.searchSearch DiagnosticReport resources (FHIR STU3)read
Goals7
  • epic_fhir.dstu2_goals.getRead a Goal by id (FHIR DSTU2)read
  • epic_fhir.dstu2_goals.searchSearch Goal resources (FHIR DSTU2)read
  • epic_fhir.goals.getRead a Goal by id (FHIR R4)read
  • epic_fhir.goals.searchSearch Goal resources (FHIR R4)read
  • epic_fhir.stu3_goals.createCreate a Goal (FHIR STU3)write
  • epic_fhir.stu3_goals.getRead a Goal by id (FHIR STU3)read
  • epic_fhir.stu3_goals.searchSearch Goal resources (FHIR STU3)read
Appointments6
  • epic_fhir.appointments.getRead an Appointment by id (FHIR R4)read
  • epic_fhir.appointments.searchSearch Appointment resources (FHIR R4)read
  • epic_fhir.stu3_appointments.bookBook an appointment found with $find ($book) (FHIR STU3)write
  • epic_fhir.stu3_appointments.findFind available appointment slots ($find) (FHIR STU3)read
  • epic_fhir.stu3_appointments.getRead an Appointment by id (FHIR STU3)read
  • epic_fhir.stu3_appointments.searchSearch Appointment resources (FHIR STU3)read
Immunizations6
  • epic_fhir.dstu2_immunizations.getRead an Immunization by id (FHIR DSTU2)read
  • epic_fhir.dstu2_immunizations.searchSearch Immunization resources (FHIR DSTU2)read
  • epic_fhir.immunizations.getRead an Immunization by id (FHIR R4)read
  • epic_fhir.immunizations.searchSearch Immunization resources (FHIR R4)read
  • epic_fhir.stu3_immunizations.getRead an Immunization by id (FHIR STU3)read
  • epic_fhir.stu3_immunizations.searchSearch Immunization resources (FHIR STU3)read
Medication statements6
  • epic_fhir.dstu2_medication_statements.getRead a MedicationStatement by id (FHIR DSTU2)read
  • epic_fhir.dstu2_medication_statements.searchSearch MedicationStatement resources (FHIR DSTU2)read
  • epic_fhir.medication_statements.getRead a MedicationStatement by id (FHIR R4)read
  • epic_fhir.medication_statements.searchSearch MedicationStatement resources (FHIR R4)read
  • epic_fhir.stu3_medication_statements.getRead a MedicationStatement by id (FHIR STU3)read
  • epic_fhir.stu3_medication_statements.searchSearch MedicationStatement resources (FHIR STU3)read
Practitioners6
  • epic_fhir.dstu2_practitioners.getRead a Practitioner by id (FHIR DSTU2)read
  • epic_fhir.dstu2_practitioners.searchSearch Practitioner resources (FHIR DSTU2)read
  • epic_fhir.practitioners.getRead a Practitioner by id (FHIR R4)read
  • epic_fhir.practitioners.searchSearch Practitioner resources (FHIR R4)read
  • epic_fhir.stu3_practitioners.getRead a Practitioner by id (FHIR STU3)read
  • epic_fhir.stu3_practitioners.searchSearch Practitioner resources (FHIR STU3)read
Medications5
  • epic_fhir.dstu2_medications.getRead a Medication by id (FHIR DSTU2)read
  • epic_fhir.dstu2_medications.searchSearch Medication resources (FHIR DSTU2)read
  • epic_fhir.medications.getRead a Medication by id (FHIR R4)read
  • epic_fhir.medications.searchSearch Medication resources (FHIR R4)read
  • epic_fhir.stu3_medications.getRead a Medication by id (FHIR STU3)read
Questionnaires5
  • epic_fhir.dtr_questionnaires.log_errorsReport DTR questionnaire errors to the payer ($log-questionnaire-errors) (FHIR R4)write
  • epic_fhir.dtr_questionnaires.next_questionGet the next questions of an adaptive questionnaire ($next-question) (FHIR R4)read
  • epic_fhir.dtr_questionnaires.packageGet the payer's DTR questionnaire package for a coverage and order ($questionnaire-package) (FHIR R4)read
  • epic_fhir.questionnaires.getRead a Questionnaire by id (FHIR R4)read
  • epic_fhir.questionnaires.searchSearch Questionnaire resources (FHIR R4)read
Binaries4
  • epic_fhir.binaries.getRead a Binary by id (FHIR R4)read
  • epic_fhir.binaries.searchSearch Binary resources (FHIR R4)read
  • epic_fhir.dstu2_binaries.getRead a Binary by id (FHIR DSTU2)read
  • epic_fhir.stu3_binaries.getRead a Binary by id (FHIR STU3)read
Body structures4
  • epic_fhir.body_structures.createCreate a BodyStructure (FHIR R4)write
  • epic_fhir.body_structures.getRead a BodyStructure by id (FHIR R4)read
  • epic_fhir.body_structures.searchSearch BodyStructure resources (FHIR R4)read
  • epic_fhir.body_structures.updateUpdate a BodyStructure (FHIR R4)write
Capabilities4
  • epic_fhir.capabilities.getGet the server CapabilityStatement (FHIR R4)read
  • epic_fhir.dstu2_capabilities.getGet the server CapabilityStatement (FHIR DSTU2)read
  • epic_fhir.smart_configuration.getGet the SMART on FHIR configurationread
  • epic_fhir.stu3_capabilities.getGet the server CapabilityStatement (FHIR STU3)read
Care plans4
  • epic_fhir.care_plans.getRead a CarePlan by id (FHIR R4)read
  • epic_fhir.care_plans.searchSearch CarePlan resources (FHIR R4)read
  • epic_fhir.dstu2_care_plans.getRead a CarePlan by id (FHIR DSTU2)read
  • epic_fhir.dstu2_care_plans.searchSearch CarePlan resources (FHIR DSTU2)read
Claims4
  • epic_fhir.claims.getRead a Claim by id (FHIR R4)read
  • epic_fhir.claims.inquireInquire about a prior authorization request ($inquire) (FHIR R4)read
  • epic_fhir.claims.searchSearch Claim resources (FHIR R4)read
  • epic_fhir.claims.submitSubmit a prior authorization request ($submit) (FHIR R4)write
Consents4
  • epic_fhir.consents.getRead a Consent by id (FHIR R4)read
  • epic_fhir.consents.searchSearch Consent resources (FHIR R4)read
  • epic_fhir.stu3_consents.getRead a Consent by id (FHIR STU3)read
  • epic_fhir.stu3_consents.searchSearch Consent resources (FHIR STU3)read
Coverages4
  • epic_fhir.coverages.getRead a Coverage by id (FHIR R4)read
  • epic_fhir.coverages.searchSearch Coverage resources (FHIR R4)read
  • epic_fhir.stu3_coverages.getRead a Coverage by id (FHIR STU3)read
  • epic_fhir.stu3_coverages.searchSearch Coverage resources (FHIR STU3)read
Device requests4
  • epic_fhir.device_requests.getRead a DeviceRequest by id (FHIR R4)read
  • epic_fhir.device_requests.searchSearch DeviceRequest resources (FHIR R4)read
  • epic_fhir.stu3_device_requests.getRead a DeviceRequest by id (FHIR STU3)read
  • epic_fhir.stu3_device_requests.searchSearch DeviceRequest resources (FHIR STU3)read
Device use statements4
  • epic_fhir.device_use_statements.getRead a DeviceUseStatement by id (FHIR R4)read
  • epic_fhir.device_use_statements.searchSearch DeviceUseStatement resources (FHIR R4)read
  • epic_fhir.stu3_device_use_statements.getRead a DeviceUseStatement by id (FHIR STU3)read
  • epic_fhir.stu3_device_use_statements.searchSearch DeviceUseStatement resources (FHIR STU3)read
Encounters4
  • epic_fhir.encounters.getRead an Encounter by id (FHIR R4)read
  • epic_fhir.encounters.searchSearch Encounter resources (FHIR R4)read
  • epic_fhir.stu3_encounters.getRead an Encounter by id (FHIR STU3)read
  • epic_fhir.stu3_encounters.searchSearch Encounter resources (FHIR STU3)read
Flags4
  • epic_fhir.flags.getRead a Flag by id (FHIR R4)read
  • epic_fhir.flags.searchSearch Flag resources (FHIR R4)read
  • epic_fhir.stu3_flags.getRead a Flag by id (FHIR STU3)read
  • epic_fhir.stu3_flags.searchSearch Flag resources (FHIR STU3)read
Immunization recommendations4
  • epic_fhir.immunization_recommendations.getRead an ImmunizationRecommendation by id (FHIR R4)read
  • epic_fhir.immunization_recommendations.searchSearch ImmunizationRecommendation resources (FHIR R4)read
  • epic_fhir.stu3_immunization_recommendations.getRead an ImmunizationRecommendation by id (FHIR STU3)read
  • epic_fhir.stu3_immunization_recommendations.searchSearch ImmunizationRecommendation resources (FHIR STU3)read
Lists4
  • epic_fhir.lists.getRead a List by id (FHIR R4)read
  • epic_fhir.lists.searchSearch List resources (FHIR R4)read
  • epic_fhir.stu3_lists.getRead a List by id (FHIR STU3)read
  • epic_fhir.stu3_lists.searchSearch List resources (FHIR STU3)read
Medication administrations4
  • epic_fhir.medication_administrations.getRead a MedicationAdministration by id (FHIR R4)read
  • epic_fhir.medication_administrations.searchSearch MedicationAdministration resources (FHIR R4)read
  • epic_fhir.stu3_medication_administrations.getRead a MedicationAdministration by id (FHIR STU3)read
  • epic_fhir.stu3_medication_administrations.searchSearch MedicationAdministration resources (FHIR STU3)read
Medication dispenses4
  • epic_fhir.medication_dispenses.getRead a MedicationDispense by id (FHIR R4)read
  • epic_fhir.medication_dispenses.searchSearch MedicationDispense resources (FHIR R4)read
  • epic_fhir.stu3_medication_dispenses.getRead a MedicationDispense by id (FHIR STU3)read
  • epic_fhir.stu3_medication_dispenses.searchSearch MedicationDispense resources (FHIR STU3)read
Medication requests4
  • epic_fhir.medication_requests.getRead a MedicationRequest by id (FHIR R4)read
  • epic_fhir.medication_requests.searchSearch MedicationRequest resources (FHIR R4)read
  • epic_fhir.stu3_medication_requests.getRead a MedicationRequest by id (FHIR STU3)read
  • epic_fhir.stu3_medication_requests.searchSearch MedicationRequest resources (FHIR STU3)read
Nutrition orders4
  • epic_fhir.nutrition_orders.getRead a NutritionOrder by id (FHIR R4)read
  • epic_fhir.nutrition_orders.searchSearch NutritionOrder resources (FHIR R4)read
  • epic_fhir.stu3_nutrition_orders.getRead a NutritionOrder by id (FHIR STU3)read
  • epic_fhir.stu3_nutrition_orders.searchSearch NutritionOrder resources (FHIR STU3)read
Practitioner roles4
  • epic_fhir.practitioner_roles.getRead a PractitionerRole by id (FHIR R4)read
  • epic_fhir.practitioner_roles.searchSearch PractitionerRole resources (FHIR R4)read
  • epic_fhir.stu3_practitioner_roles.getRead a PractitionerRole by id (FHIR STU3)read
  • epic_fhir.stu3_practitioner_roles.searchSearch PractitionerRole resources (FHIR STU3)read
Service requests4
  • epic_fhir.service_requests.createCreate a ServiceRequest (FHIR R4)write
  • epic_fhir.service_requests.getRead a ServiceRequest by id (FHIR R4)read
  • epic_fhir.service_requests.searchSearch ServiceRequest resources (FHIR R4)read
  • epic_fhir.service_requests.updateUpdate a ServiceRequest (FHIR R4)write
Specimens4
  • epic_fhir.specimens.getRead a Specimen by id (FHIR R4)read
  • epic_fhir.specimens.searchSearch Specimen resources (FHIR R4)read
  • epic_fhir.stu3_specimens.getRead a Specimen by id (FHIR STU3)read
  • epic_fhir.stu3_specimens.searchSearch Specimen resources (FHIR STU3)read
Communications3
  • epic_fhir.communications.createCreate a Communication (FHIR R4)write
  • epic_fhir.communications.getRead a Communication by id (FHIR R4)read
  • epic_fhir.communications.searchSearch Communication resources (FHIR R4)read
Criteria reviews3
  • epic_fhir.criteria_reviews.createCreate a CriteriaReview (FHIR R4)write
  • epic_fhir.criteria_reviews.getRead a CriteriaReview by id (FHIR R4)read
  • epic_fhir.criteria_reviews.updateUpdate a CriteriaReview (FHIR R4)write
Endpoints3
  • epic_fhir.endpoints.getRead an Endpoint by id (FHIR R4)read
  • epic_fhir.endpoints.searchSearch Endpoint resources (FHIR R4)read
  • epic_fhir.stu3_endpoints.getRead an Endpoint by id (FHIR STU3)read
Family member histories3
  • epic_fhir.dstu2_family_member_histories.searchSearch FamilyMemberHistory resources (FHIR DSTU2)read
  • epic_fhir.family_member_histories.getRead a FamilyMemberHistory by id (FHIR R4)read
  • epic_fhir.family_member_histories.searchSearch FamilyMemberHistory resources (FHIR R4)read
Locations3
  • epic_fhir.locations.getRead a Location by id (FHIR R4)read
  • epic_fhir.locations.searchSearch Location resources (FHIR R4)read
  • epic_fhir.stu3_locations.getRead a Location by id (FHIR STU3)read
Organizations3
  • epic_fhir.organizations.getRead an Organization by id (FHIR R4)read
  • epic_fhir.organizations.searchSearch Organization resources (FHIR R4)read
  • epic_fhir.stu3_organizations.getRead an Organization by id (FHIR STU3)read
Questionnaire responses3
  • epic_fhir.questionnaire_responses.createCreate a QuestionnaireResponse (FHIR R4)write
  • epic_fhir.questionnaire_responses.getRead a QuestionnaireResponse by id (FHIR R4)read
  • epic_fhir.questionnaire_responses.searchSearch QuestionnaireResponse resources (FHIR R4)read
Review collections3
  • epic_fhir.review_collections.createCreate a ReviewCollection (FHIR R4)write
  • epic_fhir.review_collections.getRead a ReviewCollection by id (FHIR R4)read
  • epic_fhir.review_collections.updateUpdate a ReviewCollection (FHIR R4)write
Tasks3
  • epic_fhir.tasks.getRead a Task by id (FHIR R4)read
  • epic_fhir.tasks.searchSearch Task resources (FHIR R4)read
  • epic_fhir.tasks.updateUpdate a Task (FHIR R4)write
Value sets3
  • epic_fhir.dtr_value_sets.expandExpand a value set referenced by a DTR questionnaire ($expand) (FHIR R4)read
  • epic_fhir.value_sets.expandExpand the codes a value set supports ($expand) (FHIR R4)read
  • epic_fhir.value_sets.getRead a ValueSet by id (FHIR R4)read
Accounts2
  • epic_fhir.accounts.getRead an Account by id (FHIR R4)read
  • epic_fhir.accounts.searchSearch Account resources (FHIR R4)read
Adverse events2
  • epic_fhir.adverse_events.getRead an AdverseEvent by id (FHIR R4)read
  • epic_fhir.adverse_events.searchSearch AdverseEvent resources (FHIR R4)read
Care teams2
  • epic_fhir.care_teams.getRead a CareTeam by id (FHIR R4)read
  • epic_fhir.care_teams.searchSearch CareTeam resources (FHIR R4)read
CDS services2
  • epic_fhir.crd_services.discoverList the Coverage Requirements Discovery CDS services (FHIR R4)read
  • epic_fhir.crd_services.evaluateAsk Coverage Requirements Discovery whether prior authorization is required (FHIR R4)read
Concept maps2
  • epic_fhir.concept_maps.createCreate a ConceptMap (FHIR R4)write
  • epic_fhir.concept_maps.getRead a ConceptMap by id (FHIR R4)read
Contracts2
  • epic_fhir.contracts.getRead a Contract by id (FHIR R4)read
  • epic_fhir.contracts.searchSearch Contract resources (FHIR R4)read
Episode of cares2
  • epic_fhir.episode_of_cares.getRead an EpisodeOfCare by id (FHIR R4)read
  • epic_fhir.episode_of_cares.searchSearch EpisodeOfCare resources (FHIR R4)read
Explanation of benefits2
  • epic_fhir.explanation_of_benefits.getRead an ExplanationOfBenefit by id (FHIR R4)read
  • epic_fhir.explanation_of_benefits.searchSearch ExplanationOfBenefit resources (FHIR R4)read
Groups2
  • epic_fhir.groups.getRead a Group by id (FHIR R4)read
  • epic_fhir.groups.searchSearch Group resources (FHIR R4)read
Imaging studies2
  • epic_fhir.imaging_studies.getRead an ImagingStudy by id (FHIR R4)read
  • epic_fhir.imaging_studies.searchSearch ImagingStudy resources (FHIR R4)read
Measure reports2
  • epic_fhir.measure_reports.getRead a MeasureReport by id (FHIR R4)read
  • epic_fhir.measure_reports.searchSearch MeasureReport resources (FHIR R4)read
Measures2
  • epic_fhir.measures.getRead a Measure by id (FHIR R4)read
  • epic_fhir.measures.searchSearch Measure resources (FHIR R4)read
Media2
  • epic_fhir.media.getRead a Media by id (FHIR R4)read
  • epic_fhir.media.searchSearch Media resources (FHIR R4)read
Medication orders2
  • epic_fhir.dstu2_medication_orders.getRead a MedicationOrder by id (FHIR DSTU2)read
  • epic_fhir.dstu2_medication_orders.searchSearch MedicationOrder resources (FHIR DSTU2)read
Procedure requests2
  • epic_fhir.stu3_procedure_requests.getRead a ProcedureRequest by id (FHIR STU3)read
  • epic_fhir.stu3_procedure_requests.searchSearch ProcedureRequest resources (FHIR STU3)read
Related persons2
  • epic_fhir.related_persons.getRead a RelatedPerson by id (FHIR R4)read
  • epic_fhir.related_persons.searchSearch RelatedPerson resources (FHIR R4)read
Request groups2
  • epic_fhir.request_groups.getRead a RequestGroup by id (FHIR R4)read
  • epic_fhir.request_groups.searchSearch RequestGroup resources (FHIR R4)read
Research studies2
  • epic_fhir.research_studies.getRead a ResearchStudy by id (FHIR R4)read
  • epic_fhir.research_studies.searchSearch ResearchStudy resources (FHIR R4)read
Research subjects2
  • epic_fhir.research_subjects.getRead a ResearchSubject by id (FHIR R4)read
  • epic_fhir.research_subjects.searchSearch ResearchSubject resources (FHIR R4)read
Substances2
  • epic_fhir.substances.getRead a Substance by id (FHIR R4)read
  • epic_fhir.substances.searchSearch Substance resources (FHIR R4)read
Claim responses1
  • epic_fhir.claim_responses.notifySend a prior authorization claim response notification ($notify) (FHIR R4)write
Operations1
  • epic_fhir.operations.submitSubmit prior authorization attachments ($submit-attachment) (FHIR R4)write
Provenances1
  • epic_fhir.provenances.getRead a Provenance by id (FHIR R4)read
Schedules1
  • epic_fhir.stu3_schedules.getRead a Schedule by id (FHIR STU3)read
Slots1
  • epic_fhir.stu3_slots.getRead a Slot by id (FHIR STU3)read

Questions

The Epic on FHIR MCP server, answered.

Is there an Epic on FHIR MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 264 Epic on FHIR actions across observations, patients, document references and allergy intolerances, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Epic on FHIR.

What do I need to connect Epic on FHIR?

Your own Epic on FHIR OAuth app, registered with Epic on FHIR (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no Epic on FHIR app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. Plus your host and your instance path. The free call account { op: "connections.requirements", service: "epic_fhir" } lists exactly what to paste.

Can an AI agent change things in Epic on FHIR?

Only if its key allows it. 35 Epic on FHIR actions write, and none is destructive. A key can be limited to reads, capped, and set so a person confirms every write.

Will an AI agent use up my Epic on FHIR API limit?

actionlake paces every call to the limits in the Epic on FHIR service file: 10 calls a second per connection. Repeated reads are answered from cache (4 Epic on FHIR actions can be), which never reaches Epic on FHIR.

What does an Epic on FHIR action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (264 Epic on FHIR actions page). Cache hits, searches, dry runs and calls Epic on FHIR refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

Which Epic on FHIR API does it cover?

The Epic on FHIR (Epic EHR FHIR R4, STU3 and DSTU2 APIs) API Epic on FHIR, August 2026 release (FHIR R4 4.0.1, STU3 3.0.x, DSTU2 1.0.2) at your Epic on FHIR instance's API base URL, which you enter when connecting. It is built from Epic on FHIR's documentation as read on 23 October 2026. 264 actions in 70 areas, each one in the signed service file (version 1.0.0).

Can I combine Epic on FHIR with my other systems?

Yes. ask joins Epic on FHIR to ConnectWise PSA or NetSuite on the same customer and returns the answer rather than every row. Epic on FHIR maps crm.company, which 227 other connectors also map.

Does actionlake keep my Epic on FHIR data, and where?

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Epic on FHIR credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

Which AI clients can use it?

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

Give your agent Epic on FHIR today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.