@openmaxai/email-mcp
Enables an AI agent to send, receive, search, and manage Gmail email over SMTP/IMAP/POP3 using an app password, including replying, listing messages, reading messages, and managing read/unread flags.
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., "@@openmaxai/email-mcpsearch my inbox for unread emails from Alice and summarize them"
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.
@openmaxai/email-mcp
A stdio MCP server that lets an AI agent send email over SMTP and read email over IMAP or POP3, using any provider that supports app passwords / authorization codes (QQ Mail, 163, Tencent Exmail, Aliyun enterprise mail, Outlook, Gmail, self-hosted servers...).
One connection per tool call, closed right after (no long-lived IDLE sessions).
Every network operation has a timeout.
All configuration comes from environment variables.
EMAIL_PASSWORDis the only secret.Logs go to stderr only (stdout carries the MCP protocol). Passwords and message bodies are never logged.
Requires Node.js 20.11 or newer.
Install (Claude Code)
claude mcp add-json email '{
"command": "npx",
"args": ["-y", "@openmaxai/email-mcp@0.1.0"],
"env": {
"EMAIL_USER": "me@example.com",
"EMAIL_PASSWORD": "<app password / authorization code>",
"RECEIVE_PROTOCOL": "imap",
"IMAP_HOST": "imap.example.com", "IMAP_PORT": "993", "IMAP_SECURE": "ssl",
"SMTP_HOST": "smtp.example.com", "SMTP_PORT": "465", "SMTP_SECURE": "ssl"
}
}'To receive over POP3 instead, set "RECEIVE_PROTOCOL": "pop3" and replace the IMAP_* keys with "POP3_HOST": "pop.example.com", "POP3_PORT": "995", "POP3_SECURE": "ssl".
Any other MCP client works the same way: run npx -y @openmaxai/email-mcp with the environment below.
Related MCP server: mcp-imap
Configuration
Variable | Required | Default | Notes |
| yes | Login name, usually the full email address. Also used as the From address. | |
| yes | App password / authorization code. The only secret. | |
| no | Display name for the From header. | |
| no |
|
|
| if imap | ||
| no | 993 (ssl) / 143 | |
| no | from port, else |
|
| if pop3 | ||
| no | 995 (ssl) / 110 | |
| no | from port, else |
|
| yes | ||
| no | 465 (ssl) / 587 (starttls) / 25 (none) | |
| no | from port, else |
|
| no |
| Verify server TLS certificates. Set to |
| no |
| IMAP only: after sending, save a copy (marked read, Bcc kept) to the Sent folder. |
| no | working directory + OS temp dir | Directories that attachments may be read from, separated by |
| no |
| Size limit for each attachment and for the total per message. |
| no | Other addresses of this mailbox, comma-separated. Excluded from reply-all recipients. | |
| no |
| Timeout for each tool call's network work (1000 to 600000). |
| no |
|
|
Security from the port. If *_SECURE is not set but *_PORT is, the security mode follows the port: SMTP 465 is ssl, 587 and 25 are starttls; IMAP 993 is ssl, 143 is starttls; POP3 995 is ssl. Other ports default to ssl. POP3 on port 110 is plaintext, so it needs an explicit POP3_SECURE=none. An explicit *_SECURE always wins.
starttls requires the upgrade: the connection fails if the server does not offer STARTTLS. none sends credentials in plaintext and logs a warning; use it only for local test servers.
The configuration is checked at startup. If something is missing or invalid, the server exits with code 2 and lists every problem it found. The password is never printed.
Provider presets
Before you start, most providers require you to enable IMAP/SMTP (or POP3/SMTP) in the web mail settings and to use an authorization code / app password instead of your normal login password.
Provider | IMAP | POP3 | SMTP | Notes |
QQ Mail ( |
|
|
| Settings → Account → enable IMAP/SMTP, then generate an authorization code (授权码). |
NetEase 163 ( |
|
|
| Settings → POP3/SMTP/IMAP → enable, then use the authorization code (授权码). |
Tencent Exmail ( |
|
|
| Enable IMAP/SMTP in client settings. If "secure login" is on, create a client-specific password (客户端专用密码). |
Aliyun enterprise mail |
|
|
| The admin may need to allow IMAP/POP/SMTP. Use a third-party client password if one is required. |
Outlook / Microsoft 365 |
|
|
| Needs an app password (account with 2-step verification). Many Microsoft 365 tenants turn off basic auth for IMAP/POP/SMTP, and this server does not support OAuth. |
Gmail |
|
|
| Turn on 2-Step Verification, then create an App Password. Enable IMAP/POP in Gmail settings. |
Provider settings can change. Check the provider's help pages if a connection fails.
Tools
Tool | Available | Description |
| always |
|
| always | Reply to a message by |
| always |
|
| always |
|
| always |
|
| IMAP only | Folders with message and unseen counts. |
| IMAP only |
|
Reading a message never marks it as read. Use mark_read to do that.
Sent folder. The Sent folder is found through IMAP SPECIAL-USE \Sent. If the server doesn't advertise one, the first folder named Sent, Sent Messages, Sent Items, 已发送 or 已发送邮件 is used. If none of these exists, no folder is created and the result carries a warning.
POP3 limitations
Only
INBOXexists. Any other folder returnsINVALID_INPUT.uidis the POP3 UIDL value (a string).POP3 has no read/unread flags:
seenisnull,flagsis empty, andunread_onlyreturns the newest messages with anotesaying the filter is not supported.POP3 has no server-side search.
search_emailsdownloads and filters the newest 200 messages locally. Older messages are not searched.list_foldersandmark_readare not registered.
Errors
Failed tool calls return isError: true with a JSON body {"error": {"code", "message"}}. The codes are stable:
Code | Meaning |
| Wrong user/password, IMAP/SMTP not enabled, or an authorization code is required. The message includes a hint for the provider, detected from the host name. |
| DNS failure, connection refused or reset, or a TLS/certificate problem. The message suggests port/security fixes. |
| The SMTP server rejected the recipients or the message. |
| No such message (uid / Message-ID) or folder. |
| Bad arguments, for example a missing body, an unreadable attachment or a bad date. |
| The server did not respond within |
| Anything else. Set |
Security notes
The only secret is
EMAIL_PASSWORD. It is removed from every error message and log line.TLS certificates are verified by default.
Attachments can only be read from the allowed directories: the working directory and the OS temp dir, or
EMAIL_ATTACHMENT_ROOTS. Paths are resolved withrealpath, so../traversal and symlinks that point outside those directories are rejected.Message bodies, subjects and addresses are never written to logs.
Development
npm install
npm run build
npm test # unit tests
npm run test:integration # needs Docker: starts greenmail/standalone automaticallyIntegration tests start a throwaway GreenMail container. To use an existing GreenMail instance instead, set GREENMAIL_HOST (and optionally GREENMAIL_SMTP_PORT, GREENMAIL_IMAP_PORT, ...).
License
MIT
Available Tools
7 toolsget_emailGet emailA
Read one message by uid. format=full returns text/html bodies; format=headers returns only headers. include_attachments=true saves attachments to a private temp dir and returns their paths.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message uid as returned by list_emails / search_emails (IMAP UID, or POP3 UIDL) | |
| folder | No | Mailbox folder (IMAP). POP3 only supports INBOX. | INBOX |
| format | No | full | |
| include_attachments | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It does disclose format-dependent return content and the side effect of saving attachments to a private temp dir. However, it does not state whether fetching alters read/seen state, how the temp dir is cleaned up, or whether any access permissions are needed. The disclosure is partial rather than complete.
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 compact sentences, front-loaded with the core operation, and every clause adds a distinct behavioral detail. No filler or redundancy.
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?
No output schema or annotations exist, so the description must fully explain return behavior. It covers bodies, headers, and attachment paths, but omits other returned message fields (subject, from, date, flags) and does not clarify read-state side effects. Adequate for a basic getter, but with gaps an agent would have to discover at runtime.
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 only 50%, and the description compensates well by explaining 'format=full' vs 'format=headers' and what 'include_attachments=true' does. Since uid and folder already have schema descriptions, the added value for the remaining parameters lifts this above 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?
States a specific verb and resource: 'Read one message by uid.' This clearly distinguishes it from sibling list/search tools, which operate over collections of messages. The scope is unambiguous and actionable.
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 implies the intended use case — you have a UID and want a specific message — but it never names alternatives or says when not to use it. The schema's mention that UIDs come from list_emails/search_emails adds context, but the description itself provides no explicit routing between siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsList emailsB
List the newest messages in a folder (via IMAP), newest first. Returns summaries: uid, from, to, subject, date, flags/seen, snippet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| folder | No | Mailbox folder (IMAP). POP3 only supports INBOX. | INBOX |
| unread_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It conveys read-only behavior through 'List' and tells the agent what is returned, including flags/seen. It does not explicitly state that nothing is modified or marked as read, and it omits the POP3-only-INBOX limitation that appears in the schema.
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. It front-loads the core action and ordering, then gives the concrete return-field list, making every sentence informative.
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?
There is no output schema, so the description appropriately lists the returned summary fields. Combined with the schema's defaults and folder constraints, the tool is reasonably complete for a simple listing operation, though it could add a note about non-mutating behavior or protocol limits.
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 only 33%, and the description does not compensate for the undocumented limit and unread_only parameters. The phrase 'newest messages' adds slight ordering context, but it does not explain how limit or unread_only change the result beyond what their names and schema defaults already imply.
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 and resource: it lists the newest messages in a folder and returns summaries with specific fields. It is distinct from obvious siblings by indicating summaries rather than full messages, but it does not explicitly contrast itself with sibling tools like get_email or search_emails.
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: use this when you want newest message summaries for a folder. However, the description gives no explicit guidance on when to choose search_emails, get_email, or mark_read instead, and it does not state exclusions such as not being for full-message retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersList foldersA
List IMAP folders with message / unseen counts.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 adds useful context by stating that folder listing includes message and unseen counts, which is beyond what a bare 'list folders' would imply. However, it does not disclose output structure, hierarchy, or any potential side effects, though 'list' inherently suggests a read-only operation.
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 sentence with no filler. It front-loads the verb and resource and includes the key detail about counts. Every word earns its place for a tool of this simplicity.
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 that there is no output schema and no annotations, the description is the sole source of information. It tells the agent it will receive counts, which is helpful, but it does not explain the return format or scope (e.g., all folders vs. subscribed). For a zero-parameter tool this is adequate but leaves some uncertainty about what the response will look like.
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, and the schema is empty. Per calibration, a zero-parameter tool receives a baseline of 4 since there is nothing to explain. The description does not need to compensate for any missing parameter documentation.
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 uses a specific verb ('List') and resource ('IMAP folders') and adds the distinguishing detail 'with message / unseen counts'. This clearly separates it from sibling tools like list_emails, so an agent can select it without ambiguity.
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 implies the tool is for folders, not emails, by saying 'IMAP folders'. While it does not explicitly name alternatives or exclusions, the context is sufficiently clear for an agent to know when to use it, especially given sibling names like list_emails and search_emails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_readMark read / unreadA
Set or clear the \Seen flag on a message.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | Message uid as returned by list_emails / search_emails (IMAP UID, or POP3 UIDL) | |
| read | No | ||
| folder | No | Mailbox folder (IMAP). POP3 only supports INBOX. | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It clearly states the core mutation: setting or clearing the \Seen flag. However, it omits any side effects, permission requirements, or failure behavior that would be useful for a mutation tool with no annotation support.
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 one short, front-loaded sentence with no filler. Every word contributes meaning, and the action verb appears first.
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 three-parameter tool with no output schema, the definition is nearly complete. The only notable gap is the lack of explicit when-to-use guidance relative to the sibling tools, but the low complexity and adequate schema coverage keep this from being a major issue.
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 67%, covering uid and folder. The phrase 'Set or clear' effectively explains the undocumented read parameter's two states, compensating for the schema gap. Combined with the default values, an agent has enough parameter understanding to invoke the tool correctly.
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 uses a specific verb ('Set or clear') and a specific resource ('\Seen flag on a message'), making the tool's purpose unambiguous. It distinguishes itself from the sibling email tools, which are about sending, replying, listing, or searching rather than changing read state.
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?
There is no guidance about when to use this tool versus the sibling tools, nor any exclusions or prerequisites. The intended usage is only implied by the tool name and title, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_emailReply to emailA
Reply to a received message (identified by uid or message_id). Sets In-Reply-To / References so the reply stays in the same thread, and prefixes the subject with "Re:".
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| bcc | No | ||
| uid | No | Message uid as returned by list_emails / search_emails (IMAP UID, or POP3 UIDL) | |
| html | No | ||
| text | No | ||
| folder | No | Mailbox folder (IMAP). POP3 only supports INBOX. | INBOX |
| reply_all | No | Also reply to the original To/Cc recipients (excluding yourself) | |
| message_id | No | Message-ID header of the original, e.g. <abc@example.com> | |
| attachments | No | Local file paths to attach. Only files under the allowed directories (working directory and the temp dir by default) can be attached. |
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 usefully reveals that it modifies threading headers and subject, but it does not state that it sends an email on behalf of the authenticated account, any irreversible side effects, or what the tool returns. This is a meaningful gap for a sending-like mutation tool.
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 core action is front-loaded, and the threading/subject behavior is stated in the second sentence without unnecessary elaboration. 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 tool with 9 optional parameters and no output schema, the description covers the main purpose and important threading behavior but omits return values, send-side effects, and body/recipient expectations. An agent can likely invoke it correctly for a simple reply, but several edge behaviors remain implicit.
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 56%, so the schema already documents several parameters such as uid, folder, reply_all, message_id, and attachments. The description adds value by explaining why uid/message_id matter and how threading works, but it does not clarify un-described parameters like cc, bcc, html, or text. It provides useful but incomplete parameter context.
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: it replies to a received message identified by uid or message_id. It also adds distinguishing detail about thread preservation through In-Reply-To/References and subject prefixing, which clearly separates it from sibling tools like send_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 clearly establishes the intended use case: replying to an existing received message rather than composing a new one. It does not explicitly name alternatives or state when-not-to-use, but the context is clear enough for an agent to select it over send_email for threading-aware replies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsSearch emailsC
Search messages (case-insensitive substring match). since/before are dates (YYYY-MM-DD); since is inclusive, before exclusive. Runs server-side via IMAP SEARCH.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ||
| from | No | ||
| text | No | Matches headers or body | |
| limit | No | ||
| since | No | ||
| before | No | ||
| folder | No | Mailbox folder (IMAP). POP3 only supports INBOX. | INBOX |
| subject | No |
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 usefully reveals case-insensitive matching, inclusive/exclusive date boundaries, and server-side execution via IMAP SEARCH. However, it does not mention whether the operation is read-only, how results are returned, or any performance/rate-limit considerations.
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 compact and front-loaded, with three sentences each carrying meaningful information. It avoids fluff and redundancy, though it could have used the space to cover more parameters.
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 8 parameters, no output schema, and no annotations, the description is only partially complete. It provides essential date semantics and matching behavior, but omits default folder behavior, limit handling, how multiple criteria combine, and what the search returns.
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 only 25%, so the description must compensate for the 6 undocumented parameters. It explains only since and before in depth; to, from, subject, text, limit, and folder receive no added meaning beyond the raw schema, leaving a significant gap.
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 action ('Search messages') and adds precise semantics ('case-insensitive substring match'), which distinguishes it from the sibling list_emails. However, it does not name the sibling explicitly, so it falls just short of full differentiation.
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?
There is no guidance about when to use this tool versus list_emails, get_email, or other siblings. The description does not mention that this tool is for filtering by criteria while list_emails might be for broad listing, nor does it state any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailSend emailB
Send an email via SMTP from user@example.com. Recipients accept "addr@example.com" or "Name addr@example.com". A copy is saved to the IMAP Sent folder.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | Recipient addresses | |
| bcc | No | ||
| html | No | HTML body | |
| text | No | Plain-text body | |
| subject | No | ||
| attachments | No | Local file paths to attach. Only files under the allowed directories (working directory and the temp dir by default) can be attached. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry behavioral disclosure. It does disclose a meaningful side effect—'A copy is saved to the IMAP Sent folder'—and the fixed sender address. However, it omits auth requirements, delivery/failure behavior, and whether sending is irreversible or async.
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 with no filler. The action and sender are front-loaded, and the remaining details about address formats and Sent-folder behavior are directly relevant to correct 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 schema plus description cover the core fields needed to send an email. However, given no annotationsholics, no output schema, and seven parameters, the lack of any note about result/error behavior, prerequisites, or when to prefer reply_email leaves the complete picture incomplete.
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 57%, so the description reasonably should add parameter meaning. It usefully explains the recipient address format for 'to', 'cc', and 'bcc', but it does not clarify subject handling, the text/html relationship, or attachment semantics beyond the schema's existing descriptions.
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: 'Send an email via SMTP from user@example.com.' It also adds recipient address format and the Sent-folder behaviorholics. It does not explicitly distinguish itself from reply_email, which is a related sending-oriented sibling, so it stops short of full sibling differentiation.
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?
There is no guidance about when to use send_email versus reply_email or the email lookup tools. The description provides operational context but no explicit when-to-use, when-not-to-use, or alternative routing.
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
v0.1.0- First observed
get_email - First observed
list_emails - First observed
list_folders - First observed
mark_read - First observed
reply_email - First observed
search_emails - First observed
send_email
TDQS
Scored across 7 tools
Each tool targets a distinct email operation: sending, replying, listing, reading, searching, managing folders, and toggling read status. Even though list_emails and search_emails both return messages, their purposes are clearly separated by folder listing vs. substring search.
All tool names consistently follow a verb_noun pattern: send_email, reply_email, list_emails, get_email, search_emails, mark_read, list_folders. This makes the tool set highly predictable and easy for an agent to navigate.
Seven tools is well-scoped for an email MCP server. Each tool covers a meaningful operation without redundancy or bloat.
Core email workflows are well covered: send, reply, list, search, read, mark read, and folder listing. Minor gaps exist around operations like deleting/moving messages or sending attachments, but agents can typically accomplish common email tasks without dead ends.
Maintenance
Related MCP Connectors
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to read, search, compose, and send emails by connecting to any IMAP/SMTP provider. It supports comprehensive mailbox management, including draft handling and message deletion, directly through natural language.10209 npm10MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with email accounts via IMAP and SMTP, supporting mailbox listing, email search, retrieval, sending, and management.MIT
- AlicenseBqualityDmaintenanceEnables AI assistants to send, read, and manage emails via SMTP and IMAP, with support for attachments, threads, and mailbox organization.166 npm1MIT
- FlicenseBqualityDmaintenanceEnables AI models to send, receive, search, and manage emails via SMTP/IMAP, including support for attachments, contacts, and advanced search.18-