Unlimited email addresses for development and testing. Make one up on the spot — then open it in your browser, curl it, or let your agent check it via MCP.
Any address you can name is already receiving — no create step. The part after the dot is your test case.
That recovery link is not valid — the inbox may have expired. Start a new one above.
You've been invited to a team — sign in with the invited email to accept.
That invite link is no longer valid. Ask the org owner for a fresh one.
the problem
Trigger a send, tab over to read it, tweak, resend. Need a second address? You’re on aliases and throwaway Gmails.
An owner invites an admin, who invites teammates — each needing confirmation-link clicks or OTPs. Five inboxes at once.
In CI or agent workflows, a human still has to open the inbox and click the link.
Named on the spot — no create step, no cleanup. Now your CI and agents can run the whole flow themselves, from invite to OTP.
access
MailMatter is MCP-native. Look with your eyes, fetch it in a script, or let an agent drive it — same address, same key, same result. Sign in and we hand you the config with your key already in it.
# block until the reset mail lands — long-poll, not a poll loop
$ curl "…/acme.user_receives_password_reset/wait?timeout=30"
→ {
"subject": "Reset your acme password",
"links": [ "https://acme.app/reset?token=k3yR…" ]
}
# your agent calls one tool and blocks — no glue code
wait_for_email(scenario="user_receives_password_reset")
→ returns subject + extracted links
agent: visiting https://acme.app/reset?token=k3yR… ✓
agent setup is one line:
claude mcp add --transport http mailmatter \
https://mailmatter.dev/mcp \
--header "Authorization: Bearer mm_<your key>"
features
The everyday loop is simple. These earn their keep on the stubborn bug, the security check, and the pipeline that would rather be pushed than poll.
Drop below the renderer to byte-exact source — headers, MIME parts, attachments — when a rendered view hides the bug.
Nothing leaks while you look — remote images blocked, links never auto-visited, not by us or your agent. Open a suspicious email without ever telling its sender you did.
Tag mail with a custom header and filter the inbox by it — a durable hook from a CI run to the mail it produced.
Get a POST the instant a message lands, instead of holding a long-poll open — for pipelines that would rather be pushed.
Email-health analysis — SPF/DKIM/DMARC results and spam-score hints surfaced on every message you receive.
The anonymous door and a free account are both free, no card. Pro and Team are live today for scale and longer retention — webhooks, your own domain, and org roles are on the way.
$0
$0
$19/mo
$79/mo
Yes. Anonymous inboxes and signed-in accounts are free, no card. We only charge for the paid plans — Pro and Team — which add more messages, longer retention, and custom domains soon. We’ll never run ads, because third-party ad requests would break our no-outbound-network guarantee.
Anyone who knows the address can send to it, but reading requires the secret — held in an httpOnly cookie for anonymous inboxes, or your account for named ones. Guessing an address grants send only, never read.
72 hours, then it’s purged automatically. It’s a test instrument, not a mailbox — don’t store anything you need to keep. Longer retention is a planned paid option.
Point your MCP client at https://mailmatter.dev/mcp with an API key — one line for Claude Code, a small JSON block for Cursor or VS Code. Your agent gets seven tools, including wait_for_email, which blocks until the message arrives. Not on MCP? Reading, waiting, and cleanup are available over plain REST too.
On the shared mailmatter.dev domain, yes — the name is part of the address, so it’s first-come. If you need a private namespace, a paid custom domain (coming soon) will give you one that’s entirely yours.
Not directly. Remote connectors there require OAuth with dynamic client registration; MailMatter authenticates with an org API key instead. Use the HTTP API, or bridge locally with mcp-remote. Claude Code, Cursor, and VS Code connect natively.