Skip to content

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/mcp
the first call
do {  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.

  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 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
  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: "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
  1. Contacts

    8

    2 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

  2. Domains

    8

    3 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

  3. Subaccounts

    7

    3 read · 3 write · 1 destructive

    Create a subaccount · List subaccounts · Get a subaccount · Get a subaccount's API key

  4. Campaigns

    6

    2 read · 3 write · 1 destructive

    List campaigns · Create (and optionally send) a campaign · Get a campaign · Update an active or paused campaign

  5. Inbound routes

    6

    2 read · 3 write · 1 destructive

    Create an inbound route · List inbound routes · Get an inbound route · Change the order of inbound routes

  6. Webhooks

    6

    2 read · 2 write · 2 destructive

    Create a webhook · List webhooks · Update a webhook · Get a webhook

  7. API keys

    5

    2 read · 2 write · 1 destructive

    Create an API key · List API keys · Get an API key · Delete an API key

  8. Emails

    5

    2 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.

ActionWhat it doesEffectSame name in
elastic_email.contacts.listList contactsList contacts.readcrm.contact.list177 connectors
elastic_email.lists.listList contact listsList contact lists.readcomm.audience.list26 connectors
elastic_email.list_contacts.listList the contacts in a listList the contacts in a list.readcomm.audience_member.list23 connectors
elastic_email.segments.listList segmentsList segments.readcomm.audience_segment.list22 connectors
elastic_email.domains.listList sending domainsList sending domains.readcomm.sending_domain.list18 connectors
elastic_email.contacts.createAdd up to 1,000 contacts, optionally to listsAdd up to 1,000 contacts, optionally to lists.writecrm.contact.create161 connectors
elastic_email.lists.createCreate a contact listCreate a contact list.writecomm.audience.create24 connectors
elastic_email.segments.createCreate a segmentCreate a segment.writecomm.audience_segment.create16 connectors
elastic_email.domains.createAdd a sending domainAdd a sending domain.writecomm.sending_domain.create15 connectors
elastic_email.contacts.deleteDelete a contactDelete a contact.destructivecrm.contact.delete147 connectors
elastic_email.campaigns.listList campaignsList campaigns.readcomm.campaign.list41 connectors
elastic_email.campaigns.createCreate (and optionally send) a campaignCreate (and optionally send) a campaign.writecomm.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.

  1. Readread

    Find the Elastic Email contacts with no email address, so we can clean them up.

    callselastic_email.contacts.list

  2. Writewrite

    Add up to 1,000 contacts, optionally to lists in Elastic Email. Show me exactly what you will send before you save it.

    callselastic_email.contacts.create

  3. Across systemsread

    Which contacts are in both Elastic Email and HaloPSA, and how many are in only one of them?

    callselastic_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, on crm.contact · HaloPSA

  • Which contacts are in both Elastic Email and NetSuite, and how many are in only one of them?

    elastic_email.contacts.list + netsuite.views.contacts, on crm.contact · NetSuite

Also mapped by other connectorscrm.contact 192comm.audience 27comm.audience_segment 18comm.audience_member 16comm.sending_domain 12
ask
ask {  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"]    } }  ]}
Example. Run it through check first: it validates the steps and prices them, and it is free.

Governance for Elastic Email

Destructive actions wait for a yes.

18 Elastic Email actions are destructive. These are all of them:

  • Delete a contactelastic_email.contacts.delete
  • Delete a contact listelastic_email.lists.delete
  • Delete a segmentelastic_email.segments.delete
  • Delete a sending domainelastic_email.domains.delete
  • Remove contacts from a listelastic_email.list_contacts.remove
  • Delete an email templateelastic_email.templates.delete
  • Delete a campaignelastic_email.campaigns.delete
  • Remove an email address from suppressionselastic_email.suppressions.delete
  • Delete an API keyelastic_email.api_keys.delete
  • Delete a stored fileelastic_email.files.delete
  • Delete a webhookelastic_email.webhooks.delete
  • Delete a subaccountelastic_email.subaccounts.delete
  • Delete contacts by email list or ruleelastic_email.contacts.delete_bulk
  • Delete a stored verification resultelastic_email.verifications.delete
  • Delete an inbound routeelastic_email.inbound_routes.delete
  • Rotate a webhook's signing secret (the old secret stops working)elastic_email.webhooks.rotate_secret
  • Delete SMTP credentialselastic_email.smtp_credentials.delete
  • Delete a bulk verification file and its resultelastic_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.

doelastic_email.contacts.deleteconfirm_policy: human

Delete a contact?

intent: the user asked me to delete a contact

run suspended · waiting for a named person · key elastic-email-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
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]" }  ]}
Illustrative. Scoped to Elastic Email only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

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

See pricing

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 listswrite
  • elastic_email.contacts.deleteDelete a contactdestructive
  • elastic_email.contacts.delete_bulkDelete contacts by email list or ruledestructive
  • elastic_email.contacts.exportStart an export of contacts to a filewrite
  • elastic_email.contacts.getGet a contact by email addressread
  • elastic_email.contacts.importImport contacts from a CSV file at a URLwrite
  • elastic_email.contacts.listList contactsread
  • elastic_email.contacts.updateUpdate a contact's name and custom fieldswrite
Domains8
  • elastic_email.domains.createAdd a sending domainwrite
  • elastic_email.domains.deleteDelete a sending domaindestructive
  • elastic_email.domains.getGet a sending domain and its DNS statusread
  • elastic_email.domains.get_restrictedCheck whether a domain is restrictedread
  • elastic_email.domains.listList sending domainsread
  • elastic_email.domains.set_defaultSet the default sender domain (by sender email address)write
  • elastic_email.domains.updateUpdate a domain's tracking and bounce settingswrite
  • elastic_email.domains.verifyVerify a domain's DNS recordswrite
Subaccounts7
  • elastic_email.subaccounts.add_creditsAdd or remove a subaccount's email creditswrite
  • elastic_email.subaccounts.createCreate a subaccountwrite
  • elastic_email.subaccounts.deleteDelete a subaccountdestructive
  • elastic_email.subaccounts.getGet a subaccountread
  • elastic_email.subaccounts.get_api_keyGet a subaccount's API keyread
  • elastic_email.subaccounts.listList subaccountsread
  • elastic_email.subaccounts.update_email_settingsUpdate a subaccount's email settingswrite
Campaigns6
  • elastic_email.campaigns.createCreate (and optionally send) a campaignwrite
  • elastic_email.campaigns.deleteDelete a campaigndestructive
  • elastic_email.campaigns.getGet a campaignread
  • elastic_email.campaigns.listList campaignsread
  • elastic_email.campaigns.pausePause a sending campaignwrite
  • elastic_email.campaigns.updateUpdate an active or paused campaignwrite
Inbound routes6
  • elastic_email.inbound_routes.createCreate an inbound routewrite
  • elastic_email.inbound_routes.deleteDelete an inbound routedestructive
  • elastic_email.inbound_routes.getGet an inbound routeread
  • elastic_email.inbound_routes.listList inbound routesread
  • elastic_email.inbound_routes.reorderChange the order of inbound routeswrite
  • elastic_email.inbound_routes.updateUpdate an inbound routewrite
Webhooks6
  • elastic_email.webhooks.createCreate a webhookwrite
  • elastic_email.webhooks.deleteDelete a webhookdestructive
  • elastic_email.webhooks.getGet a webhookread
  • elastic_email.webhooks.listList webhooksread
  • elastic_email.webhooks.rotate_secretRotate a webhook's signing secret (the old secret stops working)destructive
  • elastic_email.webhooks.updateUpdate a webhookwrite
API keys5
  • elastic_email.api_keys.createCreate an API keywrite
  • elastic_email.api_keys.deleteDelete an API keydestructive
  • elastic_email.api_keys.getGet an API keyread
  • elastic_email.api_keys.listList API keysread
  • elastic_email.api_keys.updateUpdate an API key's accesswrite
Emails5
  • elastic_email.emails.get_statusGet the delivery status of a send transactionread
  • elastic_email.emails.send_bulkSend an email to many recipients with merge fieldswrite
  • elastic_email.emails.send_mergefileSend emails merged from an attached CSV filewrite
  • elastic_email.emails.send_transactionalSend a transactional emailwrite
  • elastic_email.emails.viewView a sent email's contentread
Events5
  • elastic_email.events.exportStart an export of eventswrite
  • elastic_email.events.export_channelStart an export of one channel's eventswrite
  • elastic_email.events.listList email events (sent, opened, clicked, bounced...)read
  • elastic_email.events.list_by_channelList events for one channelread
  • elastic_email.events.list_by_transactionList events for one send transactionread
Lists5
  • elastic_email.lists.createCreate a contact listwrite
  • elastic_email.lists.deleteDelete a contact listdestructive
  • elastic_email.lists.getGet a contact listread
  • elastic_email.lists.listList contact listsread
  • elastic_email.lists.updateRename or update a contact listwrite
Segments5
  • elastic_email.segments.createCreate a segmentwrite
  • elastic_email.segments.deleteDelete a segmentdestructive
  • elastic_email.segments.getGet a segmentread
  • elastic_email.segments.listList segmentsread
  • elastic_email.segments.updateUpdate a segment's rulewrite
SMTP credentials5
  • elastic_email.smtp_credentials.createCreate SMTP credentialswrite
  • elastic_email.smtp_credentials.deleteDelete SMTP credentialsdestructive
  • elastic_email.smtp_credentials.getGet SMTP credentialsread
  • elastic_email.smtp_credentials.listList SMTP credentialsread
  • elastic_email.smtp_credentials.updateUpdate SMTP credentialswrite
Templates5
  • elastic_email.templates.createCreate an email templatewrite
  • elastic_email.templates.deleteDelete an email templatedestructive
  • elastic_email.templates.getGet an email templateread
  • elastic_email.templates.listList email templatesread
  • elastic_email.templates.updateUpdate an email templatewrite
Files4
  • elastic_email.files.deleteDelete a stored filedestructive
  • elastic_email.files.getGet a stored file's detailsread
  • elastic_email.files.listList stored filesread
  • elastic_email.files.uploadUpload a file (base64 content)write
Verification files4
  • elastic_email.verification_files.deleteDelete a bulk verification file and its resultdestructive
  • elastic_email.verification_files.get_resultGet a bulk verification file's resultsread
  • elastic_email.verification_files.listList bulk verification files and their statusread
  • elastic_email.verification_files.startStart verifying an uploaded filewrite
Verifications4
  • elastic_email.verifications.deleteDelete a stored verification resultdestructive
  • elastic_email.verifications.getGet a stored verification result for an emailread
  • elastic_email.verifications.listList single email verification resultsread
  • elastic_email.verifications.verifyVerify one email addresswrite
List contacts3
  • elastic_email.list_contacts.addAdd existing contacts to a listwrite
  • elastic_email.list_contacts.listList the contacts in a listread
  • elastic_email.list_contacts.removeRemove contacts from a listdestructive
Suppressions3
  • elastic_email.suppressions.deleteRemove an email address from suppressionsdestructive
  • elastic_email.suppressions.getGet a suppression by email addressread
  • elastic_email.suppressions.listList all suppressionsread
Bounces2
  • elastic_email.bounces.createAdd addresses to the bounce listwrite
  • elastic_email.bounces.listList bounced addressesread
Campaign statistics2
  • elastic_email.campaign_statistics.getGet one campaign's statisticsread
  • elastic_email.campaign_statistics.listList campaign statisticsread
Channel statistics2
  • elastic_email.channel_statistics.getGet one channel's statisticsread
  • elastic_email.channel_statistics.listList channel statisticsread
Complaints2
  • elastic_email.complaints.createAdd addresses to the complaint listwrite
  • elastic_email.complaints.listList complaint addressesread
Event exports2
  • elastic_email.event_exports.get_channel_statusGet a channel event export's statusread
  • elastic_email.event_exports.get_statusGet an event export's statusread
Unsubscribes2
  • elastic_email.unsubscribes.createAdd addresses to the unsubscribe listwrite
  • elastic_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.