GrabMail disposable email
Disposable email for agents: create an inbox, wait for the message, read the code. No key needed.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp": {
"url": "https://grabmail.io/mcp"
}
}
}Remote endpoints
https://grabmail.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟡create_inbox(domain, prefix)
Invent a fresh, unused disposable email address you can give out immediately. Nothing is created or reserved server-side — an address exists as soon as mail arrives at it — so this never fails and needs no account. Public domains: grabmail.io, mixozia.com, linqmail.com, plimbox.com, mavobox.com, plupmail.com, zonkbox.com, wazbox.com. With a paid key sent as Authorization: Bearer, a premium-pool domain from list_domains works too.
Input Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Which domain to use: a public domain (grabmail.io, mixozia.com, linqmail.com, plimbox.com, mavobox.com, plupmail.com, zonkbox.com, wazbox.com), or, with a paid key, one of the premium-pool domains returned by list_domains. Defaults to grabmail.io."
},
"prefix": {
"type": "string",
"maxLength": 40,
"description": "Optional readable prefix; a random suffix is added so it stays unique."
}
},
"additionalProperties": false
}🟢list_domains
The public domains anyone may use. A domain of your own needs no account or key either — just an MX record pointing here. These public domains are on disposable-mail blocklists; if a form rejects them, see the premium pool noted in the result. With a paid key sent as Authorization: Bearer, the result also lists the premium-pool domain names.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}🟢list_messages(address, limit, before)
Everything waiting at an address, newest first. Returns immediately, including when the mailbox is empty — use wait_for_message if you are expecting something that has not arrived yet.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 50
},
"before": {
"type": "string",
"description": "Cursor from a previous call, to read older messages."
}
},
"required": [
"address"
],
"additionalProperties": false
}🟢read_message(address, id)
The full message: sender, subject, plain text, HTML and any attachments. This is where a confirmation code or a sign-in link will be. Read `text`: when the sender shipped HTML only, as most transactional mail does, it holds a plain-text rendering of that HTML rather than nothing, with link targets and image alt text kept.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
},
"id": {
"type": "string",
"description": "The message id from list_messages or wait_for_message."
}
},
"required": [
"address",
"id"
],
"additionalProperties": false
}🟡wait_for_message(address, timeout_seconds, from_contains, subject_contains, since_id)
Blocks until a new message arrives at the address, then returns it in full — the tool to use after submitting a sign-up form. Waits at most 25 seconds and then returns with timed_out set to true; call it again to keep waiting. Optionally waits for a message from a particular sender or with particular words in the subject, ignoring anything else that arrives.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
},
"timeout_seconds": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 25
},
"from_contains": {
"type": "string",
"description": "Only accept a message whose sender contains this."
},
"subject_contains": {
"type": "string",
"description": "Only accept a message whose subject contains this."
},
"since_id": {
"type": "string",
"description": "Ignore this message and anything older; pass the newest id you have already seen."
}
},
"required": [
"address"
],
"additionalProperties": false
}🔴delete_message(address, id)
Remove a message now rather than waiting for it to expire. Idempotent.
Input Schema
{
"type": "object",
"properties": {
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
},
"id": {
"type": "string"
}
},
"required": [
"address",
"id"
],
"additionalProperties": false
}Community
Evidence