Skip to content

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.

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
  • 591actionsin one signed file
  • 219readlook, never change
  • 286writecreate and update
  • 86wait for a yesdestructive, 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_idMedplum ClientApplication ID (Medplum app > Project Admin > Clients > New client, or Admin > Clients; the client's…
    • client_secretThat ClientApplication's secret (shown on the client's page)
    • hostWhere 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 callcheck { 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_idclient_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 2026api.medplum.comGitHubmedplum.com
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.

  • 219readlook, never change
  • 286writecreate and update
  • 86destructivewait 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.

ActionWhat it doesEffectSame name in
medplum.users.listSearch User resourcesSearch User resources.readidentity.user.list474 connectors
medplum.users.createCreate a UserCreate a User.writeidentity.user.create262 connectors
medplum.users.deleteDelete a UserDelete a User.destructiveidentity.user.delete253 connectors
medplum.appointments.listSearch Appointment resourcesSearch Appointment resources.readservice.service_appointment.list12 connectors
medplum.auth.meGet the current loginGet the current login.readidentity.current_user.get307 connectors
medplum.appointments.createCreate an AppointmentCreate a Appointment.writeservice.service_appointment.create13 connectors
medplum.locations.listSearch Location resourcesSearch Location resources.readthis connector
medplum.organizations.listSearch Organization resourcesSearch Organization resources.readthis connector
medplum.client_applications.listSearch ClientApplication resourcesSearch ClientApplication resources.readthis connector
medplum.fhir.aiCall Medplum's AI operationCall Medplum's AI operation.readthis connector
medplum.bots.initCreate a Bot with codeCreate a Bot with code.writethis connector
medplum.email.sendSend an emailSend an email.writethis 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. Readread

    List the companies in Medplum and flag likely duplicates by name or domain.

    callsmedplum.organizations.list

  2. Writewrite

    Create a User in Medplum. Show me exactly what you will send before you save it.

    callsmedplum.users.create

  3. Across systemsread

    Which Medplum companies have invoices in ConnectWise PSA, and how many each?

    callsmedplum.organizations.listconnectwise_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

  • Which Medplum companies have tickets in HubSpot CRM, and how many each?

    medplum.organizations.list + hubspot_crm.tickets.list, on crm.company · HubSpot CRM

Also mapped by other connectorsidentity.user 517crm.company 227identity.application 20identity.organizational_unit 10service.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 Usermedplum.users.delete
  • Delete an Appointmentmedplum.appointments.delete
  • Delete a Botmedplum.bots.delete
  • Delete a Flagmedplum.flags.delete
  • Delete a Goalmedplum.goals.delete
  • Delete a Listmedplum.lists.delete
  • Delete a Mediamedplum.media.delete
  • Delete a Slotmedplum.slots.delete
  • Delete a Taskmedplum.tasks.delete
  • Delete an Agentmedplum.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.

domedplum.users.deleteconfirm_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: "[email protected]" },    { match: "medplum.appointments.delete", approver: "[email protected]" },    { match: "medplum.bots.delete", approver: "[email protected]" }  ]}
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.

  • 1upstream call per actionall 591 Medplum actions
  • 591actions pageeach page of a long list is one call
  • 210reads 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 Medplum action.

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

Resources20
  • medplum.resources.aws_textractRun AWS Textract on an attachmentwrite
  • medplum.resources.createCreate any resourcewrite
  • medplum.resources.historyGet a resource's version historyread
  • medplum.resources.searchSearch any resource typeread
  • medplum.resources.conditional_deleteDelete resources matched by searchdestructive
  • medplum.resources.conditional_patchPatch a resource matched by searchwrite
  • and 14 more in this area
Agents19
  • medplum.agents.bulk_statusGet the status of many agentsread
  • medplum.agents.createCreate an Agentwrite
  • medplum.agents.listSearch Agent resourcesread
  • medplum.agents.pushPush a message through an agentwrite
  • medplum.agents.deleteDelete an Agentdestructive
  • medplum.agents.fetch_logsFetch an agent's recent logsread
  • and 13 more in this area
Code systems14
  • medplum.code_systems.createCreate a CodeSystemwrite
  • medplum.code_systems.importImport concepts into a code systemwrite
  • medplum.code_systems.import_by_idImport concepts into a code system (by id)write
  • medplum.code_systems.listSearch CodeSystem resourcesread
  • medplum.code_systems.deleteDelete a CodeSystemdestructive
  • medplum.code_systems.getRead a CodeSystemread
  • and 8 more in this area
Appointments12
  • medplum.appointments.createCreate an Appointmentwrite
  • medplum.appointments.getRead an Appointmentread
  • medplum.appointments.listSearch Appointment resourcesread
  • medplum.appointments.updateReplace an Appointmentwrite
  • medplum.appointments.bookBook an appointmentwrite
  • medplum.appointments.cancelCancel an appointmentdestructive
  • and 6 more in this area
Patients12
  • medplum.patients.createCreate a Patientwrite
  • medplum.patients.exportStart a bulk export of all patientswrite
  • medplum.patients.generate_smart_health_cardGenerate an SMART Health Cardwrite
  • medplum.patients.generate_smart_health_linkGenerate an SMART Health Linkwrite
  • medplum.patients.deleteDelete a Patientdestructive
  • medplum.patients.everythingGet everything about a patientread
  • and 6 more in this area
Fhir11
  • medplum.fhir.aiCall Medplum's AI operationread
  • medplum.fhir.batchRun a batch or transaction Bundlewrite
  • medplum.fhir.exportStart a system-level bulk exportwrite
  • medplum.fhir.graphql_queryRun a GraphQL queryread
  • medplum.fhir.capabilitiesGet the FHIR CapabilityStatementread
  • medplum.fhir.graphql_mutationRun a GraphQL mutationwrite
  • and 5 more in this area
Bots10
  • medplum.bots.createCreate a Botwrite
  • medplum.bots.executeExecute a Botwrite
  • medplum.bots.execute_by_identifierExecute a Bot by identifierwrite
  • medplum.bots.initCreate a Bot with codewrite
  • medplum.bots.deleteDelete a Botdestructive
  • medplum.bots.deployDeploy a Bot's codewrite
  • and 4 more in this area
Claims10
  • medplum.claims.createCreate a Claimwrite
  • medplum.claims.exportExport a Claim as a CMS-1500 PDFwrite
  • medplum.claims.listSearch Claim resourcesread
  • medplum.claims.submitSubmit a Claim to the clearinghousewrite
  • medplum.claims.deleteDelete a Claimdestructive
  • medplum.claims.export_by_idExport a stored Claim as a CMS-1500 PDFread
  • and 4 more in this area
Concept maps10
  • medplum.concept_maps.createCreate a ConceptMapwrite
  • medplum.concept_maps.importImport mappings into a concept mapwrite
  • medplum.concept_maps.import_by_idImport mappings into a concept map (by id)write
  • medplum.concept_maps.listSearch ConceptMap resourcesread
  • medplum.concept_maps.deleteDelete a ConceptMapdestructive
  • medplum.concept_maps.getRead a ConceptMapread
  • and 4 more in this area
Value sets9
  • medplum.value_sets.createCreate a ValueSetwrite
  • medplum.value_sets.expandExpand a value setread
  • medplum.value_sets.getRead a ValueSetread
  • medplum.value_sets.listSearch ValueSet resourcesread
  • medplum.value_sets.deleteDelete a ValueSetdestructive
  • medplum.value_sets.patchPatch a ValueSetwrite
  • and 3 more in this area
Admin projects8
  • medplum.admin_projects.create_botCreate a Botwrite
  • medplum.admin_projects.create_clientCreate a client applicationwrite
  • medplum.admin_projects.getGet a project's admin viewread
  • medplum.admin_projects.inviteInvite a user to the projectwrite
  • medplum.admin_projects.set_passwordForce-set a user's passwordwrite
  • medplum.admin_projects.update_secretsReplace the project's secretswrite
  • and 2 more in this area
Coverage eligibility requests8
  • medplum.coverage_eligibility_requests.createCreate a CoverageEligibilityRequestwrite
  • medplum.coverage_eligibility_requests.listSearch CoverageEligibilityRequest resourcesread
  • medplum.coverage_eligibility_requests.submitSubmit an eligibility checkwrite
  • medplum.coverage_eligibility_requests.submit_by_idSubmit a stored eligibility checkwrite
  • medplum.coverage_eligibility_requests.deleteDelete a CoverageEligibilityRequestdestructive
  • medplum.coverage_eligibility_requests.getRead a CoverageEligibilityRequestread
  • and 2 more in this area
Projects8
  • medplum.projects.archiveArchive a projectwrite
  • medplum.projects.cloneClone a projectwrite
  • medplum.projects.initCreate a projectwrite
  • medplum.projects.listSearch Project resourcesread
  • medplum.projects.getRead a Projectread
  • medplum.projects.patchPatch a Projectwrite
  • and 2 more in this area
Questionnaire responses8
  • medplum.questionnaire_responses.createCreate a QuestionnaireResponsewrite
  • medplum.questionnaire_responses.extractExtract resources from a questionnaire responseread
  • medplum.questionnaire_responses.extract_inlineExtract resources from an unsaved questionnaire responseread
  • medplum.questionnaire_responses.listSearch QuestionnaireResponse resourcesread
  • medplum.questionnaire_responses.deleteDelete a QuestionnaireResponsedestructive
  • medplum.questionnaire_responses.getRead a QuestionnaireResponseread
  • and 2 more in this area
Users8
  • medplum.users.createCreate a Userwrite
  • medplum.users.getRead a Userread
  • medplum.users.listSearch User resourcesread
  • medplum.users.updateReplace a Userwrite
  • medplum.users.deleteDelete a Userdestructive
  • medplum.users.patchPatch a Userwrite
  • and 2 more in this area
Charge item definitions7
  • medplum.charge_item_definitions.applyPrice a charge itemwrite
  • medplum.charge_item_definitions.createCreate a ChargeItemDefinitionwrite
  • medplum.charge_item_definitions.getRead a ChargeItemDefinitionread
  • medplum.charge_item_definitions.listSearch ChargeItemDefinition resourcesread
  • medplum.charge_item_definitions.deleteDelete a ChargeItemDefinitiondestructive
  • medplum.charge_item_definitions.patchPatch a ChargeItemDefinitionwrite
  • and 1 more in this area
Client applications7
  • medplum.client_applications.createCreate a ClientApplicationwrite
  • medplum.client_applications.getRead a ClientApplicationread
  • medplum.client_applications.listSearch ClientApplication resourcesread
  • medplum.client_applications.updateReplace a ClientApplicationwrite
  • medplum.client_applications.deleteDelete a ClientApplicationdestructive
  • medplum.client_applications.patchPatch a ClientApplicationwrite
  • and 1 more in this area
Groups7
  • medplum.groups.createCreate a Groupwrite
  • medplum.groups.exportStart a bulk export of a Groupwrite
  • medplum.groups.getRead a Groupread
  • medplum.groups.listSearch Group resourcesread
  • medplum.groups.deleteDelete a Groupdestructive
  • medplum.groups.patchPatch a Groupwrite
  • and 1 more in this area
Measures7
  • medplum.measures.createCreate a Measurewrite
  • medplum.measures.evaluateEvaluate a measurewrite
  • medplum.measures.getRead a Measureread
  • medplum.measures.listSearch Measure resourcesread
  • medplum.measures.deleteDelete a Measuredestructive
  • medplum.measures.patchPatch a Measurewrite
  • and 1 more in this area
Plan definitions7
  • medplum.plan_definitions.applyApply a plan definitionwrite
  • medplum.plan_definitions.createCreate a PlanDefinitionwrite
  • medplum.plan_definitions.getRead a PlanDefinitionread
  • medplum.plan_definitions.listSearch PlanDefinition resourcesread
  • medplum.plan_definitions.deleteDelete a PlanDefinitiondestructive
  • medplum.plan_definitions.patchPatch a PlanDefinitionwrite
  • and 1 more in this area
Structure definitions7
  • medplum.structure_definitions.createCreate a StructureDefinitionwrite
  • medplum.structure_definitions.expand_profileExpand a profile with its dependenciesread
  • medplum.structure_definitions.getRead a StructureDefinitionread
  • medplum.structure_definitions.listSearch StructureDefinition resourcesread
  • medplum.structure_definitions.deleteDelete a StructureDefinitiondestructive
  • medplum.structure_definitions.patchPatch a StructureDefinitionwrite
  • and 1 more in this area
Subscriptions7
  • medplum.subscriptions.createCreate a Subscriptionwrite
  • medplum.subscriptions.getRead a Subscriptionread
  • medplum.subscriptions.get_ws_binding_tokenGet a WebSocket binding tokenread
  • medplum.subscriptions.listSearch Subscription resourcesread
  • medplum.subscriptions.deleteDelete a Subscriptiondestructive
  • medplum.subscriptions.patchPatch a Subscriptionwrite
  • and 1 more in this area
Access policies6
  • medplum.access_policies.createCreate an AccessPolicywrite
  • medplum.access_policies.getRead an AccessPolicyread
  • medplum.access_policies.listSearch AccessPolicy resourcesread
  • medplum.access_policies.updateReplace an AccessPolicywrite
  • medplum.access_policies.deleteDelete an AccessPolicydestructive
  • medplum.access_policies.patchPatch an AccessPolicywrite
Accounts6
  • medplum.accounts.createCreate an Accountwrite
  • medplum.accounts.getRead an Accountread
  • medplum.accounts.listSearch Account resourcesread
  • medplum.accounts.updateReplace an Accountwrite
  • medplum.accounts.deleteDelete an Accountdestructive
  • medplum.accounts.patchPatch an Accountwrite
Activity definitions6
  • medplum.activity_definitions.createCreate an ActivityDefinitionwrite
  • medplum.activity_definitions.getRead an ActivityDefinitionread
  • medplum.activity_definitions.listSearch ActivityDefinition resourcesread
  • medplum.activity_definitions.updateReplace an ActivityDefinitionwrite
  • medplum.activity_definitions.deleteDelete an ActivityDefinitiondestructive
  • medplum.activity_definitions.patchPatch an ActivityDefinitionwrite
Allergy intolerances6
  • medplum.allergy_intolerances.createCreate an AllergyIntolerancewrite
  • medplum.allergy_intolerances.getRead an AllergyIntoleranceread
  • medplum.allergy_intolerances.listSearch AllergyIntolerance resourcesread
  • medplum.allergy_intolerances.updateReplace an AllergyIntolerancewrite
  • medplum.allergy_intolerances.deleteDelete an AllergyIntolerancedestructive
  • medplum.allergy_intolerances.patchPatch an AllergyIntolerancewrite
Care plans6
  • medplum.care_plans.createCreate a CarePlanwrite
  • medplum.care_plans.getRead a CarePlanread
  • medplum.care_plans.listSearch CarePlan resourcesread
  • medplum.care_plans.updateReplace a CarePlanwrite
  • medplum.care_plans.deleteDelete a CarePlandestructive
  • medplum.care_plans.patchPatch a CarePlanwrite
Care teams6
  • medplum.care_teams.createCreate a CareTeamwrite
  • medplum.care_teams.getRead a CareTeamread
  • medplum.care_teams.listSearch CareTeam resourcesread
  • medplum.care_teams.updateReplace a CareTeamwrite
  • medplum.care_teams.deleteDelete a CareTeamdestructive
  • medplum.care_teams.patchPatch a CareTeamwrite
Charge items6
  • medplum.charge_items.createCreate a ChargeItemwrite
  • medplum.charge_items.getRead a ChargeItemread
  • medplum.charge_items.listSearch ChargeItem resourcesread
  • medplum.charge_items.updateReplace a ChargeItemwrite
  • medplum.charge_items.deleteDelete a ChargeItemdestructive
  • medplum.charge_items.patchPatch a ChargeItemwrite
Claim responses6
  • medplum.claim_responses.createCreate a ClaimResponsewrite
  • medplum.claim_responses.getRead a ClaimResponseread
  • medplum.claim_responses.listSearch ClaimResponse resourcesread
  • medplum.claim_responses.updateReplace a ClaimResponsewrite
  • medplum.claim_responses.deleteDelete a ClaimResponsedestructive
  • medplum.claim_responses.patchPatch a ClaimResponsewrite

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

This index shows a sample of each area. All 591 actions, with their inputs and prices, are in the 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.

Give your agent Medplum today.

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