← mcp servers

Email (IMAP + SMTP)

Enables AI agents to read, search, and send emails through the Model Context Protocol using standard IMAP (receiving) and SMTP (sending) protocols. Compatible with any email provider that supports these protocols: corporate mail servers, Tencent Enterprise Mail, Alibaba Enterprise Mail, Zoho, Microsoft Exchange/Office 365, Gmail (via app password), 163, QQ, and more. Agents can search messages, read attachments, send formatted emails, and reply to threads — all without provider-specific OAuth setup.

Package

Registrynpm (stdio)
Packagemcp-mail-server@2.0.2
Integritysha512-q8gO4322tHDmQZHumdaNbZeKWODdWsj3u8n0xFJj6Zlln41Bu60mF+RsrChoTFg+JvZrFZ1MuxraHzHdEYnu7w==
Lockfilepackage-lock.json sha512-0R5Ta1xltulhqWtylj39aWDIiczK1qNWDIBz4J+XyehrKREXaJIAH3ockJNZeMyO7rXw5+qwuJKKIVluhSHRsQ==
Entrydist/index.js
Install scriptsnone allowed

Configuration

Provide your email account credentials and IMAP/SMTP server settings. For Gmail use an App Password (not your login password). For enterprise mail use the IMAP/SMTP hosts provided by your IT team. IMAP must use implicit TLS (normally port 993).

KeyNameKindRequiredSecretFormatDefault / choices
EMAIL_USEREmail Address
Email account username, usually the email address
envyesnostring
EMAIL_PASSPassword / App Password
Email password or app password
envyesyesstring
IMAP_HOSTIMAP Server
IMAP server host, for example imap.gmail.com
envyesnostring
IMAP_PORTIMAP Port
IMAP port (implicit TLS, normally 993)
envyesnonumber993
IMAP_SECUREfixed: true
IMAP over implicit TLS; this version does not support other modes
envyesnoboolean
SMTP_HOSTSMTP Server
SMTP server host, for example smtp.gmail.com
envyesnostring
SMTP_PORTSMTP Port
SMTP port (465 for implicit TLS, 587 for STARTTLS)
envyesnonumber465
SMTP_SECURESMTP Implicit TLS
Use implicit TLS (true, port 465); false requires STARTTLS (port 587)
envyesnobooleantrue

Tools (12)

From the test run on 2026-10-23 (darwin-arm64, linux-x64, Node 24) — needs credentials to start.

check_connectionConnect to IMAP when needed, actively verify SMTP, then return structured status for both services.
continue_email_threadFind the newest sent message with the same normalized subject, optionally narrowed by recipient and date, then continue its thread. Designed for recurring reports; reply-all and quoted history both default to true.
params: html, includeOriginal, recipient, replyToAll, signature, since, subject*, text
delete_messagePermanently delete one existing mailbox-scoped message using targeted UID EXPUNGE. Fails safely when the UID is missing or the IMAP server lacks UIDPLUS, and returns a structured unknown outcome when a transport failure prevents confirmation.
params: mailbox*, uid*, uidValidity
find_unreplied_messagesFind messages from a sender that have no thread-header reply in the sent mailbox. Messages without Message-ID are returned separately as unknown.
params: before, limit, mailboxes, sender*, since
get_messageRetrieve one message, including full bodies and attachment metadata. Set markSeen only when the message should be marked as read.
params: mailbox*, markSeen, uid*, uidValidity
get_messagesRetrieve multiple messages from one mailbox, including full bodies and attachment metadata. Fails if any requested UID is missing or the aggregate response-body budget would be exceeded.
params: mailbox*, markSeen, uidValidity, uids*
list_mailboxesList all available mailboxes (folders). Auto-connects to IMAP when needed.
move_messageMove an existing mailbox-scoped message to another existing mailbox. If a move, copy, or source-cleanup outcome cannot be confirmed, returns a structured partial error that must be inspected before retrying.
params: mailbox*, targetMailbox*, uid*, uidValidity
reply_to_emailReply to a mailbox-scoped message with threading headers, optional reply-all recipients, signature, and quoted original content.
params: html, includeOriginal, mailbox*, originalUid*, replyToAll, signature, text, uidValidity
save_attachmentSave one or all attachments from a mailbox-scoped message into an allowed local directory. If a later write fails, returns the files already saved as a structured partial result.
params: attachmentIndex, mailbox*, returnBase64, savePath*, uid*, uidValidity
search_messagesSearch one or more mailboxes with combined filters. Defaults to INBOX and the detected sent mailbox. Returns message summaries unless includeBody is true; full-body hydration fails explicitly if a selected message disappears or the aggregate response-body budget would be exceeded.
params: before, body, from, includeBody, keywords, limit, mailboxes, since, subject, to, unread
send_emailSend a new email via SMTP and try to save a MIME-equivalent copy with the accepted Message-ID to the sent mailbox.
params: attachments, bcc, cc, html, signature, subject*, text, to*

Security Assessment

Levelrestricted
Permissionsread:email, write:email, send:email
Data Exposurefull
Requires SupervisorYes
Risk NotesFull mailbox read access and ability to send email as the authenticated user. Ensure the agent has a clearly scoped objective before granting access. Use a dedicated automation account where possible.
Reviewpass · community · 2026-03-16
Runtimeengines.node >=22.13.0 · native modules: no · 22.5 MB installed

When to Use

UseWhen agents need to read incoming emails, search the inbox, send reports or notifications, or reply to messages as part of automated workflows.
Do not useFor high-volume transactional email sending at scale (use a dedicated SMTP relay like SendGrid instead). For Gmail-only use cases where OAuth is preferred.
Input / Outputtext → text, json

com.forgeuno/email-mcp · v2.0.2 · Category: communication · Free tier: Yes · Open source MIT. No cost beyond your email provider's own service fees. · Source