best-tempmail-mcp
This server gives an AI assistant disposable email inboxes so it can sign up for services, receive mail, and read verification codes.
create_inbox: Create a temporary email address (optionally with a chosen domain/username).
wait_for_email: Wait up to 55 seconds for mail to arrive at an inbox.
get_verification_code: Extract a one-time code from an email (requires a paid API key).
list_messages: List emails already received in an inbox.
read_message: Read a full email body and attachment list.
list_domains: Show available email domains for inbox creation.
delete_inbox: Delete an inbox and its contents immediately.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@best-tempmail-mcpCreate a temp email and get the verification code from the confirmation email."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
best-tempmail-mcp
MCP server for Best Temp Mail. Gives an AI assistant its own disposable email inboxes, so it can sign up for things, wait for the mail, and read the verification code back to you.
"Create a temp email, sign me up for that newsletter, and tell me the confirmation code."
Install
Add this to your MCP host's configuration. No installation step: npx fetches it on first run.
Claude Desktop (claude\_desktop\_config.json):
{
"mcpServers": {
"best-tempmail": {
"command": "npx",
"args": \["-y", "best-tempmail-mcp"]
}
}
}With an API key, for higher limits and verification code extraction:
{
"mcpServers": {
"best-tempmail": {
"command": "npx",
"args": \["-y", "best-tempmail-mcp"],
"env": { "BTM\_API\_KEY": "btm\_sk\_live\_..." }
}
}
}The same shape works in Cursor, VS Code, Claude Code, and other MCP hosts.
Restart the host after editing the config.
Related MCP server: agent-inbox
Tools
Tool | What it does |
| Create a disposable address |
| Wait up to 55s for mail to arrive |
| Pull the OTP out of a message (paid key) |
| See what has already arrived |
| Read the full body and attachment list |
| Available domains |
| Delete an inbox and its contents |
Without an API key
Everything works except get\_verification\_code, on the free tier: 150 requests per hour and 3 inboxes per day. That is enough to try it properly.
A paid key raises the limit to 2,000 requests per hour, unlocks code extraction, and allows commercial use. See pricing.
What it looks like in use
**You:** Make me a temp email and sign up for the newsletter at example.com
The assistant calls
create\_inbox, getsabc1234@dextde.site, fills in the form, then callswait\_for\_email.**Assistant:** Signed up with abc1234@dextde.site. The confirmation email arrived; your code is 889231.
Configuration
Variable | Purpose |
| Optional. Paid plan key. |
| Optional. Override the API base, for testing. |
Notes
Inboxes expire on their own: 2 hours on the free and Developer plans, 24 hours on Pro. They are receive-only, so nothing can be sent from them.
If a verification code cannot be identified with confidence, the tool says so rather than guessing. A wrong code is worse than none, and the assistant can fall back to read\_message to look at the body itself.
Links
License
MIT
Available Tools
7 toolscreate_inboxCreate a disposable email inboxA
Create a temporary email address that can receive mail. Use this when the user needs an email address for a signup, a trial, or anything they do not want to give a real address to. Returns the address and when it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Optional domain from list_domains. Random if omitted. | |
| username | No | Optional local part, for example 'my-test'. Lowercase letters, digits, dot, underscore and hyphen only. Random if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden, and it does well: it states that the inbox is temporary, can receive mail, and that the response includes the address and expiration time. It does not cover every operational detail such as cleanup or duplicate-name behavior, but the essential lifecycle is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: the core action, the usage context, and the return value. Every sentence adds information, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with no required parameters and no output schema, the description covers what the tool does, when to use it, and what the response contains. It could mention interactions with sibling tools or what happens if a requested domain/username is unavailable, but those are minor gaps given the schema already documents allowed values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage of both optional parameters, including the allowed characters for username and the fact that domain comes from list_domains. The description adds no parameter-specific meaning, so it stays at the baseline expected when the schema is fully documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource: creating a temporary email address that can receive mail. It also clarifies the intended use case (signups, trials, avoiding real addresses), which makes the tool's role unambiguous compared to siblings like list_messages, delete_inbox, and wait_for_email.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool: when the user needs an email address for a signup, trial, or similar situation. It does not mention alternatives or exclusions, but because this is the only creation-focused sibling, the guidance is still clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_inboxDelete an inboxA
Delete an inbox and everything in it. Inboxes expire on their own, so this is only needed when the user wants it gone immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The inbox address to delete. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the destructive and irreversible nature of the operation ('Delete an inbox and everything in it'), which is important since no annotations are provided. It also mentions the immediate effect, though it doesn't explicitly state irreversibility, but the implication is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using just two sentences to convey the action, scope, and usage context. No redundant or extraneous information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context for a simple delete operation: it explains the action, the scope (everything in the inbox), and the typical usage scenario. No output schema is needed, and the parameter is clearly defined, so the description is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'address' is fully described in the schema ('The inbox address to delete'), and the description does not add further semantic detail beyond that. Schema coverage is 100%, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete an inbox and everything in it') with a specific verb and object. It distinguishes itself from sibling tools like create_inbox without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly explains when to use the tool: 'only needed when the user wants it gone immediately', noting that inboxes normally expire on their own, which provides clear guidance on when this tool is appropriate versus relying on expiration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_verification_codeExtract the verification code from an emailA
Pull the verification or one-time code out of a message. Use this after wait_for_email when the user needs a code to complete a signup or login. Requires a paid API key. If no code is found with confidence, that is reported rather than guessed, because a wrong code is worse than none.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The inbox address. | |
| message_id | Yes | Message id from wait_for_email or list_messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description notes two behavioral facts: 'Requires a paid API key' and the no-guessing policy: 'If no code is found with confidence, that is reported rather than guessed, because a wrong code is worse than none.' This gives the agent expectations about authentication prerequisites and failure behavior, but doesn't cover whether the operation is strictly read-only or how the no-code result is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler: action, usage context, key requirement, and failure behavior. The most important information is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-like tool with high schema coverage, the description includes the trigger, required auth, and failure mode. It does not specify the output structure or edge cases like multiple codes, but these are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers both parameters with descriptions ('The inbox address'; 'Message id from wait_for_email or list_messages'). Description reiterates the wait_for_email relationship but adds no new format, constraints, or semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific action 'Pull the verification or one-time code out of a message,' naming the verb, resource, and result. This clearly distinguishes it from siblings like list_messages or read_message by focusing on extraction of a code rather than retrieving whole messages or managing inboxes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit invocation condition: 'Use this after wait_for_email when the user needs a code to complete a signup or login.' This tells the agent when to call it relative to wait_for_email. However, it does not name two or more alternatives or state when not to use other tools like read_message, so it falls short of a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_domainsList available email domainsA
List the domains inboxes can be created on. Only needed when the user wants a specific domain; create_inbox picks one automatically.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates that the tool performs a list operation, which implies a read-only behavior with no side effects. However, it does not explicitly state permissions or output format, but given the simplicity, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using only two sentences to convey the tool's function and usage context. It avoids unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides complete context for a parameterless tool, including its purpose and when it is needed relative to sibling tools. There is no ambiguity or missing information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, so there is nothing to explain. The description does not need to elaborate on any input, making it fully clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: to list domains available for inbox creation. It also differentiates it from create_inbox by noting that create_inbox picks a domain automatically. This makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use the tool, namely when a specific domain is desired, and contrasts it with create_inbox's automatic selection. This gives clear usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesList messages in an inboxA
List the messages currently in an inbox, newest first. Use this to see what has already arrived, rather than waiting for something new.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The inbox address. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose that the tool is non-blocking (it lists messages already arrived rather than waiting) and that results are newest first. However, it does not describe what the response contains, whether messages are returned as summaries or full content, or whether any side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted wording. The core action and ordering are in the first sentence, and the usage distinction is in the second, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter, the description is largely complete: it explains what the tool does, the ordering, and when to use it. The lack of an output schema could make response-shape details useful, but they are not necessary for selecting or invoking this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single parameter 'address' as 'The inbox address.' The description adds only that the tool operates on an inbox, which is implied by the title and schema. This meets the baseline but adds no extra parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('messages in an inbox'), and adds scope ('currently') and ordering ('newest first'). This clearly distinguishes the tool from siblings like read_message, which reads a single message, and wait_for_email, which waits for new arrivals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool 'to see what has already arrived, rather than waiting for something new,' which gives clear guidance relative to wait_for_email. It does not explicitly mention alternatives like read_message or delete_inbox, but the context makes the main distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_messageRead the full contents of a messageA
Read a message's full body and attachment list. Use this when the user wants to see what an email actually says, or when get_verification_code could not find a code.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The inbox address. | |
| message_id | Yes | Message id from wait_for_email or list_messages. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits itself. It clearly states this is a read operation returning the full body and attachment list, which implies non-destructive behavior. It does not explicitly confirm no side effects or mention permissions, but the verb 'Read' and resource scope make the safety profile evident.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The action and resource come first, followed by usage conditions and an explicit alternative. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two required parameters and no output schema, the description provides sufficient context: what it reads, what it returns, and when to use it instead of the key sibling. No critical operational detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both 'address' and 'message_id' described meaningfully. The message_id parameter even notes it comes from wait_for_email or list_messages, which is helpful. The description body adds no extra parameter semantics, but the schema already carries the full load, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('a message's full body and attachment list'), making the tool's purpose unambiguous. It also distinguishes itself from the sibling get_verification_code by addressing the case where code extraction fails. The title reinforces the same purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage conditions: use when the user wants to see an email's actual content, or when get_verification_code could not find a code. It names an alternative tool and specifies the scenario that selects this one, leaving no ambiguity about when to invoke read_message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_emailWait for an email to arriveA
Wait for the next email to arrive at an inbox, up to 55 seconds. Use this straight after triggering a signup or password reset. Returns the message summary, or reports that nothing arrived. Nothing arriving is not an error: the mail may simply be slow, and calling this again continues waiting.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | The inbox address to watch. | |
| timeout | No | Seconds to wait. Defaults to 30, maximum 55. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It clearly states the timeout limit ('up to 55 seconds'), the return behavior ('Returns the message summary, or reports that nothing arrived'), and the critical nuance that a missing email is not an error. The retry semantic 'calling this again continues waiting' goes beyond what the schema conveys and is highly valuable for an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each serving a distinct purpose: action, usage context, return value, and error semantics. It is front-loaded with the core behavior and avoids redundant restatements of the title or schema. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter tool with no output schema, this description is complete. It covers what the tool does, when to use it, what it returns, and how to interpret the empty result. An agent can invoke it correctly and know how to proceed on no result, which is the main uncertainty for a wait operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context that the timeout is used after signup/password reset flows, but it does not add significant meaning beyond the schema's parameter descriptions. The schema already documents address as 'The inbox address to watch' and timeout with default and maximum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Wait for the next email to arrive at an inbox, up to 55 seconds.' The verb 'wait' and resource 'email at an inbox' make the action unambiguous, and the 'arrive' distinction separates it from siblings like list_messages and read_message that handle existing messages. The signup/password reset context reinforces the specific scenario.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: 'Use this straight after triggering a signup or password reset.' It also explains retry behavior with 'calling this again continues waiting.' However, it does not mention alternatives or when not to use it, such as when the email may already have arrived and list_messages would be appropriate, so it stops short of full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.0.0- First observed
create_inbox - First observed
delete_inbox - First observed
get_verification_code - First observed
list_domains - First observed
list_messages - First observed
read_message - First observed
wait_for_email
TDQS
Scored across 7 tools
Each tool targets a distinct stage of the temporary-email workflow: create inbox, list mail, wait for mail, read a message, extract a code, list domains, and delete inbox. Close pairs like list_messages/wait_for_email and read_message/get_verification_code are explicitly differentiated in their descriptions.
All tool names use a consistent snake_case, verb-first convention: create_inbox, list_messages, read_message, delete_inbox, wait_for_email, and get_verification_code. The phrasal wait_for_email still fits the predictable pattern.
Seven tools provide a well-scoped set for a focused temporary-email server. Each tool has a clear role and none feels redundant, while the count stays comfortably within the ideal range.
The surface covers the full temporary-email lifecycle: create an inbox, optionally choose a domain, wait for or list incoming messages, read message content, extract verification codes, and delete the inbox. No significant workflow gap is apparent for a receive-only temp-email service.
Maintenance
Related MCP Connectors
Disposable email inboxes for AI agents — read messages and verification codes.
Task-scoped email inboxes for AI agents: read mail, extract verification codes, and reply.
Disposable email inboxes for AI agents: create an address, wait for the OTP or verify link.
Real email inboxes for AI agents: create inboxes, catch verification codes, extract OTPs, reply.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create disposable email inboxes and automatically extract OTPs, magic links, and verification codes from incoming emails.8 npmMIT
- AlicenseAqualityFmaintenanceEnables AI agents to create temporary email addresses, receive confirmation emails, and extract verification links, automating sign-up and email verification workflows without manual intervention.621 npm61MIT
- AlicenseAqualityAmaintenanceProvides disposable email inboxes for AI agents to automatically receive and extract OTPs and magic links, enabling seamless email verification during autonomous workflows.353 npmMIT
- AlicenseNot gradedqualityCmaintenanceDisposable email for humans and AI agents. Enables AI agents to create mailboxes and receive verification emails through an MCP server.36MIT