MCP Email Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_EMAIL_SERVER_IMAP_SSL | No | Enable IMAP SSL | true |
| MCP_EMAIL_SERVER_PASSWORD | Yes | Email password | |
| MCP_EMAIL_SERVER_SMTP_SSL | No | Enable SMTP SSL | true |
| MCP_EMAIL_SERVER_FULL_NAME | No | Display name (defaults to email prefix if not provided) | |
| MCP_EMAIL_SERVER_IMAP_HOST | Yes | IMAP server host | |
| MCP_EMAIL_SERVER_IMAP_PORT | No | IMAP server port | 993 |
| MCP_EMAIL_SERVER_SMTP_HOST | Yes | SMTP server host | |
| MCP_EMAIL_SERVER_SMTP_PORT | No | SMTP server port | 465 |
| MCP_EMAIL_SERVER_USER_NAME | No | Login username (defaults to same as email if not provided) | |
| MCP_EMAIL_SERVER_ACCOUNT_NAME | No | Account identifier | default |
| MCP_EMAIL_SERVER_EMAIL_ADDRESS | Yes | Email address | |
| MCP_EMAIL_SERVER_IMAP_PASSWORD | No | Separate IMAP password | |
| MCP_EMAIL_SERVER_SMTP_PASSWORD | No | Separate SMTP password | |
| MCP_EMAIL_SERVER_IMAP_USER_NAME | No | Separate IMAP username | |
| MCP_EMAIL_SERVER_SMTP_START_SSL | No | Enable STARTTLS | false |
| MCP_EMAIL_SERVER_SMTP_USER_NAME | No | Separate SMTP username |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_available_accountsA | List configured accounts as stable non-secret capability records. Use only accounts with can_receive=true for mail reads and can_send=true for send_email and forward_email. If the result is empty, ask the user to run |
| list_email_tagsA | List the configured semantic IMAP tags for one account. The name and description support natural-language selection; writable is false unless explicitly enabled in the account configuration. |
| list_emails_metadataA | List email metadata (email_id, subject, sender, recipients, date) without body content. Time filtering and ordering use provider INTERNALDATE; the returned date is the message's RFC 5322 Date header. Returns email_id for use with get_emails_content. |
| get_emails_contentA | Get the full content (including body and reply-thread headers) of one or more emails by their email_id. Use list_emails_metadata first. This tool is non-read-only because mark_as_read=true changes remote flags. |
| list_allowed_recipientsA | List the configured recipient allowlist — the address patterns that send_email and forward_email are permitted to send to and save_to_mailbox is permitted to address. Matching is case-insensitive and supports glob patterns such as *@example.com; * explicitly allows all recipients. An empty list denies all recipients for these operations; configure patterns through the user-operated CLI/UI. |
| list_allowed_sendersA | List the configured inbound sender allowlist — the address patterns whose mail the server will read or act on. When configured, only these senders' mail is visible to the read tools (list_emails_metadata, get_emails_content, download_attachment, and forward_email's source read) and eligible for the mutation tools (delete_emails, set_email_flags, mark_emails_as_read, move_emails, archive_emails). Returns an empty list when unrestricted. |
| send_emailA | Send one email using the specified account. Supports reply threading. Partial or ambiguous SMTP delivery reports per-recipient succeeded/failed/unknown status and reports the independent Sent-copy outcome separately; ambiguous effects are not retried automatically. The response names the delivered message's RFC Message-Id once the provider accepts the message data, and reports no identifier for an ambiguous delivery. |
| forward_emailA | Forward an existing message to new recipients using the specified account. The source message is read over IMAP first: if it cannot be read, the call fails before any SMTP session is opened, so a forward is never delivered without the content it was supposed to carry. The subject is derived from the source as 'Fwd: ' without stacking a second prefix, the caller's note is placed above a plain-text forwarded block re-composed from the source's parsed text body, and the source's attachments are re-attached with their original MIME types unless include_attachments is false. Partial or ambiguous SMTP delivery reports per-recipient succeeded/failed/unknown status and reports the independent Sent-copy outcome separately; ambiguous effects are not retried automatically. The response names the delivered message's RFC Message-Id once the provider accepts the message data, and reports no identifier for an ambiguous delivery. |
| save_to_mailboxA | Compose an email and save it to an IMAP folder (e.g., Drafts). Shares recipient, body, attachment, and threading parameters with send_email; adds mailbox and flags, and does not support reply_to. Default folder is Drafts with \Draft and \Seen flags. Pure IMAP operation — works without SMTP configuration. An ambiguous APPEND is reported as unknown and is not retried automatically. |
| delete_emailsA | Delete one or more emails by email_id using target-scoped UID EXPUNGE. Use list_emails_metadata first. Partial or ambiguous effects report per-ID succeeded/failed/unknown status and are not retried automatically. |
| set_email_flagsA | Add or remove approved IMAP flags on one or more emails by email_id. Supported flags are \Seen, \Flagged, \Answered, and \Draft; \Deleted and provider-specific keywords are not supported. Use list_emails_metadata first. Partial or ambiguous effects report per-ID succeeded/failed/unknown status and are not retried automatically. |
| set_email_tagsA | Add or remove configured writable semantic tags on emails. Only semantic names are accepted; standard flags and unrelated provider keywords are preserved. |
| mark_emails_as_readA | Mark one or more emails as read by email_id. This is the common-workflow equivalent of adding \Seen with set_email_flags. Use list_emails_metadata first. Partial or ambiguous effects report per-ID succeeded/failed/unknown status and are not retried automatically. |
| move_emailsA | Move one or more emails between IMAP folders by email_id. Use list_emails_metadata and list_mailboxes first. Partial or ambiguous effects report per-ID succeeded/failed/unknown status and are not retried. |
| archive_emailsA | Archive one or more emails by moving them to the account's Archive folder, auto-detected via the RFC 6154 \Archive flag (falling back to common names like Archive or [Gmail]/All Mail). Use list_emails_metadata first. Partial or ambiguous effects report per-ID succeeded/failed/unknown status and are not retried automatically. |
| list_mailboxesA | List available mailboxes/folders for an email account. Returns folder names, hierarchy delimiters, and flags. Useful for discovering folder names before moving emails. |
| get_attachment_contentA | Read one email attachment as an MCP embedded binary resource without writing a local file. This independent transfer mode requires enable_attachment_content=true. |
| download_attachmentA | Download an email attachment. By default it is saved with a safe randomized name under the current user's Downloads/mcp-email-server directory; an explicit destination path remains supported. This feature must be explicitly enabled in settings (enable_attachment_download=true) due to security considerations. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Most tools clearly target distinct email operations (list, read, send, delete, move, archive, attachments). The main overlaps are mark_emails_as_read vs set_email_flags and get_attachment_content vs download_attachment, but these are described as intentional conveniences with different behavior.
Tool names mostly follow a clear verb_noun snake_case pattern like list_emails_metadata, delete_emails, and move_emails. Minor deviations such as mark_emails_as_read and save_to_mailbox are still readable but break the strict list_/get_/send_/delete_ symmetry.
18 tools is slightly above the typical 3-15 tool range, but the count is justified by the breadth of email operations: listing, reading, sending, forwarding, saving drafts, deleting, moving, archiving, tagging, and attachments. It feels reasonably scoped rather than bloated.
The tool set covers the email lifecycle well: discovery, reading, searching metadata, sending, forwarding, saving drafts, deleting, moving, archiving, tagging, flags, and attachments. It also includes security-relevant allowlist tools for recipients and senders, so the domain feels fully covered.