Full-featured, multi-account MCP email server for Windows, macOS, and Linux—read, search, organize, and send email via IMAP and SMTP.
Solid foundational quality with consistently defined tools. All 17 tools have explicit names, descriptions, and input schemas. Naming follows verb_noun convention well (list_, send_, forward_, delete_, set_, mark_, move_, archive_, get_, download_). Descriptions are adequate (average ~90 chars, within baseline range). Schemas include typed parameters with descriptions. However, several tools lack output schema documentation in the source, and error handling patterns are not evident from the provided code. Tool annotations (readOnlyHint/destructiveHint) are present in feature flags but their implementation in actual tool definitions is not visible in the code excerpt. Parameter constraints are well-defined (email_ids use regex pattern ^[1-9][0-9]*$, flags use enums), but some descriptions could be more prescriptive about format expectations. Security concern: account_name parameter accepts string input without visible validation or rate limiting.
Archive emails (move to archive mailbox).
Delete emails from a mailbox.
Download an email attachment.
Retrieve the effective configuration of the email server.
Forward an existing email to recipients.
Return stable non-secret discovery capabilities for one configured account.
Retrieve the binary content of an email attachment.
Output schemas not documented in source code. Tools have descriptions and input schemas, but expected response structures are not visible, preventing LLMs from planning chained calls effectively.
Error handling and recovery guidance not visible in tool definitions. Tools lack descriptions of expected error conditions (account not found, invalid email_id, permissions denied) and how LLMs should respond.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | B | 71 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Retrieve the full content of emails including body and headers.
List all configured email accounts available to the server.
Query metadata for emails in a mailbox with filtering and pagination support.
List all mailboxes in an account.
Mark emails as read.
Move emails to a different mailbox.
Save an email to a specific mailbox.
Send an email via SMTP.
Set IMAP flags on emails.
Set custom keywords/tags on emails.
Parameter descriptions lack prescriptive format guidance. For example, 'email_message' in save_to_mailbox_command is described as 'Raw email message' but does not specify expected format (MIME? Headers required? Max size?), leading to invalid LLM inputs.
Naming ambiguity: tools use both 'command' and 'query' suffixes (send_email_command, get_email_content_query), which adds cognitive load. LLMs must disambiguate by reading descriptions rather than inferring from names. Should use consistent verb_noun convention (send_email, get_email_content).
account_name parameter is a free-form string across all tools with no documented validation. No indication whether accounts are case-sensitive, what characters are allowed, or what happens if account does not exist. Increases risk of invalid LLM inputs.
Destructive and write operations lack confirmation or dry-run patterns. delete_emails_command and similar tools have no indication of confirmation steps, increasing risk of irreversible errors.
Pagination support is present in list_email_metadata (limit, offset), but other list tools (list_effective_accounts, list_mailboxes_query) do not document pagination parameters or total counts. Inconsistent pagination design.
Tool descriptions do not explicitly state idempotency guarantees. Tools like mark_read_command and set_email_flags_command should declare whether repeated calls with same parameters are safe or risk duplicate side effects.