From migadu
Onboard a new Migadu email domain end-to-end — create it, fetch DNS records, wait for propagation, run diagnostics, activate, and verify usage. Use when the user wants to add a new domain to their Migadu account or asks "how do I set up email for X.com".
How this skill is triggered — by the user, by Claude, or both
Slash command
/migadu:domain-onboardingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Migadu domain setup is a six-step sequence with an external wait for DNS propagation in the middle. The Migadu API cannot activate a domain until external DNS records are published, so you cannot do this in one shot — plan on coming back after the user configures DNS at their registrar.
Migadu domain setup is a six-step sequence with an external wait for DNS propagation in the middle. The Migadu API cannot activate a domain until external DNS records are published, so you cannot do this in one shot — plan on coming back after the user configures DNS at their registrar.
create_domain → get_domain_records → [user configures DNS externally]
→ get_domain_diagnostics (loop until pass)
→ activate_domain → get_domain_usage
create_domaincreate_domain([{
"name": "example.com",
"hosted_dns": false,
"create_default_addresses": true
}])
hosted_dns: false is correct unless the user explicitly asks for Migadu-hosted DNS. Migadu themselves recommend external DNS.create_default_addresses: true creates postmaster, abuse, and admin aliases automatically. Useful for RFC compliance.activate_domain is called.get_domain_recordsReturns the DNS records the user must publish at their registrar. Response shape:
{
"domain_name": "example.com",
"mx_records": [...],
"spf": {...},
"dkim": {...},
"dmarc": {...},
"dns_verification": {...}
}
Present these to the user clearly, one record set at a time. They need to configure all of them at their DNS provider (Cloudflare, Route 53, Namecheap, etc.). This is the manual step — Migadu cannot do this for them.
After the user says they've added the records, wait at least 5 minutes before running diagnostics. Global DNS propagation typically takes 5-15 minutes but can stretch to hours depending on their provider and TTL settings.
get_domain_diagnosticsget_domain_diagnostics(name="example.com")
Returns a checks array with pass/fail status per record type. If anything is failing:
Do not proceed to activate_domain until all checks pass. Wait another 5 minutes and re-run diagnostics. Repeat up to 3-4 times. If still failing after ~20 minutes, have the user double-check the record values at their DNS provider — propagation isn't the problem at that point.
activate_domainactivate_domain([{"name": "example.com"}])
Fails with HTTP 422 if DNS diagnostics are still failing. If you get 422, loop back to step 4. On success the domain is live and can receive/send email.
get_domain_usageget_domain_usage(name="example.com")
Confirms the domain is tracking activity. Returns incoming/outgoing message counts and storage metrics. Useful to check at the end of onboarding and periodically for monitoring.
Typical next steps the user will want:
create_mailbox (see the bulk-safely skill if creating many)routing-decisions skill)admin@domain already exists if create_default_addresses: true)hosted_dns: true was used by mistake: Migadu plans to discontinue hosted DNS. If the domain was created with hosted_dns: true, best path is to delete via admin UI (no API delete) and recreate with hosted_dns: false.Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub michaelzag/migadu-plugin --plugin migadu