Skip to content

Connectors · Email & messaging

Mailtrap MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Mailtrap and the rest of your systems. It gives your agent 136 Mailtrap actions (57 reads, 56 writes and 23 that wait for a confirmation) and holds the Mailtrap credential itself, so the agent never does. It paces Mailtrap'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: "mailtrap.contacts.list",  intent: "check which Mailtrap account is connected"}# Get a list of contacts · read · 1 upstream call
  • 136actionsin one signed file
  • 57readlook, never change
  • 56writecreate and update
  • 23wait for a yesdestructive, confirmed first

Set up

Connect Mailtrap 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 Mailtrap.

    Bearer token. 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_tokenMailtrap API token
    account { op: "connections.requirements", service: "mailtrap" }
    # 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: "mailtrap.contacts.list" }# get a list of contacts · read · 1 upstream callcheck { action: "mailtrap.contacts.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent

Mailtrap at a glance

Sign-in
Bearer token. 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_token
Limits we pace to
150 calls per 10 seconds, per connection
API covered
Mailtrap API (official OpenAPI 3.1 specs, mailtrap/mailtrap-openapi)mailtrap.io
Built from
Mailtrap's documentation, read 23 October 2026GitHubdocs.mailtrap.io
Service file
Version 1.0.0, signed (Ed25519)
Cached reads
51 of 57 reads, for up to 5 minutes; a write clears what it affects
Shared entities
5, so ask can line Mailtrap up with your other systems
Data
Processed and stored in Sydney, Australia. No US region yet

Capabilities

What an AI agent can do in Mailtrap.

136 actions in 34 areas. Every one carries its effect, so a key can allow the reads and hold the rest.

  • 57readlook, never change
  • 56writecreate and update
  • 23destructivewait for a confirmation
  1. Email campaigns

    11

    3 read · 5 write · 3 destructive

    Get a list of email campaigns · Create an email campaign · Get an email campaign by ID · Update an email campaign

  2. Sandboxes

    10

    2 read · 6 write · 2 destructive

    Create a sandbox · Get a list of sandboxes · Get sandbox attributes · Mark as read

  3. Sandbox messages

    8

    5 read · 2 write · 1 destructive

    Forward message · Get messages · Show email message · Get message HTML analysis

  4. Inbound messages

    6

    2 read · 3 write · 1 destructive

    List messages · Get a message · Delete a message · Forward a message

  5. Sending domains

    6

    2 read · 3 write · 1 destructive

    List domains · Create domain · Get domain · Update domain

  6. API tokens

    5

    2 read · 2 write · 1 destructive

    Create API token · List API tokens · Get API token · Reset API token

  7. Campaign templates

    5

    2 read · 2 write · 1 destructive

    Create Email Template (Experimental) · Get a paginated list of Email Templates (Experimental) · Get Email Template (Experimental) · Update Email Template (Experimental)

  8. Contact fields

    5

    2 read · 2 write · 1 destructive

    Create Contact Field · Get all Contact Fields · Get Contact Field · Update Contact Field

26 more areas · 80 actions
  • Contact lists 5
  • Contacts 5
  • Email templates 5
  • Inbound folders 5
  • Inbound forward rules 5
  • Inbound inboxes 5
  • Projects 5
  • Sending stats 5
  • Webhooks 5
  • Account accesses 3
  • Domain company info 3
  • Inbound threads 3
  • Suppressions 3
  • Tracking opt outs 3
  • Bulk emails 2
  • Contact exports 2
  • Contact imports 2
  • Email logs 2
  • Sandbox attachments 2
  • Sandbox emails 2
  • Sub accounts 2
  • Transactional emails 2
  • Accounts 1
  • Billing 1
  • Contact events 1
  • Permission resources 1

Top actions

The Mailtrap API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 44 of Mailtrap's 44 action names are shared with at least one other connector, so an agent learns them once.

ActionWhat it doesEffectSame name in
mailtrap.contacts.listGet a list of contactsGet a list of contacts.readcrm.contact.list177 connectors
mailtrap.inbound_messages.listList messagesList messages.readcomm.email.list28 connectors
mailtrap.sending_domains.listList domainsList domains.readcomm.sending_domain.list18 connectors
mailtrap.contact_lists.listGet all Contact ListsGet all Contact Lists.readcrm.contact_list.list34 connectors
mailtrap.contacts.createCreate a new ContactCreate a new Contact.writecrm.contact.create161 connectors
mailtrap.transactional_emails.sendSend transactional emailSend transactional email.writecomm.email.send32 connectors
mailtrap.inbound_inboxes.listList inboxesList inboxes.readcomm.mailbox.list18 connectors
mailtrap.sending_domains.createCreate domainCreate domain.writecomm.sending_domain.create15 connectors
mailtrap.contacts.deleteDelete contactDelete contact.destructivecrm.contact.delete147 connectors
mailtrap.contact_lists.createCreate Contact ListCreate Contact List.writecrm.contact_list.create29 connectors
mailtrap.email_templates.createCreate Email TemplateCreate Email Template.writecomm.email_template.create34 connectors
mailtrap.inbound_inboxes.createCreate an inboxCreate an inbox.writecomm.mailbox.create15 connectors

Try it

Prompts to paste into Claude.

Each one names the Mailtrap actions it will call, so you know what it reads and what it changes before you send it.

  1. Readread

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

    callsmailtrap.contacts.list

  2. Writewrite

    Create a new Contact in Mailtrap. Show me exactly what you will send before you save it.

    callsmailtrap.contacts.create

  3. Across systemsread

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

    callsmailtrap.contacts.listhalopsa.users.list

Across your systems

Mailtrap, joined to the rest of your business.

One ask fetches from Mailtrap 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 Mailtrap and HaloPSA, and how many are in only one of them?

    mailtrap.contacts.list + halopsa.users.list, on crm.contact · HaloPSA

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

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

Also mapped by other connectorscrm.contact 192crm.contact_list 22comm.email 15comm.mailbox 14comm.sending_domain 12
ask
ask {  intent: "which contacts are in both Mailtrap and HaloPSA, and how many are in only one of them",  steps: [    { action: "mailtrap.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 Mailtrap

Destructive actions wait for a yes.

23 Mailtrap actions are destructive. These are all of them:

  • Delete contactmailtrap.contacts.delete
  • Delete a messagemailtrap.inbound_messages.delete
  • Delete domainmailtrap.sending_domains.delete
  • Delete Contact Listmailtrap.contact_lists.delete
  • Delete Email Templatemailtrap.email_templates.delete
  • Delete an inboxmailtrap.inbound_inboxes.delete
  • Delete an email campaignmailtrap.email_campaigns.delete
  • Cancel a scheduled email campaignmailtrap.email_campaigns.cancel
  • Delete a threadmailtrap.inbound_threads.delete
  • Delete a webhookmailtrap.webhooks.delete
  • Clean sandboxmailtrap.sandboxes.clean
  • Delete a sandboxmailtrap.sandboxes.delete
  • Delete messagemailtrap.sandbox_messages.delete
  • Delete projectmailtrap.projects.delete
  • Delete API tokenmailtrap.api_tokens.delete
  • Delete suppressionmailtrap.suppressions.delete
  • Delete Contact Fieldmailtrap.contact_fields.delete
  • Delete a foldermailtrap.inbound_folders.delete
  • Remove account accessmailtrap.account_accesses.delete
  • Delete tracking opt-outmailtrap.tracking_opt_outs.delete
  • Delete Email Template (Experimental)mailtrap.campaign_templates.delete
  • Delete a forward rulemailtrap.inbound_forward_rules.delete
  • Terminate a sending email campaignmailtrap.email_campaigns.terminate

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.

domailtrap.contacts.deleteconfirm_policy: human

Delete contact?

intent: the user asked me to delete contact

run suspended · waiting for a named person · key mailtrap-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
account {  op: "keys.create", name: "mailtrap-agent",  allowed_actions: ["mailtrap.*"], cap_calls: 2000,  confirm_policy: "human_for_writes",  approval_rules: [    { match: "mailtrap.contacts.delete", approver: "[email protected]" },    { match: "mailtrap.inbound_messages.delete", approver: "[email protected]" },    { match: "mailtrap.sending_domains.delete", approver: "[email protected]" }  ]}
Illustrative. Scoped to Mailtrap only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

What Mailtrap costs on actionlake.

Every Mailtrap action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Mailtrap 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 136 Mailtrap actions
  • 136actions pageeach page of a long list is one call
  • 51reads 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 Mailtrap action.

136 actions by area: the id your agent calls, what it does, and its effect.

Email campaigns11
  • mailtrap.email_campaigns.cancelCancel a scheduled email campaigndestructive
  • mailtrap.email_campaigns.createCreate an email campaignwrite
  • mailtrap.email_campaigns.deleteDelete an email campaigndestructive
  • mailtrap.email_campaigns.getGet an email campaign by IDread
  • mailtrap.email_campaigns.get_statsGet email campaign statisticsread
  • mailtrap.email_campaigns.listGet a list of email campaignsread
  • mailtrap.email_campaigns.resetReset an email campaign to draftwrite
  • mailtrap.email_campaigns.scheduleSchedule an email campaignwrite
  • mailtrap.email_campaigns.startStart an email campaignwrite
  • mailtrap.email_campaigns.terminateTerminate a sending email campaigndestructive
  • mailtrap.email_campaigns.updateUpdate an email campaignwrite
Sandboxes10
  • mailtrap.sandboxes.cleanClean sandboxdestructive
  • mailtrap.sandboxes.createCreate a sandboxwrite
  • mailtrap.sandboxes.deleteDelete a sandboxdestructive
  • mailtrap.sandboxes.getGet sandbox attributesread
  • mailtrap.sandboxes.listGet a list of sandboxesread
  • mailtrap.sandboxes.mark_all_readMark as readwrite
  • mailtrap.sandboxes.reset_credentialsReset credentialswrite
  • mailtrap.sandboxes.reset_email_addressReset email addresswrite
  • mailtrap.sandboxes.toggle_email_addressEnable email addresswrite
  • mailtrap.sandboxes.updateUpdate a sandboxwrite
Sandbox messages8
  • mailtrap.sandbox_messages.deleteDelete messagedestructive
  • mailtrap.sandbox_messages.forwardForward messagewrite
  • mailtrap.sandbox_messages.getShow email messageread
  • mailtrap.sandbox_messages.get_html_analysisGet message HTML analysisread
  • mailtrap.sandbox_messages.get_mail_headersGet mail headersread
  • mailtrap.sandbox_messages.get_spam_reportGet message spam scoreread
  • mailtrap.sandbox_messages.listGet messagesread
  • mailtrap.sandbox_messages.updateUpdate messagewrite
Inbound messages6
  • mailtrap.inbound_messages.deleteDelete a messagedestructive
  • mailtrap.inbound_messages.forwardForward a messagewrite
  • mailtrap.inbound_messages.getGet a messageread
  • mailtrap.inbound_messages.listList messagesread
  • mailtrap.inbound_messages.replyReply to a messagewrite
  • mailtrap.inbound_messages.reply_allReply all to a messagewrite
Sending domains6
  • mailtrap.sending_domains.createCreate domainwrite
  • mailtrap.sending_domains.deleteDelete domaindestructive
  • mailtrap.sending_domains.getGet domainread
  • mailtrap.sending_domains.listList domainsread
  • mailtrap.sending_domains.send_setup_instructionsSend setup instructionswrite
  • mailtrap.sending_domains.updateUpdate domainwrite
API tokens5
  • mailtrap.api_tokens.createCreate API tokenwrite
  • mailtrap.api_tokens.deleteDelete API tokendestructive
  • mailtrap.api_tokens.getGet API tokenread
  • mailtrap.api_tokens.listList API tokensread
  • mailtrap.api_tokens.resetReset API tokenwrite
Campaign templates5
  • mailtrap.campaign_templates.createCreate Email Template (Experimental)write
  • mailtrap.campaign_templates.deleteDelete Email Template (Experimental)destructive
  • mailtrap.campaign_templates.getGet Email Template (Experimental)read
  • mailtrap.campaign_templates.listGet a paginated list of Email Templates (Experimental)read
  • mailtrap.campaign_templates.updateUpdate Email Template (Experimental)write
Contact fields5
  • mailtrap.contact_fields.createCreate Contact Fieldwrite
  • mailtrap.contact_fields.deleteDelete Contact Fielddestructive
  • mailtrap.contact_fields.getGet Contact Fieldread
  • mailtrap.contact_fields.listGet all Contact Fieldsread
  • mailtrap.contact_fields.updateUpdate Contact Fieldwrite
Contact lists5
  • mailtrap.contact_lists.createCreate Contact Listwrite
  • mailtrap.contact_lists.deleteDelete Contact Listdestructive
  • mailtrap.contact_lists.getGet Contact Listread
  • mailtrap.contact_lists.listGet all Contact Listsread
  • mailtrap.contact_lists.updateUpdate Contact Listwrite
Contacts5
  • mailtrap.contacts.createCreate a new Contactwrite
  • mailtrap.contacts.deleteDelete contactdestructive
  • mailtrap.contacts.getGet contactread
  • mailtrap.contacts.listGet a list of contactsread
  • mailtrap.contacts.updateUpdate contactwrite
Email templates5
  • mailtrap.email_templates.createCreate Email Templatewrite
  • mailtrap.email_templates.deleteDelete Email Templatedestructive
  • mailtrap.email_templates.getGet Email Templateread
  • mailtrap.email_templates.listGet all Email Templatesread
  • mailtrap.email_templates.updateUpdate Email Templatewrite
Inbound folders5
  • mailtrap.inbound_folders.createCreate a folderwrite
  • mailtrap.inbound_folders.deleteDelete a folderdestructive
  • mailtrap.inbound_folders.getGet a folderread
  • mailtrap.inbound_folders.listList foldersread
  • mailtrap.inbound_folders.updateUpdate a folderwrite
Inbound forward rules5
  • mailtrap.inbound_forward_rules.createCreate a forward rulewrite
  • mailtrap.inbound_forward_rules.deleteDelete a forward ruledestructive
  • mailtrap.inbound_forward_rules.getGet a forward ruleread
  • mailtrap.inbound_forward_rules.listList forward rulesread
  • mailtrap.inbound_forward_rules.updateUpdate a forward rulewrite
Inbound inboxes5
  • mailtrap.inbound_inboxes.createCreate an inboxwrite
  • mailtrap.inbound_inboxes.deleteDelete an inboxdestructive
  • mailtrap.inbound_inboxes.getGet an inboxread
  • mailtrap.inbound_inboxes.listList inboxesread
  • mailtrap.inbound_inboxes.updateUpdate an inboxwrite
Projects5
  • mailtrap.projects.createCreate projectwrite
  • mailtrap.projects.deleteDelete projectdestructive
  • mailtrap.projects.getGet project by IDread
  • mailtrap.projects.listGet a list of projectsread
  • mailtrap.projects.updateUpdate projectwrite
Sending stats5
  • mailtrap.sending_stats.by_categoryGet Sending Stats by Categoriesread
  • mailtrap.sending_stats.by_dateGet Sending Stats by Dateread
  • mailtrap.sending_stats.by_domainGet Sending Stats by Domainsread
  • mailtrap.sending_stats.by_email_service_providerGet Sending Stats by Email Service Providersread
  • mailtrap.sending_stats.getGet Sending Statsread
Webhooks5
  • mailtrap.webhooks.createCreate a webhookwrite
  • mailtrap.webhooks.deleteDelete a webhookdestructive
  • mailtrap.webhooks.getGet a webhookread
  • mailtrap.webhooks.listList webhooksread
  • mailtrap.webhooks.updateUpdate a webhookwrite
Account accesses3
  • mailtrap.account_accesses.deleteRemove account accessdestructive
  • mailtrap.account_accesses.listList User & Invite account accessesread
  • mailtrap.account_accesses.update_permissionsManage user or token permissionswrite
Domain company info3
  • mailtrap.domain_company_info.createCreate company infowrite
  • mailtrap.domain_company_info.getGet company inforead
  • mailtrap.domain_company_info.updateUpdate company infowrite
Inbound threads3
  • mailtrap.inbound_threads.deleteDelete a threaddestructive
  • mailtrap.inbound_threads.getGet a threadread
  • mailtrap.inbound_threads.listList threadsread
Suppressions3
  • mailtrap.suppressions.createCreate suppressionwrite
  • mailtrap.suppressions.deleteDelete suppressiondestructive
  • mailtrap.suppressions.listList suppressionsread
Tracking opt outs3
  • mailtrap.tracking_opt_outs.createCreate tracking opt-outwrite
  • mailtrap.tracking_opt_outs.deleteDelete tracking opt-outdestructive
  • mailtrap.tracking_opt_outs.listList tracking opt-outsread
Bulk emails2
  • mailtrap.bulk_emails.sendSend bulk emailwrite
  • mailtrap.bulk_emails.send_batchBatch send emailswrite
Contact exports2
  • mailtrap.contact_exports.createCreate Contact Exportwrite
  • mailtrap.contact_exports.getGet Contact Exportread
Contact imports2
  • mailtrap.contact_imports.createImport contactswrite
  • mailtrap.contact_imports.getGet Contact Importread
Email logs2
  • mailtrap.email_logs.getGet an email log message by IDread
  • mailtrap.email_logs.listList email logsread
Sandbox attachments2
  • mailtrap.sandbox_attachments.getGet single attachmentread
  • mailtrap.sandbox_attachments.listGet attachmentsread
Sandbox emails2
  • mailtrap.sandbox_emails.sendSend email (including templates)write
  • mailtrap.sandbox_emails.send_batchBatch send email (including templates)write
Sub accounts2
  • mailtrap.sub_accounts.createCreate organization sub accountwrite
  • mailtrap.sub_accounts.listGet organization sub accountsread
Transactional emails2
  • mailtrap.transactional_emails.sendSend transactional emailwrite
  • mailtrap.transactional_emails.send_batchBatch send emailswrite
Accounts1
  • mailtrap.accounts.listList account(s) you have access toread
Billing1
  • mailtrap.billing.get_usageGet current billing cycle usageread
Contact events1
  • mailtrap.contact_events.createCreate contact eventwrite
Permission resources1
  • mailtrap.permission_resources.listGet resourcesread

Questions

The Mailtrap MCP server, answered.

Is there a Mailtrap MCP server for Claude?

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 136 Mailtrap actions across email campaigns, sandboxes, sandbox messages and inbound messages, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Mailtrap.

What do I need to connect Mailtrap?

Mailtrap API token. The free call account { op: "connections.requirements", service: "mailtrap" } lists exactly what to paste.

Can an AI agent delete or change things in Mailtrap?

Only if its key allows it, and only with an explicit confirmation. 23 Mailtrap actions are destructive, including delete contact, delete a message and delete domain. 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 Mailtrap API limit?

actionlake paces every call to the limits in the Mailtrap service file: 150 calls per 10 seconds per connection. Repeated reads are answered from cache (51 Mailtrap actions can be), which never reaches Mailtrap.

What does a Mailtrap action cost?

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (136 Mailtrap actions page). Cache hits, searches, dry runs and calls Mailtrap 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 Mailtrap API does it cover?

The Mailtrap API (official OpenAPI 3.1 specs, mailtrap/mailtrap-openapi) at mailtrap.io. It is built from Mailtrap's documentation as read on 23 October 2026. 136 actions in 34 areas, each one in the signed service file (version 1.0.0).

Can I combine Mailtrap with my other systems?

Yes. ask joins Mailtrap to HaloPSA or NetSuite on the same customer and returns the answer rather than every row. Mailtrap maps crm.contact, which 192 other connectors also map.

Does actionlake keep my Mailtrap 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 Mailtrap 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 Mailtrap today.

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.