---
title: "DrChrono MCP server for AI agents - actionlake"
description: "Give Claude 315 DrChrono actions through one MCP server: patients, appointment profiles. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/drchrono
updated: 2026-10-23
---

Connectors · Work & projects

# DrChrono MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to DrChrono and the rest of your systems. It gives your agent 315 DrChrono actions (162 reads, 134 writes and 19 that wait for a confirmation) and holds the DrChrono credential itself, so the agent never does. It paces DrChrono's limits and records every call. Connecting DrChrono needs your own DrChrono OAuth app and one admin sign-in.

[Connect DrChrono 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: "drchrono.appointments.list",
  intent: "check which DrChrono account is connected"
}
# Retrieve or search appointment or breaks · read · 1 upstream call
```

- 315 actions in one signed file
- 162 read look, never change
- 134 write create and update
- 19 wait for a yes destructive, confirmed first

Set up

## Connect DrChrono 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 DrChrono.
   OAuth 2.0, authorization code. You register your own OAuth app with DrChrono, 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, DrChrono needs an OAuth app of your own, registered in its developer portal. actionlake has no DrChrono 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` DrChrono API application client ID (DrChrono > Account > API > your application)
   - `client_secret` DrChrono API application client secret
   ```
   account { op: "connections.requirements", service: "drchrono" }
   # 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: "drchrono.appointments.list" }
   # retrieve or search appointment or breaks · read · 1 upstream call
   check { action: "drchrono.tasks.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

DrChrono at a glance

**Sign-in**

OAuth 2.0, authorization code. You register your own OAuth app with DrChrono, 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`

**Limits we pace to**

500 calls an hour, per connection

**API covered**

DrChrono API v4 - Hunt Valley (OpenAPI 3.0)`app.drchrono.com`

**Built from**

DrChrono's documentation, read 23 October 2026[app.drchrono.com](https://app.drchrono.com/openapi-schema) [app.drchrono.com](https://app.drchrono.com/api-docs/)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

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

**Shared entities**

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

**Data**

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

Capabilities

## What an AI agent can do in DrChrono.

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

- **162** read look, never change
- **134** write create and update
- **19** destructive wait for a confirmation

1. ### Patients
   9
   3 read · 4 write · 2 destructive
   Retrieve or search patients · Create patient · Retrieve an existing patient · Update an existing patient (partial)
2. ### Appointment profiles
   6
   2 read · 3 write · 1 destructive
   Create appointment profiles for a doctor's calendar · Retrieve or search appointment profiles for a doctor's calendar · Retrieve an existing appointment profile · Update an existing appointment profile (full replace)
3. ### Appointment templates
   6
   2 read · 3 write · 1 destructive
   Create appointment templates for a doctor's calendar · Retrieve or search appointment templates for a doctor's calendar · Retrieve an existing appointment template · Update an existing appointment template (full replace)
4. ### Appointments
   6
   2 read · 3 write · 1 destructive
   Retrieve or search appointment or breaks · Create a new appointment or break on doctor's calendar · Retrieve an existing appointment or break · Delete an existing appointment or break
5. ### Appointments list
   6
   2 read · 3 write · 1 destructive
   Submit appointments list · Retrieve appointments list by ID · Replace appointments list by ID (full replace) · Retrieve appointments list
6. ### Lab orders
   6
   2 read · 3 write · 1 destructive
   Create lab orders · Retrieve or search lab orders · Retrieve an existing lab order · Update an existing lab order (full replace)
7. ### Lab results
   6
   2 read · 3 write · 1 destructive
   Create lab results · Retrieve or search lab results · Retrieve an existing lab result · Update an existing lab result (full replace)
8. ### Lab tests
   6
   2 read · 3 write · 1 destructive
   Create lab tests · Retrieve or search lab tests · Retrieve an existing lab test · Update an existing lab test (full replace)

**81 more areas · 264 actions**

- Line items **6**
- Medications **6**
- Messages **6**
- Patient lab results **6**
- Patients summary **6**
- Reminder profiles **6**
- Sublabs **6**
- Allergies **5**
- Clinical note field values **5**
- Comm logs **5**
- Consent forms **5**
- Custom appointment fields **5**
- Custom demographics **5**
- Offices **5**
- Patient communications **5**
- Patient flag types **5**
- Patient interventions **5**
- Patient messages **5**
- Patient physical exams **5**
- Patient risk assessments **5**
- Patient vaccine records **5**
- Problems **5**
- Task categories **5**
- Task notes **5**
- Task statuses **5**
- Task templates **5**
- Tasks **5**
- Telehealth appointments **5**
- Amendments **4**
- Doctor work schedule **4**
- Documents **4**
- Lab documents **4**
- Office work schedule **4**
- Signed consent forms **4**
- Claim billing notes **3**
- Clinical note field types **3**
- Eobs **3**
- Inventory vaccines **3**
- Message threads **3**
- Patient payments **3**
- Telehealth appointment history **3**
- Users **3**
- Billing profiles **2**
- Care plans **2**
- Care team members **2**
- Clinical note field values list **2**
- Clinical note templates **2**
- Clinical notes **2**
- Clinical notes list **2**
- Custom insurance plan names **2**
- Custom vitals **2**
- Doctor options **2**
- Doctors **2**
- Eligibility checks **2**
- Eligibility checks list **2**
- Fee schedules **2**
- Fee schedules V2 **2**
- Iframe integration **2**
- Implantable devices **2**
- Insurances **2**
- Inventory categories **2**
- Lab orders summary **2**
- Line items list **2**
- Patient payment log **2**
- Patients list **2**
- Prescription messages **2**
- Prescription messages list **2**
- Procedures **2**
- Staff **2**
- Transactions **2**
- Transactions list **2**
- User groups **2**
- Audit log **1**
- Availability **1**
- Day sheet charges **1**
- Day sheet credits **1**
- Day sheet patient payments **1**
- Day sheet totals **1**
- Line item deletions **1**
- Patient authorizations **1**
- Recurring appointment instances **1**

Top actions

## The DrChrono 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 |
| --- | --- | --- | --- |
| `drchrono.tasks.list` Retrieve or search tasks | Retrieve or search tasks. | read | this connector |
| `drchrono.doctors.list` Retrieve or search doctors within practice group | Retrieve or search doctors within practice group. | read | this connector |
| `drchrono.offices.list` Retrieve or search offices | Retrieve or search offices. | read | this connector |
| `drchrono.patients.list` Retrieve or search patients | Retrieve or search patients. | read | this connector |
| `drchrono.appointments.list` Retrieve or search appointment or breaks | Retrieve or search appointment or breaks. | read | this connector |
| `drchrono.users.list` Retrieve or search users, `/api/users/current` can be used to identify logged in user, it will redirect to `/api/user... | Retrieve or search users, `/api/users/current` can be used to identify logged in user, it will redirect to `/api/user.... | read | this connector |
| `drchrono.tasks.create` Create a task | Create a task. | write | this connector |
| `drchrono.problems.list` Retrieve or search patient problems | Retrieve or search patient problems. | read | this connector |
| `drchrono.allergies.list` Retrieve or search patient allergies | Retrieve or search patient allergies. | read | this connector |
| `drchrono.patients.create` Create patient | Create patient. | write | this connector |
| `drchrono.appointments.create` Create a new appointment or break on doctor's calendar | Create a new appointment or break on doctor's calendar. | write | this connector |
| `drchrono.appointments.delete` Delete an existing appointment or break | Delete an existing appointment or break. | destructive | this connector |

Try it

## Prompts to paste into Claude.

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

1. Read read
   Which DrChrono tasks are overdue, and who owns each one?
   calls `drchrono.tasks.list`
2. Write write
   Create a task in DrChrono. Show me exactly what you will send before you save it.
   calls `drchrono.tasks.create`
3. Across systems read
   Which contacts are in both DrChrono and HaloPSA, and how many are in only one of them?
   calls `drchrono.patients.list` `halopsa.users.list`

Across your systems

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

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

- Which contacts are in both DrChrono and HaloPSA, and how many are in only one of them?
  `drchrono.patients.list` + `halopsa.users.list`, on `crm.contact` · [HaloPSA](https://actionlake.com/connectors/halopsa)
- Which contacts are in both DrChrono and NetSuite, and how many are in only one of them?
  `drchrono.patients.list` + `netsuite.views.contacts`, on `crm.contact` · [NetSuite](https://actionlake.com/connectors/netsuite)

Also mapped by other connectors `identity.user` **517** `crm.contact` **192** `work.task` **105** `crm.location` **49** `service.service_appointment` **9**

ask

```
ask {
  intent: "which contacts are in both DrChrono and HaloPSA, and how many are in only one of them",
  steps: [
    { action: "drchrono.patients.list", as: "people", input: {}, limit: 100, max_pages: 5 },
    { action: "halopsa.users.list", as: "people2", input: {}, limit: 100, max_pages: 5 },
    { join: {
        left: "people",
        right: "people2",
        on: "crm.contact",
        group_by: "people.email",
        select: ["people.email", "count(people2.id) as in_halopsa"]
    } }
  ]
}
```

Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for DrChrono

## Destructive actions wait for a yes.

19 DrChrono actions are destructive. These are all of them:

- Delete an existing appointment or break `drchrono.appointments.delete`
- Delete an existing sub vendor `drchrono.sublabs.delete`
- Delete an existing message in doctor's message center `drchrono.messages.delete`
- Delete an existing patient `drchrono.patients.delete`
- Delete an existing appointment template (DELETE /api/documents/{id}) `drchrono.documents.delete`
- Delete an existing lab test `drchrono.lab_tests.delete`
- Delete an existing patient amendment, you can only interact with amendments created by your API application `drchrono.amendments.delete`
- Delete an existing lab order `drchrono.lab_orders.delete`
- Delete line items by ID `drchrono.line_items.delete`
- Delete an existing lab result `drchrono.lab_results.delete`
- Delete an existing lab order document `drchrono.lab_documents.delete`
- Delete patients summary by ID `drchrono.patients_summary.delete`
- Delete appointments list by ID `drchrono.appointments_list.delete`
- Delete an existing reminder profile `drchrono.reminder_profiles.delete`
- Disable the app's iframe integration for the doctor `drchrono.iframe_integration.delete`
- Delete patient lab results by ID `drchrono.patient_lab_results.delete`
- Delete an existing appointment profile `drchrono.appointment_profiles.delete`
- Delete an existing appointment template `drchrono.appointment_templates.delete`
- Revoke sent onpatient invites `drchrono.patients_onpatient_access.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 drchrono.appointments.delete confirm_policy: **human**

Delete an existing appointment or break?

**intent:** the user asked me to delete an existing appointment or break

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

In the console, or from an emailed signed link.

a key for this connector

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

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

Cost

## What DrChrono costs on actionlake.

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

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

**Patients 9**

- `drchrono.patients.create` Create patient write
- `drchrono.patients.get` Retrieve an existing patient read
- `drchrono.patients.list` Retrieve or search patients read
- `drchrono.patients.update` Update an existing patient (partial) write
- `drchrono.patients.delete` Delete an existing patient destructive
- `drchrono.patients.replace` Update an existing patient (full replace) write
- and 3 more in this area

**Appointment profiles 6**

- `drchrono.appointment_profiles.create` Create appointment profiles for a doctor's calendar write
- `drchrono.appointment_profiles.get` Retrieve an existing appointment profile read
- `drchrono.appointment_profiles.list` Retrieve or search appointment profiles for a doctor's calendar read
- `drchrono.appointment_profiles.replace` Update an existing appointment profile (full replace) write
- `drchrono.appointment_profiles.delete` Delete an existing appointment profile destructive
- `drchrono.appointment_profiles.update` Update an existing appointment profile (partial) write

**Appointment templates 6**

- `drchrono.appointment_templates.create` Create appointment templates for a doctor's calendar write
- `drchrono.appointment_templates.get` Retrieve an existing appointment template read
- `drchrono.appointment_templates.list` Retrieve or search appointment templates for a doctor's calendar read
- `drchrono.appointment_templates.replace` Update an existing appointment template (full replace) write
- `drchrono.appointment_templates.delete` Delete an existing appointment template destructive
- `drchrono.appointment_templates.update` Update an existing appointment template (partial) write

**Appointments 6**

- `drchrono.appointments.create` Create a new appointment or break on doctor's calendar write
- `drchrono.appointments.delete` Delete an existing appointment or break destructive
- `drchrono.appointments.get` Retrieve an existing appointment or break read
- `drchrono.appointments.list` Retrieve or search appointment or breaks read
- `drchrono.appointments.replace` Update an existing appointment or break (full replace) write
- `drchrono.appointments.update` Update an existing appointment or break (partial) write

**Appointments list 6**

- `drchrono.appointments_list.get` Retrieve appointments list by ID read
- `drchrono.appointments_list.replace` Replace appointments list by ID (full replace) write
- `drchrono.appointments_list.results` Retrieve appointments list read
- `drchrono.appointments_list.submit` Submit appointments list write
- `drchrono.appointments_list.delete` Delete appointments list by ID destructive
- `drchrono.appointments_list.update` Update appointments list by ID (partial) write

**Lab orders 6**

- `drchrono.lab_orders.create` Create lab orders write
- `drchrono.lab_orders.get` Retrieve an existing lab order read
- `drchrono.lab_orders.list` Retrieve or search lab orders read
- `drchrono.lab_orders.replace` Update an existing lab order (full replace) write
- `drchrono.lab_orders.delete` Delete an existing lab order destructive
- `drchrono.lab_orders.update` Update an existing lab order (partial) write

**Lab results 6**

- `drchrono.lab_results.create` Create lab results write
- `drchrono.lab_results.get` Retrieve an existing lab result read
- `drchrono.lab_results.list` Retrieve or search lab results read
- `drchrono.lab_results.replace` Update an existing lab result (full replace) write
- `drchrono.lab_results.delete` Delete an existing lab result destructive
- `drchrono.lab_results.update` Update an existing lab result (partial) write

**Lab tests 6**

- `drchrono.lab_tests.create` Create lab tests write
- `drchrono.lab_tests.get` Retrieve an existing lab test read
- `drchrono.lab_tests.list` Retrieve or search lab tests read
- `drchrono.lab_tests.replace` Update an existing lab test (full replace) write
- `drchrono.lab_tests.delete` Delete an existing lab test destructive
- `drchrono.lab_tests.update` Update an existing lab test (partial) write

**Line items 6**

- `drchrono.line_items.create` Create billing line item for appointments write
- `drchrono.line_items.get` Retrieve an existing billing line item read
- `drchrono.line_items.list` Retrieve or search billing line items read
- `drchrono.line_items.replace` Replace line items by ID (full replace) write
- `drchrono.line_items.delete` Delete line items by ID destructive
- `drchrono.line_items.update` Update line items by ID (partial) write

**Medications 6**

- `drchrono.medications.create` Create patient medications write
- `drchrono.medications.get` Retrieve an existing patient medications read
- `drchrono.medications.list` Retrieve or search patient medications read
- `drchrono.medications.replace` Update an existing patient medications (full replace) write
- `drchrono.medications.append_to_pharmacy_note` Append a message to the "pharmacy_note" section of the prescription, in a new paragraph write
- `drchrono.medications.update` Update an existing patient medications (partial) write

**Messages 6**

- `drchrono.messages.create` Create messages in doctor's message center write
- `drchrono.messages.get` Retrieve an existing message in doctor's message center read
- `drchrono.messages.list` Retrieve or search messages in doctor's message center read
- `drchrono.messages.replace` Update an existing message in doctor's message center (full replace) write
- `drchrono.messages.delete` Delete an existing message in doctor's message center destructive
- `drchrono.messages.update` Update an existing message in doctor's message center (partial) write

**Patient lab results 6**

- `drchrono.patient_lab_results.create` Create patient lab results write
- `drchrono.patient_lab_results.get` Retrieve patient lab results by ID read
- `drchrono.patient_lab_results.list` Retrieve patient lab results read
- `drchrono.patient_lab_results.replace` Replace patient lab results by ID (full replace) write
- `drchrono.patient_lab_results.delete` Delete patient lab results by ID destructive
- `drchrono.patient_lab_results.update` Update patient lab results by ID (partial) write

**Patients summary 6**

- `drchrono.patients_summary.create` Create patients summary write
- `drchrono.patients_summary.get` Retrieve patients summary by ID read
- `drchrono.patients_summary.list` Retrieve patients summary read
- `drchrono.patients_summary.replace` Replace patients summary by ID (full replace) write
- `drchrono.patients_summary.delete` Delete patients summary by ID destructive
- `drchrono.patients_summary.update` Update patients summary by ID (partial) write

**Reminder profiles 6**

- `drchrono.reminder_profiles.create` Create reminder profile write
- `drchrono.reminder_profiles.get` Retrieve an existing reminder profile read
- `drchrono.reminder_profiles.list` Retrieve or search reminder profiles read
- `drchrono.reminder_profiles.replace` Update an existing reminder profile (full replace) write
- `drchrono.reminder_profiles.delete` Delete an existing reminder profile destructive
- `drchrono.reminder_profiles.update` Update an existing reminder profile (partial) write

**Sublabs 6**

- `drchrono.sublabs.create` Create sub-vendors - When you get orders, submit them via `/api/lab_orders`, such that doctors can see them in drchrono write
- `drchrono.sublabs.get` Retrieve an existing sub vendor read
- `drchrono.sublabs.list` Retrieve or search sub vendors read
- `drchrono.sublabs.replace` Update an existing sub vendor (full replace) write
- `drchrono.sublabs.delete` Delete an existing sub vendor destructive
- `drchrono.sublabs.update` Update an existing sub vendor (partial) write

**Allergies 5**

- `drchrono.allergies.create` Create patient allergy write
- `drchrono.allergies.get` Retrieve an existing patient allergy read
- `drchrono.allergies.list` Retrieve or search patient allergies read
- `drchrono.allergies.replace` Update an existing patient allergy (full replace) write
- `drchrono.allergies.update` Update an existing patient allergy (partial) write

**Clinical note field values 5**

- `drchrono.clinical_note_field_values.create` Create clinical note field value write
- `drchrono.clinical_note_field_values.get` Retrieve an existing clinical note field value read
- `drchrono.clinical_note_field_values.list` Retrieve or search clinical note field values read
- `drchrono.clinical_note_field_values.replace` Update an existing clinical note field value (full replace) write
- `drchrono.clinical_note_field_values.update` Update an existing clinical note field value (partial) write

**Comm logs 5**

- `drchrono.comm_logs.create` Create communication (phone call) logs write
- `drchrono.comm_logs.get` Retrieve an existing communication (phone call) logs read
- `drchrono.comm_logs.list` Retrieve or search communicatioin (phone call) logs read
- `drchrono.comm_logs.replace` Update an existing communication (phone call) logs (full replace) write
- `drchrono.comm_logs.update` Update an existing communication (phone call) logs (partial) write

**Consent forms 5**

- `drchrono.consent_forms.apply_to_appointment` Assign (apply) a consent form to appointment write
- `drchrono.consent_forms.get` Retrieve an existing patient consent form read
- `drchrono.consent_forms.list` Retrieve or search patient consent forms read
- `drchrono.consent_forms.unapply_from_appointment` Unassign (unapply) a consent form from appointment write
- `drchrono.consent_forms.update` Update an existing patient consent form (partial) write

**Custom appointment fields 5**

- `drchrono.custom_appointment_fields.create` Create custom appointment fields write
- `drchrono.custom_appointment_fields.get` Retrieve an existing custom appointment field read
- `drchrono.custom_appointment_fields.list` Retrieve or search custom appointment fields read
- `drchrono.custom_appointment_fields.replace` Update an existing custom appointment field (full replace) write
- `drchrono.custom_appointment_fields.update` Update an existing custom appointment field (partial) write

**Custom demographics 5**

- `drchrono.custom_demographics.create` Create custom demographics fields write
- `drchrono.custom_demographics.get` Retrieve an existing custom demographics field read
- `drchrono.custom_demographics.list` Retrieve or search custom demographics fields read
- `drchrono.custom_demographics.replace` Update an existing custom demographics field (full replace) write
- `drchrono.custom_demographics.update` Update an existing custom demographics field (partial) write

**Offices 5**

- `drchrono.offices.add_exam_room` Add an exam room to the office write
- `drchrono.offices.get` Retrieve an existing office read
- `drchrono.offices.list` Retrieve or search offices read
- `drchrono.offices.replace` Update an existing office (full replace) write
- `drchrono.offices.update` Update an existing office (partial) write

**Patient communications 5**

- `drchrono.patient_communications.create` Create patient communication for CQM write
- `drchrono.patient_communications.get` Retrieve an existing patient communication for CQM read
- `drchrono.patient_communications.list` Retrieve or search patient communications for CQM read
- `drchrono.patient_communications.replace` Update an existing patient communication for CQM (full replace) write
- `drchrono.patient_communications.update` Update an existing patient communication for CQM (partial) write

**Patient flag types 5**

- `drchrono.patient_flag_types.create` Create patient flag types write
- `drchrono.patient_flag_types.get` Retrieve an existing patient flag type read
- `drchrono.patient_flag_types.list` Retrieve or search patient flag types read
- `drchrono.patient_flag_types.replace` Update an existing patient flag type (full replace) write
- `drchrono.patient_flag_types.update` Update an existing patient flag type (partial) write

**Patient interventions 5**

- `drchrono.patient_interventions.create` Create patient intervention for CQM write
- `drchrono.patient_interventions.get` Retrieve an existing patient intervention for CQM read
- `drchrono.patient_interventions.list` Retrieve or search patient interventions for CQM read
- `drchrono.patient_interventions.replace` Update an existing patient intervention for CQM (full replace) write
- `drchrono.patient_interventions.update` Update an existing patient intervention for CQM (partial) write

**Patient messages 5**

- `drchrono.patient_messages.create` Create patient messages write
- `drchrono.patient_messages.get` Retrieve patient messages by ID read
- `drchrono.patient_messages.list` Retrieve patient messages read
- `drchrono.patient_messages.replace` Replace patient messages by ID (full replace) write
- `drchrono.patient_messages.update` Update patient messages by ID (partial) write

**Patient physical exams 5**

- `drchrono.patient_physical_exams.create` Create patient physical exam for CQM write
- `drchrono.patient_physical_exams.get` Retrieve an existing patient physical exam for CQM read
- `drchrono.patient_physical_exams.list` Retrieve or search patient physical exams for CQM read
- `drchrono.patient_physical_exams.replace` Update an existing patient physical exam for CQM (full replace) write
- `drchrono.patient_physical_exams.update` Update an existing patient physical exam for CQM (partial) write

**Patient risk assessments 5**

- `drchrono.patient_risk_assessments.create` Create patient risk assessments write
- `drchrono.patient_risk_assessments.get` Retrieve patient risk assessments by ID read
- `drchrono.patient_risk_assessments.list` Retrieve patient risk assessments read
- `drchrono.patient_risk_assessments.replace` Replace patient risk assessments by ID (full replace) write
- `drchrono.patient_risk_assessments.update` Update patient risk assessments by ID (partial) write

**Patient vaccine records 5**

- `drchrono.patient_vaccine_records.create` Create patient vaccine records write
- `drchrono.patient_vaccine_records.get` Retrieve an existing patient vaccine records read
- `drchrono.patient_vaccine_records.list` Retrieve or search patient vaccine records read
- `drchrono.patient_vaccine_records.replace` Update an existing patient vaccine records (full replace) write
- `drchrono.patient_vaccine_records.update` Update an existing patient vaccine records (partial) write

**Problems 5**

- `drchrono.problems.create` Create patient problems write
- `drchrono.problems.get` Retrieve an existing patient problems read
- `drchrono.problems.list` Retrieve or search patient problems read
- `drchrono.problems.replace` Update an existing patient problems (full replace) write
- `drchrono.problems.update` Update an existing patient problems (partial) write

Task categories **5** Task notes **5** Task statuses **5** Task templates **5** Tasks **5** Telehealth appointments **5** Amendments **4** Doctor work schedule **4** Documents **4** Lab documents **4** Office work schedule **4** Signed consent forms **4** Claim billing notes **3** Clinical note field types **3** Eobs **3** Inventory vaccines **3** Message threads **3** Patient payments **3** Telehealth appointment history **3** Users **3** Billing profiles **2** Care plans **2** Care team members **2** Clinical note field values list **2** Clinical note templates **2** Clinical notes **2** Clinical notes list **2** Custom insurance plan names **2** Custom vitals **2** Doctor options **2** Doctors **2** Eligibility checks **2** Eligibility checks list **2** Fee schedules **2** Fee schedules V2 **2** Iframe integration **2** Implantable devices **2** Insurances **2** Inventory categories **2** Lab orders summary **2** Line items list **2** Patient payment log **2** Patients list **2** Prescription messages **2** Prescription messages list **2** Procedures **2** Staff **2** Transactions **2** Transactions list **2** User groups **2** Audit log **1** Availability **1** Day sheet charges **1** Day sheet credits **1** Day sheet patient payments **1** Day sheet totals **1** Line item deletions **1** Patient authorizations **1** Recurring appointment instances **1**

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

Questions

## The DrChrono MCP server, answered.

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

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 315 DrChrono actions across patients, appointment profiles, appointment templates and appointments, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by DrChrono.

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

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

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

Only if its key allows it, and only with an explicit confirmation. 19 DrChrono actions are destructive, including delete an existing appointment or break, delete an existing sub vendor and delete an existing message in doctor's message center. 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 DrChrono API limit?**

actionlake paces every call to the limits in the DrChrono service file: 500 calls an hour per connection. Repeated reads are answered from cache (162 DrChrono actions can be), which never reaches DrChrono.

**What does a DrChrono action cost?**

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

The DrChrono API v4 - Hunt Valley (OpenAPI 3.0) at app.drchrono.com. It is built from DrChrono's documentation as read on 23 October 2026. 315 actions in 89 areas, each one in the signed service file (version 1.0.0).

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

Yes. ask joins DrChrono to HaloPSA or NetSuite on the same customer and returns the answer rather than every row. DrChrono maps crm.contact, which 192 other connectors also map.

**Does actionlake keep my DrChrono 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 DrChrono 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 DrChrono

Joins with, on shared entities

- [ServiceTitan 5](https://actionlake.com/connectors/servicetitan)
- [Healthie 4](https://actionlake.com/connectors/healthie)
- [ScalePad 4](https://actionlake.com/connectors/scalepad)
- [SuperOps RMM+PSA 4](https://actionlake.com/connectors/superops-rmm-psa)
- [Fergus 4](https://actionlake.com/connectors/fergus)
- [HaloPSA 3](https://actionlake.com/connectors/halopsa)

Browse

- [All Work & projects connectors](https://actionlake.com/connectors/category/work-and-projects)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

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

## Give your agent DrChrono today.

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