mcpField
B
better-email-mcp

better-email-mcp

本地服务
github.com/n24q02m通信协作351 天前更新

关于 better-email-mcp

better-email-mcp 是供 AI Agent 跨多个账户管理邮件的 IMAP/SMTP MCP 服务。它整合邮件搜索与操作、文件夹及附件管理,并可自动识别服务商设置;多数服务商使用应用专用密码即可配置。

主要功能

  1. 01管理多个 IMAP/SMTP 账户
  2. 02搜索、读取、撰写、回复和转发邮件
  3. 03整理邮件并查看文件夹
  4. 04列出并下载附件
  5. 05通过 stdio 或经认证的 HTTP 运行

适用场景

  1. 01搜索并读取已配置邮箱中的邮件
  2. 02回复或转发邮件并保留线程标头
  3. 03通过标记、移动、归档或删除来整理邮件
  4. 04为邮件任务获取附件

MCP 相关

该服务向 MCP 客户端提供组合式邮件工具和文档资源。默认使用 stdio,也可选择通过 Bearer Token 认证的 HTTP 模式。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"n24q02m-better-email": {
"command": "npx",
"args": [
"-y",
"@n24q02m/email"
],
"env": {
"EMAIL_CREDENTIALS": "<EMAIL_CREDENTIALS>"
}
}
}
}
启动命令npx -y @n24q02m/email
需要配置的环境变量
EMAIL_CREDENTIALS密钥Email credentials (format: [email protected]:app-password). Multiple accounts: comma-separated.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@n24q02m/email1.42.0
ocidocker.io/n24q02m/email:latest

工具

5

收录的工具列表 · 更新于 1 天前

参数类型必填说明
ccstring否抄送收件人(以逗号分隔)
tostring否收件人电子邮件地址(新建/转发时必填,回复时可选——自动从原发件人获取)
bccstring否密送收件人(以逗号分隔)
uidnumber否电子邮件 UID(用于读取/修改单封邮件)
bodystring否电子邮件正文(新建/回复/转发时必填)。使用纯文本或 HTML,不能同时使用两者。
uidsarray否用于批量操作的多个 UID
limitnumber否搜索结果最大数量(默认:20)
querystring否IMAP 搜索查询(默认:UNSEEN)。单项:UNREAD、FLAGGED、SINCE YYYY-MM-DD、FROM [email protected]、SUBJECT text。组合:UNREAD SINCE 2026-01-01、UNREAD FROM [email protected]。日期必须使用 YYYY-MM-DD 格式(例如:2026-03-21)。纯文本将作为主题搜索处理。
actionenum是要执行的操作search | read | mark_read | mark_unread | flag | unflag | move | archive | trash | new | reply | forward
folderstring否邮箱文件夹(默认:INBOX)
accountstring否账户电子邮件筛选条件(可选;搜索时默认包含所有账户)
previewboolean否最多读取 max_chars 并返回截断元数据
subjectstring否电子邮件主题(新建时必填)
max_charsnumber否预览正文限制,整数 1-100000;preview 为 true 时默认值为 4000
attachmentsarray否要包含的文件附件(可选)。最多 10 个文件,解码后总大小 ≤ 25MB。
destinationstring否移动操作的目标文件夹

详细介绍

邮件

mcp-name: io.github.n24q02m/better-email-mcp

为 AI Agent 提供 IMAP/SMTP 邮件功能——跨账户读取、发送、整理邮件并管理附件。

Mode CI codecov npm Docker License: Apache-2.0

TypeScript Node.js IMAP/SMTP semantic-release Renovate

n24q02m 的姊妹项目(点击展开) | Project | 标语 | 标签 | |---|---|---| | [agent-chat-plugin](https://github.com/n24q02m/agent-chat-plugin) | 同一共享文件夹中的 AI Agent 彼此聊天——无需人工转发、无需编排器,工... | Tooling | | [better-code-review-graph](https://github.com/n24q02m/better-code-review-graph) | 用于高效利用 token 进行代码审查的知识图谱——语义搜索和调用... | MCP | | [better-drive](https://github.com/n24q02m/better-drive) | 通过 .driveignore 过滤器实现双向 Google Drive 同步——rclone 引擎,Windows 托盘 | Tooling | | [better-email-mcp](https://github.com/n24q02m/better-email-mcp) | 面向 AI Agent 的 IMAP/SMTP 邮件工具——读取、发送邮件,整理文件夹并管理附... | MCP | | [better-godot-mcp](https://github.com/n24q02m/better-godot-mcp) | 适用于 Godot Engine 的复合 MCP 服务——提供 17 个复合工具,助力 AI... | MCP | | [better-notion-mcp](https://github.com/n24q02m/better-notion-mcp) | 面向 AI Agent 的 Markdown 优先型 Notion——页面、数据库、区块和评论... | MCP | | [better-semantic-release](https://github.com/n24q02m/better-semantic-release) | 可直接替换 python-semantic-release 的分支,内置发布安全防护(孤... | Tooling | | [better-telegram-mcp](https://github.com/n24q02m/better-telegram-mcp) | 面向 AI Agent 的 Telegram——支持两种机器人...上的消息、聊天、媒体和联系人 | MCP | | [better-workspace-mcp](https://github.com/n24q02m/better-workspace-mcp) | Google Workspace MCP 服务(Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch...) | MCP | | [claude-plugins](https://github.com/n24q02m/claude-plugins) | n24q02m MCP 服务的 Claude Code 插件市场——安装网页搜索... | Marketplace | | [imagine-mcp](https://github.com/n24q02m/imagine-mcp) | 面向 AI Agent 的图像和视频理解与生成——支持 Gemini、Op... | MCP | | [jules-task-archiver](https://github.com/n24q02m/jules-task-archiver) | 通过 batchexecute API 批量操作 Jules 任务的 Chrome 扩展——一... | Tooling | | [mcp-core](https://github.com/n24q02m/mcp-core) | 构建 MCP 服务的共享基础——Streamable HTTP 传输、OAuth... | MCP | | [mnemo-mcp](https://github.com/n24q02m/mnemo-mcp) | 具备混合搜索和嵌入式同步功能的持久化 AI 记忆。开放、免费、无限... | MCP | | [qwen3-embed](https://github.com/n24q02m/qwen3-embed) | 通过 ONNX Runtime 和 GGUF 实现轻量级 Qwen3 文本嵌入与重排 | Library | | [skret](https://github.com/n24q02m/skret) | 无需服务端的密钥管理。 | CLI | | [tacet](https://github.com/n24q02m/tacet) | 自蒸馏神经符号级联,通过知识...分摊大模型成本 | Tooling | | [web-core](https://github.com/n24q02m/web-core) | 用于搜索、抓取、HTTP 安全和 st...的共享 Web 基础设施包 | Library | | [wet-mcp](https://github.com/n24q02m/wet-mcp) | 面向 AI Agent 的开源 MCP 服务:网页搜索、内容提取和库... | MCP |

目录

Better Email MCP 服务 ## 功能
  • 多账户支持 -- 管理 6 个以上的邮箱账户(Gmail、Outlook、Yahoo、iCloud、Zoho、ProtonMail、自定义 IMAP)
  • 应用专用密码 -- 大多数服务提供商无需设置 OAuth2;克隆并运行只需 1 分钟
  • 4 个组合工具(另有 help)-- 通过单次调用即可搜索、读取、发送、回复、转发、整理邮件并查看凭据状态
  • 自动发现 -- 根据邮箱地址检测服务提供商设置,支持自定义 IMAP 主机
  • 感知邮件会话 -- 回复/转发时会保留 In-Reply-To 和 References 标头
  • 分层令牌优化 -- 压缩描述 + 按需调用 help 工具 + MCP 资源

安装

该服务支持两种运行模式:stdio(默认,单用户,凭据来自环境变量)和 HTTP(选择启用,单用户,使用持有者令牌)。使用 stdio 时,将其添加到 MCP 客户端配置中:

{
  "mcpServers": {
    "email": {
      "command": "npx",
      "args": ["--yes", "@n24q02m/email@latest"],
      "env": {
        "EMAIL_CREDENTIALS": "[email protected]:app-password"
      }
    }
  }
}

该软件包为 @n24q02m/email(原名 @n24q02m/better-email-mcp;旧软件包会再发布最后一个版本,之后停止更新)。MCP Registry ID 仍为 io.github.n24q02m/better-email-mcp,旧版 better-email-mcp 命令保留为 email 的别名。

多个账户以逗号分隔:[email protected]:pass1,[email protected]:pass2。所有环境变量请参阅配置;如需运行托管的多用户服务,请参阅远程(HTTP 模式)。

大多数服务提供商使用应用专用密码(无需设置 OAuth);Outlook/Hotmail/Live 在 HTTP 模式下使用内置的 OAuth 设备代码流程。系统会根据邮箱域名自动发现设置(IMAP/SMTP 主机、端口)。

安装矩阵
客户端安装方式
Claude Code/plugin marketplace add n24q02m/claude-plugins + /plugin install better-email-mcp@n24q02m-plugins(stdio;会提示输入 EMAIL_CREDENTIALS),或在 .mcp.json / 客户端设置中添加 mcpServers 条目
Codex CLI在 ~/.codex/config.toml 中添加 [mcp_servers.email] 块(stdio 使用 command/args,HTTP 使用 type/url)
OpenCode在 opencode.json 中添加 mcpServers 块
Cursor / Windsurf / Gemini CLI / 任何 MCP 客户端在客户端配置中添加 mcpServers JSON,格式与上方示例相同

各客户端的完整操作指南:mcp.n24q02m.com/servers/better-email-mcp/setup/。

命令行

该软件包提供一个二进制文件 email(通过 npx @n24q02m/email 运行),也会以旧名称 better-email-mcp 安装。不带参数时,它会通过 stdio 启动 MCP 服务;此外还支持一个标志和一个子命令:

调用方式说明
email通过 stdio 启动 MCP 服务(默认)。从 EMAIL_CREDENTIALS,或从 EMAIL_USER + EMAIL_APP_PASSWORD 读取凭据
email --http以 HTTP(单用户,持有者令牌)模式启动服务。等同于 MCP_TRANSPORT=http 或 TRANSPORT_MODE=http
email auth [outlook] <email> [--client-id=<id>]通过 OAuth2 Device Code 流程验证 Outlook/Hotmail/Live 账户。令牌保存到 ~/.better-email-mcp/tokens.json。服务提供商位置参数 outlook 可省略(email 只有一个 OAuth2 服务提供商);--client-id 可覆盖 OUTLOOK_CLIENT_ID,用于可自托管的 Azure AD 应用
email logout [<email>]清除本地存储的 Outlook 令牌。省略 <email> 则清除所有已存储令牌
# stdio server (normally launched by your MCP client, not by hand)
EMAIL_CREDENTIALS="[email protected]:app-password" npx @n24q02m/email

# HTTP multi-user server
npx @n24q02m/email --http

# One-off Outlook OAuth device-code sign-in
npx @n24q02m/email auth [email protected]

# Sign out of a single account (or omit the email to clear all)
npx @n24q02m/email logout [email protected]

auth/logout 仅适用于 Outlook/Hotmail/Live 地址——其他服务提供商使用 EMAIL_CREDENTIALS 中的应用专用密码。HTTP 配置请参阅远程(HTTP 模式)。

Smithery

通过 Smithery 配置文件(smithery.yaml)发布。Smithery 通过 stdio 运行服务,无需构建配置;凭据来自环境变量(请参阅配置)。启动命令如下:

startCommand:
  type: stdio
  commandFunction: |-
    (config) => ({ command: 'npx', args: ['-y', '@n24q02m/email'] })

文档

完整文档请访问 mcp.n24q02m.com/servers/better-email-mcp/:

  • 配置 -- Claude Code、Codex、Gemini CLI、Cursor、Windsurf、mcp.json 的安装方法

使用 AI Agent 安装 -- 将以下内容粘贴给你的 AI 编码 Agent:

按照以下步骤安装 MCP 服务 email: https://raw.githubusercontent.com/n24q02m/claude-plugins/main/plugins/better-email-mcp/setup-with-agent.md

工具

公共工具重命名

公共工具 send 已替换为 messages,并支持 action: new、reply 或 forward。 这符合 MCP N+2 标准:发送是 messages 域中的一项操作,因此保留单独的 send 条目会重复该域,并增加冗余的工具列表和帮助主题。旧名称已直接移除;没有兼容别名。

旧公共名称新公共名称原因别名移除
sendmessages(action: new | reply | forward)N+2 域工具规则:外发邮件属于 messages 超级工具,而不是第二个操作级工具。在 Unreleased 版本中直接移除;无别名
工具操作描述
messagessearch、read、mark_read、mark_unread、flag、unflag、move、archive、trash、new、reply、forward搜索、读取、整理、撰写、回复和转发邮件
folderslist、status列出邮箱文件夹,或读取指定的 IMAP STATUS 元数据
attachmentslist、download列出并下载邮件附件
configstatus、setup_status、setup_start、setup_reset、setup_complete、set、cache_clear凭据状态和配置指南、重置、重新解析、清除缓存
help-获取任意工具的完整文档
MCP 资源
URI描述
email://docs/messages邮件操作参考
email://docs/folders文件夹操作参考
email://docs/attachments附件操作参考
email://docs/help完整文档
email://docs/config凭据配置和运行时配置参考

对比

以下是 email 在各项能力上与直接竞品的对比:

能力emailemail-mcpGmail-MCP-Servermcp-mail-server
IMAP/SMTP(不绑定服务提供商)是是否(仅 Gmail API)是
多账户是(凭据以逗号分隔)是否(单个全局凭据)否(每个实例对应一个账户)
应用专用密码是(无需配置 OAuth)是否(仅 OAuth2)是
根据邮箱地址自动发现是是(8 个服务提供商)不适用(仅 Gmail)否(需手动配置主机/端口)
内置 Outlook OAuth(无需用户 Azure 应用)是(设备代码、Thunderbird 模式客户端)部分支持(OAuth2 XOAUTH2,实验性)否(用户提供的 Google OAuth)否
附件(列出 + 下载)是是是是
HTTP 模式(单用户、Bearer 令牌;可自托管)是否(仅 stdio)否(仅 stdio)否(仅 stdio)

远程(HTTP 模式)

以单用户 HTTP 服务运行,并使用共享的 Bearer 令牌进行身份验证:

{
  "mcpServers": {
    "email": {
      "type": "http",
      "headers": { "Authorization": "Bearer <your-token>" },
      "url": "https://<your-host>/mcp"
    }
  }
}
自托管(HTTP 模式)

单用户模式:使用一个共享的 Bearer 令牌;账户来自环境变量或 email auth outlook <address>:

export EMAIL_MCP_TOKEN_HASH='scrypt$...'  # required: the container binds 0.0.0.0 and refuses to start without it
export EMAIL_CREDENTIALS='[email protected]:app-password'
docker run -p 8080:8080 \
  -e PORT=8080 \
  -e EMAIL_MCP_TOKEN_HASH \
  -e EMAIL_CREDENTIALS \
  -e HOME=/data \
  -v email-data:/data \
  n24q02m/email:latest

使用 printf '%s' "$TOKEN" | email token hash 生成哈希;令牌从 stdin 读取,绝不会通过 argv 传入。客户端将原始令牌作为 Authorization: Bearer <token> 发送。已保存的 Outlook 令牌存放在 /data/.better-email-mcp/ 下,只要保留 /data 卷就会持续存在。

使用 Docker Compose 自托管

仓库提供了 docker-compose.http.yml,它会构建 http 镜像目标,并且仅在主机的回环地址上发布服务(127.0.0.1:8082):

export EMAIL_MCP_TOKEN_HASH='scrypt$...'   # required; see the note above
export EMAIL_CREDENTIALS='[email protected]:app-password'
docker compose -f docker-compose.http.yml up

随后即可通过 http://localhost:8082 访问服务。若要向其他机器提供服务,请在同一主机上,将自己的 TLS 反向代理置于回环端口前。预构建的多架构镜像已发布到 Docker Hub(n24q02m/email) 和 GHCR(ghcr.io/n24q02m/email)。

Outlook OAuth 设备代码

Outlook/Hotmail/Live 账户使用 OAuth2 设备代码。运行一次 email auth outlook <address>。首次使用时:

  1. CLI 会输出设备代码和 Microsoft 登录 URL
  2. 在浏览器中打开该 URL 并输入代码
  3. 登录并授权该应用
  4. 令牌会保存到 ~/.better-email-mcp/tokens.json(在 POSIX 系统上创建时权限为 0600)。在 Docker 中,该路径为 /data/.better-email-mcp/tokens.json。

OAuth 使用随附的公共 Azure 客户端(d56f8c71-9f7c-43f4-9934-be29cb6e77b0,采用 Thunderbird 模式)——无需用户自行注册 Azure。

在 stdio 模式下,Outlook 账户改用应用密码(Outlook 账户设置 → 安全性 → 高级安全选项 → 应用密码)。

配置

若要自动信任 mise 配置,请在用户级配置 ~/.config/mise/config.toml 中设置 trusted_config_paths;不要将其添加到本项目的 .mise.toml 中。

变量必填默认值描述
EMAIL_CREDENTIALS是(stdio)-电子邮件凭据,每个账户使用 email:app-password,多个账户以逗号分隔。可选自定义 IMAP 主机/端口:email:password:imap_host:imap_port
EMAIL_USER替代选项(stdio,单账户)-电子邮件地址。与 EMAIL_APP_PASSWORD 搭配使用,作为 EMAIL_CREDENTIALS 的逐字段替代方案;启动时会合并到 EMAIL_CREDENTIALS 中
EMAIL_APP_PASSWORD替代选项(stdio,单账户)-应用密码(Gmail/Yahoo/iCloud)或 Outlook 应用密码;与 EMAIL_USER 搭配使用
PORT否0(由操作系统分配)服务端口(http 模式);显式设置(例如 8080)即可绑定固定端口
HOST否-绑定地址(http 模式)
EMAIL_MCP_TOKEN_HASH否(http;未绑定到回环地址时必填)-共享 Bearer 令牌的 scrypt 哈希值,使用 email token hash 生成。未设置时,HTTP 仅在回环地址上以未认证模式运行
OUTLOOK_CLIENT_ID否d56f8c71-9f7c-43f4-9934-be29cb6e77b0(随附的公共客户端)为自托管的 Outlook OAuth2 覆盖随附的 Azure AD 公共客户端(也可在 auth 上使用 --client-id=<id>,此设置会覆盖该环境变量)
OUTLOOK_EMAIL否-当 Microsoft 设备代码响应中缺少电子邮件字段时使用的解决方法
OUTLOOK_TENANT否consumers(stdio/CLI),common(http 设备代码)用于登录的 Microsoft 目录;同时用于设备代码和令牌刷新端点。工作/学校(Entra ID)邮箱请设置为 common,也可以指定租户 GUID / 已验证域名来固定使用某个目录
OUTLOOK_SCOPES否https://outlook.office.com/IMAP.AccessAsUser.All https://outlook.office.com/SMTP.Send offline_access以空格分隔的范围列表。可缩小范围(例如移除 SMTP.Send),以部署只读服务——使用较少范围授权的许可无法按完整列表刷新
OUTLOOK_EXTRA_DOMAINS否-除 outlook.com/hotmail.com/live.com 之外,路由到 OAuth 的逗号分隔域名列表。自有域名上的 Microsoft 365 邮箱需要此设置,否则会被视为密码账户
多个账户
[email protected]:pass1,[email protected]:pass2,[email protected]:pass3
自定义 IMAP 主机
# Custom hostname (default port 993, implicit TLS)
[email protected]:password:imap.custom.com

# Custom hostname with a custom port
[email protected]:password:imap.custom.com:1993

# Local IMAP proxy -- "localhost" is accepted as a host, even without a dot
[email protected]:password:localhost:1993

每个账户都可以使用自己的主机和端口。非 993 端口会被视为明文/STARTTLS 连接——这是本地 IMAP 代理(例如 email-oauth2-proxy)的常见配置。

Microsoft 365 工作/学校帐户

Microsoft 365 组织中的邮箱(包括使用自有域名的邮箱)通过 Entra ID(而非消费者目录)登录。Microsoft 于 2024 年禁用了 Exchange Online 的基本身份验证,因此无法使用应用密码。要正常使用,需要设置以下两项:

# Sign in against the directory that owns the mailbox
OUTLOOK_TENANT=common                      # or a tenant GUID / verified domain

# Route your own domain to OAuth instead of asking for a password
OUTLOOK_EXTRA_DOMAINS=company.com

OUTLOOK_TENANT 同样适用于令牌刷新和初始登录——使用消费者目录刷新工作/学校帐户令牌会失败,并显示错误 AADSTS7000012: The grant was obtained for a different tenant。

如果邮箱获得的授权范围较窄(例如有 IMAP 权限,但没有 SMTP 权限),请通过 OUTLOOK_SCOPES 与之匹配,以免刷新时请求超出已授予范围的权限。

搜索查询语言
查询说明
UNREAD未读邮件
FLAGGED已加星标的邮件
SINCE 2024-01-01日期之后的邮件
FROM [email protected]发件人为指定地址的邮件
SUBJECT meeting主题匹配的邮件
UNREAD SINCE 2024-06-01组合筛选条件
支持的服务提供商
服务提供商身份验证保存到“已发送”
Gmail应用密码自动(跳过)
Yahoo应用密码自动(跳过)
iCloud/Me.com专用应用密码自动(跳过)
Outlook/Hotmail/LiveOAuth2(设备代码)IMAP APPEND
Zoho应用密码IMAP APPEND
ProtonMailProtonMail BridgeIMAP APPEND
自定义通过 email:pass:imap.hostIMAP APPEND

安全性

  • 凭据清理 -- 错误消息中不会泄露密码
  • 应用密码 -- 使用专用应用密码,而非常规密码
  • 令牌存储 -- Outlook OAuth 令牌在 POSIX 系统上以 0600 模式写入(Windows 上不强制执行)
  • IMAP 验证 -- 执行前会验证搜索查询

从源代码构建

git clone https://github.com/n24q02m/email.git
cd email
bun install
bun run dev

信任模型

凭据仅供单个用户使用:运行服务的用户(或使用 stdio 时的操作系统用户)均可读取凭据。存储方式取决于部署模式:

模式存储位置加密方式谁可以读取你的数据?
HTTP(Docker)环境变量(EMAIL_CREDENTIALS)和保存在 $HOME/.better-email-mcp/tokens.json 中的 Outlook 令牌(/data 卷)令牌:明文 JSON,POSIX 文件模式 0600服务操作者
stdio环境变量;保存在 ~/.better-email-mcp/tokens.json 中的 Outlook 令牌;仍会读取早期版本使用的旧版 config.enc令牌:明文 JSON,POSIX 文件模式 0600仅你的操作系统用户

许可证

Apache-2.0 -- 详见 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。