# Open Dental MCP connector

Connect Open Dental to Elaichi and Claude, ChatGPT, Cursor, or any MCP client can check appointments, open slots, patient balances, agings, adjustments, and allergies, each person signed in as themselves with every call logged.

Source: https://elaichi.ai/connectors/opendental/

## Facts

| | |
| --- | --- |
| Application | Open Dental |
| Category | Healthcare |
| AI tools | 390 |
| Authentication | Connects with an API key |
| Bring your own OAuth app | No |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Open Dental is connected

- Which patients on the ASAP list could take Thursday's 2 pm opening?
- Show patient balances over 90 days past due before statements go out.
- List this patient's allergies and add the penicillin reaction from intake.

## Connect Open Dental in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Open Dental.
2. Optionally set Share with, then press Connect.
3. Paste an Open Dental API key. One person generates a token in Open Dental and pastes it once. Everyone else works through Share with, and never sees it.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Open Dental tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Open Dental MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Open Dental MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Open Dental MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Open Dental to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Every scope the client asks for starts ticked except "Delete data and remove access", which you tick yourself. Calling a Open Dental tool needs "Run your connected tools". Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Open Dental through Elaichi

### Find the next open slot for a patient

Front desk. Ask which openings exist on Thursday afternoon and book the appointment while the patient is still on the phone.

### Fill a cancellation from the ASAP list

Scheduling. When a slot opens, pull the ASAP list in Open Dental and see who could come in sooner, then move their appointment.

### See who is overdue before statements go out

Billing. Pull the agings and patient balances for the month, then post an adjustment where a write-off or courtesy discount was agreed.

### Keep the allergy list current after intake

Clinical. Record a new allergy from the intake form, or update one that changed, so the chart is right before the provider walks in.

### Check allergies before a recall visit

Hygiene. Ask for a patient's allergies in the morning huddle without opening the chart, and flag anything that matters for today's procedure.

### Review online bookings each morning

Office manager. List the appointments patients booked through web scheduling overnight and the slots still offered, then adjust what is open.

## Elaichi vs Zapier MCP vs Composio for Open Dental

All three can connect Open Dental to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over Open Dental tools | Allow or restrict single Open Dental tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per Open Dental call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect Open Dental to Claude?

Connect Open Dental in Elaichi by pasting your Open Dental API key, which takes about a minute. There is no OAuth application to register and no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Sign in to Elaichi as yourself and Open Dental is available in your chats.

### Does Open Dental work with ChatGPT and Cursor as well as Claude?

Yes. Once Open Dental is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi Agent. You connect Open Dental once and every client you use picks it up.

### What can an AI agent actually do with my Open Dental data?

With Open Dental connected, an agent can list appointments, open slots, the ASAP list, web scheduling slots and bookings, patient balances, agings, adjustments, and allergies. It can also book or update an appointment, post or update an adjustment, and add, update, or remove an allergy. Short, concrete asks work best, such as who is on the ASAP list for Thursday afternoon.

### Does connecting Open Dental give the AI access to every patient and chart?

No more than the person asking already has. Every Open Dental call runs through the connection that person is allowed to use, under their own Elaichi sign-in, and Elaichi can narrow that access by team or by action. Elaichi never widens what someone could already see or change in Open Dental.

### Can my team share one Open Dental connection?

Yes. One person connects Open Dental with the practice's API key and shares the connection with a team in Elaichi, and nobody else ever handles the key. Each teammate still signs in to Elaichi as themselves, so the audit log names the person who booked, adjusted, or updated each record in Open Dental.

### Can I stop an agent from deleting or changing things in Open Dental?

Yes. Restrictions in Elaichi work per action, so you can allow reading Open Dental appointments and balances while blocking adjustments, appointment changes, or allergy deletions. A restricted action is left out of the AI client's tool list entirely, so it cannot be called no matter how the prompt is worded.

### What happens to an Open Dental connection when someone leaves?

Offboarding that person in Elaichi ends their access to Open Dental at once, across every client they used. A shared Open Dental connection keeps working for everyone else on the team. If you ever want Open Dental gone entirely, disconnecting it once in Elaichi removes it from Claude, ChatGPT, Cursor, and every other client.

### Does the Open Dental MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Open Dental is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

### Is Elaichi an alternative to Zapier MCP for Open Dental?

Yes. Both let Claude, ChatGPT or Cursor use Open Dental. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every Open Dental call.

### How is Elaichi different from Composio for Open Dental?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to Open Dental: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 390 Open Dental tools

Every tool below is callable through https://api.elaichi.ai/mcp once Open Dental is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Open Dental account module agings** (List). Get a patient's family aging balances (0-30, 31-60, 61-90, over 90 days, total, insurance estimate), as shown in the Account Module aging grid. Returns: Bal_0_30, Bal_31_60, Bal_61_90, BalOver90, Total, InsEst, and more. Required: PatNum.
- **List all Open Dental account module patient balances** (List). Get the patient portion for a patient's family, as shown in the Account Module Select Patient grid. Returns: PatNum, Name, Balance. Required: PatNum.
- **List all Open Dental account module service date views** (List). List every charge and credit on a patient's account (optionally the whole family), as shown in the Service Date View. Returns: ObjectType, PrimaryKey, Type, ServiceDate, TransDate, Patient, and more. Required: PatNum.
- **List all Open Dental adjustments** (List). List Open Dental Adjustments. Filter by AdjType, ProcNum. Returns: AdjNum, AdjDate, AdjAmt, PatNum, AdjType, ProvNum, and more. Required: PatNum.
- **Create a Open Dental adjustment** (Create). Create an Open Dental Adjustment. Returns: AdjNum, AdjDate, AdjAmt, PatNum, AdjType, ProvNum, and more. Required: PatNum, AdjType, AdjAmt, AdjDate.
- **Update a Open Dental adjustment by ID** (Update). Update an Open Dental Adjustment by id. Only the fields you send change. A discount plan adjustment cannot be changed to another AdjType. Returns: AdjNum, AdjDate, AdjAmt, PatNum, AdjType, ProvNum, and more. Required: id.
- **Get single Open Dental allergy by ID** (Get). Get a single Open Dental Allergy (patient allergy) by id. Returns: AllergyNum, AllergyDefNum, PatNum, Reaction, StatusIsActive, DateTStamp, and more. Required: id.
- **List all Open Dental allergies** (List). List Open Dental Allergies (patient allergy). Filter by PatNum. Returns: AllergyNum, AllergyDefNum, PatNum, Reaction, StatusIsActive, DateTStamp, and more.
- **Create a Open Dental allergy** (Create). Create an Open Dental Allergy (patient allergy). Returns: AllergyNum, AllergyDefNum, PatNum, Reaction, StatusIsActive, DateTStamp, and more. Required: PatNum.
- **Update a Open Dental allergy by ID** (Update). Update an Open Dental Allergy (patient allergy) by id. Only the fields you send change. Returns: AllergyNum, AllergyDefNum, PatNum, Reaction, StatusIsActive, DateTStamp, and more. Required: id.
- **Delete a Open Dental allergy by ID** (Delete). Delete an Open Dental Allergy (patient allergy) by id. Returns no content. Required: id.
- **Get single Open Dental allergy def by ID** (Get). Get a single Open Dental AllergyDef (allergy definition) by id. Returns: AllergyDefNum, IsHidden, DateTStamp, SnomedType, MedicationNum, UniiCode. Required: id.
- **List all Open Dental allergy defs** (List). List Open Dental AllergyDefs (allergy definition). Returns: AllergyDefNum, IsHidden, DateTStamp, SnomedType, MedicationNum, UniiCode.
- **Create a Open Dental allergy def** (Create). Create an Open Dental AllergyDef (allergy definition). Returns: AllergyDefNum, IsHidden, DateTStamp, SnomedType, MedicationNum, UniiCode. Required: Description.
- **Update a Open Dental allergy def by ID** (Update). Update an Open Dental AllergyDef (allergy definition) by id. Only the fields you send change. Returns: AllergyDefNum, IsHidden, DateTStamp, SnomedType, MedicationNum, UniiCode. Required: id.
- **Get single Open Dental appointment by ID** (Get). Get a single Open Dental Appointment by id. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more. Required: id.
- **List all Open Dental appointments** (List). List Open Dental Appointments. Filter by PatNum, AptStatus, Op, date, dateStart, dateEnd, ClinicNum, and more. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more.
- **Create a Open Dental appointment** (Create). Create an Open Dental Appointment. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more. Required: PatNum, Op, AptDateTime.
- **Update a Open Dental appointment by ID** (Update). Update an Open Dental Appointment by id. Only the fields you send change. It is common to only set one or two fields. Note will overwrite any existing note. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more. Required: id.
- **List all Open Dental asap appointments** (List). List appointments on the ASAP list, meaning Priority is ASAP instead of Normal. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more.
- **List all Open Dental appointment slots** (List). Find open appointment slots from provider and operatory schedules, the way Open Dental's own appointment search does. Pass ProvNum and OpNum for the most useful results. Returns: DateTimeStart, DateTimeEnd, ProvNum, OpNum.
- **List all Open Dental web sched appointment slots** (List). Find open slots using the Web Sched logic for new or existing patients. Rarely used; the office needs a Web Sched eService and Web Sched setup. Returns: DateTimeStart, DateTimeEnd, ProvNum, OpNum.
- **List all Open Dental web sched appointments** (List). List appointments and flag those made through Web Sched in eServiceLogType (Recall, NewPat, ExistingPat, ASAP, or None). Rarely used; appointments list is usually enough. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, Op, and more.
- **Create a Open Dental web sched appointment** (Create). Create an appointment the way Web Sched does, in a slot found with the web_sched_appointment_slots list method. Rarely used; the office needs Web Sched eServices. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more. Required: PatNum, DateTimeStart, DateTimeEnd, ProvNum, OpNum, defNumApptType.
- **Create a Open Dental planned appointment** (Create). Create a planned appointment for a patient (shown in the Planned Appts tab of the Chart Module). Attach procedures with AppointmentTypeNum or procNums. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more. Required: PatNum.
- **Create a Open Dental scheduled planned appointment** (Create). Schedule a new appointment from an existing planned appointment. The planned appointment is kept. Use appointment_slots list to find a free slot first. Returns: AptNum, PatNum, AptStatus, Pattern, Confirmed, TimeLocked, and more. Required: AptNum, AptDateTime, ProvNum, Op.
- **Open Dental appointment breaks bulk update** (Update). Break a Scheduled appointment, optionally sending it to the Unscheduled list and adding a missed or cancelled procedure. May create a commlog entry. The Open Dental docs list no response body. Required: AptNum, sendToUnscheduledList.
- **Open Dental appointment notes bulk update** (Update). Append a line of text to an appointment's note. The Open Dental docs list no response body. Required: AptNum, Note.
- **Open Dental appointment confirmations bulk update** (Update). Set the Confirmed status of an appointment, using either confirmVal or a defNum, not both. The Open Dental docs list no response body. Required: AptNum.
- **Get single Open Dental appointment type by ID** (Get). Get a single Open Dental AppointmentType by id. Returns: AppointmentTypeNum, AppointmentTypeName, ItemOrder, IsHidden, Pattern, CodeStr, and more. Required: id.
- **List all Open Dental appointment types** (List). List Open Dental AppointmentTypes. Returns: AppointmentTypeNum, AppointmentTypeName, ItemOrder, IsHidden, Pattern, CodeStr, and more.
- **Create a Open Dental appointment type** (Create). Create an Open Dental AppointmentType. Returns: AppointmentTypeNum, AppointmentTypeName, ItemOrder, IsHidden, Pattern, CodeStr, and more. Required: AppointmentTypeName.
- **Update a Open Dental appointment type by ID** (Update). Update an Open Dental AppointmentType by id. Only the fields you send change. Returns: AppointmentTypeNum, AppointmentTypeName, ItemOrder, IsHidden, Pattern, CodeStr, and more. Required: id.
- **Delete a Open Dental appointment type by ID** (Delete). Delete an Open Dental AppointmentType by id. Cannot delete appointmenttypes that are in use on appointments or Web Sched New Pat Appt Types definitions. Returns no content. Required: id.
- **Get single Open Dental appt field def by ID** (Get). Get a single Open Dental ApptFieldDef (custom appointment field definition) by id. Returns: ApptFieldDefNum, FieldName, FieldType, PickList, ItemOrder. Required: id.
- **List all Open Dental appt field defs** (List). List Open Dental ApptFieldDefs (custom appointment field definition). Returns: ApptFieldDefNum, FieldName, FieldType, PickList, ItemOrder.
- **Create a Open Dental appt field def** (Create). Create an Open Dental ApptFieldDef (custom appointment field definition). The API supports creating both Text type and PickList type ApptFieldDefs. Duplicate ApptFieldDefs are not allowed. Returns: ApptFieldDefNum, FieldName, FieldType, PickList, ItemOrder. Required: FieldName.
- **Update a Open Dental appt field def by ID** (Update). Update an Open Dental ApptFieldDef (custom appointment field definition) by id. Only the fields you send change. Returns: ApptFieldDefNum, FieldName, FieldType, PickList, ItemOrder. Required: id.
- **Get single Open Dental appt field by ID** (Get). Get a single Open Dental ApptField (custom appointment field value) by id. Returns: ApptFieldNum, AptNum, FieldName, FieldValue. Required: id.
- **List all Open Dental appt fields** (List). List Open Dental ApptFields (custom appointment field value). Filter by AptNum, FieldName. Returns: ApptFieldNum, AptNum, FieldName, FieldValue.
- **Create a Open Dental appt field** (Create). Create an Open Dental ApptField (custom appointment field value). Returns: ApptFieldNum, AptNum, FieldName, FieldValue. Required: AptNum, FieldName, FieldValue.
- **Open Dental appt fields bulk update** (Update). Update the value of an existing ApptField, found by AptNum and FieldName in the body instead of by id (the form older Open Dental versions use). Returns: ApptFieldNum, AptNum, FieldName, FieldValue. Required: FieldValue.
- **Update a Open Dental appt field by ID** (Update). Update the value of an existing ApptField (a custom appointment field) by its ApptFieldNum in the URL. Returns: ApptFieldNum, AptNum, FieldName, FieldValue. Required: id, FieldValue.
- **Delete a Open Dental appt field by ID** (Delete). Delete an Open Dental ApptField (custom appointment field value) by id. Returns no content. Required: id.
- **Get single Open Dental asap comm by ID** (Get). Get a single Open Dental AsapComm (ASAP text message record) by id. Returns: AsapCommNum, FKey, FKeyType, ScheduleNum, PatNum, ClinicNum, and more. Required: id.
- **List all Open Dental asap comms** (List). List Open Dental AsapComms (ASAP text message record). Filter by ClinicNum, date, dateStart, dateEnd. Returns: AsapCommNum, FKey, FKeyType, ScheduleNum, PatNum, ClinicNum, and more.
- **Create a Open Dental asap comm** (Create). Create an Open Dental AsapComm (ASAP text message record). Rarely used. Dental office must be subscribed to the following eServices: WebSched ASAP and Integrated Texting Feature. Returns: AsapCommNum, FKey, FKeyType, ScheduleNum, PatNum, ClinicNum, and more. Required: op, dateTimeStart.
- **List all Open Dental auto note controls** (List). List Open Dental AutoNoteControls (prompt fields inside an auto note). Returns: AutoNoteControlNum, Descript, ControlType, ControlLabel, ControlOptions.
- **Create a Open Dental auto note control** (Create). Create an Open Dental AutoNoteControl (prompt fields inside an auto note). Returns: AutoNoteControlNum, Descript, ControlType, ControlLabel, ControlOptions. Required: Descript, ControlType, ControlLabel.
- **Update a Open Dental auto note control by ID** (Update). Update an Open Dental AutoNoteControl (prompt fields inside an auto note) by id. Only the fields you send change. The Open Dental docs list no response body. Required: id.
- ...and 340 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
