Email for a domain, set up by an agent in one command
mxgate receives mail for a domain you own and forwards it to your mailbox. It sends mail as an address at that domain. One command writes the DNS records at your DNS host and checks them.
npx mxgate signup you@example.com
CLOUDFLARE_API_TOKEN=... npx mxgate setup example.com --to you@gmail.com
Free plan, no card. Mail to anything@example.com now arrives at you@gmail.com.
What the one command does
- It adds the domain to your account.
- It finds the DNS host from the NS records: Cloudflare, Vercel or Porkbun.
- It writes the records there: the ownership TXT, the MX, the DKIM key, and a DMARC record if the domain has none.
- It waits until mxgate sees the records, then sets the catch-all.
The DNS token stays on your machine. If the domain has a mail server already, the command stops and tells you: --replace-mx moves the mail, --dry-run shows the plan and changes nothing. With another DNS host, mxgate domain add prints the records and you add them by hand.
Give it to your agent
claude mcp add mxgate -- npx -y mxgate mcp
Any MCP client: {"mcpServers":{"mxgate":{"command":"npx","args":["-y","mxgate","mcp"]}}}
The MCP server has 25 tools and the CLI has the same commands: signup, domains, aliases, DNS setup, send-as, send_email, the log, notifications, key recovery. Each error is JSON with a code, a message and the next step, so an agent can correct the problem without you. llms.txt has the API on one page.
Every message has a log row
$ npx mxgate logs example.com
2026-11-13 09:14:02 in forwarded ada@sender.org -> hello@example.com -> you@gmail.com
2026-11-13 09:20:41 in rejected promo@bulk.example -> hello@example.com
rspamd scored it as spam and mxgate refused it at SMTP time. The sender got an error; nothing was forwarded.
2026-11-13 10:02:10 in bounced bob@sender.org -> sales@example.com -> old@gmail.com
The destination mailbox does not exist.
2026-11-13 10:30:55 out sent ada@example.com -> client@example.org
mxgate does not drop mail silently. A message is forwarded, delayed, bounced, or refused while the sending server is still connected, and the log says which, with the reply of the other server. The log has no subject and no body. An hourly email tells you about mail that did not arrive; a signed webhook can tell your program.
Mail that Gmail accepts
Forwarded mail keeps the DKIM signature of the sender. mxgate rewrites the envelope sender (SRS), so SPF passes, and adds an ARC seal. A destination must confirm through a link before any mail goes to it, so an alias cannot point at a mailbox of another person.
Send as your domain
npx mxgate smtp create example.com # a login for smtp.mxgate.io, port 587 or 465
npx mxgate send --from "Ada <ada@example.com>" --to client@example.org \
--subject "Hello" --text "Hi" # or one API call, no SMTP login
Each domain signs with its own DKIM key. A login sends only as addresses of its own domain. The send API takes plain text: no HTML, no tracking, a link arrives as you wrote it. It has idempotency keys and thread headers, so an agent can answer a message and not send it twice.
Or use the API
curl -X POST https://api.mxgate.io/v1/signup \
-H "Content-Type: application/json" -d '{"email":"you@example.com"}'
The key comes back in the response and by mail. The API describes itself. A lost key: npx mxgate recover you@example.com.
Plans
| Free | Paid | |
|---|---|---|
| Domains | 1 | No limit |
| Aliases per domain | 10, plus a catch-all | No limit |
| Destinations per alias | 3 | 10 |
| Log | 7 days | 90 days |
| Send-as | 50 recipients a day | 3,000 recipients a month |
| CLI, MCP, DNS setup | All of it | All of it |
| Price | 0. No card. | Planned: 9 USD a month |
The paid plan has no checkout yet. If you reach a limit of the free plan, write to hello@mxgate.io and a person turns the paid plan on for your account.
What mxgate is not
- It is not a mailbox. There is no IMAP and no webmail: mail goes on to the mailbox you have.
- It does not call a webhook for each received message yet. Webhooks are for mail that failed.
- It runs on one server in France. If the server is down, sending servers keep the mail and try again. A second machine checks the server every 2 minutes.
- One message is at most 25 MB.
Abuse and suspension
mxgate tells you the reason before it stops anything. If the mail you send bounces too much or is refused as spam, sending is paused and you get an email that says why; forwarding continues. Only a person suspends an account, and the account gets a warning with the reason first. Report abuse of an mxgate address to abuse@mxgate.io.