Connectors · Email & messaging
Elastic Email MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Elastic Email and the rest of your systems. It gives your agent 109 Elastic Email actions (49 reads, 42 writes and 18 that wait for a confirmation) and holds the Elastic Email credential itself, so the agent never does. It paces Elastic Email's limits and records every call.
100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.
claude mcp add --transport http actionlake https://connect.actionlake.com/mcpdo { action: "elastic_email.contacts.list", intent: "check which Elastic Email account is connected"}# List contacts · read · 1 upstream call- 109actionsin one signed file
- 49readlook, never change
- 42writecreate and update
- 18wait for a yesdestructive, confirmed first
Set up
Connect Elastic Email in three steps.
- 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 - 02
Connect Elastic Email.
API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead. actionlake stores what you paste write-only, sealed under your tenant's key.
api_keyElastic Email API key
account { op: "connections.requirements", service: "elastic_email" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "elastic_email.contacts.list" }# list contacts · read · 1 upstream callcheck { action: "elastic_email.contacts.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Elastic Email at a glance
- Sign-in
- API key. No consent screen: your agent can connect it for you, but the key then passes through your chat. To keep it out of the model's context, paste it in the console instead.
- You provide
api_key- Limits we pace to
- 600 calls a minute, per connection
- API covered
- Elastic Email REST API v4 (OpenAPI 3.0.3, 4.0.0)
api.elasticemail.com/v4 - Built from
- Elastic Email's documentation, read 23 October 2026api.elasticemail.comelasticemail.com
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 44 of 49 reads, for up to 5 minutes; a write clears what it affects
- Shared entities
- 5, so ask can line Elastic Email up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Elastic Email.
109 actions in 27 areas. Every one carries its effect, so a key can allow the reads and hold the rest.
- 49readlook, never change
- 42writecreate and update
- 18destructivewait for a confirmation
Contacts
82 read · 4 write · 2 destructive
List contacts · Add up to 1,000 contacts, optionally to lists · Get a contact by email address · Update a contact's name and custom fields
Domains
83 read · 4 write · 1 destructive
List sending domains · Add a sending domain · Get a sending domain and its DNS status · Update a domain's tracking and bounce settings
Subaccounts
73 read · 3 write · 1 destructive
Create a subaccount · List subaccounts · Get a subaccount · Get a subaccount's API key
Campaigns
62 read · 3 write · 1 destructive
List campaigns · Create (and optionally send) a campaign · Get a campaign · Update an active or paused campaign
Inbound routes
62 read · 3 write · 1 destructive
Create an inbound route · List inbound routes · Get an inbound route · Change the order of inbound routes
Webhooks
62 read · 2 write · 2 destructive
Create a webhook · List webhooks · Update a webhook · Get a webhook
API keys
52 read · 2 write · 1 destructive
Create an API key · List API keys · Get an API key · Delete an API key
Emails
52 read · 3 write · 0 destructive
Send a transactional email · View a sent email's content · Send an email to many recipients with merge fields · Send emails merged from an attached CSV file
19 more areas · 58 actions
- Events 5
- Lists 5
- Segments 5
- SMTP credentials 5
- Templates 5
- Files 4
- Verification files 4
- Verifications 4
- List contacts 3
- Suppressions 3
- Bounces 2
- Campaign statistics 2
- Channel statistics 2
- Complaints 2
- Event exports 2
- Unsubscribes 2
- Campaign automations 1
- Contact exports 1
- Statistics 1
Top actions
The Elastic Email API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 59 of Elastic Email's 59 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
elastic_email.contacts.listList contacts | List contacts. | read | crm.contact.list177 connectors |
elastic_email.lists.listList contact lists | List contact lists. | read | comm.audience.list26 connectors |
elastic_email.list_contacts.listList the contacts in a list | List the contacts in a list. | read | comm.audience_member.list23 connectors |
elastic_email.segments.listList segments | List segments. | read | comm.audience_segment.list22 connectors |
elastic_email.domains.listList sending domains | List sending domains. | read | comm.sending_domain.list18 connectors |
elastic_email.contacts.createAdd up to 1,000 contacts, optionally to lists | Add up to 1,000 contacts, optionally to lists. | write | crm.contact.create161 connectors |
elastic_email.lists.createCreate a contact list | Create a contact list. | write | comm.audience.create24 connectors |
elastic_email.segments.createCreate a segment | Create a segment. | write | comm.audience_segment.create16 connectors |
elastic_email.domains.createAdd a sending domain | Add a sending domain. | write | comm.sending_domain.create15 connectors |
elastic_email.contacts.deleteDelete a contact | Delete a contact. | destructive | crm.contact.delete147 connectors |
elastic_email.campaigns.listList campaigns | List campaigns. | read | comm.campaign.list41 connectors |
elastic_email.campaigns.createCreate (and optionally send) a campaign | Create (and optionally send) a campaign. | write | comm.campaign.create38 connectors |
Try it
Prompts to paste into Claude.
Each one names the Elastic Email actions it will call, so you know what it reads and what it changes before you send it.
- Readread
Find the Elastic Email contacts with no email address, so we can clean them up.
calls
elastic_email.contacts.list - Writewrite
Add up to 1,000 contacts, optionally to lists in Elastic Email. Show me exactly what you will send before you save it.
calls
elastic_email.contacts.create - Across systemsread
Which contacts are in both Elastic Email and HaloPSA, and how many are in only one of them?
calls
elastic_email.contacts.listhalopsa.users.list
Across your systems
Elastic Email, joined to the rest of your business.
One ask fetches from Elastic Email 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 Elastic Email and HaloPSA, and how many are in only one of them?
elastic_email.contacts.list+halopsa.users.list, oncrm.contact· HaloPSAWhich contacts are in both Elastic Email and NetSuite, and how many are in only one of them?
elastic_email.contacts.list+netsuite.views.contacts, oncrm.contact· NetSuite
crm.contact 192comm.audience 27comm.audience_segment 18comm.audience_member 16comm.sending_domain 12ask { intent: "which contacts are in both Elastic Email and HaloPSA, and how many are in only one of them", steps: [ { action: "elastic_email.contacts.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"] } } ]}Governance for Elastic Email
Destructive actions wait for a yes.
18 Elastic Email actions are destructive. These are all of them:
- Delete a contact
elastic_email.contacts.delete - Delete a contact list
elastic_email.lists.delete - Delete a segment
elastic_email.segments.delete - Delete a sending domain
elastic_email.domains.delete - Remove contacts from a list
elastic_email.list_contacts.remove - Delete an email template
elastic_email.templates.delete - Delete a campaign
elastic_email.campaigns.delete - Remove an email address from suppressions
elastic_email.suppressions.delete - Delete an API key
elastic_email.api_keys.delete - Delete a stored file
elastic_email.files.delete - Delete a webhook
elastic_email.webhooks.delete - Delete a subaccount
elastic_email.subaccounts.delete - Delete contacts by email list or rule
elastic_email.contacts.delete_bulk - Delete a stored verification result
elastic_email.verifications.delete - Delete an inbound route
elastic_email.inbound_routes.delete - Rotate a webhook's signing secret (the old secret stops working)
elastic_email.webhooks.rotate_secret - Delete SMTP credentials
elastic_email.smtp_credentials.delete - Delete a bulk verification file and its result
elastic_email.verification_files.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.
Delete a contact?
intent: the user asked me to delete a contact
account { op: "keys.create", name: "elastic-email-agent", allowed_actions: ["elastic_email.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "elastic_email.contacts.delete", approver: "[email protected]" }, { match: "elastic_email.lists.delete", approver: "[email protected]" }, { match: "elastic_email.segments.delete", approver: "[email protected]" } ]}Cost
What Elastic Email costs on actionlake.
Every Elastic Email action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Elastic Email refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
- 1upstream call per actionall 109 Elastic Email actions
- 109actions pageeach page of a long list is one call
- 44reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Elastic Email action.
109 actions by area: the id your agent calls, what it does, and its effect.
Contacts8
elastic_email.contacts.createAdd up to 1,000 contacts, optionally to listswriteelastic_email.contacts.deleteDelete a contactdestructiveelastic_email.contacts.delete_bulkDelete contacts by email list or ruledestructiveelastic_email.contacts.exportStart an export of contacts to a filewriteelastic_email.contacts.getGet a contact by email addressreadelastic_email.contacts.importImport contacts from a CSV file at a URLwriteelastic_email.contacts.listList contactsreadelastic_email.contacts.updateUpdate a contact's name and custom fieldswrite
Domains8
elastic_email.domains.createAdd a sending domainwriteelastic_email.domains.deleteDelete a sending domaindestructiveelastic_email.domains.getGet a sending domain and its DNS statusreadelastic_email.domains.get_restrictedCheck whether a domain is restrictedreadelastic_email.domains.listList sending domainsreadelastic_email.domains.set_defaultSet the default sender domain (by sender email address)writeelastic_email.domains.updateUpdate a domain's tracking and bounce settingswriteelastic_email.domains.verifyVerify a domain's DNS recordswrite
Subaccounts7
elastic_email.subaccounts.add_creditsAdd or remove a subaccount's email creditswriteelastic_email.subaccounts.createCreate a subaccountwriteelastic_email.subaccounts.deleteDelete a subaccountdestructiveelastic_email.subaccounts.getGet a subaccountreadelastic_email.subaccounts.get_api_keyGet a subaccount's API keyreadelastic_email.subaccounts.listList subaccountsreadelastic_email.subaccounts.update_email_settingsUpdate a subaccount's email settingswrite
Campaigns6
elastic_email.campaigns.createCreate (and optionally send) a campaignwriteelastic_email.campaigns.deleteDelete a campaigndestructiveelastic_email.campaigns.getGet a campaignreadelastic_email.campaigns.listList campaignsreadelastic_email.campaigns.pausePause a sending campaignwriteelastic_email.campaigns.updateUpdate an active or paused campaignwrite
Inbound routes6
elastic_email.inbound_routes.createCreate an inbound routewriteelastic_email.inbound_routes.deleteDelete an inbound routedestructiveelastic_email.inbound_routes.getGet an inbound routereadelastic_email.inbound_routes.listList inbound routesreadelastic_email.inbound_routes.reorderChange the order of inbound routeswriteelastic_email.inbound_routes.updateUpdate an inbound routewrite
Webhooks6
elastic_email.webhooks.createCreate a webhookwriteelastic_email.webhooks.deleteDelete a webhookdestructiveelastic_email.webhooks.getGet a webhookreadelastic_email.webhooks.listList webhooksreadelastic_email.webhooks.rotate_secretRotate a webhook's signing secret (the old secret stops working)destructiveelastic_email.webhooks.updateUpdate a webhookwrite
API keys5
elastic_email.api_keys.createCreate an API keywriteelastic_email.api_keys.deleteDelete an API keydestructiveelastic_email.api_keys.getGet an API keyreadelastic_email.api_keys.listList API keysreadelastic_email.api_keys.updateUpdate an API key's accesswrite
Emails5
elastic_email.emails.get_statusGet the delivery status of a send transactionreadelastic_email.emails.send_bulkSend an email to many recipients with merge fieldswriteelastic_email.emails.send_mergefileSend emails merged from an attached CSV filewriteelastic_email.emails.send_transactionalSend a transactional emailwriteelastic_email.emails.viewView a sent email's contentread
Events5
elastic_email.events.exportStart an export of eventswriteelastic_email.events.export_channelStart an export of one channel's eventswriteelastic_email.events.listList email events (sent, opened, clicked, bounced...)readelastic_email.events.list_by_channelList events for one channelreadelastic_email.events.list_by_transactionList events for one send transactionread
Lists5
elastic_email.lists.createCreate a contact listwriteelastic_email.lists.deleteDelete a contact listdestructiveelastic_email.lists.getGet a contact listreadelastic_email.lists.listList contact listsreadelastic_email.lists.updateRename or update a contact listwrite
Segments5
elastic_email.segments.createCreate a segmentwriteelastic_email.segments.deleteDelete a segmentdestructiveelastic_email.segments.getGet a segmentreadelastic_email.segments.listList segmentsreadelastic_email.segments.updateUpdate a segment's rulewrite
SMTP credentials5
elastic_email.smtp_credentials.createCreate SMTP credentialswriteelastic_email.smtp_credentials.deleteDelete SMTP credentialsdestructiveelastic_email.smtp_credentials.getGet SMTP credentialsreadelastic_email.smtp_credentials.listList SMTP credentialsreadelastic_email.smtp_credentials.updateUpdate SMTP credentialswrite
Templates5
elastic_email.templates.createCreate an email templatewriteelastic_email.templates.deleteDelete an email templatedestructiveelastic_email.templates.getGet an email templatereadelastic_email.templates.listList email templatesreadelastic_email.templates.updateUpdate an email templatewrite
Files4
elastic_email.files.deleteDelete a stored filedestructiveelastic_email.files.getGet a stored file's detailsreadelastic_email.files.listList stored filesreadelastic_email.files.uploadUpload a file (base64 content)write
Verification files4
elastic_email.verification_files.deleteDelete a bulk verification file and its resultdestructiveelastic_email.verification_files.get_resultGet a bulk verification file's resultsreadelastic_email.verification_files.listList bulk verification files and their statusreadelastic_email.verification_files.startStart verifying an uploaded filewrite
Verifications4
elastic_email.verifications.deleteDelete a stored verification resultdestructiveelastic_email.verifications.getGet a stored verification result for an emailreadelastic_email.verifications.listList single email verification resultsreadelastic_email.verifications.verifyVerify one email addresswrite
List contacts3
elastic_email.list_contacts.addAdd existing contacts to a listwriteelastic_email.list_contacts.listList the contacts in a listreadelastic_email.list_contacts.removeRemove contacts from a listdestructive
Suppressions3
elastic_email.suppressions.deleteRemove an email address from suppressionsdestructiveelastic_email.suppressions.getGet a suppression by email addressreadelastic_email.suppressions.listList all suppressionsread
Bounces2
elastic_email.bounces.createAdd addresses to the bounce listwriteelastic_email.bounces.listList bounced addressesread
Campaign statistics2
elastic_email.campaign_statistics.getGet one campaign's statisticsreadelastic_email.campaign_statistics.listList campaign statisticsread
Channel statistics2
elastic_email.channel_statistics.getGet one channel's statisticsreadelastic_email.channel_statistics.listList channel statisticsread
Complaints2
elastic_email.complaints.createAdd addresses to the complaint listwriteelastic_email.complaints.listList complaint addressesread
Event exports2
elastic_email.event_exports.get_channel_statusGet a channel event export's statusreadelastic_email.event_exports.get_statusGet an event export's statusread
Unsubscribes2
elastic_email.unsubscribes.createAdd addresses to the unsubscribe listwriteelastic_email.unsubscribes.listList unsubscribed addressesread
Campaign automations1
elastic_email.campaign_automations.triggerTrigger an automation campaign for one contactwrite
Contact exports1
elastic_email.contact_exports.get_statusGet a contact export's statusread
Statistics1
elastic_email.statistics.getGet account sending statistics for a date rangeread
Questions
The Elastic Email MCP server, answered.
Is there an Elastic Email MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 109 Elastic Email actions across contacts, domains, subaccounts and campaigns, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Elastic Email.
What do I need to connect Elastic Email?
Elastic Email API key. The free call account { op: "connections.requirements", service: "elastic_email" } lists exactly what to paste.
Can an AI agent delete or change things in Elastic Email?
Only if its key allows it, and only with an explicit confirmation. 18 Elastic Email actions are destructive, including delete a contact, delete a contact list and delete a segment. 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 Elastic Email API limit?
actionlake paces every call to the limits in the Elastic Email service file: 600 calls a minute per connection. Repeated reads are answered from cache (44 Elastic Email actions can be), which never reaches Elastic Email.
What does an Elastic Email action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (109 Elastic Email actions page). Cache hits, searches, dry runs and calls Elastic Email 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 Elastic Email API does it cover?
The Elastic Email REST API v4 (OpenAPI 3.0.3, 4.0.0) at api.elasticemail.com/v4. It is built from Elastic Email's documentation as read on 23 October 2026. 109 actions in 27 areas, each one in the signed service file (version 1.0.0).
Can I combine Elastic Email with my other systems?
Yes. ask joins Elastic Email to HaloPSA or NetSuite on the same customer and returns the answer rather than every row. Elastic Email maps crm.contact, which 192 other connectors also map.
Does actionlake keep my Elastic Email 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 Elastic Email credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.
Which AI clients can use it?
Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.
Give your agent Elastic Email today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.