mcpField
A
apple-mail-mcp

apple-mail-mcp

本地服务
github.com/parasxos通信协作331 周前更新

关于 apple-mail-mcp

apple-mail-mcp 是面向 macOS 用户的本地 Apple Mail MCP 服务,供需要搜索、整理和发送邮件的 Agent 或客户端使用。它通过本地索引检索邮件正文,并以计划、审核、执行和验证的流程处理批量整理。

主要功能

  1. 01按发件人、日期和正文搜索邮件
  2. 02读取邮件、会话及附件
  3. 03发送、回复、草稿和定时邮件
  4. 04审核并验证批量整理计划
  5. 05本地运行并提供诊断工具

适用场景

  1. 01查找旧邮件正文及相关会话
  2. 02按身份发送邮件或创建草稿
  3. 03安排邮件在指定时间发送
  4. 04审核后批量归档邮件

MCP 相关

它通过 stdio MCP 向本地客户端公开 Apple Mail 的搜索、读取、发送和整理工具。可设置只读模式,也支持发送、定时及批量操作。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"parasxos-apple-mail": {
"command": "uvx",
"args": [
"apple-mailbox-mcp"
]
}
}
}
启动命令uvx apple-mailbox-mcp

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

安装包
pypiapple-mailbox-mcp1.8.3

工具

21

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

参数类型必填说明
afterany否仅包含此 ISO-8601 日期或时间戳之后的邮件。
limitinteger否要返回的最大结果数。
querystring否要在主题、发件人、摘要或已编入索引的正文中查找的词语。
beforeany否仅包含此 ISO-8601 日期或时间戳之前的邮件。
offsetinteger否分页时要跳过的匹配结果数。
accountany否账户 UUID;省略此项可包含所有已配置的账户。
mailboxany否要搜索的邮箱名称,例如 INBOX 或 Archive。
to_addrany否要匹配的收件人姓名、地址或地址片段。
from_addrany否要匹配的发件人姓名、地址或地址片段。
unread_onlyboolean否为 true 时,仅包含未读邮件。
has_attachmentany否邮件有附件时为 True,没有附件时为 false。

详细介绍

✉️ apple-mail-mcp

让你的 Apple Mail 完全可由 Agent 操作。

**在你的 Mac 上本地运行。**它以只读方式打开 Mail 存储,仅返回客户端请求的内容,并且只会在客户端明确调用发送工具时发送邮件。没有第三方中转,也不会在云端复制你的邮件。

uvx apple-mailbox-mcp setup

在包含 30 万封邮件的存储中测得:通过 Mail 自带索引定位一封邮件需要 0.1 ms,而 AppleScript 的 whose 子句需要 7 到 10 s;全文搜索的 p95 低于 1 ms。方法和脚本:docs/benchmarks.md。

使用 Claude Code、Claude Desktop、Codex、Cursor、VS Code 或任何本地 MCP 客户端,通过 Apple Mail 搜索、阅读、整理和发送邮件 — 你的邮箱将变成可以提问、搜索并委派任务的对象 — 几秒内找到任何内容,按照经过审核的计划归档数百封邮件,以正确身份发送得体的邮件,还能让 Exchange 在 Mac 休眠时发送已安排的邮件。

CI 工具 平台 Python MCP 契约


演示:通过 uvx 安装、查看状态,以及 Claude 在包含 29.8 万封邮件的存储中搜索

✨ 你可以做什么

🔍 向邮箱提问。 “Maria 上周发给我的备忘录相关邮件是什么?” 搜索以数据库速度运行 — 可按发件人、邮箱、日期、未读状态和附件搜索 — 并还原完整对话。

🕳️ 找到 Mail 本身找不到的内容。 Mail 内置的搜索只会浏览大多数邮件的第一行。apple-mail-mcp 会为 Mac 上每封邮件的正文建立索引 — 对于 Exchange 账户,它甚至会直接从你自己的服务器邮箱中获取 Mail 从未下载的正文。原本搜不到的内容,现在能搜出二十条。

🎭 以正确的身份发送。 工作邮件走工作通道,个人邮件走 Gmail — 一个参数即可选择身份。每封邮件都从头编写为干净、符合标准且能在任何地方正确呈现的邮件,包括 Outlook(通过 AppleScript 撰写的邮件在 Outlook 中显示为空白,这正是这个项目存在的原因)。

⏰ 像“稍后发送”一样安排发送,还能通过脚本控制。 已安排的邮件会完整冻结 — 包括附件、身份、确切文本,以及从 1.8.2 开始的线程标头,因此定时回复会进入它所回复的对话。Exchange 可以在指定时间于服务器端执行,即使合上 Mac 的盖子也没问题;其他服务提供商则使用本地后台发送器,在下一次运行时发送(或在 Mac 唤醒后立即发送)。

🗂️ 放心地大批量整理。 “归档这 40 封新闻简报” 会生成可供审核的计划:批准前不会移动任何内容,每封邮件在处理前都会重新检查,之后还会根据 Mail 自己的记录验证结果。删除操作会将邮件移入 Mail 的废纸篓 — 永远不会彻底抹除。

📝 在草稿所在的位置撰写。 将邮件写入真正的 Exchange“草稿”文件夹,可在 Outlook 或 OWA 中打开 — 只创建草稿,绝不自动发送。

⚡ 与众不同之处

其他所有 Apple-Mail MCP 都会用 AppleScript 来搜索和执行操作。 而这个 MCP 不会——效果一目了然:

操作AppleScript whose-clauseapple-mailbox-mcp
🔍 搜索 30 万封邮件数秒后超时毫秒级
🎯 在包含 7.1 万封邮件的邮箱中定位一封邮件7–10 秒(实测)< 0.1 毫秒
✉️ 发送邮件正文在 Outlook 中显示为空白在任何客户端都能正常显示,支持纯文本和 HTML
⏰ 定时发送邮件—在 Exchange 上由服务端处理;其他环境下使用可靠的本地队列
🗂️ 批量分类每封邮件调用一次,操作发出后不确认一份经过审核的计划,一次执行,结果经过验证

以上所有数据均在一个约包含 30 万封邮件的实时存储中测得;测试脚本和完整方法见 docs/benchmarks.md。

如果这些基准测试在你的邮箱中也成立,点个 ⭐ 能帮助更多人发现这个项目。

🛡️ 值得信赖的设计

  • ✅ 规划 → 审核 → 执行 → 验证。 批量操作会先冻结为一份计划,你可以在任何操作发生前查看;之后会根据 Mail 自己的存储确认结果,而不是想当然地认为操作成功了。
  • 🗑️ 绝不会彻底删除任何内容。 “删除”会将邮件移至 Mail 的废纸篓;破坏性计划则有专门的独立入口,并设有上限。
  • 👓 只读邮件模式。 设置 EMAIL_MCP_READ_ONLY=1 后,会话中只提供 11 个不会修改数据的邮件工具。搜索仍可能维护本地正文索引;获取附件时,会将请求的文件写入配置的临时目录。
  • 💾 崩溃安全的定时队列。 清单更新会先写入并原子替换,因此重写中断时仍能保留最后一条有效记录。如果文件单独损坏,诊断信息会指出具体文件,而不会误称队列为空;正常的定时邮件仍会继续处理。
  • 🧾 本地尽力而为的活动日志。 发送、定时发送、取消和分类操作都会被记录,但日志不可写时不会因此阻止邮件操作。需要核对时,邮件本身、其 Message-ID 和定时记录仍是权威依据。
  • 🔒 不使用第三方邮件中继。 除了你发送的邮件,以及可选的自有服务商访问(用于 Exchange/IMAP 正文补充、草稿和服务端定时发送)以外,邮件内容都留在本地。SMTP 密码保存在 macOS Keychain 或 1Password 中;Microsoft OAuth 令牌存放在 ~/.email-mcp/graph/ 下权限为 0600 的私有缓存中。
  • 📜 有据可查的契约。 自 v1.0 起,每个工具的结构、错误代码和上限都以向后兼容的方式扩展,并由 800 多项自动化测试保障。
  • 🤝 让所有 MCP 客户端都能清楚了解。 全部 21 个工具都会说明其功能、解释每项输入,并声明它们会读取、更改还是可能移除数据。较新的客户端会收到结构化结果;较旧的客户端仍会得到相同的 JSON 文本。项目会测试 MCP SDK 2.2 及更新的 2.x 版本,并支持较旧的客户端。
  • 🧱 不断演进,不破坏现有工作流。 邮件规则与 MCP、Mail.app、Exchange、邮件投递和本地存储相互隔离。服务商或 SDK 的变更仅影响边界层,而 21 个工具的契约保持稳定。依赖规则由 CI 强制执行,并在架构指南中说明。
  • 📦 可验证的发行版本。 每个带标签的发行版本都会先在干净环境中构建并安装,再发布。GitHub 会提供 wheel、源码归档、SHA-256 校验和以及签名的构建来源证明,而不只是源代码。
  • 🩺 可自我诊断。 apple-mail-mcp status 会提供一屏易读的就绪状态、定时发送和恢复信息。apple-mail-mcp doctor 会给出完整的诊断详情,并为每项异常提供确切的修复方法。

🚀 快速开始

  1. 为终端应用授予“完全磁盘访问权限” (系统设置 → 隐私与安全性 → 完全磁盘访问权限),然后退出并重新打开终端。这是 Apple 要求手动开启的一项设置,不会弹出提示。

  2. 安装并设置:

    uvx apple-mailbox-mcp setup     # or: pipx install apple-mailbox-mcp
    # or via Homebrew:
    brew install parasxos/tap/apple-mail-mcp && apple-mail-mcp setup
    
  3. 向客户端注册——Claude Code 只需一行:

    claude mcp add --transport stdio --scope user apple-mail -- uvx apple-mailbox-mcp
    

    或者,将同一 JSON 代码块用于 Claude Desktop / Cursor / VS Code (claude_desktop_config.json / .cursor/mcp.json / .vscode/mcp.json):

    {
      "mcpServers": {
        "apple-mail": { "command": "uvx", "args": ["apple-mailbox-mcp"] }
      }
    }
    
  4. **验证:**运行 uvx apple-mailbox-mcp status 会显示一屏就绪状态;也可以直接让客户端运行 doctor 工具,每条红色提示都会附带对应的修复方法。运行 uvx apple-mailbox-mcp --version 会显示已安装的版本(apple-mailbox-mcp、apple-mail-mcp 和 email-mcp 是同一命令的三个名称)。大型邮箱首次构建正文索引时会在后台运行,可能需要几分钟;搜索立即可用,并会随着索引填充而逐步完善。

运行 setup 之前,请为终端应用授予完全磁盘访问权限(系统设置 → 隐私与安全性 → 完全磁盘访问权限)——这样读取速度快,而且数据保留在本地。此设置不会弹出提示;这是 Apple 要求手动开启的一项设置。如果 setup 检测到尚未授予权限,会引导你前往对应的设置面板。

setup 会用通俗的语言逐项提问(直接按 Enter 即可接受推荐答案),提供发送身份选项,构建正文搜索索引,验证夜间刷新任务确实会运行,并在最后显示需要粘贴到 MCP 客户端的唯一代码块:

{
  "mcpServers": {
    "apple-mail": { "command": "apple-mail-mcp" }
  }
}

设置结束时会明确显示就绪结果,或提供编号恢复步骤。首次进行邮件分拣时,请授予自动化 → Mail权限。随时运行 apple-mail-mcp status,检查安装状态、下一封计划发送的邮件和发送失败的计划邮件;运行 apple-mail-mcp doctor 可查看完整的技术详情。

💡 不熟悉终端? 以下三种情况看起来不对,其实都正常: brew install pipx 需要输入 y(只按 Enter 会被拒绝); pipx ensurepath 可能会显示 ⚠️——后面的“pipx is ready to go!”才是结果;运行 ensurepath 后,请关闭并重新打开终端一次,这样才能找到 apple-mail-mcp。

🔌 兼容的客户端

以下客户端均支持 stdio MCP;使用的命令始终是 uvx apple-mailbox-mcp。

Claude Code
claude mcp add --transport stdio --scope user apple-mail -- uvx apple-mailbox-mcp
Claude Desktop

添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:

{ "mcpServers": { "apple-mail": { "command": "uvx", "args": ["apple-mailbox-mcp"] } } }
Cursor

将同一代码块添加到 ~/.cursor/mcp.json(或项目级 .cursor/mcp.json)。

VS Code(Copilot MCP)

将同一代码块添加到 .vscode/mcp.json 的 "servers" 下。

Codex CLI
# ~/.codex/config.toml
[mcp_servers.apple-mail]
command = "uvx"
args = ["apple-mailbox-mcp"]
任何 stdio MCP 客户端

将其指向 uvx apple-mailbox-mcp。自 v1.0 起,线协议仅以追加方式扩展。

🔧 故障排除

症状修复方法
客户端提示服务启动失败,但在终端中运行 uvx apple-mailbox-mcp 正常图形界面应用不会继承 shell 的 PATH。请使用绝对路径:"command": "/opt/homebrew/bin/uvx"(运行 which uvx 查找路径)。
显示 database is locked 或结果为空启动服务的应用(客户端,而非终端)缺少完全磁盘访问权限。授予权限后,彻底退出并重新打开该应用。
搜索能找到近期邮件,却找不到旧邮件的正文正文索引仍在构建中——拥有 10 万封以上邮件的邮箱首次构建需要几分钟。status 会显示进度。
发送失败并显示 transport_unavailable运行 doctor:它会指出故障环节(缺少 Keychain 项目、SSH 套接字未就绪、SMTP 主机无法访问),并显示对应的修复方法。
首次邮件分拣没有任何反应macOS 询问时,请授予自动化 → Mail权限;提示会在首次使用时出现,而不是安装时出现。

🧰 21 个工具

分组工具
🔍 读取(8)search_emails(全文搜索) · get_email · get_emails_batch · get_thread · list_mailboxes · list_recent · get_attachment · refresh_mail
✉️ 发送(6)send_email · reply_email(在同一会话中回复并引用原文) · create_draft · schedule_email(可按需在同一会话中发送) · list_scheduled · cancel_scheduled
🗂️ 整理(5)triage_plan · triage_plan_delete · triage_apply · mailbox_create · mailbox_delete
🩺 元数据(2)doctor(包含修复建议字符串的完整诊断) · audit(本地日志)

支持双向收发附件,并设有大小限制。回复会在所有客户端中正确归入会话。定时发送不受休眠影响——若邮件在合上电脑盖时到期,会在唤醒后的第一个时点发出;使用 Exchange 则能准时发送。

🎭 你的地址,你的通道

邮件的 From: 地址决定邮件的发送方式。~/.email-mcp/identities.toml:

default = "work"

[work]                    # sent through a host you already trust, over SSH
from_addr = "[email protected]"
driver    = "ssh_sendmail"
host      = "bastion.example.org"   # any login host you already SSH to

[gmail]                   # classic SMTP — the app password stays in 1Password
from_addr = "[email protected]"
driver    = "smtp"
host      = "smtp.gmail.com"
op        = "op://Personal/gmail app password/password"

Exchange 身份可通过添加一个登录账户解锁额外功能:将草稿保存到你的真实“草稿”文件夹,并由服务器自行执行定时发送——即使合上电脑盖、Mac 进入睡眠也不受影响。setup 会通过一个简单的问题提供此选项。读取邮件完全无需配置发送功能。


21 个工具 · 1,200 多项测试 · 自 v1.0 起保持兼容的增量式线路协议 已在包含 30.5 万封邮件的存储库上进行端到端实时校准。

为一台 Mac 而打造——也适用于其他运行 Mail.app 的 Mac。

评论

支持 Markdown

第一次接触 MCP?

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

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