The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the MinuteMail listing page.
MinuteMail as MCP (Model Context Protocol) tools: let AI agents and MCP clients operate ephemeral mailboxes, emails, attachments, custom domains, teams, and mock OAuth identities for testing email and auth flows.
https://mcp.minutemail.co/mcp (Streamable HTTP, protocol
revision 2025-06-18)Bearer mmak_...). The server is a
stateless proxy — it holds no credentials, sessions, or local storage of
its own; your key is forwarded verbatim to the MinuteMail API, where scopes
and quotas are enforced. All state (mailboxes, mails, identities) lives in
the MinuteMail platform behind it.io.github.minutemailco/mcp-server and on
Smithery.Sign up at minutemail.co (free during early access)
Create an API key in the dashboard
Configure your MCP client to send it as the Authorization header:
Authorization: Bearer mmak_XXXXXXXX
Claude Code / Claude Desktop / Cursor / any Streamable HTTP client:
https://mcp.minutemail.co/mcpAuthorization: Bearer mmak_...Claude Code CLI:
Raw JSON-RPC (what the clients do under the hood):
Every tool maps 1:1 to a route of the MinuteMail API. All calls require the
Bearer API key; write operations require the matching scope (mailboxes,
domains, team, identities).
mailboxes scope)| Tool | Purpose |
|---|---|
mailboxes.list | List active mailboxes (optional exact-address lookup) |
mailboxes.create | Create a mailbox (optional TTL, domain, recovery tag) |
mailboxes.get / mailboxes.delete | Fetch / delete one mailbox |
mailboxes.delete_bulk | Delete several mailboxes by ID |
mails.list / mails.inject | List mails / simulate an inbound email (multipart, with attachments) |
mails.get / mails.delete / mails.delete_bulk | Read / delete mails |
attachments.list / attachments.add / attachments.get / attachments.delete / attachments.delete_bulk | Attachment CRUD |
mailboxes scope)archived.list, archived.get,
archived.delete, archived.reactivate.
domains scope)domains.list, domains.register, domains.verify, domains.delete.
team scope)team.members.list, team.members.add, team.members.get, team.members.delete,
team.invitations.create, team.invitations.list, team.invitations.delete.
identities scope)identities.list, identities.create, identities.get,
identities.delete, oauth.clients.list, oauth.clients.create,
oauth.clients.get, oauth.clients.delete, oauth.clients.rotate_secret.
Tool results are returned as MCP text content carrying the API's JSON
response. Non-2xx responses become isError: true results with the HTTP
status and body (401 invalid key, 403 scope/domain, 429 quota with remaining
count, 502 upstream down).
The server is a single static Go binary in a scratch image (~7 MB):
Self-hosting still requires MinuteMail API keys — the server is a stateless proxy over the hosted API, not a standalone implementation. It keeps no sessions or local data; every mailbox, mail, and identity is stored by the MinuteMail API it forwards to.
| Env var | Default | Purpose |
|---|---|---|
PORT | 8080 | Listen port |
API_BASE | http://api-gateway:80 | MinuteMail API base URL (use https://api.minutemail.co outside the cluster) |
LOG_LEVEL | warn | debug/info/warn/error |
LOG_FORMAT | json | json/text |
PROFILE | dev | Deployment profile label |
GET /health for liveness; GET /metrics for Prometheus counters.
API-key management is not exposed via MCP — manage keys from the web app.
Go 1.23, stdlib plus prometheus/client_golang.
MIT — © MinuteMail.co