Disposable email for agents: create an inbox, wait for the message, read the code. No key needed.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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. With a paid key sent as Authorization: Bearer, a premium-pool domain from list_domains works too.
Which domain to use: a public domain (grabmail.io, mixozia.com, linqmail.com), or, with a paid key, one of the premium-pool domains returned by list_domains. Defaults to grabmail.io.
Optional readable prefix; a random suffix is added so it stays unique.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
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. With a paid key sent as Authorization: Bearer, a premium-pool domain from list_domains works too.
| Argument | Type | Description |
|---|---|---|
| domain | string | Which domain to use: a public domain (grabmail.io, mixozia.com, linqmail.com), or, with a paid key, one of the premium-pool domains returned by list_domains. Defaults to grabmail.io. |
| prefix | string | Optional readable prefix; a random suffix is added so it stays unique. |
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Which domain to use: a public domain (grabmail.io, mixozia.com, linqmail.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
}Remove a message now rather than waiting for it to expire. Idempotent.
| Argument | Type | Description |
|---|---|---|
| id* | string | |
| address* | string | The full address, e.g. [email protected] |
{
"type": "object",
"required": [
"address",
"id"
],
"properties": {
"id": {
"type": "string"
},
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
}
},
"additionalProperties": false
}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.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| before | string | Cursor from a previous call, to read older messages. |
| address* | string | The full address, e.g. [email protected] |
{
"type": "object",
"required": [
"address"
],
"properties": {
"limit": {
"type": "integer",
"default": 50,
"maximum": 200,
"minimum": 1
},
"before": {
"type": "string",
"description": "Cursor from a previous call, to read older messages."
},
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| id* | string | The message id from list_messages or wait_for_message. |
| address* | string | The full address, e.g. [email protected] |
{
"type": "object",
"required": [
"address",
"id"
],
"properties": {
"id": {
"type": "string",
"description": "The message id from list_messages or wait_for_message."
},
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
}
},
"additionalProperties": false
}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.
| Argument | Type | Description |
|---|---|---|
| address* | string | The full address, e.g. [email protected] |
| since_id | string | Ignore this message and anything older; pass the newest id you have already seen. |
| from_contains | string | Only accept a message whose sender contains this. |
| timeout_seconds | integer | |
| subject_contains | string | Only accept a message whose subject contains this. |
{
"type": "object",
"required": [
"address"
],
"properties": {
"address": {
"type": "string",
"description": "The full address, e.g. [email protected]"
},
"since_id": {
"type": "string",
"description": "Ignore this message and anything older; pass the newest id you have already seen."
},
"from_contains": {
"type": "string",
"description": "Only accept a message whose sender contains this."
},
"timeout_seconds": {
"type": "integer",
"default": 25,
"maximum": 25,
"minimum": 1
},
"subject_contains": {
"type": "string",
"description": "Only accept a message whose subject contains this."
}
},
"additionalProperties": false
}