EngageLab Agent Email MCP Server
OfficialEngageLab Agent Email MCP Server
Английский | 简体中文
Отправляйте, получайте и отвечайте на электронные письма от AI-агентов — через Model Context Protocol.
Каждый агент получает собственный почтовый ящик: реальный адрес, который отправляет и получает, с разговорами, сгруппированными в цепочки, чтобы у вашего агента был контекст. Работает с Claude Desktop, Claude Code, Cursor, Cowork и любым MCP-совместимым клиентом.
{
"mcpServers": {
"engagelab-email": {
"command": "npx",
"args": ["-y", "@engagelabemail/mcp"],
"env": { "ENGAGELAB_EMAIL_SECRET_KEY": "sk_sg_your_key" }
}
}
}Зачем
Большинство почтовых API работают только на отправку. Агентам, которым нужно вести переписку по электронной почте — поддержка, планирование, согласования — нужен входящий ящик.
Отправка и получение — агент владеет выделенным почтовым ящиком, а не прикрученным вебхуком для парсинга
Работа с цепочками — ответы группируются в разговоры, поэтому агент видит полную историю
Песочница — тестируйте сценарии агента, не отправляя письма реальным людям
Одна переменная окружения — никаких OAuth-танцев для локального использования; регион определяется по ключу
Related MCP server: Envoi MCP
Инструменты
Инструмент | Что делает | |
Обзор |
| Список почтовых ящиков; вызовите это первым, чтобы получить ID |
Отправка |
| Новое письмо (текст/html, cc/bcc, вложения, песочница) |
| Ответ на сообщение — получатели и цепочка определяются автоматически | |
Получение |
| Входящая почта, фильтр по ящику/ключевому слову |
| Полные детали сообщения по UID | |
| Разовый опрос на наличие новой почты | |
Цепочки |
| Просмотр разговоров |
Быстрый старт
1. Получите секретный ключ. Создайте аккаунт EngageLab и сгенерируйте ключ в консоли (формат sk_sg_xxx — префикс выбирает регион). Или используйте CLI: engagelab-email-cli login создаст его через браузер.
2. Создайте почтовый ящик. В консоли создайте почтовый ящик для вашего агента (общий поддомен создаётся мгновенно; для собственных доменов требуется проверка DNS). Программное создание почтовых ящиков в планах — см. Устранение неполадок, если list_mailboxes возвращает пустой список.
3. Зарегистрируйте сервер.
Claude Desktop — добавьте JSON-блок выше в claude_desktop_config.json.
Claude Code:
claude mcp add engagelab-email \
-e ENGAGELAB_EMAIL_SECRET_KEY=sk_sg_your_key \
-- npx -y @engagelabemail/mcpЗатем спросите вашего агента:
Перечислите мои почтовые ящики, затем отправьте письмо с первого на bob@example.com с сообщением, что счёт одобрен.
Типичный цикл агента для бота поддержки:
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 threadКонфигурация
Переменная окружения | Обязательно | Описание |
| Да | Секретный ключ, начинающийся с |
| Нет | Переопределить базовый URL API. Определяется по региону ключа: |
Ограничения: до 10 вложений / 10 МБ на сообщение (в схеме инструмента — в base64).
Устранение неполадок
list_mailboxesвозвращает пустой список — в вашем аккаунте ещё нет почтового ящика. Создайте его в консоли EngageLab (см. шаг 2 в «Быстром старте»). Агенты пока не могут создавать почтовые ящики самостоятельно.401 /
code 100101— секретный ключ неверен или отозван. ПроверьтеENGAGELAB_EMAIL_SECRET_KEYи что префикс региона ключа (sk_sg_/sk_tr_) соответствует используемой конечной точке.Не удалось определить базовый URL API — префикс региона ключа не распознан. Укажите
ENGAGELAB_EMAIL_BASE_URLявно.Ответ отображается как новый разговор — используйте
reply_email(а неsend_email), чтобы заголовки In-Reply-To и цепочки сохранялись.
Дорожная карта
Хостинг MCP (OAuth) для удалённого использования без настройки
Программное создание почтовых ящиков через секретный ключ
Webhook-уведомления (без опроса) для
check_new_messagesСсылки на вложения по URL (без base64 в контексте)
Запуск из исходного кода
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.cjsСвязанные проекты
EngageLab Agent Email CLI — те же почтовые ящики из терминала, вывод
--jsonдля агентовEngageLab Node SDK / Python SDK — отправка писем из кода
Лицензия
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.102 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.54 npmMIT

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