---
title: "Epic on FHIR MCP server for AI agents - actionlake"
description: "Give Claude 264 Epic on FHIR actions through one MCP server: observations, patients. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/epic-on-fhir
updated: 2026-10-23
---

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.

[Connect Epic on FHIR free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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
```

- 264 actions in one signed file
- 229 read look, never change
- 35 write create and update
- 0 wait for a yes destructive, 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_token` Access token from one sign-in with your own OAuth app
   - `refresh_token` Refresh token from the same sign-in; the access token is renewed from it
   - `client_id` Non-production or production Client ID of your app registered on fhir.epic.com (Build Apps)
   - `client_secret` The client secret provisioned for this Epic organization (Build Apps > Review & Manage Downloads)
   - `host` Where your Epic on FHIR lives: your host
   - `instance_path` Where 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 call
   check { 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_token` `refresh_token` `client_id` `client_secret`

**Setup fields**

`host` `instance_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 2026[fhir.epic.com](https://fhir.epic.com/Specifications/Selections) [fhir.epic.com](https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4/metadata) [fhir.epic.com](https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/STU3/metadata)

**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.

- **229** read look, never change
- **35** write create and update
- **0** destructive wait 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.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `epic_fhir.locations.search` Search Location resources (FHIR R4) | Search Location resources; results are Bundle entries. | read | this connector |
| `epic_fhir.appointments.search` Search Appointment resources (FHIR R4) | Search Appointment resources; results are Bundle entries. | read | this connector |
| `epic_fhir.organizations.search` Search Organization resources (FHIR R4) | Search Organization resources; results are Bundle entries. | read | this connector |
| `epic_fhir.flags.search` Search Flag resources (FHIR R4) | Search Flag resources; results are Bundle entries. | read | this connector |
| `epic_fhir.goals.search` Search Goal resources (FHIR R4) | Search Goal resources; results are Bundle entries. | read | this connector |
| `epic_fhir.lists.search` Search List resources (FHIR R4) | Search List resources; results are Bundle entries. | read | this connector |
| `epic_fhir.media.search` Search Media resources (FHIR R4) | Search Media resources; results are Bundle entries. | read | this connector |
| `epic_fhir.tasks.search` Search Task resources (FHIR R4) | Search Task resources; results are Bundle entries. | read | this connector |
| `epic_fhir.claims.search` Search Claim resources (FHIR R4) | Search Claim resources; results are Bundle entries. | read | this connector |
| `epic_fhir.claims.submit` Submit a prior authorization request ($submit) (FHIR R4) | Submit a prior authorization request. | write | this connector |
| `epic_fhir.patients.create` Create a Patient (FHIR R4) | Create a Patient resource from a complete FHIR Patient JSON document. | write | this connector |
| `epic_fhir.conditions.create` Create a Condition (FHIR R4) | Create a Condition resource from a complete FHIR Condition JSON document. | write | this 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. Read read
   List the companies in Epic on FHIR and flag likely duplicates by name or domain.
   calls `epic_fhir.organizations.search`
2. Write write
   Submit a prior authorization request ($submit) (FHIR R4) in Epic on FHIR. Show me exactly what you will send before you save it.
   calls `epic_fhir.claims.submit`
3. Across systems read
   Which Epic on FHIR companies have invoices in ConnectWise PSA, and how many each?
   calls `epic_fhir.organizations.search` `connectwise_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](https://actionlake.com/connectors/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](https://actionlake.com/connectors/netsuite)

Also mapped by other connectors `crm.company` **227** `crm.location` **49** `service.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.

- 1 upstream call per action all 264 Epic on FHIR actions
- 264 actions page each page of a long list is one call
- 4 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Epic on FHIR action.

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

**Observations 11**

- `epic_fhir.dstu2_observations.get` Read an Observation by id (FHIR DSTU2) read
- `epic_fhir.dstu2_observations.search` Search Observation resources (FHIR DSTU2) read
- `epic_fhir.observations.create` Create an Observation (FHIR R4) write
- `epic_fhir.observations.get` Read an Observation by id (FHIR R4) read
- `epic_fhir.observations.search` Search Observation resources (FHIR R4) read
- `epic_fhir.observations.update` Update an Observation (FHIR R4) write
- `epic_fhir.stu3_observations.create` Create an Observation (FHIR STU3) write
- `epic_fhir.stu3_observations.get` Read an Observation by id (FHIR STU3) read
- `epic_fhir.stu3_observations.lastn` Get the most recent observations per code ($lastn) (FHIR STU3) read
- `epic_fhir.stu3_observations.search` Search Observation resources (FHIR STU3) read
- `epic_fhir.stu3_observations.update` Update an Observation (FHIR STU3) write

**Patients 10**

- `epic_fhir.dstu2_patients.get` Read a Patient by id (FHIR DSTU2) read
- `epic_fhir.dstu2_patients.search` Search Patient resources (FHIR DSTU2) read
- `epic_fhir.patients.create` Create a Patient (FHIR R4) write
- `epic_fhir.patients.get` Read a Patient by id (FHIR R4) read
- `epic_fhir.patients.match` Match patients against demographics ($match) (FHIR R4) read
- `epic_fhir.patients.search` Search Patient resources (FHIR R4) read
- `epic_fhir.patients.summary` Get the International Patient Summary for a patient ($summary) (FHIR R4) read
- `epic_fhir.stu3_patients.create` Create a Patient (FHIR STU3) write
- `epic_fhir.stu3_patients.get` Read a Patient by id (FHIR STU3) read
- `epic_fhir.stu3_patients.search` Search Patient resources (FHIR STU3) read

**Document references 9**

- `epic_fhir.document_references.create` Create a DocumentReference (FHIR R4) write
- `epic_fhir.document_references.get` Read a DocumentReference by id (FHIR R4) read
- `epic_fhir.document_references.search` Search DocumentReference resources (FHIR R4) read
- `epic_fhir.document_references.update` Update a DocumentReference (FHIR R4) write
- `epic_fhir.dstu2_document_references.get` Read a DocumentReference by id (FHIR DSTU2) read
- `epic_fhir.dstu2_document_references.search` Search DocumentReference resources (FHIR DSTU2) read
- `epic_fhir.stu3_document_references.create` Create a DocumentReference (FHIR STU3) write
- `epic_fhir.stu3_document_references.get` Read a DocumentReference by id (FHIR STU3) read
- `epic_fhir.stu3_document_references.search` Search DocumentReference resources (FHIR STU3) read

**Allergy intolerances 8**

- `epic_fhir.allergy_intolerances.create` Create an AllergyIntolerance (FHIR R4) write
- `epic_fhir.allergy_intolerances.get` Read an AllergyIntolerance by id (FHIR R4) read
- `epic_fhir.allergy_intolerances.search` Search AllergyIntolerance resources (FHIR R4) read
- `epic_fhir.dstu2_allergy_intolerances.get` Read an AllergyIntolerance by id (FHIR DSTU2) read
- `epic_fhir.dstu2_allergy_intolerances.search` Search AllergyIntolerance resources (FHIR DSTU2) read
- `epic_fhir.stu3_allergy_intolerances.create` Create an AllergyIntolerance (FHIR STU3) write
- `epic_fhir.stu3_allergy_intolerances.get` Read an AllergyIntolerance by id (FHIR STU3) read
- `epic_fhir.stu3_allergy_intolerances.search` Search AllergyIntolerance resources (FHIR STU3) read

**Conditions 8**

- `epic_fhir.conditions.create` Create a Condition (FHIR R4) write
- `epic_fhir.conditions.get` Read a Condition by id (FHIR R4) read
- `epic_fhir.conditions.search` Search Condition resources (FHIR R4) read
- `epic_fhir.dstu2_conditions.get` Read a Condition by id (FHIR DSTU2) read
- `epic_fhir.dstu2_conditions.search` Search Condition resources (FHIR DSTU2) read
- `epic_fhir.stu3_conditions.create` Create a Condition (FHIR STU3) write
- `epic_fhir.stu3_conditions.get` Read a Condition by id (FHIR STU3) read
- `epic_fhir.stu3_conditions.search` Search Condition resources (FHIR STU3) read

**Procedures 8**

- `epic_fhir.dstu2_procedures.get` Read a Procedure by id (FHIR DSTU2) read
- `epic_fhir.dstu2_procedures.search` Search Procedure resources (FHIR DSTU2) read
- `epic_fhir.procedures.create` Create a Procedure (FHIR R4) write
- `epic_fhir.procedures.get` Read a Procedure by id (FHIR R4) read
- `epic_fhir.procedures.search` Search Procedure resources (FHIR R4) read
- `epic_fhir.procedures.update` Update a Procedure (FHIR R4) write
- `epic_fhir.stu3_procedures.get` Read a Procedure by id (FHIR STU3) read
- `epic_fhir.stu3_procedures.search` Search Procedure resources (FHIR STU3) read

**Devices 7**

- `epic_fhir.devices.auxiliary_function` Raise an auxiliary-function (staff duress) notification ($auxiliary-function) (FHIR R4) write
- `epic_fhir.devices.get` Read a Device by id (FHIR R4) read
- `epic_fhir.devices.search` Search Device resources (FHIR R4) read
- `epic_fhir.dstu2_devices.get` Read a Device by id (FHIR DSTU2) read
- `epic_fhir.dstu2_devices.search` Search Device resources (FHIR DSTU2) read
- `epic_fhir.stu3_devices.get` Read a Device by id (FHIR STU3) read
- `epic_fhir.stu3_devices.search` Search Device resources (FHIR STU3) read

**Diagnostic reports 7**

- `epic_fhir.diagnostic_reports.get` Read a DiagnosticReport by id (FHIR R4) read
- `epic_fhir.diagnostic_reports.search` Search DiagnosticReport resources (FHIR R4) read
- `epic_fhir.diagnostic_reports.update` Update a DiagnosticReport (FHIR R4) write
- `epic_fhir.dstu2_diagnostic_reports.get` Read a DiagnosticReport by id (FHIR DSTU2) read
- `epic_fhir.dstu2_diagnostic_reports.search` Search DiagnosticReport resources (FHIR DSTU2) read
- `epic_fhir.stu3_diagnostic_reports.get` Read a DiagnosticReport by id (FHIR STU3) read
- `epic_fhir.stu3_diagnostic_reports.search` Search DiagnosticReport resources (FHIR STU3) read

**Goals 7**

- `epic_fhir.dstu2_goals.get` Read a Goal by id (FHIR DSTU2) read
- `epic_fhir.dstu2_goals.search` Search Goal resources (FHIR DSTU2) read
- `epic_fhir.goals.get` Read a Goal by id (FHIR R4) read
- `epic_fhir.goals.search` Search Goal resources (FHIR R4) read
- `epic_fhir.stu3_goals.create` Create a Goal (FHIR STU3) write
- `epic_fhir.stu3_goals.get` Read a Goal by id (FHIR STU3) read
- `epic_fhir.stu3_goals.search` Search Goal resources (FHIR STU3) read

**Appointments 6**

- `epic_fhir.appointments.get` Read an Appointment by id (FHIR R4) read
- `epic_fhir.appointments.search` Search Appointment resources (FHIR R4) read
- `epic_fhir.stu3_appointments.book` Book an appointment found with $find ($book) (FHIR STU3) write
- `epic_fhir.stu3_appointments.find` Find available appointment slots ($find) (FHIR STU3) read
- `epic_fhir.stu3_appointments.get` Read an Appointment by id (FHIR STU3) read
- `epic_fhir.stu3_appointments.search` Search Appointment resources (FHIR STU3) read

**Immunizations 6**

- `epic_fhir.dstu2_immunizations.get` Read an Immunization by id (FHIR DSTU2) read
- `epic_fhir.dstu2_immunizations.search` Search Immunization resources (FHIR DSTU2) read
- `epic_fhir.immunizations.get` Read an Immunization by id (FHIR R4) read
- `epic_fhir.immunizations.search` Search Immunization resources (FHIR R4) read
- `epic_fhir.stu3_immunizations.get` Read an Immunization by id (FHIR STU3) read
- `epic_fhir.stu3_immunizations.search` Search Immunization resources (FHIR STU3) read

**Medication statements 6**

- `epic_fhir.dstu2_medication_statements.get` Read a MedicationStatement by id (FHIR DSTU2) read
- `epic_fhir.dstu2_medication_statements.search` Search MedicationStatement resources (FHIR DSTU2) read
- `epic_fhir.medication_statements.get` Read a MedicationStatement by id (FHIR R4) read
- `epic_fhir.medication_statements.search` Search MedicationStatement resources (FHIR R4) read
- `epic_fhir.stu3_medication_statements.get` Read a MedicationStatement by id (FHIR STU3) read
- `epic_fhir.stu3_medication_statements.search` Search MedicationStatement resources (FHIR STU3) read

**Practitioners 6**

- `epic_fhir.dstu2_practitioners.get` Read a Practitioner by id (FHIR DSTU2) read
- `epic_fhir.dstu2_practitioners.search` Search Practitioner resources (FHIR DSTU2) read
- `epic_fhir.practitioners.get` Read a Practitioner by id (FHIR R4) read
- `epic_fhir.practitioners.search` Search Practitioner resources (FHIR R4) read
- `epic_fhir.stu3_practitioners.get` Read a Practitioner by id (FHIR STU3) read
- `epic_fhir.stu3_practitioners.search` Search Practitioner resources (FHIR STU3) read

**Medications 5**

- `epic_fhir.dstu2_medications.get` Read a Medication by id (FHIR DSTU2) read
- `epic_fhir.dstu2_medications.search` Search Medication resources (FHIR DSTU2) read
- `epic_fhir.medications.get` Read a Medication by id (FHIR R4) read
- `epic_fhir.medications.search` Search Medication resources (FHIR R4) read
- `epic_fhir.stu3_medications.get` Read a Medication by id (FHIR STU3) read

**Questionnaires 5**

- `epic_fhir.dtr_questionnaires.log_errors` Report DTR questionnaire errors to the payer ($log-questionnaire-errors) (FHIR R4) write
- `epic_fhir.dtr_questionnaires.next_question` Get the next questions of an adaptive questionnaire ($next-question) (FHIR R4) read
- `epic_fhir.dtr_questionnaires.package` Get the payer's DTR questionnaire package for a coverage and order ($questionnaire-package) (FHIR R4) read
- `epic_fhir.questionnaires.get` Read a Questionnaire by id (FHIR R4) read
- `epic_fhir.questionnaires.search` Search Questionnaire resources (FHIR R4) read

**Binaries 4**

- `epic_fhir.binaries.get` Read a Binary by id (FHIR R4) read
- `epic_fhir.binaries.search` Search Binary resources (FHIR R4) read
- `epic_fhir.dstu2_binaries.get` Read a Binary by id (FHIR DSTU2) read
- `epic_fhir.stu3_binaries.get` Read a Binary by id (FHIR STU3) read

**Body structures 4**

- `epic_fhir.body_structures.create` Create a BodyStructure (FHIR R4) write
- `epic_fhir.body_structures.get` Read a BodyStructure by id (FHIR R4) read
- `epic_fhir.body_structures.search` Search BodyStructure resources (FHIR R4) read
- `epic_fhir.body_structures.update` Update a BodyStructure (FHIR R4) write

**Capabilities 4**

- `epic_fhir.capabilities.get` Get the server CapabilityStatement (FHIR R4) read
- `epic_fhir.dstu2_capabilities.get` Get the server CapabilityStatement (FHIR DSTU2) read
- `epic_fhir.smart_configuration.get` Get the SMART on FHIR configuration read
- `epic_fhir.stu3_capabilities.get` Get the server CapabilityStatement (FHIR STU3) read

**Care plans 4**

- `epic_fhir.care_plans.get` Read a CarePlan by id (FHIR R4) read
- `epic_fhir.care_plans.search` Search CarePlan resources (FHIR R4) read
- `epic_fhir.dstu2_care_plans.get` Read a CarePlan by id (FHIR DSTU2) read
- `epic_fhir.dstu2_care_plans.search` Search CarePlan resources (FHIR DSTU2) read

**Claims 4**

- `epic_fhir.claims.get` Read a Claim by id (FHIR R4) read
- `epic_fhir.claims.inquire` Inquire about a prior authorization request ($inquire) (FHIR R4) read
- `epic_fhir.claims.search` Search Claim resources (FHIR R4) read
- `epic_fhir.claims.submit` Submit a prior authorization request ($submit) (FHIR R4) write

**Consents 4**

- `epic_fhir.consents.get` Read a Consent by id (FHIR R4) read
- `epic_fhir.consents.search` Search Consent resources (FHIR R4) read
- `epic_fhir.stu3_consents.get` Read a Consent by id (FHIR STU3) read
- `epic_fhir.stu3_consents.search` Search Consent resources (FHIR STU3) read

**Coverages 4**

- `epic_fhir.coverages.get` Read a Coverage by id (FHIR R4) read
- `epic_fhir.coverages.search` Search Coverage resources (FHIR R4) read
- `epic_fhir.stu3_coverages.get` Read a Coverage by id (FHIR STU3) read
- `epic_fhir.stu3_coverages.search` Search Coverage resources (FHIR STU3) read

**Device requests 4**

- `epic_fhir.device_requests.get` Read a DeviceRequest by id (FHIR R4) read
- `epic_fhir.device_requests.search` Search DeviceRequest resources (FHIR R4) read
- `epic_fhir.stu3_device_requests.get` Read a DeviceRequest by id (FHIR STU3) read
- `epic_fhir.stu3_device_requests.search` Search DeviceRequest resources (FHIR STU3) read

**Device use statements 4**

- `epic_fhir.device_use_statements.get` Read a DeviceUseStatement by id (FHIR R4) read
- `epic_fhir.device_use_statements.search` Search DeviceUseStatement resources (FHIR R4) read
- `epic_fhir.stu3_device_use_statements.get` Read a DeviceUseStatement by id (FHIR STU3) read
- `epic_fhir.stu3_device_use_statements.search` Search DeviceUseStatement resources (FHIR STU3) read

**Encounters 4**

- `epic_fhir.encounters.get` Read an Encounter by id (FHIR R4) read
- `epic_fhir.encounters.search` Search Encounter resources (FHIR R4) read
- `epic_fhir.stu3_encounters.get` Read an Encounter by id (FHIR STU3) read
- `epic_fhir.stu3_encounters.search` Search Encounter resources (FHIR STU3) read

**Flags 4**

- `epic_fhir.flags.get` Read a Flag by id (FHIR R4) read
- `epic_fhir.flags.search` Search Flag resources (FHIR R4) read
- `epic_fhir.stu3_flags.get` Read a Flag by id (FHIR STU3) read
- `epic_fhir.stu3_flags.search` Search Flag resources (FHIR STU3) read

**Immunization recommendations 4**

- `epic_fhir.immunization_recommendations.get` Read an ImmunizationRecommendation by id (FHIR R4) read
- `epic_fhir.immunization_recommendations.search` Search ImmunizationRecommendation resources (FHIR R4) read
- `epic_fhir.stu3_immunization_recommendations.get` Read an ImmunizationRecommendation by id (FHIR STU3) read
- `epic_fhir.stu3_immunization_recommendations.search` Search ImmunizationRecommendation resources (FHIR STU3) read

**Lists 4**

- `epic_fhir.lists.get` Read a List by id (FHIR R4) read
- `epic_fhir.lists.search` Search List resources (FHIR R4) read
- `epic_fhir.stu3_lists.get` Read a List by id (FHIR STU3) read
- `epic_fhir.stu3_lists.search` Search List resources (FHIR STU3) read

**Medication administrations 4**

- `epic_fhir.medication_administrations.get` Read a MedicationAdministration by id (FHIR R4) read
- `epic_fhir.medication_administrations.search` Search MedicationAdministration resources (FHIR R4) read
- `epic_fhir.stu3_medication_administrations.get` Read a MedicationAdministration by id (FHIR STU3) read
- `epic_fhir.stu3_medication_administrations.search` Search MedicationAdministration resources (FHIR STU3) read

**Medication dispenses 4**

- `epic_fhir.medication_dispenses.get` Read a MedicationDispense by id (FHIR R4) read
- `epic_fhir.medication_dispenses.search` Search MedicationDispense resources (FHIR R4) read
- `epic_fhir.stu3_medication_dispenses.get` Read a MedicationDispense by id (FHIR STU3) read
- `epic_fhir.stu3_medication_dispenses.search` Search MedicationDispense resources (FHIR STU3) read

**Medication requests 4**

- `epic_fhir.medication_requests.get` Read a MedicationRequest by id (FHIR R4) read
- `epic_fhir.medication_requests.search` Search MedicationRequest resources (FHIR R4) read
- `epic_fhir.stu3_medication_requests.get` Read a MedicationRequest by id (FHIR STU3) read
- `epic_fhir.stu3_medication_requests.search` Search MedicationRequest resources (FHIR STU3) read

**Nutrition orders 4**

- `epic_fhir.nutrition_orders.get` Read a NutritionOrder by id (FHIR R4) read
- `epic_fhir.nutrition_orders.search` Search NutritionOrder resources (FHIR R4) read
- `epic_fhir.stu3_nutrition_orders.get` Read a NutritionOrder by id (FHIR STU3) read
- `epic_fhir.stu3_nutrition_orders.search` Search NutritionOrder resources (FHIR STU3) read

**Practitioner roles 4**

- `epic_fhir.practitioner_roles.get` Read a PractitionerRole by id (FHIR R4) read
- `epic_fhir.practitioner_roles.search` Search PractitionerRole resources (FHIR R4) read
- `epic_fhir.stu3_practitioner_roles.get` Read a PractitionerRole by id (FHIR STU3) read
- `epic_fhir.stu3_practitioner_roles.search` Search PractitionerRole resources (FHIR STU3) read

**Service requests 4**

- `epic_fhir.service_requests.create` Create a ServiceRequest (FHIR R4) write
- `epic_fhir.service_requests.get` Read a ServiceRequest by id (FHIR R4) read
- `epic_fhir.service_requests.search` Search ServiceRequest resources (FHIR R4) read
- `epic_fhir.service_requests.update` Update a ServiceRequest (FHIR R4) write

**Specimens 4**

- `epic_fhir.specimens.get` Read a Specimen by id (FHIR R4) read
- `epic_fhir.specimens.search` Search Specimen resources (FHIR R4) read
- `epic_fhir.stu3_specimens.get` Read a Specimen by id (FHIR STU3) read
- `epic_fhir.stu3_specimens.search` Search Specimen resources (FHIR STU3) read

**Communications 3**

- `epic_fhir.communications.create` Create a Communication (FHIR R4) write
- `epic_fhir.communications.get` Read a Communication by id (FHIR R4) read
- `epic_fhir.communications.search` Search Communication resources (FHIR R4) read

**Criteria reviews 3**

- `epic_fhir.criteria_reviews.create` Create a CriteriaReview (FHIR R4) write
- `epic_fhir.criteria_reviews.get` Read a CriteriaReview by id (FHIR R4) read
- `epic_fhir.criteria_reviews.update` Update a CriteriaReview (FHIR R4) write

**Endpoints 3**

- `epic_fhir.endpoints.get` Read an Endpoint by id (FHIR R4) read
- `epic_fhir.endpoints.search` Search Endpoint resources (FHIR R4) read
- `epic_fhir.stu3_endpoints.get` Read an Endpoint by id (FHIR STU3) read

**Family member histories 3**

- `epic_fhir.dstu2_family_member_histories.search` Search FamilyMemberHistory resources (FHIR DSTU2) read
- `epic_fhir.family_member_histories.get` Read a FamilyMemberHistory by id (FHIR R4) read
- `epic_fhir.family_member_histories.search` Search FamilyMemberHistory resources (FHIR R4) read

**Locations 3**

- `epic_fhir.locations.get` Read a Location by id (FHIR R4) read
- `epic_fhir.locations.search` Search Location resources (FHIR R4) read
- `epic_fhir.stu3_locations.get` Read a Location by id (FHIR STU3) read

**Organizations 3**

- `epic_fhir.organizations.get` Read an Organization by id (FHIR R4) read
- `epic_fhir.organizations.search` Search Organization resources (FHIR R4) read
- `epic_fhir.stu3_organizations.get` Read an Organization by id (FHIR STU3) read

**Questionnaire responses 3**

- `epic_fhir.questionnaire_responses.create` Create a QuestionnaireResponse (FHIR R4) write
- `epic_fhir.questionnaire_responses.get` Read a QuestionnaireResponse by id (FHIR R4) read
- `epic_fhir.questionnaire_responses.search` Search QuestionnaireResponse resources (FHIR R4) read

**Review collections 3**

- `epic_fhir.review_collections.create` Create a ReviewCollection (FHIR R4) write
- `epic_fhir.review_collections.get` Read a ReviewCollection by id (FHIR R4) read
- `epic_fhir.review_collections.update` Update a ReviewCollection (FHIR R4) write

**Tasks 3**

- `epic_fhir.tasks.get` Read a Task by id (FHIR R4) read
- `epic_fhir.tasks.search` Search Task resources (FHIR R4) read
- `epic_fhir.tasks.update` Update a Task (FHIR R4) write

**Value sets 3**

- `epic_fhir.dtr_value_sets.expand` Expand a value set referenced by a DTR questionnaire ($expand) (FHIR R4) read
- `epic_fhir.value_sets.expand` Expand the codes a value set supports ($expand) (FHIR R4) read
- `epic_fhir.value_sets.get` Read a ValueSet by id (FHIR R4) read

**Accounts 2**

- `epic_fhir.accounts.get` Read an Account by id (FHIR R4) read
- `epic_fhir.accounts.search` Search Account resources (FHIR R4) read

**Adverse events 2**

- `epic_fhir.adverse_events.get` Read an AdverseEvent by id (FHIR R4) read
- `epic_fhir.adverse_events.search` Search AdverseEvent resources (FHIR R4) read

**Care teams 2**

- `epic_fhir.care_teams.get` Read a CareTeam by id (FHIR R4) read
- `epic_fhir.care_teams.search` Search CareTeam resources (FHIR R4) read

**CDS services 2**

- `epic_fhir.crd_services.discover` List the Coverage Requirements Discovery CDS services (FHIR R4) read
- `epic_fhir.crd_services.evaluate` Ask Coverage Requirements Discovery whether prior authorization is required (FHIR R4) read

**Concept maps 2**

- `epic_fhir.concept_maps.create` Create a ConceptMap (FHIR R4) write
- `epic_fhir.concept_maps.get` Read a ConceptMap by id (FHIR R4) read

**Contracts 2**

- `epic_fhir.contracts.get` Read a Contract by id (FHIR R4) read
- `epic_fhir.contracts.search` Search Contract resources (FHIR R4) read

**Episode of cares 2**

- `epic_fhir.episode_of_cares.get` Read an EpisodeOfCare by id (FHIR R4) read
- `epic_fhir.episode_of_cares.search` Search EpisodeOfCare resources (FHIR R4) read

**Explanation of benefits 2**

- `epic_fhir.explanation_of_benefits.get` Read an ExplanationOfBenefit by id (FHIR R4) read
- `epic_fhir.explanation_of_benefits.search` Search ExplanationOfBenefit resources (FHIR R4) read

**Groups 2**

- `epic_fhir.groups.get` Read a Group by id (FHIR R4) read
- `epic_fhir.groups.search` Search Group resources (FHIR R4) read

**Imaging studies 2**

- `epic_fhir.imaging_studies.get` Read an ImagingStudy by id (FHIR R4) read
- `epic_fhir.imaging_studies.search` Search ImagingStudy resources (FHIR R4) read

**Measure reports 2**

- `epic_fhir.measure_reports.get` Read a MeasureReport by id (FHIR R4) read
- `epic_fhir.measure_reports.search` Search MeasureReport resources (FHIR R4) read

**Measures 2**

- `epic_fhir.measures.get` Read a Measure by id (FHIR R4) read
- `epic_fhir.measures.search` Search Measure resources (FHIR R4) read

**Media 2**

- `epic_fhir.media.get` Read a Media by id (FHIR R4) read
- `epic_fhir.media.search` Search Media resources (FHIR R4) read

**Medication orders 2**

- `epic_fhir.dstu2_medication_orders.get` Read a MedicationOrder by id (FHIR DSTU2) read
- `epic_fhir.dstu2_medication_orders.search` Search MedicationOrder resources (FHIR DSTU2) read

**Procedure requests 2**

- `epic_fhir.stu3_procedure_requests.get` Read a ProcedureRequest by id (FHIR STU3) read
- `epic_fhir.stu3_procedure_requests.search` Search ProcedureRequest resources (FHIR STU3) read

**Related persons 2**

- `epic_fhir.related_persons.get` Read a RelatedPerson by id (FHIR R4) read
- `epic_fhir.related_persons.search` Search RelatedPerson resources (FHIR R4) read

**Request groups 2**

- `epic_fhir.request_groups.get` Read a RequestGroup by id (FHIR R4) read
- `epic_fhir.request_groups.search` Search RequestGroup resources (FHIR R4) read

**Research studies 2**

- `epic_fhir.research_studies.get` Read a ResearchStudy by id (FHIR R4) read
- `epic_fhir.research_studies.search` Search ResearchStudy resources (FHIR R4) read

**Research subjects 2**

- `epic_fhir.research_subjects.get` Read a ResearchSubject by id (FHIR R4) read
- `epic_fhir.research_subjects.search` Search ResearchSubject resources (FHIR R4) read

**Substances 2**

- `epic_fhir.substances.get` Read a Substance by id (FHIR R4) read
- `epic_fhir.substances.search` Search Substance resources (FHIR R4) read

**Claim responses 1**

- `epic_fhir.claim_responses.notify` Send a prior authorization claim response notification ($notify) (FHIR R4) write

**Operations 1**

- `epic_fhir.operations.submit` Submit prior authorization attachments ($submit-attachment) (FHIR R4) write

**Provenances 1**

- `epic_fhir.provenances.get` Read a Provenance by id (FHIR R4) read

**Schedules 1**

- `epic_fhir.stu3_schedules.get` Read a Schedule by id (FHIR STU3) read

**Slots 1**

- `epic_fhir.stu3_slots.get` Read 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.

## More connectors like Epic on FHIR

Joins with, on shared entities

- [ServiceTitan 3](https://actionlake.com/connectors/servicetitan)
- [Zuper 3](https://actionlake.com/connectors/zuper)
- [Canvas Medical 3](https://actionlake.com/connectors/canvas-medical)
- [HaloPSA 2](https://actionlake.com/connectors/halopsa)
- [NinjaOne 2](https://actionlake.com/connectors/ninjaone)
- [ServiceNow 2](https://actionlake.com/connectors/servicenow)

Browse

- [All Industry connectors](https://actionlake.com/connectors/category/industry)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Epic on FHIR; the name is the vendor's own. Counts are from the Epic on FHIR service file, version 1.0.0.

## Give your agent Epic on FHIR today.

[Connect Epic on FHIR free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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

---

Source: https://actionlake.com/connectors/epic-on-fhir
More: https://actionlake.com/llms.txt
