Skip to main content
Glama
openmaxai

@openmaxai/email-mcp

by openmaxai

@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_PASSWORD is 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

EMAIL_USER

yes

Login name, usually the full email address. Also used as the From address.

EMAIL_PASSWORD

yes

App password / authorization code. The only secret.

EMAIL_FROM_NAME

no

Display name for the From header.

RECEIVE_PROTOCOL

no

imap

imap or pop3.

IMAP_HOST

if imap

IMAP_PORT

no

993 (ssl) / 143

IMAP_SECURE

no

from port, else ssl

ssl (implicit TLS), starttls, or none.

POP3_HOST

if pop3

POP3_PORT

no

995 (ssl) / 110

POP3_SECURE

no

from port, else ssl

ssl or none (STARTTLS is not supported for POP3).

SMTP_HOST

yes

SMTP_PORT

no

465 (ssl) / 587 (starttls) / 25 (none)

SMTP_SECURE

no

from port, else ssl

ssl, starttls, or none.

EMAIL_TLS_VERIFY

no

true

Verify server TLS certificates. Set to false only for servers with self-signed certificates.

EMAIL_SAVE_SENT

no

true

IMAP only: after sending, save a copy (marked read, Bcc kept) to the Sent folder.

EMAIL_ATTACHMENT_ROOTS

no

working directory + OS temp dir

Directories that attachments may be read from, separated by : (; on Windows).

EMAIL_MAX_ATTACHMENT_MB

no

25

Size limit for each attachment and for the total per message. get_email also skips saving attachments above it.

EMAIL_ALIASES

no

Other addresses of this mailbox, comma-separated. Excluded from reply-all recipients.

EMAIL_TIMEOUT_MS

no

30000

Timeout for each tool call's network work (1000 to 600000).

EMAIL_LOG_LEVEL

no

info

debug, info, warn, or error (stderr).

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 (qq.com)

imap.qq.com:993 ssl

pop.qq.com:995 ssl

smtp.qq.com:465 ssl

Settings → Account → enable IMAP/SMTP, then generate an authorization code (授权码).

NetEase 163 (163.com)

imap.163.com:993 ssl

pop.163.com:995 ssl

smtp.163.com:465 ssl

Settings → POP3/SMTP/IMAP → enable, then use the authorization code (授权码).

Tencent Exmail (exmail.qq.com)

imap.exmail.qq.com:993 ssl

pop.exmail.qq.com:995 ssl

smtp.exmail.qq.com:465 ssl

Enable IMAP/SMTP in client settings. If "secure login" is on, create a client-specific password (客户端专用密码).

Aliyun enterprise mail

imap.qiye.aliyun.com:993 ssl

pop.qiye.aliyun.com:995 ssl

smtp.qiye.aliyun.com:465 ssl

The admin may need to allow IMAP/POP/SMTP. Use a third-party client password if one is required.

Outlook / Microsoft 365

outlook.office365.com:993 ssl

outlook.office365.com:995 ssl

smtp.office365.com:587 starttls

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

imap.gmail.com:993 ssl

pop.gmail.com:995 ssl

smtp.gmail.com:465 ssl

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

send_email

always

to[], cc[], bcc[], subject, text, html, attachments[] (local file paths under the allowed directories). Under IMAP the result includes saved_to_sent, or warnings if the Sent copy failed. The send itself still succeeds in that case.

reply_email

always

Reply to a message by uid or message_id (and folder). Sets In-Reply-To / References and adds Re: to the subject. The reply goes to Reply-To if present, otherwise From. reply_all also adds the original To/Cc, removing duplicates and your own addresses (EMAIL_USER and EMAIL_ALIASES).

list_emails

always

folder (default INBOX), limit (1–100, default 20), unread_only. Returns summaries, newest first: uid, message_id, from, to, subject, date, flags, seen, snippet.

get_email

always

uid, folder, format (full or headers), include_attachments. Attachments are saved to a private temp directory (mode 0600) and their paths are returned. Bodies longer than 100k characters are truncated and flagged.

search_emails

always

from, to, subject, text, since, before (YYYY-MM-DD; since inclusive, before exclusive), folder, limit.

list_folders

IMAP only

Folders with message and unseen counts.

mark_read

IMAP only

uid, folder, read (true sets \Seen, false clears it).

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 INBOX exists. Any other folder returns INVALID_INPUT.

  • uid is the POP3 UIDL value (a string).

  • POP3 has no read/unread flags: seen is null, flags is empty, and unread_only returns the newest messages with a note saying the filter is not supported.

  • POP3 has no server-side search. search_emails downloads and filters the newest 200 messages locally. Older messages are not searched.

  • list_folders and mark_read are not registered.

Errors

Failed tool calls return isError: true with a JSON body {"error": {"code", "message"}}. The codes are stable:

Code

Meaning

AUTH_FAILED

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.

UNREACHABLE

DNS failure, connection refused or reset, or a TLS/certificate problem. The message suggests port/security fixes.

SEND_REJECTED

The SMTP server rejected the recipients or the message.

NOT_FOUND

No such message (uid / Message-ID) or folder.

INVALID_INPUT

Bad arguments, for example a missing body, an unreadable attachment or a bad date.

TIMEOUT

The server did not respond within EMAIL_TIMEOUT_MS.

UNKNOWN

Anything else. Set EMAIL_LOG_LEVEL=debug for details on stderr.

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 with realpath, 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 automatically

Integration 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 tools
get_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYesMessage uid as returned by list_emails / search_emails (IMAP UID, or POP3 UIDL)
folderNoMailbox folder (IMAP). POP3 only supports INBOX.INBOX
formatNofull
include_attachmentsNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
folderNoMailbox folder (IMAP). POP3 only supports INBOX.INBOX
unread_onlyNo

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYesMessage uid as returned by list_emails / search_emails (IMAP UID, or POP3 UIDL)
readNo
folderNoMailbox folder (IMAP). POP3 only supports INBOX.INBOX

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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:".

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
bccNo
uidNoMessage uid as returned by list_emails / search_emails (IMAP UID, or POP3 UIDL)
htmlNo
textNo
folderNoMailbox folder (IMAP). POP3 only supports INBOX.INBOX
reply_allNoAlso reply to the original To/Cc recipients (excluding yourself)
message_idNoMessage-ID header of the original, e.g. <abc@example.com>
attachmentsNoLocal file paths to attach. Only files under the allowed directories (working directory and the temp dir by default) can be attached.

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
fromNo
textNoMatches headers or body
limitNo
sinceNo
beforeNo
folderNoMailbox folder (IMAP). POP3 only supports INBOX.INBOX
subjectNo

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYesRecipient addresses
bccNo
htmlNoHTML body
textNoPlain-text body
subjectNo
attachmentsNoLocal file paths to attach. Only files under the allowed directories (working directory and the temp dir by default) can be attached.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 7 tool updatesv0.1.0
    • First observedget_email
    • First observedlist_emails
    • First observedlist_folders
    • First observedmark_read
    • First observedreply_email
    • First observedsearch_emails
    • First observedsend_email

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

Seven tools is well-scoped for an email MCP server. Each tool covers a meaningful operation without redundancy or bloat.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    10
    209 npm
    10
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to interact with email accounts via IMAP and SMTP, supporting mailbox listing, email search, retrieval, sending, and management.
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to send, read, and manage emails via SMTP and IMAP, with support for attachments, threads, and mailbox organization.
    16
    6 npm
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables AI models to send, receive, search, and manage emails via SMTP/IMAP, including support for attachments, contacts, and advanced search.
    18
    -