---
title: "Mailgun MCP server for AI agents - actionlake"
description: "Give Claude 275 Mailgun actions through one MCP server: infrastructure, account, domains. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/mailgun
updated: 2026-10-10
---

Connectors · Email & messaging

# Mailgun MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Mailgun and the rest of your systems. It gives your agent 275 Mailgun actions (118 reads, 100 writes and 57 that wait for a confirmation) and holds the Mailgun credential itself, so the agent never does. It paces Mailgun's limits and records every call.

[Connect Mailgun free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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: "mailgun.users.list",
  intent: "check which Mailgun account is connected"
}
# List users · read · 1 upstream call
```

- 275 actions in one signed file
- 118 read look, never change
- 100 write create and update
- 57 wait for a yes destructive, confirmed first

Set up

## Connect Mailgun 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 Mailgun.
   Username and secret. 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_key` Mailgun API key
   - `api_host` Where your Mailgun lives: your api host
   ```
   account { op: "connections.requirements", service: "mailgun" }
   # 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: "mailgun.users.list" }
   # list users · read · 1 upstream call
   check { action: "mailgun.lists.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

Mailgun at a glance

**Sign-in**

Username and secret. 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`

**Setup fields**

`api_host`

**Limits we pace to**

300 calls a minute, at most 10 at a time, per connection

**API covered**

Mailgun Email API API v3/v4/v5, at your Mailgun instance's API base URL, which you enter when connecting

**Built from**

Mailgun's documentation, read 19 September 2026[documentation.mailgun.com](https://documentation.mailgun.com/_spec/docs/mailgun/api-reference/send/mailgun.yaml?download) [documentation.mailgun.com](https://documentation.mailgun.com/_spec/docs/validate/oas/openapi-validate-final.yaml?download)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

116 of 118 reads, for up to an hour; a write clears what it affects

**Ready-made plans**

9 in the store

**Shared entities**

4, so ask can line Mailgun up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in Mailgun.

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

- **118** read look, never change
- **100** write create and update
- **57** destructive wait for a confirmation

1. ### Infrastructure
   51
   20 read · 20 write · 11 destructive
   List domains assignable to dynamic pools · List domains enrolled in dynamic pools · List domains in an IP pool · List domains assigned to an IP
2. ### Account
   31
   10 read · 14 write · 7 destructive
   List users · Get a user · Get the current user · Resend the activation email
3. ### Domains
   28
   7 read · 16 write · 5 destructive
   List domains · Create a domain · Create an SMTP credential · List SMTP credentials
4. ### Templates
   28
   8 read · 14 write · 6 destructive
   List account templates · List domain templates · Create an account template · Create a domain template
5. ### Alerts
   25
   9 read · 10 write · 6 destructive
   List threshold hits · List Slack channels · List sending limits · Get a sending limit
6. ### Analytics
   24
   20 read · 2 write · 2 destructive
   Get statistics aggregated by country · Get statistics aggregated by device · Get statistics aggregated by provider · List tag statistics by device
7. ### Validation
   23
   17 read · 3 write · 3 destructive
   Get the platform validation threshold · Get the public validation threshold · Validate an email address · Validate an email address privately
8. ### Suppressions
   20
   8 read · 4 write · 8 destructive
   List bounces · List complaints · List unsubscribes · List allowlist entries

**5 more areas · 45 actions**

- Webhooks **14**
- Lists **13**
- Routing **11**
- Send **5**
- Events **2**

Top actions

## The Mailgun API, shaped for agents.

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

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `mailgun.users.list` List users | List users | read | `identity.user.list` 474 connectors |
| `mailgun.lists.list` List mailing lists | List mailing lists | read | `comm.audience.list` 26 connectors |
| `mailgun.lists.members.list` List mailing list members | List mailing list members | read | `comm.audience_member.list` 23 connectors |
| `mailgun.events.list` List events | List events | read | `comm.delivery_event.list` 16 connectors |
| `mailgun.lists.list_pages` List mailing lists (paged) | List mailing lists (paged) | read | `comm.audience.list` 26 connectors |
| `mailgun.lists.create` Create a mailing list | Create a mailing list | write | `comm.audience.create` 24 connectors |
| `mailgun.lists.members.list_pages` List mailing list members (paged) | List mailing list members (paged) | read | `comm.audience_member.list` 23 connectors |
| `mailgun.users.get` Get a user | Get a user | read | `identity.user.get` 399 connectors |
| `mailgun.lists.delete` Delete a mailing list | Delete a mailing list | destructive | `comm.audience.delete` 21 connectors |
| `mailgun.templates.list` List domain templates | List domain templates | read | `comm.email_template.list` 40 connectors |
| `mailgun.messages.send` Send an email | Send an email | write | `comm.email.send` 32 connectors |
| `mailgun.messages.resend_stored` Resend a stored message | Resend a stored message | write | `comm.email.send` 32 connectors |

Try it

## Prompts to paste into Claude.

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

1. Read read
   Who has access in Mailgun? List every user and their role.
   calls `mailgun.users.list`
2. Plan write
   Provision a subaccount with limits and features in Mailgun. Ask me before anything is sent or changed.
   calls `mailgun.account.get_monthly_limit` `mailgun.subaccounts.create` `mailgun.subaccounts.enable` `mailgun.subaccounts.update_monthly_limit` `mailgun.subaccounts.update_features` +2 more
3. Plan write
   Daily deliverability report for a domain in Mailgun.
   calls `mailgun.stats.get_domain_total` `mailgun.stats.get_aggregates_providers` `mailgun.stats.get_aggregates_countries` `mailgun.bounces.list` `mailgun.complaints.list` +1 more
4. Write write
   Create a mailing list in Mailgun. Show me exactly what you will send before you save it.
   calls `mailgun.lists.create`

The plan store

## Ready-made plans for Mailgun.

9 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

1. ### Investigate why a recipient did not receive mail
   Use it when A specific recipient says an email never arrived and you need the delivery history and suppression state for that address.
   **Effect**
   read
   **Steps**
   6
   **Needs**
   address and domain
   **Install**
   `mailgun-investigate-failed-delivery`
2. ### Audit and repair webhook coverage on a domain
   Use it when Event notifications have stopped arriving, or a new endpoint needs its webhook coverage checked.
   **Effect**
   write
   **Steps**
   5 · loops
   **Needs**
   domain, endpoint url and event types
   **Install**
   `mailgun-audit-webhooks`
3. ### Publish a new template version after a test send
   Use it when A transactional email template has been edited and the new version needs testing then publishing.
   A person decides Activate version _version tag_ of template _template name_ on _domain_. Live sends will use it immediately.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   domain, from address, reviewer, template body, template name and version tag
   **Install**
   `mailgun-publish-template-version`
4. ### Daily deliverability report for a domain
   Use it when Someone wants the overnight sending health of a domain summarised and mailed to the team each morning.
   **Effect**
   write
   **Steps**
   7
   **Needs**
   domain, report from and report to
   **Install**
   `mailgun-deliverability-morning-report`
5. ### Validate a mailing list before a campaign
   Use it when A campaign is about to go out and the list needs validating for bad addresses first.
   A person decides Run bulk validation over list _list id_ (_number of items_ subscribed members). This is billed per address.
   **Effect**
   write
   **Steps**
   7
   **Needs**
   domain, list address, list id, notify from and notify to
   **Install**
   `mailgun-validate-mailing-list`
6. ### Onboard a new sending domain end to end
   Use it when A customer or team is adding a brand new sending domain and wants it created, verified and tracking-enabled in one pass.
   A person decides Create a new Mailgun sending domain _domain_. This consumes account domain quota.
   **Effect**
   write
   **Steps**
   8
   **Needs**
   dkim key size and domain
   **Install**
   `mailgun-onboard-sending-domain`
7. ### Provision a subaccount with limits and features
   Use it when A new customer or brand needs its own isolated Mailgun subaccount set up.
   A person decides Create subaccount _subaccount name_ with a monthly limit of _monthly limit_ against the parent allowance.
   **Effect**
   write
   **Steps**
   8
   **Needs**
   monthly limit, pool id and subaccount name
   **Install**
   `mailgun-provision-subaccount`
8. ### Clear suppressions for a list of recipients
   Use it when Support has recipients who say they stopped receiving mail and you need their suppressions reviewed and cleared.
   A person decides Clear suppressions on _domain_ for _number of addresses_ addresses and whitelist them. Mail will resume to these recipients.
   **Effect**
   destructive
   **Steps**
   5 · loops
   **Needs**
   addresses and domain
   **Install**
   `mailgun-clear-suppressions-for-recipients`
9. ### Rotate DKIM keys across sending domains
   Use it when Security asks for DKIM keys to be rotated on the account's sending domains.
   A person decides Rotate DKIM keys on _number of items_ sending domains. New DNS records must be published or signing will fail.
   **Effect**
   destructive
   **Steps**
   5 · loops
   **Needs**
   state
   **Install**
   `mailgun-rotate-dkim-keys`

install a plan

```
account { op: "plans.install", slug: "mailgun-investigate-failed-delivery" }
# then ask for it by name; a schedule can run it on a timetable
```

Governance for Mailgun

## Destructive actions wait for a yes.

57 Mailgun actions are destructive. The first 10:

- Delete a mailing list `mailgun.lists.delete`
- Delete a mailing list member `mailgun.lists.members.delete`
- Delete a domain template `mailgun.templates.delete`
- Delete all domain templates `mailgun.templates.delete_all`
- Delete an account template `mailgun.account_templates.delete`
- Delete all account templates `mailgun.account_templates.delete_all`
- Delete a bounce `mailgun.bounces.delete`
- Delete a complaint `mailgun.complaints.delete`
- Delete an allowlist entry `mailgun.whitelists.delete`
- Delete all bounces `mailgun.bounces.delete_all`

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.

do mailgun.lists.delete confirm_policy: **human**

Delete a mailing list?

**intent:** the user asked me to delete a mailing list

run suspended · waiting for a named person · key _mailgun-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "mailgun-agent",
  allowed_actions: ["mailgun.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "mailgun.lists.delete", approver: "lead@example.com" },
    { match: "mailgun.lists.members.delete", approver: "lead@example.com" },
    { match: "mailgun.templates.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to Mailgun only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What Mailgun costs on actionlake.

Every Mailgun action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call Mailgun 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.

- 1 upstream call per action all 275 Mailgun actions
- 30 actions page each page of a long list is one call
- 116 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every Mailgun action.

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

**Infrastructure 51**

- `mailgun.dynamic_pools.add_ip` Add an IP to a dynamic pool write
- `mailgun.dynamic_pools.create_all` Configure dynamic IP pools for the account write
- `mailgun.dynamic_pools.delete_all` Remove the account dynamic IP pool configuration destructive
- `mailgun.dynamic_pools.delete_domain_override` Remove a domain's dynamic pool override destructive
- `mailgun.dynamic_pools.enroll_all_domains` Enroll all domains in dynamic pools write
- `mailgun.dynamic_pools.enroll_domain` Enroll a domain in dynamic pools write
- `mailgun.dynamic_pools.get_domain_history` Get a domain's dynamic pool history read
- `mailgun.dynamic_pools.list` List dynamic IP pools read
- `mailgun.dynamic_pools.list_assignable_domains` List domains assignable to dynamic pools read
- `mailgun.dynamic_pools.list_domains` List domains enrolled in dynamic pools read
- `mailgun.dynamic_pools.list_history` List dynamic pool history read
- `mailgun.dynamic_pools.list_subaccount_pools` List delegated subaccount IP pools read
- `mailgun.dynamic_pools.preview_domain` Preview a domain's dynamic pool assignment read
- `mailgun.dynamic_pools.set_domain_override` Override a domain's dynamic pool write
- `mailgun.dynamic_pools.unenroll_domain` Unenroll a domain from dynamic pools destructive
- `mailgun.dynamic_pools.update` Update a dynamic IP pool write
- `mailgun.ip_allowlist.create` Add an allowlisted IP write
- `mailgun.ip_allowlist.delete` Remove an allowlisted IP destructive
- `mailgun.ip_allowlist.list` List allowlisted IPs read
- `mailgun.ip_allowlist.update` Update an allowlisted IP write
- `mailgun.ip_pools.add_ip` Add one IP to an IP pool write
- `mailgun.ip_pools.add_ips` Add IPs to an IP pool write
- `mailgun.ip_pools.create` Create an IP pool write
- `mailgun.ip_pools.delegate` Delegate an IP pool to a subaccount write
- `mailgun.ip_pools.delete` Delete an IP pool destructive
- `mailgun.ip_pools.get` Get an IP pool read
- `mailgun.ip_pools.list` List IP pools read
- `mailgun.ip_pools.list_domains` List domains in an IP pool read
- `mailgun.ip_pools.remove_ip` Remove an IP from an IP pool destructive
- `mailgun.ip_pools.undelegate` Remove an IP pool delegation destructive
- `mailgun.ip_pools.update` Update an IP pool write
- `mailgun.ip_warmups.create` Start an IP warmup write
- `mailgun.ip_warmups.delete` Stop an IP warmup destructive
- `mailgun.ip_warmups.get` Get an IP warmup read
- `mailgun.ip_warmups.list` List IP warmups read
- `mailgun.ips.assign_domain` Assign a domain to an IP write
- `mailgun.ips.get` Get an IP address read
- `mailgun.ips.get_account_settings` Get account IP settings read
- `mailgun.ips.get_domain_settings` Get IP settings for a domain read
- `mailgun.ips.get_new_request` Get the status of a new IP request read
- `mailgun.ips.list` List IP addresses read
- `mailgun.ips.list_details` List IP addresses with details read
- `mailgun.ips.list_domains` List domains assigned to an IP read
- `mailgun.ips.replace_pool_with_ip` Replace a domain's pool with a single IP destructive
- `mailgun.ips.request_new` Request a new dedicated IP write
- `mailgun.ips.set_band` Set the reputation band for an IP write
- `mailgun.ips.unassign_domain` Unassign a domain from an IP destructive
- `mailgun.ips.unassign_from_domain` Unassign an IP from a domain destructive
- `mailgun.ips.update_account_settings` Update account IP settings write
- `mailgun.ips.update_domain_settings` Update IP settings for a domain write
- `mailgun.ips.update_subaccount_settings` Update subaccount IP settings write

**Account 31**

- `mailgun.account.create_sandbox_recipient` Authorise a sandbox recipient write
- `mailgun.account.delete_monthly_limit` Remove the custom monthly message limit destructive
- `mailgun.account.delete_sandbox_recipient` Remove an authorised sandbox recipient destructive
- `mailgun.account.enable_custom_limit` Enable the custom message limit write
- `mailgun.account.get_http_signing_key` Get the HTTP signing key read
- `mailgun.account.get_monthly_limit` Get the custom monthly message limit read
- `mailgun.account.list_sandbox_recipients` List authorised sandbox recipients read
- `mailgun.account.regenerate_http_signing_key` Regenerate the HTTP signing key write
- `mailgun.account.resend_activation_email` Resend the activation email write
- `mailgun.account.update` Update the account write
- `mailgun.account.update_features` Update account features write
- `mailgun.account.update_monthly_limit` Update the custom monthly message limit write
- `mailgun.keys.create` Create an API key write
- `mailgun.keys.create_public` Create a public API key write
- `mailgun.keys.delete` Delete an API key destructive
- `mailgun.keys.list` List API keys read
- `mailgun.subaccounts.assign_ip_pool` Assign an IP pool to a subaccount write
- `mailgun.subaccounts.create` Create a subaccount write
- `mailgun.subaccounts.delete` Delete a subaccount destructive
- `mailgun.subaccounts.delete_monthly_limit` Remove a subaccount's monthly limit destructive
- `mailgun.subaccounts.disable` Disable a subaccount destructive
- `mailgun.subaccounts.enable` Enable a subaccount write
- `mailgun.subaccounts.get` Get a subaccount read
- `mailgun.subaccounts.get_monthly_limit` Get a subaccount's monthly limit read
- `mailgun.subaccounts.list` List subaccounts read
- `mailgun.subaccounts.unassign_ip_pool` Unassign a subaccount's IP pool destructive
- `mailgun.subaccounts.update_features` Update subaccount features write
- `mailgun.subaccounts.update_monthly_limit` Update a subaccount's monthly limit write
- `mailgun.users.get` Get a user read
- `mailgun.users.get_me` Get the current user read
- `mailgun.users.list` List users read

**Domains 28**

- `mailgun.credentials.create` Create an SMTP credential write
- `mailgun.credentials.delete` Delete an SMTP credential destructive
- `mailgun.credentials.delete_all` Delete all SMTP credentials for a domain destructive
- `mailgun.credentials.list` List SMTP credentials read
- `mailgun.credentials.update` Update an SMTP credential password write
- `mailgun.dkim_keys.activate` Activate a DKIM key write
- `mailgun.dkim_keys.create` Create a DKIM key write
- `mailgun.dkim_keys.deactivate` Deactivate a DKIM key write
- `mailgun.dkim_keys.delete` Delete a DKIM key destructive
- `mailgun.dkim_keys.list` List DKIM keys read
- `mailgun.dkim_keys.list_for_authority` List DKIM keys for a signing authority read
- `mailgun.dkim_keys.rotate` Rotate a domain's DKIM key destructive
- `mailgun.dkim_keys.update_authority` Update the DKIM authority for a domain write
- `mailgun.dkim_keys.update_rotation` Update DKIM automatic rotation write
- `mailgun.dkim_keys.update_selector` Update the DKIM selector for a domain write
- `mailgun.domains.create` Create a domain write
- `mailgun.domains.create_tracking_certificate` Request a tracking TLS certificate write
- `mailgun.domains.delete` Delete a domain destructive
- `mailgun.domains.get` Get a domain read
- `mailgun.domains.get_tracking` Get domain tracking settings read
- `mailgun.domains.get_tracking_certificate_status` Get tracking TLS certificate status read
- `mailgun.domains.list` List domains read
- `mailgun.domains.regenerate_tracking_certificate` Regenerate a tracking TLS certificate write
- `mailgun.domains.update` Update a domain write
- `mailgun.domains.update_click_tracking` Update click tracking write
- `mailgun.domains.update_open_tracking` Update open tracking write
- `mailgun.domains.update_unsubscribe_tracking` Update unsubscribe tracking write
- `mailgun.domains.verify` Verify a domain write

**Templates 28**

- `mailgun.account_templates.copy` Copy an account template write
- `mailgun.account_templates.create` Create an account template write
- `mailgun.account_templates.delete` Delete an account template destructive
- `mailgun.account_templates.delete_all` Delete all account templates destructive
- `mailgun.account_templates.get` Get an account template read
- `mailgun.account_templates.list` List account templates read
- `mailgun.account_templates.rename` Rename an account template write
- `mailgun.account_templates.update` Update an account template write
- `mailgun.account_templates.versions.copy` Copy an account template version write
- `mailgun.account_templates.versions.create` Create an account template version write
- `mailgun.account_templates.versions.delete` Delete an account template version destructive
- `mailgun.account_templates.versions.get` Get an account template version read
- `mailgun.account_templates.versions.list` List account template versions read
- `mailgun.account_templates.versions.update` Update an account template version write
- `mailgun.templates.copy` Copy a domain template write
- `mailgun.templates.create` Create a domain template write
- `mailgun.templates.delete` Delete a domain template destructive
- `mailgun.templates.delete_all` Delete all domain templates destructive
- `mailgun.templates.get` Get a domain template read
- `mailgun.templates.list` List domain templates read
- `mailgun.templates.rename` Rename a domain template write
- `mailgun.templates.update` Update a domain template write
- `mailgun.templates.versions.copy` Copy a domain template version write
- `mailgun.templates.versions.create` Create a domain template version write
- `mailgun.templates.versions.delete` Delete a domain template version destructive
- `mailgun.templates.versions.get` Get a domain template version read
- `mailgun.templates.versions.list` List domain template versions read
- `mailgun.templates.versions.update` Update a domain template version write

**Alerts 25**

- `mailgun.alerts.create_event_setting` Create an alert event setting write
- `mailgun.alerts.delete_event_setting` Delete an alert event setting destructive
- `mailgun.alerts.delete_slack_settings` Delete Slack alert settings destructive
- `mailgun.alerts.disconnect_slack` Disconnect the Slack integration destructive
- `mailgun.alerts.get_settings` Get alert settings read
- `mailgun.alerts.get_slack_channel` Get a Slack channel read
- `mailgun.alerts.list_events` List alert event types read
- `mailgun.alerts.list_slack_channels` List Slack channels read
- `mailgun.alerts.rotate_webhook_signing_key` Rotate the alert webhook signing key destructive
- `mailgun.alerts.test_email` Send a test alert email write
- `mailgun.alerts.test_slack` Send a test Slack alert write
- `mailgun.alerts.test_webhook` Send a test alert webhook write
- `mailgun.alerts.update_event_setting` Update an alert event setting write
- `mailgun.alerts.update_slack_settings` Update Slack alert settings write
- `mailgun.limits.create` Create a sending limit write
- `mailgun.limits.delete` Delete a sending limit destructive
- `mailgun.limits.get` Get a sending limit read
- `mailgun.limits.list` List sending limits read
- `mailgun.limits.update` Update a sending limit write
- `mailgun.send_alerts.create` Create a send alert write
- `mailgun.send_alerts.delete` Delete a send alert destructive
- `mailgun.send_alerts.get` Get a send alert read
- `mailgun.send_alerts.list` List send alerts read
- `mailgun.send_alerts.list_hits` List threshold hits read
- `mailgun.send_alerts.update` Update a send alert write

**Analytics 24**

- `mailgun.metrics.query` Query account metrics read
- `mailgun.metrics.query_bounce_classification` Query bounce classification metrics read
- `mailgun.metrics.query_usage` Query account usage metrics read
- `mailgun.stats.get_aggregates_countries` Get statistics aggregated by country read
- `mailgun.stats.get_aggregates_devices` Get statistics aggregated by device read
- `mailgun.stats.get_aggregates_providers` Get statistics aggregated by provider read
- `mailgun.stats.get_domain_total` Get total statistics for a domain read
- `mailgun.stats.get_filtered` Get filtered statistics read
- `mailgun.stats.get_total` Get total account statistics read
- `mailgun.stats.get_total_by_domain` Get total statistics broken down by domain read
- `mailgun.tags.delete` Delete a tag destructive
- `mailgun.tags.delete_analytics` Delete an analytics tag destructive
- `mailgun.tags.get` Get a tag read
- `mailgun.tags.get_domain_limit` Get the tag limit for a domain read
- `mailgun.tags.get_limits` Get tag limits read
- `mailgun.tags.get_stats` Get tag statistics read
- `mailgun.tags.get_stats_aggregates` Get aggregate tag statistics read
- `mailgun.tags.list` List tags for a domain read
- `mailgun.tags.list_countries` List tag statistics by country read
- `mailgun.tags.list_devices` List tag statistics by device read
- `mailgun.tags.list_providers` List tag statistics by provider read
- `mailgun.tags.query` Query tags read
- `mailgun.tags.update` Update a tag write
- `mailgun.tags.update_description` Update a tag description write

**Validation 23**

- `mailgun.validate.address` Validate an email address read
- `mailgun.validate.address_private` Validate an email address privately read
- `mailgun.validate.address_private_post` Validate an email address privately (POST) read
- `mailgun.validate.address_v3` Validate an email address (v3) read
- `mailgun.validate.address_v3_post` Validate an email address (v3, POST) read
- `mailgun.validate.create_list_job` Start a mailing list validation job write
- `mailgun.validate.create_preview_job` Create a list-health preview job write
- `mailgun.validate.delete_bulk_job` Delete a bulk validation job destructive
- `mailgun.validate.delete_list_job` Delete a mailing list validation job destructive
- `mailgun.validate.delete_preview_job` Delete a list-health preview job destructive
- `mailgun.validate.get_bulk_job` Get a bulk validation job read
- `mailgun.validate.get_list_job` Get a mailing list validation job read
- `mailgun.validate.get_platform_threshold` Get the platform validation threshold read
- `mailgun.validate.get_preview_job` Get a list-health preview job read
- `mailgun.validate.get_public_threshold` Get the public validation threshold read
- `mailgun.validate.list_bulk_jobs` List bulk validation jobs read
- `mailgun.validate.list_jobs` List bulk and preview validation jobs read
- `mailgun.validate.list_preview_jobs` List list-health preview jobs read
- `mailgun.validate.parse` Parse email addresses read
- `mailgun.validate.parse_post` Parse email addresses (POST) read
- `mailgun.validate.parse_private` Parse email addresses privately read
- `mailgun.validate.parse_private_post` Parse email addresses privately (POST) read
- `mailgun.validate.promote_preview_job` Promote a list-health preview job write

**Suppressions 20**

- `mailgun.bounces.create` Add a bounce write
- `mailgun.bounces.delete` Delete a bounce destructive
- `mailgun.bounces.delete_all` Delete all bounces destructive
- `mailgun.bounces.get` Get a bounce read
- `mailgun.bounces.list` List bounces read
- `mailgun.complaints.create` Add a complaint write
- `mailgun.complaints.delete` Delete a complaint destructive
- `mailgun.complaints.delete_all` Delete all complaints destructive
- `mailgun.complaints.get` Get a complaint read
- `mailgun.complaints.list` List complaints read
- `mailgun.unsubscribes.create` Add an unsubscribe write
- `mailgun.unsubscribes.delete` Delete an unsubscribe destructive
- `mailgun.unsubscribes.delete_all` Delete all unsubscribes destructive
- `mailgun.unsubscribes.get` Get an unsubscribe read
- `mailgun.unsubscribes.list` List unsubscribes read
- `mailgun.whitelists.create` Add an allowlist entry write
- `mailgun.whitelists.delete` Delete an allowlist entry destructive
- `mailgun.whitelists.delete_all` Delete all allowlist entries destructive
- `mailgun.whitelists.get` Get an allowlist entry read
- `mailgun.whitelists.list` List allowlist entries read

**Webhooks 14**

- `mailgun.domain_webhooks.create` Create a domain webhook write
- `mailgun.domain_webhooks.create_v4` Create a domain webhook (v4) write
- `mailgun.domain_webhooks.delete` Delete a domain webhook destructive
- `mailgun.domain_webhooks.delete_v4` Delete a domain webhook (v4) destructive
- `mailgun.domain_webhooks.get` Get a domain webhook read
- `mailgun.domain_webhooks.list` List domain webhooks read
- `mailgun.domain_webhooks.update` Update a domain webhook write
- `mailgun.domain_webhooks.update_v4` Update a domain webhook (v4) write
- `mailgun.webhooks.create` Create an account webhook write
- `mailgun.webhooks.delete` Delete an account webhook destructive
- `mailgun.webhooks.delete_all` Delete all account webhooks destructive
- `mailgun.webhooks.get` Get an account webhook read
- `mailgun.webhooks.list` List account webhooks read
- `mailgun.webhooks.update` Update an account webhook write

**Lists 13**

- `mailgun.lists.create` Create a mailing list write
- `mailgun.lists.delete` Delete a mailing list destructive
- `mailgun.lists.get` Get a mailing list read
- `mailgun.lists.list` List mailing lists read
- `mailgun.lists.list_pages` List mailing lists (paged) read
- `mailgun.lists.members.create` Add a mailing list member write
- `mailgun.lists.members.create_bulk` Add mailing list members in bulk write
- `mailgun.lists.members.delete` Delete a mailing list member destructive
- `mailgun.lists.members.get` Get a mailing list member read
- `mailgun.lists.members.list` List mailing list members read
- `mailgun.lists.members.list_pages` List mailing list members (paged) read
- `mailgun.lists.members.update` Update a mailing list member write
- `mailgun.lists.update` Update a mailing list write

**Routing 11**

- `mailgun.forwards.create` Create a forwarding rule write
- `mailgun.forwards.delete` Delete a forwarding rule destructive
- `mailgun.forwards.get` Get a forwarding rule read
- `mailgun.forwards.list` List forwarding rules read
- `mailgun.forwards.update` Update a forwarding rule write
- `mailgun.routes.create` Create a route write
- `mailgun.routes.delete` Delete a route destructive
- `mailgun.routes.get` Get a route read
- `mailgun.routes.list` List routes read
- `mailgun.routes.match` Match a route against an address read
- `mailgun.routes.update` Update a route write

**Send 5**

- `mailgun.messages.delete_scheduled` Delete all scheduled messages destructive
- `mailgun.messages.get_stored` Get a stored message read
- `mailgun.messages.queue_status` Get sending queue status read
- `mailgun.messages.resend_stored` Resend a stored message write
- `mailgun.messages.send` Send an email write

**Events 2**

- `mailgun.events.list` List events read
- `mailgun.logs.query` Query analytics logs read

Questions

## The Mailgun MCP server, answered.

**Is there a Mailgun MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 275 Mailgun actions across infrastructure, account, domains and templates, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Mailgun.

**What do I need to connect Mailgun?**

Mailgun API key. Plus your api host. The free call account { op: "connections.requirements", service: "mailgun" } lists exactly what to paste.

**Can an AI agent delete or change things in Mailgun?**

Only if its key allows it, and only with an explicit confirmation. 57 Mailgun actions are destructive, including delete a mailing list, delete a mailing list member and delete a domain template. 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 Mailgun API limit?**

actionlake paces every call to the limits in the Mailgun service file: 300 calls a minute, at most 10 at a time per connection. Repeated reads are answered from cache (116 Mailgun actions can be), which never reaches Mailgun.

**What does a Mailgun action cost?**

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

The Mailgun Email API API v3/v4/v5 at your Mailgun instance's API base URL, which you enter when connecting. It is built from Mailgun's documentation as read on 19 September 2026. 275 actions in 13 areas, each one in the signed service file (version 1.0.0).

**Does actionlake keep my Mailgun data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, 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 Mailgun 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.

## More connectors like Mailgun

Shares the most action names with

- [Twilio SendGrid 69](https://actionlake.com/connectors/twilio-sendgrid)
- [Resend 39](https://actionlake.com/connectors/resend)
- [Elastic Email 35](https://actionlake.com/connectors/elastic-email)
- [MailerSend 33](https://actionlake.com/connectors/mailersend)
- [Bird 33](https://actionlake.com/connectors/bird)
- [SparkPost 26](https://actionlake.com/connectors/sparkpost)

Joins with, on shared entities

- [Docebo 2](https://actionlake.com/connectors/docebo)
- [ActiveCampaign 2](https://actionlake.com/connectors/activecampaign)
- [Twilio Segment 2](https://actionlake.com/connectors/twilio-segment)
- [beehiiv 2](https://actionlake.com/connectors/beehiiv)
- [Nutshell CRM 2](https://actionlake.com/connectors/nutshell-crm)
- [Atlassian Statuspage 2](https://actionlake.com/connectors/atlassian-statuspage)

Browse

- [All Email & messaging connectors](https://actionlake.com/connectors/category/email-and-messaging)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by Mailgun; the name is the vendor's own. Counts are from the Mailgun service file, version 1.0.0.

## Give your agent Mailgun today.

[Connect Mailgun free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

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

---

Source: https://actionlake.com/connectors/mailgun
More: https://actionlake.com/llms.txt
