---
title: "Medplum MCP server for AI agents - actionlake"
description: "Give Claude 591 Medplum actions through one MCP server: resources, agents, code systems. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/medplum
updated: 2026-10-23
---

Connectors · Accounting & finance

# Medplum MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Medplum and the rest of your systems. It gives your agent 591 Medplum actions (219 reads, 286 writes and 86 that wait for a confirmation) and holds the Medplum credential itself, so the agent never does. It paces Medplum's limits and records every call.

[Connect Medplum 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: "medplum.users.list",
  intent: "check which Medplum account is connected"
}
# Search User resources · read · 1 upstream call
```

- 591 actions in one signed file
- 219 read look, never change
- 286 write create and update
- 86 wait for a yes destructive, confirmed first

Set up

## Connect Medplum 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 Medplum.
   OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in. actionlake stores what you paste write-only, sealed under your tenant's key.
   - `client_id` Medplum ClientApplication ID (Medplum app > Project Admin > Clients > New client, or Admin > Clients; the client's…
   - `client_secret` That ClientApplication's secret (shown on the client's page)
   - `host` Where your Medplum lives: your host
   ```
   account { op: "connections.requirements", service: "medplum" }
   # 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: "medplum.users.list" }
   # search user resources · read · 1 upstream call
   check { action: "medplum.users.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Medplum at a glance

**Sign-in**

OAuth 2.0, client credentials. Paste the app's client id and secret; actionlake fetches and renews the token, and nobody has to sign in.

**You provide**

`client_id` `client_secret`

**Setup fields**

`host`

**Limits we pace to**

50 calls a second, per connection

**API covered**

Medplum server API (FHIR R4 at /fhir/R4, plus /admin, /auth, /oauth2, /scim/v2, /email/v1, /cds-services)`api.medplum.com`

**Built from**

Medplum's documentation, read 23 October 2026[api.medplum.com](https://api.medplum.com/openapi.json) [GitHub](https://github.com/medplum/medplum/blob/main/packages/server/src/fhir/routes.ts) [medplum.com](https://www.medplum.com/docs/api)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

210 of 219 reads, for up to 5 minutes; a write clears what it affects

**Shared entities**

5, so ask can line Medplum up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Medplum.

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

- **219** read look, never change
- **286** write create and update
- **86** destructive wait for a confirmation

1. ### Resources
   20
   7 read · 10 write · 3 destructive
   Run AWS Textract on an attachment · Create any resource · Get a resource's version history · Search any resource type
2. ### Agents
   19
   9 read · 9 write · 1 destructive
   Get the status of many agents · Create an Agent · Search Agent resources · Push a message through an agent
3. ### Code systems
   14
   8 read · 5 write · 1 destructive
   Create a CodeSystem · Import concepts into a code system · Import concepts into a code system (by id) · Search CodeSystem resources
4. ### Appointments
   12
   3 read · 7 write · 2 destructive
   Search Appointment resources · Create an Appointment · Read an Appointment · Replace an Appointment
5. ### Patients
   12
   5 read · 6 write · 1 destructive
   Create a Patient · Start a bulk export of all patients · Generate an SMART Health Card · Generate an SMART Health Link
6. ### Fhir
   11
   8 read · 3 write · 0 destructive
   Call Medplum's AI operation · Run a batch or transaction Bundle · Start a system-level bulk export · Run a GraphQL query
7. ### Bots
   10
   2 read · 7 write · 1 destructive
   Create a Bot · Execute a Bot · Execute a Bot by identifier · Create a Bot with code
8. ### Claims
   10
   3 read · 6 write · 1 destructive
   Create a Claim · Export a Claim as a CMS-1500 PDF · Search Claim resources · Submit a Claim to the clearinghouse

**85 more areas · 483 actions**

- Concept maps **10**
- Value sets **9**
- Admin projects **8**
- Coverage eligibility requests **8**
- Projects **8**
- Questionnaire responses **8**
- Users **8**
- Charge item definitions **7**
- Client applications **7**
- Groups **7**
- Measures **7**
- Plan definitions **7**
- Structure definitions **7**
- Subscriptions **7**
- Access policies **6**
- Accounts **6**
- Activity definitions **6**
- Allergy intolerances **6**
- Care plans **6**
- Care teams **6**
- Charge items **6**
- Claim responses **6**
- Clinical impressions **6**
- Communication requests **6**
- Communications **6**
- Compositions **6**
- Conditions **6**
- Consents **6**
- Coverage eligibility responses **6**
- Coverages **6**
- Devices **6**
- Diagnostic reports **6**
- Document references **6**
- Encounters **6**
- Endpoints **6**
- Episode of cares **6**
- Explanation of benefits **6**
- Family member histories **6**
- Flags **6**
- Goals **6**
- Healthcare services **6**
- Immunizations **6**
- Invoices **6**
- Lists **6**
- Locations **6**
- Measure reports **6**
- Media **6**
- Medication administrations **6**
- Medication dispenses **6**
- Medication requests **6**
- Medication statements **6**
- Medications **6**
- Observations **6**
- Organizations **6**
- Persons **6**
- Practitioner roles **6**
- Practitioners **6**
- Procedures **6**
- Project memberships **6**
- Provenances **6**
- Questionnaires **6**
- Related persons **6**
- Risk assessments **6**
- Schedules **6**
- Scim users **6**
- Search parameters **6**
- Service requests **6**
- Slots **6**
- Specimens **6**
- Tasks **6**
- User configurations **6**
- Admin memberships **5**
- Async jobs **5**
- Package releases **3**
- Audit events **2**
- Auth **2**
- Binaries **2**
- Bulk data exports **2**
- Bulk exports **2**
- CDS services **2**
- Logins **2**
- Oauth **2**
- Smart app launches **2**
- Email **1**
- Health **1**

Top actions

## The Medplum API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 11 of Medplum's 11 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `medplum.users.list` Search User resources | Search User resources. | read | `identity.user.list` 474 connectors |
| `medplum.users.create` Create a User | Create a User. | write | `identity.user.create` 262 connectors |
| `medplum.users.delete` Delete a User | Delete a User. | destructive | `identity.user.delete` 253 connectors |
| `medplum.appointments.list` Search Appointment resources | Search Appointment resources. | read | `service.service_appointment.list` 12 connectors |
| `medplum.auth.me` Get the current login | Get the current login. | read | `identity.current_user.get` 307 connectors |
| `medplum.appointments.create` Create an Appointment | Create a Appointment. | write | `service.service_appointment.create` 13 connectors |
| `medplum.locations.list` Search Location resources | Search Location resources. | read | this connector |
| `medplum.organizations.list` Search Organization resources | Search Organization resources. | read | this connector |
| `medplum.client_applications.list` Search ClientApplication resources | Search ClientApplication resources. | read | this connector |
| `medplum.fhir.ai` Call Medplum's AI operation | Call Medplum's AI operation. | read | this connector |
| `medplum.bots.init` Create a Bot with code | Create a Bot with code. | write | this connector |
| `medplum.email.send` Send an email | Send an email. | write | this connector |

Try it

## Prompts to paste into Claude.

Each one names the Medplum 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 Medplum and flag likely duplicates by name or domain.
   calls `medplum.organizations.list`
2. Write write
   Create a User in Medplum. Show me exactly what you will send before you save it.
   calls `medplum.users.create`
3. Across systems read
   Which Medplum companies have invoices in ConnectWise PSA, and how many each?
   calls `medplum.organizations.list` `connectwise_manage.invoices.list`

Across your systems

## Medplum, joined to the rest of your business.

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

- Which Medplum companies have invoices in ConnectWise PSA, and how many each?
  `medplum.organizations.list` + `connectwise_manage.invoices.list`, on `crm.company` · [ConnectWise PSA](https://actionlake.com/connectors/connectwise-psa)
- Which Medplum companies have tickets in HubSpot CRM, and how many each?
  `medplum.organizations.list` + `hubspot_crm.tickets.list`, on `crm.company` · [HubSpot CRM](https://actionlake.com/connectors/hubspot-crm)

Also mapped by other connectors `identity.user` **517** `crm.company` **227** `identity.application` **20** `identity.organizational_unit` **10** `service.service_appointment` **9**

ask

```
ask {
  intent: "which Medplum companies have invoices in ConnectWise PSA, and how many each",
  steps: [
    { action: "medplum.organizations.list", 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 Medplum

## Destructive actions wait for a yes.

86 Medplum actions are destructive. The first 10:

- Delete a User `medplum.users.delete`
- Delete an Appointment `medplum.appointments.delete`
- Delete a Bot `medplum.bots.delete`
- Delete a Flag `medplum.flags.delete`
- Delete a Goal `medplum.goals.delete`
- Delete a List `medplum.lists.delete`
- Delete a Media `medplum.media.delete`
- Delete a Slot `medplum.slots.delete`
- Delete a Task `medplum.tasks.delete`
- Delete an Agent `medplum.agents.delete`

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.

do medplum.users.delete confirm_policy: **human**

Delete a User?

**intent:** the user asked me to delete a User

run suspended · waiting for a named person · key _medplum-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "medplum-agent",
  allowed_actions: ["medplum.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "medplum.users.delete", approver: "lead@example.com" },
    { match: "medplum.appointments.delete", approver: "lead@example.com" },
    { match: "medplum.bots.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Medplum only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Medplum costs on actionlake.

Every Medplum action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Medplum 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 591 Medplum actions
- 591 actions page each page of a long list is one call
- 210 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 Medplum action.

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

**Resources 20**

- `medplum.resources.aws_textract` Run AWS Textract on an attachment write
- `medplum.resources.create` Create any resource write
- `medplum.resources.history` Get a resource's version history read
- `medplum.resources.search` Search any resource type read
- `medplum.resources.conditional_delete` Delete resources matched by search destructive
- `medplum.resources.conditional_patch` Patch a resource matched by search write
- and 14 more in this area

**Agents 19**

- `medplum.agents.bulk_status` Get the status of many agents read
- `medplum.agents.create` Create an Agent write
- `medplum.agents.list` Search Agent resources read
- `medplum.agents.push` Push a message through an agent write
- `medplum.agents.delete` Delete an Agent destructive
- `medplum.agents.fetch_logs` Fetch an agent's recent logs read
- and 13 more in this area

**Code systems 14**

- `medplum.code_systems.create` Create a CodeSystem write
- `medplum.code_systems.import` Import concepts into a code system write
- `medplum.code_systems.import_by_id` Import concepts into a code system (by id) write
- `medplum.code_systems.list` Search CodeSystem resources read
- `medplum.code_systems.delete` Delete a CodeSystem destructive
- `medplum.code_systems.get` Read a CodeSystem read
- and 8 more in this area

**Appointments 12**

- `medplum.appointments.create` Create an Appointment write
- `medplum.appointments.get` Read an Appointment read
- `medplum.appointments.list` Search Appointment resources read
- `medplum.appointments.update` Replace an Appointment write
- `medplum.appointments.book` Book an appointment write
- `medplum.appointments.cancel` Cancel an appointment destructive
- and 6 more in this area

**Patients 12**

- `medplum.patients.create` Create a Patient write
- `medplum.patients.export` Start a bulk export of all patients write
- `medplum.patients.generate_smart_health_card` Generate an SMART Health Card write
- `medplum.patients.generate_smart_health_link` Generate an SMART Health Link write
- `medplum.patients.delete` Delete a Patient destructive
- `medplum.patients.everything` Get everything about a patient read
- and 6 more in this area

**Fhir 11**

- `medplum.fhir.ai` Call Medplum's AI operation read
- `medplum.fhir.batch` Run a batch or transaction Bundle write
- `medplum.fhir.export` Start a system-level bulk export write
- `medplum.fhir.graphql_query` Run a GraphQL query read
- `medplum.fhir.capabilities` Get the FHIR CapabilityStatement read
- `medplum.fhir.graphql_mutation` Run a GraphQL mutation write
- and 5 more in this area

**Bots 10**

- `medplum.bots.create` Create a Bot write
- `medplum.bots.execute` Execute a Bot write
- `medplum.bots.execute_by_identifier` Execute a Bot by identifier write
- `medplum.bots.init` Create a Bot with code write
- `medplum.bots.delete` Delete a Bot destructive
- `medplum.bots.deploy` Deploy a Bot's code write
- and 4 more in this area

**Claims 10**

- `medplum.claims.create` Create a Claim write
- `medplum.claims.export` Export a Claim as a CMS-1500 PDF write
- `medplum.claims.list` Search Claim resources read
- `medplum.claims.submit` Submit a Claim to the clearinghouse write
- `medplum.claims.delete` Delete a Claim destructive
- `medplum.claims.export_by_id` Export a stored Claim as a CMS-1500 PDF read
- and 4 more in this area

**Concept maps 10**

- `medplum.concept_maps.create` Create a ConceptMap write
- `medplum.concept_maps.import` Import mappings into a concept map write
- `medplum.concept_maps.import_by_id` Import mappings into a concept map (by id) write
- `medplum.concept_maps.list` Search ConceptMap resources read
- `medplum.concept_maps.delete` Delete a ConceptMap destructive
- `medplum.concept_maps.get` Read a ConceptMap read
- and 4 more in this area

**Value sets 9**

- `medplum.value_sets.create` Create a ValueSet write
- `medplum.value_sets.expand` Expand a value set read
- `medplum.value_sets.get` Read a ValueSet read
- `medplum.value_sets.list` Search ValueSet resources read
- `medplum.value_sets.delete` Delete a ValueSet destructive
- `medplum.value_sets.patch` Patch a ValueSet write
- and 3 more in this area

**Admin projects 8**

- `medplum.admin_projects.create_bot` Create a Bot write
- `medplum.admin_projects.create_client` Create a client application write
- `medplum.admin_projects.get` Get a project's admin view read
- `medplum.admin_projects.invite` Invite a user to the project write
- `medplum.admin_projects.set_password` Force-set a user's password write
- `medplum.admin_projects.update_secrets` Replace the project's secrets write
- and 2 more in this area

**Coverage eligibility requests 8**

- `medplum.coverage_eligibility_requests.create` Create a CoverageEligibilityRequest write
- `medplum.coverage_eligibility_requests.list` Search CoverageEligibilityRequest resources read
- `medplum.coverage_eligibility_requests.submit` Submit an eligibility check write
- `medplum.coverage_eligibility_requests.submit_by_id` Submit a stored eligibility check write
- `medplum.coverage_eligibility_requests.delete` Delete a CoverageEligibilityRequest destructive
- `medplum.coverage_eligibility_requests.get` Read a CoverageEligibilityRequest read
- and 2 more in this area

**Projects 8**

- `medplum.projects.archive` Archive a project write
- `medplum.projects.clone` Clone a project write
- `medplum.projects.init` Create a project write
- `medplum.projects.list` Search Project resources read
- `medplum.projects.get` Read a Project read
- `medplum.projects.patch` Patch a Project write
- and 2 more in this area

**Questionnaire responses 8**

- `medplum.questionnaire_responses.create` Create a QuestionnaireResponse write
- `medplum.questionnaire_responses.extract` Extract resources from a questionnaire response read
- `medplum.questionnaire_responses.extract_inline` Extract resources from an unsaved questionnaire response read
- `medplum.questionnaire_responses.list` Search QuestionnaireResponse resources read
- `medplum.questionnaire_responses.delete` Delete a QuestionnaireResponse destructive
- `medplum.questionnaire_responses.get` Read a QuestionnaireResponse read
- and 2 more in this area

**Users 8**

- `medplum.users.create` Create a User write
- `medplum.users.get` Read a User read
- `medplum.users.list` Search User resources read
- `medplum.users.update` Replace a User write
- `medplum.users.delete` Delete a User destructive
- `medplum.users.patch` Patch a User write
- and 2 more in this area

**Charge item definitions 7**

- `medplum.charge_item_definitions.apply` Price a charge item write
- `medplum.charge_item_definitions.create` Create a ChargeItemDefinition write
- `medplum.charge_item_definitions.get` Read a ChargeItemDefinition read
- `medplum.charge_item_definitions.list` Search ChargeItemDefinition resources read
- `medplum.charge_item_definitions.delete` Delete a ChargeItemDefinition destructive
- `medplum.charge_item_definitions.patch` Patch a ChargeItemDefinition write
- and 1 more in this area

**Client applications 7**

- `medplum.client_applications.create` Create a ClientApplication write
- `medplum.client_applications.get` Read a ClientApplication read
- `medplum.client_applications.list` Search ClientApplication resources read
- `medplum.client_applications.update` Replace a ClientApplication write
- `medplum.client_applications.delete` Delete a ClientApplication destructive
- `medplum.client_applications.patch` Patch a ClientApplication write
- and 1 more in this area

**Groups 7**

- `medplum.groups.create` Create a Group write
- `medplum.groups.export` Start a bulk export of a Group write
- `medplum.groups.get` Read a Group read
- `medplum.groups.list` Search Group resources read
- `medplum.groups.delete` Delete a Group destructive
- `medplum.groups.patch` Patch a Group write
- and 1 more in this area

**Measures 7**

- `medplum.measures.create` Create a Measure write
- `medplum.measures.evaluate` Evaluate a measure write
- `medplum.measures.get` Read a Measure read
- `medplum.measures.list` Search Measure resources read
- `medplum.measures.delete` Delete a Measure destructive
- `medplum.measures.patch` Patch a Measure write
- and 1 more in this area

**Plan definitions 7**

- `medplum.plan_definitions.apply` Apply a plan definition write
- `medplum.plan_definitions.create` Create a PlanDefinition write
- `medplum.plan_definitions.get` Read a PlanDefinition read
- `medplum.plan_definitions.list` Search PlanDefinition resources read
- `medplum.plan_definitions.delete` Delete a PlanDefinition destructive
- `medplum.plan_definitions.patch` Patch a PlanDefinition write
- and 1 more in this area

**Structure definitions 7**

- `medplum.structure_definitions.create` Create a StructureDefinition write
- `medplum.structure_definitions.expand_profile` Expand a profile with its dependencies read
- `medplum.structure_definitions.get` Read a StructureDefinition read
- `medplum.structure_definitions.list` Search StructureDefinition resources read
- `medplum.structure_definitions.delete` Delete a StructureDefinition destructive
- `medplum.structure_definitions.patch` Patch a StructureDefinition write
- and 1 more in this area

**Subscriptions 7**

- `medplum.subscriptions.create` Create a Subscription write
- `medplum.subscriptions.get` Read a Subscription read
- `medplum.subscriptions.get_ws_binding_token` Get a WebSocket binding token read
- `medplum.subscriptions.list` Search Subscription resources read
- `medplum.subscriptions.delete` Delete a Subscription destructive
- `medplum.subscriptions.patch` Patch a Subscription write
- and 1 more in this area

**Access policies 6**

- `medplum.access_policies.create` Create an AccessPolicy write
- `medplum.access_policies.get` Read an AccessPolicy read
- `medplum.access_policies.list` Search AccessPolicy resources read
- `medplum.access_policies.update` Replace an AccessPolicy write
- `medplum.access_policies.delete` Delete an AccessPolicy destructive
- `medplum.access_policies.patch` Patch an AccessPolicy write

**Accounts 6**

- `medplum.accounts.create` Create an Account write
- `medplum.accounts.get` Read an Account read
- `medplum.accounts.list` Search Account resources read
- `medplum.accounts.update` Replace an Account write
- `medplum.accounts.delete` Delete an Account destructive
- `medplum.accounts.patch` Patch an Account write

**Activity definitions 6**

- `medplum.activity_definitions.create` Create an ActivityDefinition write
- `medplum.activity_definitions.get` Read an ActivityDefinition read
- `medplum.activity_definitions.list` Search ActivityDefinition resources read
- `medplum.activity_definitions.update` Replace an ActivityDefinition write
- `medplum.activity_definitions.delete` Delete an ActivityDefinition destructive
- `medplum.activity_definitions.patch` Patch an ActivityDefinition write

**Allergy intolerances 6**

- `medplum.allergy_intolerances.create` Create an AllergyIntolerance write
- `medplum.allergy_intolerances.get` Read an AllergyIntolerance read
- `medplum.allergy_intolerances.list` Search AllergyIntolerance resources read
- `medplum.allergy_intolerances.update` Replace an AllergyIntolerance write
- `medplum.allergy_intolerances.delete` Delete an AllergyIntolerance destructive
- `medplum.allergy_intolerances.patch` Patch an AllergyIntolerance write

**Care plans 6**

- `medplum.care_plans.create` Create a CarePlan write
- `medplum.care_plans.get` Read a CarePlan read
- `medplum.care_plans.list` Search CarePlan resources read
- `medplum.care_plans.update` Replace a CarePlan write
- `medplum.care_plans.delete` Delete a CarePlan destructive
- `medplum.care_plans.patch` Patch a CarePlan write

**Care teams 6**

- `medplum.care_teams.create` Create a CareTeam write
- `medplum.care_teams.get` Read a CareTeam read
- `medplum.care_teams.list` Search CareTeam resources read
- `medplum.care_teams.update` Replace a CareTeam write
- `medplum.care_teams.delete` Delete a CareTeam destructive
- `medplum.care_teams.patch` Patch a CareTeam write

**Charge items 6**

- `medplum.charge_items.create` Create a ChargeItem write
- `medplum.charge_items.get` Read a ChargeItem read
- `medplum.charge_items.list` Search ChargeItem resources read
- `medplum.charge_items.update` Replace a ChargeItem write
- `medplum.charge_items.delete` Delete a ChargeItem destructive
- `medplum.charge_items.patch` Patch a ChargeItem write

**Claim responses 6**

- `medplum.claim_responses.create` Create a ClaimResponse write
- `medplum.claim_responses.get` Read a ClaimResponse read
- `medplum.claim_responses.list` Search ClaimResponse resources read
- `medplum.claim_responses.update` Replace a ClaimResponse write
- `medplum.claim_responses.delete` Delete a ClaimResponse destructive
- `medplum.claim_responses.patch` Patch a ClaimResponse write

Clinical impressions **6** Communication requests **6** Communications **6** Compositions **6** Conditions **6** Consents **6** Coverage eligibility responses **6** Coverages **6** Devices **6** Diagnostic reports **6** Document references **6** Encounters **6** Endpoints **6** Episode of cares **6** Explanation of benefits **6** Family member histories **6** Flags **6** Goals **6** Healthcare services **6** Immunizations **6** Invoices **6** Lists **6** Locations **6** Measure reports **6** Media **6** Medication administrations **6** Medication dispenses **6** Medication requests **6** Medication statements **6** Medications **6** Observations **6** Organizations **6** Persons **6** Practitioner roles **6** Practitioners **6** Procedures **6** Project memberships **6** Provenances **6** Questionnaires **6** Related persons **6** Risk assessments **6** Schedules **6** Scim users **6** Search parameters **6** Service requests **6** Slots **6** Specimens **6** Tasks **6** User configurations **6** Admin memberships **5** Async jobs **5** Package releases **3** Audit events **2** Auth **2** Binaries **2** Bulk data exports **2** Bulk exports **2** CDS services **2** Logins **2** Oauth **2** Smart app launches **2** Email **1** Health **1**

This index shows a sample of each area. All 591 actions, with their inputs and prices, are in the [catalogue](https://actionlake.com/console/catalogue), which a free sandbox key can search.

Questions

## The Medplum MCP server, answered.

**Is there a Medplum MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 591 Medplum actions across resources, agents, code systems and appointments, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Medplum.

**What do I need to connect Medplum?**

Medplum ClientApplication ID (Medplum app > Project Admin > Clients > New client, or Admin > Clients; the client's… and That ClientApplication's secret (shown on the client's page). Plus your host. The free call account { op: "connections.requirements", service: "medplum" } lists exactly what to paste.

**Can an AI agent delete or change things in Medplum?**

Only if its key allows it, and only with an explicit confirmation. 86 Medplum actions are destructive, including delete a User, delete an Appointment and delete a Bot. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my Medplum API limit?**

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

**What does a Medplum action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (591 Medplum actions page). Cache hits, searches, dry runs and calls Medplum 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 Medplum API does it cover?**

The Medplum server API (FHIR R4 at /fhir/R4, plus /admin, /auth, /oauth2, /scim/v2, /email/v1, /cds-services) at api.medplum.com by default, or the base URL set when you connect. It is built from Medplum's documentation as read on 23 October 2026. 591 actions in 93 areas, each one in the signed service file (version 1.0.0).

**Can I combine Medplum with my other systems?**

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

**Does actionlake keep my Medplum data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to 5 minutes, 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 Medplum 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 Medplum

Shares the most action names with

- [Healthie 9](https://actionlake.com/connectors/healthie)
- [Rossum 6](https://actionlake.com/connectors/rossum)
- [Avalara AvaTax 5](https://actionlake.com/connectors/avalara-avatax)
- [SumUp 5](https://actionlake.com/connectors/sumup)
- [Rydoo 4](https://actionlake.com/connectors/rydoo)
- [Navan 2](https://actionlake.com/connectors/navan)

Joins with, on shared entities

- [athenahealth athenaOne 3](https://actionlake.com/connectors/athenahealth-athenaone)
- [Microsoft Dynamics 365 3](https://actionlake.com/connectors/microsoft-dynamics-365)
- [Zuper 3](https://actionlake.com/connectors/zuper)
- [Salesforce Service Cloud 3](https://actionlake.com/connectors/salesforce-service-cloud)
- [Stytch 3](https://actionlake.com/connectors/stytch)
- [HaloPSA 2](https://actionlake.com/connectors/halopsa)

Browse

- [All Accounting & finance connectors](https://actionlake.com/connectors/category/accounting-and-finance)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

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

## Give your agent Medplum today.

[Connect Medplum 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/medplum
More: https://actionlake.com/llms.txt
