# ElasticEmail MCP connector

Connect ElasticEmail to Elaichi and Claude, ChatGPT, Cursor, or any MCP client can list, create, pause and update email campaigns, import and clean up contacts, and verify sending domains, with every action logged under the person who asked.

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

## Facts

| | |
| --- | --- |
| Application | ElasticEmail |
| Category | Email |
| AI tools | 110 |
| 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 ElasticEmail is connected

- Pause the spring promo campaign and tell me what is scheduled next
- Import these 40 webinar signups as contacts tagged webinar-may
- Which of our sending domains are still unverified?

## Connect ElasticEmail in Elaichi

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

1. Open Connections, choose Add connection, and pick ElasticEmail.
2. Optionally set Share with, then press Connect.
3. Paste an ElasticEmail API key. One person generates a token in ElasticEmail 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 ElasticEmail tools are exposed, rename them, or freeze arguments before anyone points a client at it.

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

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

## ElasticEmail 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 ElasticEmail 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

Only Read is granted by default, which is not enough to call a ElasticEmail tool. 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. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with ElasticEmail through Elaichi

### Set up the next campaign from a brief

Marketing. Describe the send in plain words and have the campaign created in ElasticEmail, then check the details before anything goes out. Pause it from the same place if a date slips.

### Load event signups into ElasticEmail

Sales. Paste the signups from a webinar or trade show and import them as ElasticEmail contacts in one go, ready for the follow-up sequence.

### Fix a contact record after a complaint

Support. When someone writes in asking to change their details or stop receiving mail, look up their ElasticEmail contact and update or remove it while they are still on the line.

### Start an automation for a new segment

Lifecycle. Trigger an ElasticEmail automation for the contacts who just qualified, without opening the dashboard or waiting for someone with admin access.

### Check sending domains before a launch

IT. List every domain connected to ElasticEmail, see which ones are still unverified or restricted, and set the right one as the default before marketing hits send.

### Export and prune the contact list

Operations. Pull an export of ElasticEmail contacts, check how far it has got, and remove stale or duplicate records in bulk once the review is done.

## Elaichi vs Zapier MCP vs Composio for ElasticEmail

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

Two steps. In Elaichi, choose ElasticEmail and paste in your ElasticEmail API key, which is the only sign-in step, so there is no OAuth application to register and no client ID or secret to generate. Then in Claude open Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Claude asks you to sign in to Elaichi as yourself and ElasticEmail is available from then on.

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

Yes. Once ElasticEmail 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 ElasticEmail once and every client you use picks it up.

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

It can list your ElasticEmail campaigns, create or update one, pause it, or trigger an automation. It can look up, add, change and remove contacts, import a batch or export the list, and it can check which sending domains are verified and set the default. Short, concrete asks such as "pause the May newsletter" work better than long paragraphs.

### Does connecting ElasticEmail give the AI access to every campaign and contact?

The AI gets exactly what the person who signed in to ElasticEmail can already see, because every call runs under that person's own key and account. Elaichi can narrow that further, for example to reading campaigns but not deleting contacts, and it can never widen it beyond what ElasticEmail itself allows.

### Can my team share one ElasticEmail connection?

Yes. One person connects ElasticEmail in Elaichi and shares it with a team, and nobody else ever sees or handles the API key. Each teammate still signs in to Elaichi as themselves, so the audit log shows who created a campaign or imported a list, not just the shared account.

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

Yes. Restrictions in Elaichi apply per action, so you can allow reading ElasticEmail campaigns and contacts while blocking deletes, bulk removals or domain changes. A restricted action is never advertised to Claude, ChatGPT or Cursor at all, so no prompt, however worded, can reach it.

### What happens to a ElasticEmail connection when someone leaves?

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

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

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

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

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

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

## All 110 ElasticEmail tools

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

- **List all ElasticEmail campaigns** (List). Load Campaigns in Elastic Email. Returns a list all of your campaigns. Limited to 1000 results. Requires API key access level: ViewCampaigns Returns: Content, Name, Status, Recipients, ExcludedRecipients, Options. Required: none.

- **Create a ElasticEmail campaign** (Create). Add Campaign in Elastic Email. Add a campaign for processing. Requires API key access level: ModifyCampaigns Returns: Content, Name, Status, Recipients, ExcludedRecipients, Options. Required: Name, Recipients.

- **Get single ElasticEmail campaign by ID** (Get). Load Campaign in Elastic Email. Returns the specified campaign details. Requires API key access level: ViewCampaigns id is the campaign name. Returns: Content, Name, Status, Recipients, ExcludedRecipients, Options. Required: id.

- **Update a ElasticEmail campaign by ID** (Update). Update Campaign in Elastic Email. Updates a previously added campaign. Only Active and Paused campaigns can be updated. Requires API key access level: ModifyCampaigns id is the campaign name. Returns: Content, Name, Status, Recipients, ExcludedRecipients, Options. Required: id, Name, Recipients.

- **Delete a ElasticEmail campaign by ID** (Delete). Delete Campaign in Elastic Email. Delete the specific campaign. This does not cancel in progress email, see Cancel In Progress. Requires API key access level: ModifyCampaigns id is the campaign name. Returns an empty response on success. Required: id.

- **ElasticEmail campaigns pause** (Pause). Pause Campaign in Elastic Email. Pauses the specific campaign, cancelling emails that are waiting to be sent. Requires API key access level: ModifyCampaigns Returns an empty response on success. Required: campaign_id.

- **ElasticEmail campaigns trigger automation** (Action). Trigger Automation for Contact in Elastic Email. Manually trigger an Automation for a contact. Requires API key access level: ModifyAutomations Returns an empty response on success. Required: automation_id.

- **List all ElasticEmail contacts** (List). Load Contacts in Elastic Email. Returns a list of contacts. Requires API key access level: ViewContacts Returns: Email, Status, FirstName, LastName, CustomFields, Consent, Source, SourceInfo, DateAdded, DateUpdated, StatusChangeDate, Activity. Required: none.

- **Create a ElasticEmail contact** (Create). Add Contact in Elastic Email. Add new Contacts to your Lists. Up to 1000 can be added (for more please refer to the import request). Requires API key access level: ModifyContacts Returns: Email, Status, FirstName, LastName, CustomFields, Consent, Source, SourceInfo, DateAdded, DateUpdated, StatusChangeDate, Activity. Required: the request body (see body schema).

- **Get single ElasticEmail contact by ID** (Get). Load Contact in Elastic Email. Load detailed contact information for specified email. Requires API key access level: ViewContacts id is the contact email address. Returns: Email, Status, FirstName, LastName, CustomFields, Consent, Source, SourceInfo, DateAdded, DateUpdated, StatusChangeDate, Activity. Required: id.

- **Update a ElasticEmail contact by ID** (Update). Update Contact in Elastic Email. Update selected contact. Omitted contact's fields will not be changed. Requires API key access level: ModifyContacts id is the contact email address. Returns: Email, Status, FirstName, LastName, CustomFields, Consent, Source, SourceInfo, DateAdded, DateUpdated, StatusChangeDate, Activity. Required: id.

- **Delete a ElasticEmail contact by ID** (Delete). Delete Contact in Elastic Email. Deletes the provided contact. Requires API key access level: ModifyContacts id is the contact email address. Returns an empty response on success. Required: id.

- **ElasticEmail contacts delete bulk** (Delete). Delete Contacts Bulk in Elastic Email. Deletes provided contacts in bulk. Requires API key access level: ModifyContacts Returns an empty response on success. Required: the request body (see body schema).

- **ElasticEmail contacts export** (Export). Export Contacts in Elastic Email. Request an Export of specified Contacts. Requires API key access level: Export Returns: Link, PublicExportID. Required: none.

- **ElasticEmail contacts export status** (Export). Check Export Status in Elastic Email. Check the current status of the export. Requires API key access level: Export Required: export_id.

- **ElasticEmail contacts import** (Import). Upload Contacts in Elastic Email. Upload contacts from a file. Requires API key access level: ModifyContacts Returns an empty response on success. Required: the request body (see body schema).

- **List all ElasticEmail domains** (List). Load Domains in Elastic Email. Returns a list of all domains configured for this Account. Requires API key access level: ViewSettings Returns: Domain, DefaultDomain, Spf, Dkim, MX, DMARC, IsRewriteDomainValid, Verify, Type, TrackingStatus, CertificateStatus, CertificateExpiryDate, CertificateValidationError, TrackingTypeUserRequest, VERP, CustomBouncesDomain, IsCustomBouncesDomainDefault, WasEverVerified,…. Required: none.

- **Create a ElasticEmail domain** (Create). Add Domain in Elastic Email. Add new domain to Account. Requires API key access level: ModifySettings Returns: Domain, DefaultDomain, Spf, Dkim, MX, DMARC, IsRewriteDomainValid, Verify, Type, TrackingStatus, CertificateStatus, CertificateExpiryDate, CertificateValidationError, TrackingTypeUserRequest, VERP, CustomBouncesDomain, IsCustomBouncesDomainDefault, WasEverVerified,…. Required: the request body (see body schema).

- **Get single ElasticEmail domain by ID** (Get). Load Domain in Elastic Email. Retrieve a domain configured for this Account. Requires API key access level: ViewSettings id is the domain name. Returns: ValidationLog, Domain, DefaultDomain, Spf, Dkim, MX, DMARC, IsRewriteDomainValid, Verify, Type, TrackingStatus, CertificateStatus, CertificateExpiryDate, CertificateValidationError, TrackingTypeUserRequest, VERP, CustomBouncesDomain, IsCustomBouncesDomainDefault,…. Required: id.

- **Update a ElasticEmail domain by ID** (Update). Update Domain in Elastic Email. Updates the specified domain. Requires API key access level: ModifySettings id is the domain name. Returns: Domain, DefaultDomain, Spf, Dkim, MX, DMARC, IsRewriteDomainValid, Verify, Type, TrackingStatus, CertificateStatus, CertificateExpiryDate, CertificateValidationError, TrackingTypeUserRequest, VERP, CustomBouncesDomain, IsCustomBouncesDomainDefault, WasEverVerified,…. Required: id.

- **Delete a ElasticEmail domain by ID** (Delete). Delete Domain in Elastic Email. Deletes configured domain from Account. Requires API key access level: ModifySettings id is the domain name. Returns an empty response on success. Required: id.

- **ElasticEmail domains check restricted** (Action). Check for domain restriction in Elastic Email. Checking if domain is from free provider, or restricted. Requires API key access level: ViewSettings Required: domain_id.

- **ElasticEmail domains verify** (Verify). Verify Domain in Elastic Email. Verifies that required DNS records exist for specified domain. Requires API key access level: ModifySettings Returns: ValidationLog, Domain, DefaultDomain, Spf, Dkim, MX, DMARC, IsRewriteDomainValid, Verify, Type, TrackingStatus, CertificateStatus, CertificateExpiryDate, CertificateValidationError, TrackingTypeUserRequest, VERP, CustomBouncesDomain, IsCustomBouncesDomainDefault,…. Required: domain_id.

- **ElasticEmail domains set default** (Set). Set Default in Elastic Email. Sets a verified email address as default sender. Requires API key access level: ModifySettings Returns: Domain, DefaultDomain, Spf, Dkim, MX, DMARC, IsRewriteDomainValid, Verify, Type, TrackingStatus, CertificateStatus, CertificateExpiryDate, CertificateValidationError, TrackingTypeUserRequest, VERP, CustomBouncesDomain, IsCustomBouncesDomainDefault, WasEverVerified,…. Required: domain_id.

- **ElasticEmail emails send bulk** (Send). Send Bulk Emails in Elastic Email. Send bulk merge email. Requires API key access level: SendHttp Returns: TransactionID, MessageID. Required: Recipients, Content.

- **ElasticEmail emails status** (Action). Get Status in Elastic Email. Get status details of an email transaction. Requires API key access level: ViewReports Returns: ID, Status, RecipientsCount, Failed, FailedCount, Sent, SentCount, Delivered, DeliveredCount, Pending, PendingCount, Opened, OpenedCount, Clicked, ClickedCount, Unsubscribed, UnsubscribedCount, AbuseReports,…. Required: email_id.

- **ElasticEmail emails send merge file** (Send). Send Bulk Emails CSV in Elastic Email. Send to a list of contacts submitted in a CSV data file. The first column in the CSV must be the email address and the CSV must contain a header row. Additional fields can be included with a named header row and can be merged with the template using {merge} tags in the content. Example CSV: email, firstname, lastname test1@gmail.com, michael, smith test2@gmail.com, janet, smith Merge file must not be empty. Requires API key access level: SendHttp Returns: TransactionID, MessageID. Required: MergeFile, Content.

- **ElasticEmail emails send transactional** (Send). Send Transactional Email in Elastic Email. Send transactional emails (recipients will be known to each other). Requires API key access level: SendHttp Returns: TransactionID, MessageID. Required: Recipients, Content.

- **Get single ElasticEmail email by ID** (Get). View Email in Elastic Email. Returns email details for viewing or rendering. Requires API key access level: None id is the message id (msgid). Returns: Preview, Attachments, Status. Required: id.

- **List all ElasticEmail events** (List). Load Events in Elastic Email. Returns a log of delivery events filtered by specified parameters. Requires API key access level: ViewReports Returns: TransactionID, MsgID, FromEmail, To, Subject, EventType, EventDate, ChannelName, MessageCategory, NextTryOn, Message, IPAddress, PoolName. Required: none.

- **ElasticEmail events list by transaction** (List). Load Email Events in Elastic Email. Returns a log of delivery events for the specific transaction ID. Requires API key access level: ViewReports Returns: TransactionID, MsgID, FromEmail, To, Subject, EventType, EventDate, ChannelName, MessageCategory, NextTryOn, Message, IPAddress, PoolName. Required: transaction_id.

- **ElasticEmail events list by channel** (List). Load Channel Events in Elastic Email. Returns a log of delivery events filtered by specified parameters. Requires API key access level: ViewReports Returns: TransactionID, MsgID, FromEmail, To, Subject, EventType, EventDate, ChannelName, MessageCategory, NextTryOn, Message, IPAddress, PoolName. Required: channel_id.

- **ElasticEmail events export** (Export). Export Events in Elastic Email. Export delivery events log information to the specified file format. Requires API key access level: Export Returns: Link, PublicExportID. Required: none.

- **ElasticEmail events export status** (Export). Check Export Status in Elastic Email. Check the current status of the export. Requires API key access level: Export Required: export_id.

- **ElasticEmail events export channel** (Export). Export Channel Events in Elastic Email. Export delivery events log information to the specified file format. Requires API key access level: Export Returns: Link, PublicExportID. Required: channel_id.

- **ElasticEmail events export channel status** (Export). Check Channel Export Status in Elastic Email. Check the current status of the channel export. Requires API key access level: Export Required: export_id.

- **List all ElasticEmail files** (List). List all files uploaded to your Elastic Email account. Returns each file's FileName, Size, DateAdded, ExpirationDate, and ContentType.
- **ElasticEmail files upload** (Upload). Upload a file to your Elastic Email account. Returns the created file's FileName, Size, DateAdded, ExpirationDate, and ContentType. Required: BinaryContent (base64-encoded file content). Uploaded files can be attached to emails by name via Content.AttachFiles.
- **ElasticEmail files info** (Action). Get details for a single file in Elastic Email. Returns: Name, Status, Recipients, Content. Required: file_id (the file's name including its extension, e.g. invoice.pdf).
- **Delete a ElasticEmail file by ID** (Delete). Delete a file from your Elastic Email account. Returns an empty 204 response on success. Required: id (the file's name including its extension, e.g. invoice.pdf).
- **ElasticEmail files download** (Download). Download a file's raw content from Elastic Email. Returns the uploaded file's binary content. Required: file_id (the file's name including its extension, e.g. invoice.pdf).
- **List all ElasticEmail inboundroute** (List). List all inbound routes in elasticemail. Returns each route's PublicInboundId, Name, FilterType, Filter, ActionType, ActionParameter, and SortOrder.
- **Create a ElasticEmail inboundroute** (Create). Create an inbound route in elasticemail. Returns the created route including PublicInboundId, Name, FilterType, ActionType, and ActionParameter. Requires Name, Filter, FilterType, and ActionType.
- **Get single ElasticEmail inboundroute by ID** (Get). Get a single inbound route in elasticemail by id. Returns the route's PublicInboundId, Name, FilterType, Filter, ActionType, ActionParameter, and SortOrder. Required: id.
- **Update a ElasticEmail inboundroute by ID** (Update). Update an inbound route in elasticemail by id. Returns the updated route including PublicInboundId, Name, FilterType, ActionType, and ActionParameter. Requires id and the Name, Filter, FilterType, and ActionType body fields.
- **Delete a ElasticEmail inboundroute by ID** (Delete). Delete an inbound route in elasticemail by id. Returns an empty 204 response on success. Required: id.
- **ElasticEmail inboundroute bulk update** (Update). Reorder elasticemail inbound routes so they are evaluated in the order you specify. Returns the reordered routes as an array, each with PublicInboundId, SortOrder, Filter, and ActionType. Required: body items with PublicInboundId and SortOrder (1 = evaluated first).
- **List all ElasticEmail lists** (List). List all Elastic Email contact lists. Returns: Name, Status, Recipients, Content.
- **Create a ElasticEmail list** (Create). Create a new Elastic Email contact list. Returns the created list including Name, Status, Recipients, and Content. Required: ListName.
- **Get single ElasticEmail list by ID** (Get). Get a single Elastic Email contact list by id (the Elastic Email list name). Returns: Name, Status, Recipients, Content. Required: id.
- ...and 60 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
