EngageLab Agent Email MCP Server
OfficialClick 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., "@EngageLab Agent Email MCP ServerList my mailboxes, then send an email to alice@example.com saying the invoice is approved."
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.
EngageLab Agent Email MCP Server
English | 简体中文
Official EngageLab Email project.
Send, receive, and reply to email from AI agents — through the Model Context Protocol.
Each agent gets its own mailbox: a real address that sends and receives, with conversations grouped into threads so your agent has context. Works with Claude Desktop, Claude Code, Cursor, Cowork, and any MCP-compatible client.
{
"mcpServers": {
"engagelab-email": {
"command": "npx",
"args": ["-y", "@engagelabemail/mcp"],
"env": { "ENGAGELAB_EMAIL_SECRET_KEY": "sk_sg_your_key" }
}
}
}Why
Most email APIs are send-only. Agents that need to have a conversation over email — support, scheduling, approvals — need an inbox.
Send & receive — the agent owns a dedicated mailbox, not a bolted-on parse webhook
Thread-aware — replies group into conversations, so the agent sees full history
Sandbox mode — test agent flows without emailing real humans
One env var — no OAuth dance for local use; region inferred from the key
Related MCP server: Envoi MCP
Tools
Tool | What it does | |
Discover |
| List mailboxes; call this first to get IDs |
Send |
| New email (text/html, cc/bcc, attachments, sandbox) |
| Reply to a message — recipients & thread inferred | |
Receive |
| Inbound mail, filter by mailbox/keyword |
| Full message details by UID | |
| One-shot poll for new mail | |
Threads |
| Browse conversations |
Quickstart
Smithery / MCPB
For local stdio distribution, build an MCPB bundle:
npm run build:mcpbThe bundle is generated at dist/engagelab-agent-email.mcpb and can be uploaded through Smithery publishing.
Official MCP Registry
EngageLab Agent Email is also listed in the official MCP Registry. Clients that consume the Registry can find it by the server name io.github.R1ghtHereWaiting/engagelab-email; the underlying npm package remains @engagelabemail/mcp.
1. Get a Secret Key. Create an EngageLab account and generate a key from the console (format sk_sg_xxx — the prefix selects the region). Or use the CLI: engagelab-email-cli login creates one via browser.
2. Create a mailbox. In the console, create a mailbox for your agent (shared subdomain is instant; custom domains need DNS verification). Programmatic mailbox creation is on the roadmap — see Troubleshooting if list_mailboxes returns empty.
3. Register the server.
Claude Desktop — add the JSON block above to claude_desktop_config.json.
Claude Code:
claude mcp add engagelab-email \
-e ENGAGELAB_EMAIL_SECRET_KEY=sk_sg_your_key \
-- npx -y @engagelabemail/mcpThen ask your agent:
List my mailboxes, then send an email from the first one to bob@example.com saying the invoice is approved.
A typical agent loop for a support bot:
check_new_messages() → [messageUids]
get_message(uid) → body, attachments
list_thread_messages(threadId) → full conversation context
reply_email(uid, { text: ... }) → response lands in the same threadConfiguration
Environment variable | Required | Description |
| Yes | Secret Key starting with |
| No | Override the API base URL. Inferred from the key region: |
Limits: up to 10 attachments / 10MB total per message (base64-encoded in the tool schema).
Troubleshooting
list_mailboxesreturns an empty list — your account has no mailbox yet. Create one in the EngageLab console (see Quickstart step 2). Agents cannot self-provision mailboxes yet.401 /
code 100101— the Secret Key is wrong or revoked. CheckENGAGELAB_EMAIL_SECRET_KEYand that the key's region prefix (sk_sg_/sk_tr_) matches the endpoint you use.Could not determine API base URL — the key's region prefix isn't recognized. Set
ENGAGELAB_EMAIL_BASE_URLexplicitly.Reply shows up as a new conversation — use
reply_email(notsend_email) so In-Reply-To headers and threading stay intact.
Roadmap
Hosted MCP (OAuth) for zero-config remote use
Programmatic mailbox creation via Secret Key
Webhook push (no polling) for
check_new_messagesURL-based attachment references (no base64 in context)
Run from source
git clone https://github.com/Metaverse-Cloud/engagelab-email-mcp
cd engagelab-email-mcp
npm install && npm run build
ENGAGELAB_EMAIL_SECRET_KEY=sk_sg_xxx node dist/index.cjsRelated
EngageLab Agent Email CLI — same mailboxes from the terminal,
--jsonoutput for agentsEngageLab Node SDK / Python SDK — send email from code
License
Available Tools
9 toolscheck_new_messagesA
Poll for new inbound messages received since the last check (one-shot; does not block). Use this to monitor an inbox for new email.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return | |
| mailboxId | No | Filter by mailbox ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It reveals that the operation is one-shot, does not block, and depends on state from 'the last check'—useful behavioral traits beyond the schema. It does not mention whether polling has side effects such as marking messages read, but the core non-blocking statefulness is conveyed.
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, each earning its place: the first defines the operation and non-blocking behavior, the second states the intended use case. No filler or redundant restatement.
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 polling tool with two optional parameters and no output schema, the description adequately conveys what the tool does and when to use it. It could clarify the meaning of 'last check' or the return shape, but the core calling context is sufficiently 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?
Schema description coverage is 100%, so the baseline is 3. Both limit and mailboxId are already described in the schema, and the tool description adds no additional parameter-level meaning or usage nuance.
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?
States a specific verb ('Poll') and a specific resource ('new inbound messages received since the last check'), and clearly implies a one-shot, non-blocking retrieval. This differentiates it from the sibling list_inbound_messages by emphasizing the 'since last check' scope.
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?
Provides a clear usage context: 'Use this to monitor an inbox for new email.' It does not explicitly name exclusions or alternatives like list_inbound_messages, but the intended polling/monitoring scenario is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messageA
Get full details of one inbound message by its UID, including body and attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| messageUid | Yes | Message UID from list_inbound_messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the safety profile. It indicates a read-only 'Get' operation and discloses the return scope (body and attachments), but it does not mention error behavior, auth, or any side effects. For a simple retrieval this is minimally sufficient.
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?
A single front-loaded sentence with no filler. 'Get full details... by its UID, including body and attachments' delivers purpose and return scope efficiently.
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?
With one required parameter and no output schema, the description covers the key return contents (body and attachments) and the input source. It omits only edge-case behavior like handling invalid or missing UIDs, which is minor for a low-complexity fetch tool.
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 input schema already documents messageUid fully with 100% coverage, including its source ('from list_inbound_messages'). The description adds only the 'by its UID' phrasing, which restates the schema, so the baseline of 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 states a specific verb (Get), resource (one inbound message), scope (by UID), and content (full details including body and attachments). It clearly distinguishes this from list_inbound_messages by focusing on a single message's full details.
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 parameter description 'Message UID from list_inbound_messages' implies the tool is used after listing messages, and the tool name contrasts with list/get_thread siblings. However, the description does not explicitly state when to choose this over get_thread or reply_email, leaving usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threadB
Get details of one conversation thread.
| Name | Required | Description | Default |
|---|---|---|---|
| threadId | Yes | Thread ID from list_threads |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get' implies a read operation, but the description does not disclose what 'details' includes, whether the response contains message content or metadata, or any potential limitations.
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?
A single, front-loaded sentence with no filler. It uses a clear verb and object and earns its place without unnecessary elaboration.
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?
Adequate for a simple one-parameter getter: the agent knows the resource and the required input. However, with no output schema and no annotations, 'details' is vague, and the description does not clarify what the returned thread details include or how to interpret them.
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 input schema already explains threadId and its source ('Thread ID from list_threads'). The tool description adds no additional parameter-level meaning beyond what the schema provides.
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?
States a specific verb and resource: 'Get details of one conversation thread.' The phrase 'one conversation thread' clearly separates it from siblings like get_message (message-level) and list_threads (list-level), so an agent can distinguish it without opening schemas.
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?
No guidance on when to use this tool versus alternatives such as get_message or list_thread_messages. The only contextual hint is in the schema, where threadId is described as coming from list_threads, but the description itself provides no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_inbound_messagesB
List inbound (received) email messages, newest first. Optionally filter by mailbox and keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| pageNo | No | Page number, starts at 1 | |
| keyword | No | Search keyword | |
| pageSize | No | Page size | |
| mailboxId | No | Filter by mailbox ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions ordering ('newest first') and optional filters, but omits important behaviors such as pagination semantics, error handling, authorization requirements, or return format. For a listing tool with no output schema, this is insufficient for an agent to predict consequences reliably.
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 a single, efficient sentence. It front-loads the primary purpose and includes the ordering detail. There is zero redundancy or filler, making it appropriately concise and well-structured.
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?
Given the tool has 4 parameters, no output schema, and no annotations, the description is too sparse. It does not specify the response shape (e.g., whether it returns full messages or summaries, pagination metadata), nor does it mention potential side effects or prerequisites. An agent would lack critical context to correctly interpret results or handle edge cases.
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% and each parameter has a basic description. The tool description adds the notion that mailboxId and keyword are filters, but does not elaborate on syntax, default values, or interplay. Since the schema already documents parameters, the description adds minimal value beyond confirming their filter role, keeping the score at baseline 3.
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 verb 'List' and the resource 'inbound (received) email messages', with explicit ordering 'newest first'. This distinguishes it from siblings like get_message (single message), list_mailboxes, and send_email. The purpose is unambiguous and self-contained.
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 does not provide any guidance on when to use this tool versus alternatives such as list_threads or check_new_messages. It implies usage for listing messages but gives no exclusions or conditions. The only usage hint is the optional filtering, which is more about parameters than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesA
List all mailboxes available to the authenticated account. Each mailbox has its own address for sending and receiving email. Call this first to discover mailbox IDs used by other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits on its own. It explains that each mailbox has an address and that the tool is a prerequisite for other operations, but it does not explicitly state whether the operation is read-only or free of side effects. It also omits any mention of potential large result sets or output format, leaving some behavioral expectations implicit.
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 filler. The first sentence states the core action and context; the second explains the practical purpose (discovering IDs). Information is front-loaded and every clause 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 listing tool with no parameters and no output schema, the description covers the essential points: what is listed (mailboxes), ownership (authenticated account), and why it matters (IDs for other tools). It does not describe the result shape or pagination, but that is a minor gap given the low complexity and the fact that no output schema is provided.
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 zero parameters, so schema coverage is trivially 100% and there is nothing to document. The description adds valuable usage context (that this is a first-step discovery tool) beyond the empty schema, which is appropriate. The baseline of 4 for zero-parameter tools 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 states a specific verb ('List') and resource ('mailboxes'), and clarifies scope ('available to the authenticated account'). It explicitly positions the tool as a discovery step ('Call this first to discover mailbox IDs'), which distinguishes it from sibling tools like get_message or send_email that operate on messages rather than mailboxes.
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 timing guidance: 'Call this first' to obtain IDs needed by other tools. This clearly instructs the agent when to use it and why, eliminating ambiguity about its role relative to the sibling tools. No exclusions are needed since the purpose is self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_thread_messagesA
List all messages inside a conversation thread, oldest first.
| Name | Required | Description | Default |
|---|---|---|---|
| pageNo | No | Page number, starts at 1 | |
| pageSize | No | Page size | |
| threadId | Yes | Thread ID from list_threads |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the behavioral burden. It discloses the 'oldest first' ordering and that it lists all messages, which are useful behavioral details, but it omits pagination behavior, error cases, and any side-effect or auth implications.
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 a single, front-loaded sentence. It conveys the action, scope, and ordering with no filler, and every word contributes meaning.
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 tool is simple and its parameters are well documented, but with no annotations and no output schema, the description leaves some gaps: pagination defaults, response shape, and how it differs from get_thread are not clarified. It is adequate but not fully self-sufficient.
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 schema already documents threadId, pageNo, and pageSize well, including the note that threadId comes from list_threads. The description adds little beyond what the schema already provides, so the 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 states a specific action and resource: 'List all messages inside a conversation thread, oldest first.' It clearly conveys the scope and order, though it does not explicitly distinguish itself from the sibling get_thread tool.
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 intended use is implied: call this when you need the messages within a thread. However, it does not explicitly identify when to choose this over related tools like get_thread or list_threads, nor does it state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threadsC
List conversation threads. A thread groups messages exchanged with the same counterpart.
| Name | Required | Description | Default |
|---|---|---|---|
| pageNo | No | Page number, starts at 1 | |
| keyword | No | Search keyword | |
| pageSize | No | Page size | |
| mailboxId | No | Filter by mailbox ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, but it only says 'List conversation threads' and defines a thread. It does not disclose pagination behavior, ordering, result shape, or any access constraints, leaving important operational details unspecified.
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 short sentences with no filler; the primary action is front-loaded and the defining clause is immediately useful. It could be slightly more informative, but as written it is appropriately compact.
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 tool has no output schema and no annotations, yet the description does not explain what a successful response contains, how pagination works, or how filters combine. While the parameters are schema-documented, an agent is left without enough operational context to fully anticipate the tool's behavior.
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 parameter meanings are already documented in the input schema. The description adds no additional semantic detail beyond the schema, matching the baseline for full coverage.
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 clear verb ('List') and resource ('conversation threads'), and adds a useful definition of what a thread is. It does not explicitly differentiate itself from siblings like get_thread or list_thread_messages, but the intent is 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?
No usage context is provided: the description does not say when to choose list_threads over list_thread_messages, get_thread, or list_inbound_messages. It also fails to mention whether filtering by mailbox or keyword is the intended way to narrow results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_emailA
Reply to an inbound message. Recipients are inferred from the original message; additional cc/bcc can be added. Provide either text or html body.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC addresses | |
| bcc | No | BCC addresses | |
| html | No | HTML body | |
| text | No | Plain text body | |
| replyTo | No | Reply-To addresses | |
| sandbox | No | Send in sandbox mode without real delivery | |
| subject | No | Email subject | |
| messageUid | Yes | UID of the message to reply to | |
| attachments | No | Up to 10 attachments, 10MB total | |
| previewText | No | Preheader / preview text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It explains that recipients are inferred, that extra cc/bcc can be added, and that the body can be text or HTML. It does not mention that this sends a real email or describe side effects, but the core reply behavior is adequately conveyed.
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 concise sentences, front-loaded with the primary action and the most important inference behavior. Every sentence earns its place and no schema details are unnecessarily repeated.
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 10-parameter action with no output schema and no annotations, the description covers the essential invocation semantics: target an inbound message, rely on inferred recipients, and provide a body. It omits details like default subject or return behavior, but the schema covers the parameters and the core usage is clear enough.
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%, so the baseline is 3. The description adds value by clarifying that recipients come from the original message and that the text or html body must be provided. This goes beyond the schema's bare field names and helps an agent choose between the body parameters.
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 verb and resource: 'Reply to an inbound message.' It also adds the key differentiator that recipients are inferred from the original message, which clearly separates it from send_email. This lets an agent identify the tool's role without opening the schema.
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 clearly scopes this tool to replying to an inbound message, which tells an agent when to use it. It does not explicitly mention send_email as the alternative for new outbound messages, but the context is clear enough that no exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailA
Send a new email from one of your EngageLab mailboxes. Provide either text or html body. Recipients are arrays of email addresses. Use sandbox=true for testing without real delivery.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC addresses | |
| to | Yes | Recipient email addresses | |
| bcc | No | BCC addresses | |
| from | No | Sender email address | |
| html | No | HTML body | |
| text | No | Plain text body | |
| replyTo | No | Reply-To addresses | |
| sandbox | No | Send in sandbox mode without real delivery | |
| subject | No | Email subject | |
| mailboxId | Yes | Mailbox ID to send from (see list_mailboxes) | |
| attachments | No | Up to 10 attachments, 10MB total | |
| previewText | No | Preheader / preview text |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals a key behavior: sandbox mode avoids real delivery. However, it does not state that non-sandbox sends are real, irreversible external actions, nor does it mention response behavior, error cases, or required authentication. It adds some useful context but leaves important side effects unstated.
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 sentences with no filler. The core action is front-loaded, followed by body type guidance, recipient format, and sandbox usage. Every sentence earns its place and directly aids invocation.
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 covers the main usage patterns but leaves gaps: it does not say what happens if both text and html are provided, whether at least one body is required (schema only requires mailboxId and to), or what the function returns. It also does not mention that non-sandbox sends are real and irreversible, which is particularly important for a 12-parameter sending tool without an output schema.
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%, so the baseline is 3. The description adds meaning beyond the schema by clarifying that text and html are alternatives ('either'), that recipients are arrays, and that sandbox=true disables real delivery. This helps an agent choose and fill parameters correctly, exceeding the baseline.
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 a specific verb and resource: 'Send a new email from one of your EngageLab mailboxes.' The word 'new' explicitly distinguishes this from the sibling reply_email, and 'from one of your EngageLab mailboxes' ties it to list_mailboxes. This makes the tool's purpose unmistakable.
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 useful operational guidance like 'Provide either text or html body' and 'Use sandbox=true for testing without real delivery,' but it does not explicitly state when to use this tool versus the sibling reply_email or when not to use it. The usage context is implied through 'new email,' but no exclusions or alternatives are named.
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.
9 tool updates
v1.0.0- First observed
check_new_messages - First observed
get_message - First observed
get_thread - First observed
list_inbound_messages - First observed
list_mailboxes - First observed
list_thread_messages - First observed
list_threads - First observed
reply_email - First observed
send_email
TDQS
Scored across 9 tools
Each tool maps to a distinct resource/action: mailbox discovery, message listing/retrieval, sending/reply, and thread navigation. The only mild overlap is between check_new_messages and list_inbound_messages, but their descriptions clearly separate the polling behavior from general listing.
All tool names consistently follow the snake_case verb_noun pattern (get_message, list_mailboxes, send_email, reply_email, etc.), with no mixed conventions or vague verbs.
Nine tools is well within the ideal range for an email-focused server, covering mailbox discovery, message operations, sending, replying, and threads without unnecessary bloat.
The core email lifecycle is covered: discover mailboxes, list/read inbound messages, send new emails, reply to existing ones, and inspect threads. Minor gaps include no way to list sent messages and no support for sending attachments, but these are not fatal for typical agent email workflows.
Maintenance
Related MCP Connectors
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Related MCP Servers
- AlicenseAqualityDmaintenanceEmail infrastructure for AI agents — create inboxes, send/receive email, search messages, and manage threads via MCP tools.1015 npm2MIT
- AlicenseAqualityDmaintenanceProvides AI agents with a real email address to send, receive, and manage emails via the Envoi.work platform. It enables seamless email communication, including inbox management and threaded replies, directly within MCP-compatible clients.55 npmMIT

InboxAPI CLIofficial
AlicenseNot gradedqualityCmaintenanceProvides an AI agent with its own email address to send, receive, and manage emails via MCP. No email server setup required.54 npm12MIT- FlicenseNot gradedqualityCmaintenanceGive AI agents their own email inboxes. Create, send, receive, and manage email entirely via MCP tools.-