# eClinicalWorks MCP connector

The eClinicalWorks connector brings patients, encounters, conditions, medications and practitioners into Claude, ChatGPT, Cursor and the Elaichi Agent, so each person can ask questions of the practice's records under their own eClinicalWorks access.

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

## Facts

| | |
| --- | --- |
| Application | eClinicalWorks |
| Category | Healthcare |
| AI tools | 45 |
| Authentication | Connects over OAuth |
| Bring your own OAuth app | Yes |
| 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 eClinicalWorks is connected

- List the open medication requests for patient Maria Lopez.
- Which practitioners are assigned to the Riverside location?
- Summarize this patient's allergies and conditions before the 2pm visit.

## Connect eClinicalWorks in Elaichi

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

1. Open Connections, choose Add connection, and pick eClinicalWorks.
2. Optionally set Share with, then press Connect.
3. Supply your own eClinicalWorks app, then approve. eClinicalWorks needs an OAuth app you register yourself, so bring its client ID and secret. One person does this once for the organization.

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

## eClinicalWorks 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.

## eClinicalWorks 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.

## eClinicalWorks 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 eClinicalWorks 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 eClinicalWorks 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 eClinicalWorks through Elaichi

### Pull up a patient before they arrive

Front desk. Ask for a patient's record, the related persons on file and the location of their visit, so a check-in question is answered before the phone call ends.

### See allergies and medications before a visit

Clinical. Ask what a patient is allergic to and which medication requests are open, and get a plain summary drawn from eClinicalWorks rather than clicking through tabs.

### Review conditions across recent encounters

Care coordination. List a patient's conditions alongside their recent encounters to prepare a handoff note or a follow-up call in a few minutes.

### Match an encounter to the right practitioner

Billing. Look up an encounter, the practitioner who handled it and the organization it belongs to before a claim goes out the door.

### Check immunization records for a group

Quality. List immunizations and conditions across patients to answer a reporting question without exporting a spreadsheet from eClinicalWorks.

### Know who works where

Practice management. List practitioners, their roles and the locations they cover when planning coverage or bringing on a new clinician.

## Elaichi vs Zapier MCP vs Composio for eClinicalWorks

All three can connect eClinicalWorks 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 eClinicalWorks tools | Allow or restrict single eClinicalWorks 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 eClinicalWorks 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 eClinicalWorks to Claude?

Connect eClinicalWorks in Elaichi first, then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. eClinicalWorks asks the practice to register an OAuth application on its side, so one administrator brings that client ID and secret into Elaichi once. After that, every person signs in with their own eClinicalWorks login and nobody else touches a secret.

### Does eClinicalWorks work with ChatGPT and Cursor as well as Claude?

Yes. Once eClinicalWorks 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 eClinicalWorks once and every client sees it.

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

An agent can look up patients, practitioners and their roles, organizations and locations, related persons, allergies, conditions, encounters, immunizations, medications, medication requests and medication administrations in eClinicalWorks, and answer questions about them in plain language. It reads these records; it does not edit charts. Short, concrete asks such as "list this patient's open medication requests" work better than long paragraphs.

### Does connecting eClinicalWorks give the AI access to every patient chart?

No. Each person signs in to eClinicalWorks as themselves, so an agent sees only the patients, encounters and practice records that person could already open in eClinicalWorks. Elaichi can narrow that further with roles and restrictions, and it never widens it beyond what eClinicalWorks allows that person.

### Can my team share one eClinicalWorks connection?

Yes. One administrator connects eClinicalWorks in Elaichi and shares it with a team, and nobody else handles the client ID or secret. Each teammate still signs in to eClinicalWorks as themselves, so the audit log names the actual person behind every patient lookup.

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

Yes. Restrictions in Elaichi work per action, and a restricted action is left out of the AI client's list entirely, so it cannot be called no matter what the prompt says. The eClinicalWorks connector today only reads records such as patients, encounters and medication requests, and you can narrow even those reads to the parts a team needs.

### What happens to an eClinicalWorks connection when someone leaves?

Offboarding a person in Elaichi ends their access to eClinicalWorks through every AI client at once. A shared eClinicalWorks connection keeps working for everyone else on the team. If you disconnect eClinicalWorks once in Elaichi, it is removed from Claude, ChatGPT, Cursor and every other client at the same time.

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

Yes. eClinicalWorks 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 eClinicalWorks?

Yes. Both let Claude, ChatGPT or Cursor use eClinicalWorks. 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 eClinicalWorks call.

### How is Elaichi different from Composio for eClinicalWorks?

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 eClinicalWorks: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 45 eClinicalWorks tools

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

- **Get single eClinicalWorks patient by ID** (Get). Get a single Patient from an eClinicalWorks practice by id. Returns the FHIR R4 Patient resource. Returns: resourceType, id, identifier, active, name, telecom, gender, and more. Required: id.
- **List all eClinicalWorks patients** (List). Search Patients in an eClinicalWorks practice. Returns matching FHIR R4 Patient resources. Returns: resourceType, id, identifier, active, name, telecom, gender, and more. No parameters are required.
- **Get single eClinicalWorks practitioner by ID** (Get). Get a single Practitioner from an eClinicalWorks practice by id. Returns the FHIR R4 Practitioner resource. Returns: resourceType, id, identifier, active, name, telecom, address, and more. Required: id.
- **List all eClinicalWorks practitioners** (List). Search Practitioners in an eClinicalWorks practice. Returns matching FHIR R4 Practitioner resources. Returns: resourceType, id, identifier, active, name, telecom, address, and more. No parameters are required.
- **Get single eClinicalWorks practitioner role by ID** (Get). Get a single PractitionerRole from an eClinicalWorks practice by id. Returns the FHIR R4 PractitionerRole resource. Returns: resourceType, id, identifier, active, period, practitioner, organization, and more. Required: id.
- **List all eClinicalWorks practitioner roles** (List). Search PractitionerRoles in an eClinicalWorks practice. Returns matching FHIR R4 PractitionerRole resources. Returns: resourceType, id, identifier, active, period, practitioner, organization, and more. No parameters are required.
- **Get single eClinicalWorks organization by ID** (Get). Get a single Organization from an eClinicalWorks practice by id. Returns the FHIR R4 Organization resource. Returns: resourceType, id, identifier, active, type, name, alias, and more. Required: id.
- **List all eClinicalWorks organizations** (List). Search Organizations in an eClinicalWorks practice. Returns matching FHIR R4 Organization resources. Includes EMR, lab, payor and pharmacy organizations. Returns: resourceType, id, identifier, active, type, name, alias, and more. No parameters are required.
- **Get single eClinicalWorks location by ID** (Get). Get a single Location from an eClinicalWorks practice by id. Returns the FHIR R4 Location resource. Returns: resourceType, id, identifier, status, name, alias, description, and more. Required: id.
- **List all eClinicalWorks locations** (List). Search Locations in an eClinicalWorks practice. Returns matching FHIR R4 Location resources. Returns: resourceType, id, identifier, status, name, alias, description, and more. No parameters are required.
- **Get single eClinicalWorks related person by ID** (Get). Get a single RelatedPerson from an eClinicalWorks practice by id. Returns the FHIR R4 RelatedPerson resource. Returns: resourceType, id, identifier, active, patient, relationship, name, and more. Required: id.
- **List all eClinicalWorks related persons** (List). Search RelatedPersons in an eClinicalWorks practice. Returns matching FHIR R4 RelatedPerson resources. Returns: resourceType, id, identifier, active, patient, relationship, name, and more. Required: patient.
- **Get single eClinicalWorks allergy intolerance by ID** (Get). Get a single AllergyIntolerance from an eClinicalWorks practice by id. Returns the FHIR R4 AllergyIntolerance resource. Returns: resourceType, id, identifier, clinicalStatus, verificationStatus, type, category, and more. Required: id.
- **List all eClinicalWorks allergy intolerances** (List). Search AllergyIntolerances in an eClinicalWorks practice. Returns matching FHIR R4 AllergyIntolerance resources. Returns: resourceType, id, identifier, clinicalStatus, verificationStatus, type, category, and more. Required: patient.
- **Get single eClinicalWorks condition by ID** (Get). Get a single Condition from an eClinicalWorks practice by id. Returns the FHIR R4 Condition resource. Returns: resourceType, id, identifier, clinicalStatus, verificationStatus, category, severity, and more. Required: id.
- **List all eClinicalWorks conditions** (List). Search Conditions in an eClinicalWorks practice. Returns matching FHIR R4 Condition resources. Filter by category for problems, encounter diagnoses or health concerns. Returns: resourceType, id, identifier, clinicalStatus, verificationStatus, category, severity, and more. Required: patient.
- **Get single eClinicalWorks encounter by ID** (Get). Get a single Encounter from an eClinicalWorks practice by id. Returns the FHIR R4 Encounter resource. Returns: resourceType, id, identifier, status, class, type, serviceType, and more. Required: id.
- **List all eClinicalWorks encounters** (List). Search Encounters in an eClinicalWorks practice. Returns matching FHIR R4 Encounter resources. Returns: resourceType, id, identifier, status, class, type, serviceType, and more. Required: patient.
- **Get single eClinicalWorks immunization by ID** (Get). Get a single Immunization from an eClinicalWorks practice by id. Returns the FHIR R4 Immunization resource. Returns: resourceType, id, identifier, status, statusReason, vaccineCode, patient, and more. Required: id.
- **List all eClinicalWorks immunizations** (List). Search Immunizations in an eClinicalWorks practice. Returns matching FHIR R4 Immunization resources. Returns: resourceType, id, identifier, status, statusReason, vaccineCode, patient, and more. Required: patient.
- **Get single eClinicalWorks medication by ID** (Get). Get a single Medication from an eClinicalWorks practice by id. Returns the FHIR R4 Medication resource. Returns: resourceType, id, identifier, code, status, form, amount, and more. Medication ids come from the medicationReference of a MedicationRequest or MedicationAdministration. Required: id.
- **Get single eClinicalWorks medication request by ID** (Get). Get a single MedicationRequest from an eClinicalWorks practice by id. Returns the FHIR R4 MedicationRequest resource. Returns: resourceType, id, identifier, status, intent, category, priority, and more. Required: id.
- **List all eClinicalWorks medication requests** (List). Search MedicationRequests (orders) in an eClinicalWorks practice. Returns matching FHIR R4 MedicationRequest resources. Returns: resourceType, id, identifier, status, intent, category, priority, and more. Required: patient.
- **Get single eClinicalWorks medication administration by ID** (Get). Get a single MedicationAdministration from an eClinicalWorks practice by id. Returns the FHIR R4 MedicationAdministration resource. Returns: resourceType, id, identifier, status, category, medicationCodeableConcept, medicationReference, and more. Required: id.
- **List all eClinicalWorks medication administrations** (List). Search MedicationAdministrations in an eClinicalWorks practice. Returns matching FHIR R4 MedicationAdministration resources. Returns: resourceType, id, identifier, status, category, medicationCodeableConcept, medicationReference, and more. Required: patient.
- **Get single eClinicalWorks observation by ID** (Get). Get a single Observation from an eClinicalWorks practice by id. Returns the FHIR R4 Observation resource. Returns: resourceType, id, identifier, basedOn, status, category, code, and more. Required: id.
- **List all eClinicalWorks observations** (List). Search Observations in an eClinicalWorks practice. Returns matching FHIR R4 Observation resources. Filter by category for vitals, labs or social history. Returns: resourceType, id, identifier, basedOn, status, category, code, and more. Required: patient.
- **Get single eClinicalWorks procedure by ID** (Get). Get a single Procedure from an eClinicalWorks practice by id. Returns the FHIR R4 Procedure resource. Returns: resourceType, id, identifier, basedOn, status, statusReason, category, and more. Required: id.
- **List all eClinicalWorks procedures** (List). Search Procedures (orders) in an eClinicalWorks practice. Returns matching FHIR R4 Procedure resources. Returns: resourceType, id, identifier, basedOn, status, statusReason, category, and more. Required: patient.
- **Get single eClinicalWorks diagnostic report by ID** (Get). Get a single DiagnosticReport from an eClinicalWorks practice by id. Returns the FHIR R4 DiagnosticReport resource. Returns: resourceType, id, identifier, basedOn, status, category, code, and more. Required: id.
- **List all eClinicalWorks diagnostic reports** (List). Search DiagnosticReports in an eClinicalWorks practice. Returns matching FHIR R4 DiagnosticReport resources. Includes lab results and notes. Returns: resourceType, id, identifier, basedOn, status, category, code, and more. Required: patient.
- **Get single eClinicalWorks document reference by ID** (Get). Get a single DocumentReference from an eClinicalWorks practice by id. Returns the FHIR R4 DocumentReference resource. Returns: resourceType, id, identifier, status, docStatus, type, category, and more. Required: id.
- **List all eClinicalWorks document references** (List). Search DocumentReferences in an eClinicalWorks practice. Returns matching FHIR R4 DocumentReference resources. Includes clinical notes and C-CDAs. Returns: resourceType, id, identifier, status, docStatus, type, category, and more. Required: patient.
- **Get single eClinicalWorks binary by ID** (Get). Get a single Binary from an eClinicalWorks practice by id. Returns the FHIR R4 Binary resource. Returns: resourceType, id, contentType, securityContext, data, and more. Binary carries a C-CDA clinical document as base64 content; the id comes from a DocumentReference content attachment. Required: id.
- **Get single eClinicalWorks care plan by ID** (Get). Get a single CarePlan from an eClinicalWorks practice by id. Returns the FHIR R4 CarePlan resource. Returns: resourceType, id, identifier, status, intent, category, title, and more. Required: id.
- **List all eClinicalWorks care plans** (List). Search CarePlans in an eClinicalWorks practice. Returns matching FHIR R4 CarePlan resources. Returns: resourceType, id, identifier, status, intent, category, title, and more. Required: patient.
- **Get single eClinicalWorks care team by ID** (Get). Get a single CareTeam from an eClinicalWorks practice by id. Returns the FHIR R4 CareTeam resource. Returns: resourceType, id, identifier, status, category, name, subject, and more. Required: id.
- **List all eClinicalWorks care teams** (List). Search CareTeams in an eClinicalWorks practice. Returns matching FHIR R4 CareTeam resources. Returns: resourceType, id, identifier, status, category, name, subject, and more. Required: patient.
- **Get single eClinicalWorks goal by ID** (Get). Get a single Goal from an eClinicalWorks practice by id. Returns the FHIR R4 Goal resource. Returns: resourceType, id, identifier, lifecycleStatus, achievementStatus, category, description, and more. Required: id.
- **List all eClinicalWorks goals** (List). Search Goals in an eClinicalWorks practice. Returns matching FHIR R4 Goal resources. Returns: resourceType, id, identifier, lifecycleStatus, achievementStatus, category, description, and more. Required: patient.
- **Get single eClinicalWorks device by ID** (Get). Get a single Device from an eClinicalWorks practice by id. Returns the FHIR R4 Device resource. Returns: resourceType, id, identifier, udiCarrier, status, type, deviceName, and more. Required: id.
- **List all eClinicalWorks devices** (List). Search Devices (implants) in an eClinicalWorks practice. Returns matching FHIR R4 Device resources. Returns: resourceType, id, identifier, udiCarrier, status, type, deviceName, and more. Required: patient.
- **Get single eClinicalWorks coverage by ID** (Get). Get a single Coverage from an eClinicalWorks practice by id. Returns the FHIR R4 Coverage resource. Returns: resourceType, id, identifier, status, type, policyHolder, subscriber, and more. Required: id.
- **List all eClinicalWorks coverages** (List). Search Coverages in an eClinicalWorks practice. Returns matching FHIR R4 Coverage resources. Returns: resourceType, id, identifier, status, type, policyHolder, subscriber, and more. Required: patient.
- **Get single eClinicalWorks provenance by ID** (Get). Get a single Provenance from an eClinicalWorks practice by id. Returns the FHIR R4 Provenance resource. Returns: resourceType, id, target, occurredDateTime, occurredPeriod, recorded, policy, and more. Provenance ids come from Provenance references on other resources. Required: id.
