Migadu MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MIGADU_EMAIL | Yes | Your Migadu account email address. | |
| MIGADU_DOMAIN | No | Optional default domain to use when not explicitly provided in tool calls. | |
| MIGADU_API_KEY | Yes | Your Migadu API key (obtained from Admin → My Account → API Keys). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_domainsA | List all domains for the authenticated account. |
| get_domainB | Get full details for a specific domain. |
| get_domain_recordsA | Get the DNS records (MX, SPF, DKIM, DMARC, verification) required for domain setup. |
| get_domain_diagnosticsA | Run DNS validation diagnostics on a domain. Use after configuring records externally. |
| get_domain_usageB | Get message and storage usage metrics for a domain. |
| create_domainA | Create domain(s). Migadu recommends hosted_dns=False (use external DNS). List of dicts with: name, hosted_dns (optional, default false), create_default_addresses (optional, default true). |
| update_domainA | Update domain field(s). List of dicts with: name (required), description (optional), tags (optional). |
| activate_domainA | Activate domain(s) once DNS records are configured. Fails with 422 if DNS validation fails. List of dicts with: name. |
| list_mailboxesC | List email mailboxes for a domain. |
| get_mailboxA | Get full mailbox details by email or local part. |
| create_mailboxA | Create mailbox(es). List of dicts with: target, name, password or password_recovery_email, is_internal (optional), forwarding_to (optional). |
| update_mailboxA | Update mailbox settings. List of dicts with: target (required) and any of: name, may_send, may_receive, may_access_imap, may_access_pop3, may_access_managesieve, spam_action, spam_aggressiveness, sender_denylist, sender_allowlist, recipient_denylist. |
| delete_mailboxA | Delete mailbox(es). DESTRUCTIVE. List of dicts with: target. |
| reset_mailbox_passwordC | Reset mailbox password(s). List of dicts with: target, new_password. |
| set_autoresponderB | Configure autoresponder(s). List of dicts with: target, active, subject (optional), body (optional), expires_on (optional, YYYY-MM-DD). |
| list_identitiesB | List identities (send-as addresses) for a mailbox. |
| get_identityC | Get full details for a specific identity. |
| create_identityC | Create identit(ies). List of dicts with: target, mailbox, name, password, domain (optional). |
| update_identityA | Update identity settings. List of dicts with: target, mailbox (required) and any of: domain, name, may_send, may_receive, may_access_imap, may_access_pop3, may_access_managesieve, footer_active, footer_plain_body, footer_html_body. |
| delete_identityB | Delete identit(ies). DESTRUCTIVE. List of dicts with: target, mailbox, domain (optional). |
| list_aliasesB | List aliases for a domain. |
| get_aliasB | Get alias details by local part. |
| create_aliasA | Create alias(es). List of dicts with: target, destinations (list or CSV), domain (optional), is_internal (optional). |
| update_aliasB | Update alias destinations. List of dicts with: target, destinations (list or CSV), domain (optional). |
| delete_aliasA | Delete alias(es). DESTRUCTIVE. List of dicts with: target, domain (optional). |
| list_rewritesC | List rewrite rules for a domain. |
| get_rewriteB | Get rewrite rule details by slug/name. |
| create_rewriteB | Create rewrite rule(s). List of dicts with: name, local_part_rule (pattern), destinations, domain (optional), order_num (optional). |
| update_rewriteB | Update rewrite rule(s). List of dicts with: name (required), and any of: new_name, local_part_rule, destinations, order_num, domain. |
| delete_rewriteA | Delete rewrite rule(s). DESTRUCTIVE. List of dicts with: name, domain (optional). |
| list_forwardingsA | List external forwardings configured on a mailbox. |
| get_forwardingA | Get details for a specific forwarding (confirmation status, expiry, active state). |
| create_forwardingB | Create forwarding(s). Forwardings require external-user confirmation. List of dicts with: mailbox, address, domain (optional), expires_on (optional, YYYY-MM-DD), remove_upon_expiry (optional). |
| update_forwardingA | Update forwarding(s). List of dicts with: mailbox, address (required), and any of: is_active, expires_on, remove_upon_expiry, domain. |
| delete_forwardingA | Delete forwarding(s). DESTRUCTIVE. List of dicts with: mailbox, address, domain (optional). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| mailbox_creation_wizard | Generate a step-by-step plan for creating mailboxes based on requirements. |
| bulk_operation_planner | Plan a bulk operation across multiple resources. |
| domain_onboarding | Walk through onboarding a new Migadu domain end-to-end. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| All Domains | All domains for the authenticated account |
TDQS
Scored across 35 tools
Each tool pairs a distinct Migadu resource with a clear action, and list/get/create/update/delete operations are cleanly separated. DNS records, diagnostics, and usage are also distinct from each other. Aliases, rewrites, and forwardings are conceptually close but are clearly described as separate resources with different behaviors.
The tools consistently use lower_snake_case verb_noun naming throughout, with list/get/create/update/delete applied consistently across resource types. Action-specific tools such as reset_mailbox_password, set_autoresponder, and activate_domain still follow the same general verb_noun pattern.
35 tools is noticeably heavy and may slow agent tool selection, exceeding the ideal MCP surface size. However, the count is defensible because it reflects full CRUD coverage across several distinct email-management resources.
Mailboxes, identities, aliases, rewrites, and forwardings have full CRUD coverage, and domain setup includes records, diagnostics, and activation. The main gap is the absence of a delete_domain tool, and autoresponders are settable but not independently listable/readable.