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/mcpdo { 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.
- 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 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 - 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: "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
Email campaigns
113 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
Sandboxes
102 read · 6 write · 2 destructive
Create a sandbox · Get a list of sandboxes · Get sandbox attributes · Mark as read
Sandbox messages
85 read · 2 write · 1 destructive
Forward message · Get messages · Show email message · Get message HTML analysis
Inbound messages
62 read · 3 write · 1 destructive
List messages · Get a message · Delete a message · Forward a message
Sending domains
62 read · 3 write · 1 destructive
List domains · Create domain · Get domain · Update domain
API tokens
52 read · 2 write · 1 destructive
Create API token · List API tokens · Get API token · Reset API token
Campaign templates
52 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)
Contact fields
52 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.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
mailtrap.contacts.listGet a list of contacts | Get a list of contacts. | read | crm.contact.list177 connectors |
mailtrap.inbound_messages.listList messages | List messages. | read | comm.email.list28 connectors |
mailtrap.sending_domains.listList domains | List domains. | read | comm.sending_domain.list18 connectors |
mailtrap.contact_lists.listGet all Contact Lists | Get all Contact Lists. | read | crm.contact_list.list34 connectors |
mailtrap.contacts.createCreate a new Contact | Create a new Contact. | write | crm.contact.create161 connectors |
mailtrap.transactional_emails.sendSend transactional email | Send transactional email. | write | comm.email.send32 connectors |
mailtrap.inbound_inboxes.listList inboxes | List inboxes. | read | comm.mailbox.list18 connectors |
mailtrap.sending_domains.createCreate domain | Create domain. | write | comm.sending_domain.create15 connectors |
mailtrap.contacts.deleteDelete contact | Delete contact. | destructive | crm.contact.delete147 connectors |
mailtrap.contact_lists.createCreate Contact List | Create Contact List. | write | crm.contact_list.create29 connectors |
mailtrap.email_templates.createCreate Email Template | Create Email Template. | write | comm.email_template.create34 connectors |
mailtrap.inbound_inboxes.createCreate an inbox | Create an inbox. | write | comm.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.
- Readread
Find the Mailtrap contacts with no email address, so we can clean them up.
calls
mailtrap.contacts.list - Writewrite
Create a new Contact in Mailtrap. Show me exactly what you will send before you save it.
calls
mailtrap.contacts.create - Across systemsread
Which contacts are in both Mailtrap and HaloPSA, and how many are in only one of them?
calls
mailtrap.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, oncrm.contact· HaloPSAWhich contacts are in both Mailtrap and NetSuite, and how many are in only one of them?
mailtrap.contacts.list+netsuite.views.contacts, oncrm.contact· NetSuite
crm.contact 192crm.contact_list 22comm.email 15comm.mailbox 14comm.sending_domain 12ask { 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"] } } ]}Governance for Mailtrap
Destructive actions wait for a yes.
23 Mailtrap actions are destructive. These are all of them:
- Delete contact
mailtrap.contacts.delete - Delete a message
mailtrap.inbound_messages.delete - Delete domain
mailtrap.sending_domains.delete - Delete Contact List
mailtrap.contact_lists.delete - Delete Email Template
mailtrap.email_templates.delete - Delete an inbox
mailtrap.inbound_inboxes.delete - Delete an email campaign
mailtrap.email_campaigns.delete - Cancel a scheduled email campaign
mailtrap.email_campaigns.cancel - Delete a thread
mailtrap.inbound_threads.delete - Delete a webhook
mailtrap.webhooks.delete - Clean sandbox
mailtrap.sandboxes.clean - Delete a sandbox
mailtrap.sandboxes.delete - Delete message
mailtrap.sandbox_messages.delete - Delete project
mailtrap.projects.delete - Delete API token
mailtrap.api_tokens.delete - Delete suppression
mailtrap.suppressions.delete - Delete Contact Field
mailtrap.contact_fields.delete - Delete a folder
mailtrap.inbound_folders.delete - Remove account access
mailtrap.account_accesses.delete - Delete tracking opt-out
mailtrap.tracking_opt_outs.delete - Delete Email Template (Experimental)
mailtrap.campaign_templates.delete - Delete a forward rule
mailtrap.inbound_forward_rules.delete - Terminate a sending email campaign
mailtrap.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.
Delete contact?
intent: the user asked me to delete contact
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]" } ]}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
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 campaigndestructivemailtrap.email_campaigns.createCreate an email campaignwritemailtrap.email_campaigns.deleteDelete an email campaigndestructivemailtrap.email_campaigns.getGet an email campaign by IDreadmailtrap.email_campaigns.get_statsGet email campaign statisticsreadmailtrap.email_campaigns.listGet a list of email campaignsreadmailtrap.email_campaigns.resetReset an email campaign to draftwritemailtrap.email_campaigns.scheduleSchedule an email campaignwritemailtrap.email_campaigns.startStart an email campaignwritemailtrap.email_campaigns.terminateTerminate a sending email campaigndestructivemailtrap.email_campaigns.updateUpdate an email campaignwrite
Sandboxes10
mailtrap.sandboxes.cleanClean sandboxdestructivemailtrap.sandboxes.createCreate a sandboxwritemailtrap.sandboxes.deleteDelete a sandboxdestructivemailtrap.sandboxes.getGet sandbox attributesreadmailtrap.sandboxes.listGet a list of sandboxesreadmailtrap.sandboxes.mark_all_readMark as readwritemailtrap.sandboxes.reset_credentialsReset credentialswritemailtrap.sandboxes.reset_email_addressReset email addresswritemailtrap.sandboxes.toggle_email_addressEnable email addresswritemailtrap.sandboxes.updateUpdate a sandboxwrite
Sandbox messages8
mailtrap.sandbox_messages.deleteDelete messagedestructivemailtrap.sandbox_messages.forwardForward messagewritemailtrap.sandbox_messages.getShow email messagereadmailtrap.sandbox_messages.get_html_analysisGet message HTML analysisreadmailtrap.sandbox_messages.get_mail_headersGet mail headersreadmailtrap.sandbox_messages.get_spam_reportGet message spam scorereadmailtrap.sandbox_messages.listGet messagesreadmailtrap.sandbox_messages.updateUpdate messagewrite
Inbound messages6
mailtrap.inbound_messages.deleteDelete a messagedestructivemailtrap.inbound_messages.forwardForward a messagewritemailtrap.inbound_messages.getGet a messagereadmailtrap.inbound_messages.listList messagesreadmailtrap.inbound_messages.replyReply to a messagewritemailtrap.inbound_messages.reply_allReply all to a messagewrite
Sending domains6
mailtrap.sending_domains.createCreate domainwritemailtrap.sending_domains.deleteDelete domaindestructivemailtrap.sending_domains.getGet domainreadmailtrap.sending_domains.listList domainsreadmailtrap.sending_domains.send_setup_instructionsSend setup instructionswritemailtrap.sending_domains.updateUpdate domainwrite
API tokens5
mailtrap.api_tokens.createCreate API tokenwritemailtrap.api_tokens.deleteDelete API tokendestructivemailtrap.api_tokens.getGet API tokenreadmailtrap.api_tokens.listList API tokensreadmailtrap.api_tokens.resetReset API tokenwrite
Campaign templates5
mailtrap.campaign_templates.createCreate Email Template (Experimental)writemailtrap.campaign_templates.deleteDelete Email Template (Experimental)destructivemailtrap.campaign_templates.getGet Email Template (Experimental)readmailtrap.campaign_templates.listGet a paginated list of Email Templates (Experimental)readmailtrap.campaign_templates.updateUpdate Email Template (Experimental)write
Contact fields5
mailtrap.contact_fields.createCreate Contact Fieldwritemailtrap.contact_fields.deleteDelete Contact Fielddestructivemailtrap.contact_fields.getGet Contact Fieldreadmailtrap.contact_fields.listGet all Contact Fieldsreadmailtrap.contact_fields.updateUpdate Contact Fieldwrite
Contact lists5
mailtrap.contact_lists.createCreate Contact Listwritemailtrap.contact_lists.deleteDelete Contact Listdestructivemailtrap.contact_lists.getGet Contact Listreadmailtrap.contact_lists.listGet all Contact Listsreadmailtrap.contact_lists.updateUpdate Contact Listwrite
Contacts5
mailtrap.contacts.createCreate a new Contactwritemailtrap.contacts.deleteDelete contactdestructivemailtrap.contacts.getGet contactreadmailtrap.contacts.listGet a list of contactsreadmailtrap.contacts.updateUpdate contactwrite
Email templates5
mailtrap.email_templates.createCreate Email Templatewritemailtrap.email_templates.deleteDelete Email Templatedestructivemailtrap.email_templates.getGet Email Templatereadmailtrap.email_templates.listGet all Email Templatesreadmailtrap.email_templates.updateUpdate Email Templatewrite
Inbound folders5
mailtrap.inbound_folders.createCreate a folderwritemailtrap.inbound_folders.deleteDelete a folderdestructivemailtrap.inbound_folders.getGet a folderreadmailtrap.inbound_folders.listList foldersreadmailtrap.inbound_folders.updateUpdate a folderwrite
Inbound forward rules5
mailtrap.inbound_forward_rules.createCreate a forward rulewritemailtrap.inbound_forward_rules.deleteDelete a forward ruledestructivemailtrap.inbound_forward_rules.getGet a forward rulereadmailtrap.inbound_forward_rules.listList forward rulesreadmailtrap.inbound_forward_rules.updateUpdate a forward rulewrite
Inbound inboxes5
mailtrap.inbound_inboxes.createCreate an inboxwritemailtrap.inbound_inboxes.deleteDelete an inboxdestructivemailtrap.inbound_inboxes.getGet an inboxreadmailtrap.inbound_inboxes.listList inboxesreadmailtrap.inbound_inboxes.updateUpdate an inboxwrite
Projects5
mailtrap.projects.createCreate projectwritemailtrap.projects.deleteDelete projectdestructivemailtrap.projects.getGet project by IDreadmailtrap.projects.listGet a list of projectsreadmailtrap.projects.updateUpdate projectwrite
Sending stats5
mailtrap.sending_stats.by_categoryGet Sending Stats by Categoriesreadmailtrap.sending_stats.by_dateGet Sending Stats by Datereadmailtrap.sending_stats.by_domainGet Sending Stats by Domainsreadmailtrap.sending_stats.by_email_service_providerGet Sending Stats by Email Service Providersreadmailtrap.sending_stats.getGet Sending Statsread
Webhooks5
mailtrap.webhooks.createCreate a webhookwritemailtrap.webhooks.deleteDelete a webhookdestructivemailtrap.webhooks.getGet a webhookreadmailtrap.webhooks.listList webhooksreadmailtrap.webhooks.updateUpdate a webhookwrite
Account accesses3
mailtrap.account_accesses.deleteRemove account accessdestructivemailtrap.account_accesses.listList User & Invite account accessesreadmailtrap.account_accesses.update_permissionsManage user or token permissionswrite
Domain company info3
mailtrap.domain_company_info.createCreate company infowritemailtrap.domain_company_info.getGet company inforeadmailtrap.domain_company_info.updateUpdate company infowrite
Inbound threads3
mailtrap.inbound_threads.deleteDelete a threaddestructivemailtrap.inbound_threads.getGet a threadreadmailtrap.inbound_threads.listList threadsread
Suppressions3
mailtrap.suppressions.createCreate suppressionwritemailtrap.suppressions.deleteDelete suppressiondestructivemailtrap.suppressions.listList suppressionsread
Tracking opt outs3
mailtrap.tracking_opt_outs.createCreate tracking opt-outwritemailtrap.tracking_opt_outs.deleteDelete tracking opt-outdestructivemailtrap.tracking_opt_outs.listList tracking opt-outsread
Bulk emails2
mailtrap.bulk_emails.sendSend bulk emailwritemailtrap.bulk_emails.send_batchBatch send emailswrite
Contact exports2
mailtrap.contact_exports.createCreate Contact Exportwritemailtrap.contact_exports.getGet Contact Exportread
Contact imports2
mailtrap.contact_imports.createImport contactswritemailtrap.contact_imports.getGet Contact Importread
Email logs2
mailtrap.email_logs.getGet an email log message by IDreadmailtrap.email_logs.listList email logsread
Sandbox attachments2
mailtrap.sandbox_attachments.getGet single attachmentreadmailtrap.sandbox_attachments.listGet attachmentsread
Sandbox emails2
mailtrap.sandbox_emails.sendSend email (including templates)writemailtrap.sandbox_emails.send_batchBatch send email (including templates)write
Sub accounts2
mailtrap.sub_accounts.createCreate organization sub accountwritemailtrap.sub_accounts.listGet organization sub accountsread
Transactional emails2
mailtrap.transactional_emails.sendSend transactional emailwritemailtrap.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.