关于 Apple Mail, Calendar & Notes
面向 macOS 用户的本地 MCP 服务,让 MCP 客户端通过 Mac 上已有的 Mail、Calendar 和 Notes 读取、搜索并管理邮件、日历与笔记。它使用系统自带的 JavaScript for Automation,无依赖和网络调用,并以读取与写入工具分组及可选只读模式控制操作。
主要功能
- 01邮件分类、搜索与会话查看
- 02发送、回复及整理邮件
- 03创建和管理日历事件
- 04浏览、搜索和编辑笔记
- 05只读模式、预览及重复操作防护
适用场景
- 01汇总待回复邮件并跟进未获回复的消息
- 02搜索邮件并保存其附件
- 03在 Calendar 中安排或删除事件
- 04搜索 Notes 并创建或更新笔记
MCP 相关
作为 MCP 服务,通过 stdio 向 MCP 客户端提供 Mail、Calendar 和 Notes 的读取与写入工具。首次访问时需要 macOS 授权;可配置为只读。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Apple Mail、Calendar 和 Notes MCP
让你的 AI 助手读取、搜索、整理和发送邮件,管理日历并记录笔记——
使用 Mac 上现有的 Mail、Calendar 和 Notes 应用。适用于任何 MCP 客户端。
为什么要开发它
大多数 AI 邮件连接器都在云端运行,且只支持 Gmail 或 Outlook。如果你的邮件使用 Apple Mail——自托管的 IMAP 服务、iCloud 或公司账户——就没有简便的方法让助手访问邮件。
这个 MCP 服务会直接与 Mac 上的应用通信。这意味着:
- 适用于任何 MCP 客户端。 桌面聊天应用、本地模型应用、编码 Agent——任何能通过 stdio 启动 MCP 服务的应用都可以。
- Apple Mail 能打开的任何账户都可以使用。 自托管、iCloud、Exchange、通过 IMAP 使用的 Gmail——只要账户在 Mail.app 中,你的助手就能查看。
- 无需安装任何东西。 无需 Node、Python 或 Homebrew。它使用 JavaScript for Automation 运行,这是每台 Mac 都自带的。
- 邮件会留在 Mac 上。 服务不包含网络代码。助手只能看到它请求的内容;这些内容之后会去往何处取决于你使用的模型(本地模型会将所有内容保留在 Mac 上)。
- 只需两次权限提示,而非三十次。 所有操作都归入
read工具和write工具。批准一次read,之后就不用再管。 - 也适用于较小的本地模型。 参数要求宽松(
"true"、"3 days ago",可用folder代替mailbox),每次出错都会返回一条直白的“如何修复”说明,而不是让你束手无策。
功能介绍
用日常语言提问——“有哪些邮件在等我回复?”、“把打印机发票转发给财务部”、“周二下午 1 点安排和 Sam 通话”、“保存合同邮件里的 PDF”。它在后台可以:
📥 整理邮件 — “哪些邮件需要我处理?”
| 需要回复 | 尚未回复的真人邮件。忽略自动回复地址和通知邮件。 |
| 等待回复 | 你发送但尚未收到任何收件人回复的邮件。非常适合跟进。 |
| 对话视图 | 按顺序查看完整邮件会话——包括对方的邮件和你的回复——涵盖所有文件夹,包括“已发送”。只有主题和参与者都匹配时,邮件才会被视为同一对话。 |
| 已回复 / 已转发 / 已标记 | 列表中的每封邮件都会显示你是否已回复,避免助手重复提醒。 |
🔎 阅读和搜索
| 收件箱和文件夹 | 查看任何文件夹中的最新邮件、未读数量以及所有账户。 |
| 搜索 | 按主题、发件人或邮件正文搜索;按日期范围搜索;筛选未读、已标记或带附件的邮件;可在一个文件夹或所有位置搜索。 |
| 读取邮件 | 查看邮件头、收件人、纯文本正文(较长的邮件会分页显示)和附件列表。 |
| 附件 | 查看附件名称、大小和类型,并将其保存到附件文件夹。 |
✉️ 写邮件
| 发送 | 撰写新邮件,设置收件人、抄送和密送,可使用你的任一地址发送并附加文件。 |
| 回复 / 回复所有人 | 在下方引用原邮件。邮件会作为草稿打开,供你检查并发送。 |
| 转发 | 可转发附件,并在顶部添加可选备注。邮件也会作为草稿打开。 |
| 草稿模式 | 回复和转发默认在 Mail 中打开,因为 Mail 会自行选择收件人并引用原邮件。新邮件也可以作为草稿打开。 |
🗂 整理
| 文件夹 | 创建文件夹,包括嵌套文件夹(Alerts/Kubernetes)。 |
| 移动和删除 | 在文件夹之间移动邮件,或将邮件移至账户的废纸篓——还可先进行试运行,查看将要发生的更改。 |
| 标记和已读状态 | 使用任意颜色标记邮件,或将邮件标记为已读或未读——可操作单封邮件,也可批量操作。 |
| 规则 | 创建、查看、启用、停用和删除邮件规则,让新邮件自动归类。 |
📅 日历
| 日程 | 查看任意日期范围内所有日历的日程,包括重复事件;创建和删除事件。只填写日期会创建全天事件。 |
📝 备忘录
| 浏览和搜索 | 浏览文件夹和最近的备忘录,按标题或文本搜索。除非你主动查看,否则“最近删除”中的内容会保持隐藏。 |
| 撰写 | 创建备忘录、追加内容或重写备忘录;删除的备忘录会移至“最近删除”。 |
安装
你需要 macOS 14 或更高版本(较旧版本可能也能使用,但未经测试)以及一个 MCP 客户端。
适用于任意 MCP 客户端
获取代码——运行 git clone https://github.com/ipsupport-llc/apple-mail-mcp,或解压从最新版本下载的 .mcpb 文件——然后将服务添加到客户端的配置中。它会在 Mac 自带的 osascript 上运行:
{
"mcpServers": {
"apple-mail": {
"command": "/usr/bin/osascript",
"args": ["-l", "JavaScript", "/path/to/apple-mail-mcp/server/apple-mail-mcp.js"]
}
}
}
运行 ./install.sh --print 会输出包含正确路径的此配置块。该服务也已在 MCP Registry 中列出,名称为 io.github.ipsupport-llc/apple-mail-mcp。
助手首次访问 Mail、Calendar 或 Notes 时,macOS 会询问是否允许客户端控制这些应用——点击 允许。
Claude Desktop(一键安装)
- 从最新版本下载
apple-mail-mcp.mcpb。 - 双击该文件并点击 安装。
更新、设置和卸载选项位于 设置 → 扩展。
设置
在服务的 env 中设置环境变量(Claude Desktop:设置 → 扩展 → Apple Mail, Calendar & Notes → 配置):
| 变量 | 作用 |
|---|---|
APPLE_MAIL_READ_ONLY=true | 完全移除 write 工具。助手仍可读取和搜索,但无法发送、移动、删除或创建任何内容。适合共享设备或工作设备的安全默认设置。 |
APPLE_MAIL_DEFAULT_ACCOUNT | 助手未指定账户时使用的默认账户,例如 Work。 |
APPLE_MAIL_SAVE_DIR | 保存附件的位置。默认为 ~/Downloads;~ 和 ${HOME} 会展开为对应路径。 |
APPLE_MAIL_TIMEOUT | 单次调用超时前允许等待的秒数(默认值为 25)。 |
工具权限
大多数客户端会在使用工具前征求许可。我们建议允许一次 read,并在每次使用时批准 write,这样你始终能看到哪些内容将被发送、移动或删除。
安全性
- 邮件和备忘录绝不会被永久删除。 邮件会移至账户的废纸篓,备忘录会移至“最近删除”。如果无法这样处理——例如账户没有废纸篓、备忘录账户没有“最近删除”(如 Exchange)、内容已在废纸篓中,或备忘录已锁定——扩展程序会拒绝操作并说明原因。只有在每个账户都会将已删除邮件保留在废纸篓中时,才允许使用会删除邮件的邮件规则。
- macOS 中的日历事件和规则没有废纸篓。 删除时会返回其完整副本,因此之后可以按需重新创建。
- 回复和转发默认保存为草稿。 你可以在 Mail 中查看内容,然后自行按下 Send。
dry_run: true会准确显示将要发送的内容——收件人(包括 Reply-To 和回复所有人)、主题和全文——如果 Mail 实际要使用的收件人与之不同,则不会发送回复。发送结果会列出 Mail 实际发送的内容。 - 不会卡住。 Mail、Calendar 和 Notes 由独立的工作进程驱动:超时前未完成的调用会被停止并返回明确错误,
ping和tools/list始终会响应,已取消的调用也确实会停止。超时的写入操作不会盲目重试。每次调用都会将应用名称和耗时记录到 stderr。 - 说明权限问题。 如果缺少自动化权限、应用未运行或连接中断,系统会提供通俗易懂的“如何修复”说明,而不是错误代码。
- 避免意外重复操作。 15 分钟内重复执行相同的发送、回复、删除或创建调用会被拒绝——这样卡住的模型就不会把同一封邮件发五次。
- 仅在明确要求时删除重复事件。 删除重复事件会移除整个系列,因此扩展程序会要求提供
whole_series: true。 - 试运行。 批量移动和删除可以先预览,再执行。
- 附件集中存放。 附件只会保存到设置中的附件文件夹内,且绝不会覆盖现有文件——如果文件已存在,会在文件名后追加
(1)、(2)……。要附加到外发邮件的文件也只能来自该文件夹,因此会拒绝“附加 ~/.ssh/id_rsa”这类请求;来自其他工具的文件(例如从 Seafile 下载的文件)需先放入该文件夹。 - 会检查附件。 如果 Mail 未接收所有文件,则不会发送邮件,而是将其作为草稿打开。
- 警惕邮件中隐藏的指令。 助手读取的所有内容都会成为其上下文的一部分,恶意邮件可能会试图指示助手执行某些操作。如果你对此有所顾虑,请将
write设为需要手动批准,或开启只读模式。 - 单个易读文件。 整个服务端代码都在
server/apple-mail-mcp.js中,没有依赖项,也不会发起网络调用。
常见问题
Mac 处于睡眠状态时,Mail 规则会运行吗? 不会。Apple Mail 规则只会在 Mail 打开时运行,而且只处理新邮件。要整理旧邮件,请让助手移动它们。如果你的邮件服务器支持 Sieve,服务器端过滤器在不同设备上的表现会更可靠。
助手无法读取某条备忘录。 它很可能已被锁定。请先在 Notes 中解锁;锁定的备忘录会保持私密。
搜索速度很慢。 Apple Mail 的脚本处理大型文件夹时速度较慢,而搜索邮件正文最慢。请将搜索范围缩小到特定账户、文件夹或日期范围。
看不到这些工具。
请检查客户端中是否已启用该服务端,然后重启客户端。./test.sh 会直接与服务端通信,不需要任何客户端。(Claude Desktop:Settings → Extensions;日志位于 ~/Library/Logs/Claude/。)
“Not authorized to send Apple events”。 打开 System Settings → Privacy & Security → Automation,允许你的 MCP 客户端(启动该服务端的应用)控制 Mail、Calendar 和 Notes。
工具参考(供感兴趣者阅读)
两个工具,均接受 { "action": "...", "args": { ... } }。完整参数列表请见各工具的说明。
read — 不会更改任何内容
| 操作 | 用途 |
|---|---|
needs_response | 等待你回复的他人邮件 |
awaiting_reply | 你已发送但尚未收到回复的邮件 |
get_thread | 完整对话,按时间从早到晚排列 |
list_messages | 文件夹中的最新邮件,包含已回复 / 已转发 / 已标记状态 |
search_messages | 搜索文本(主题、发件人、正文)、日期、未读、已标记、附件以及所有文件夹 |
read_message | 一封完整邮件 |
list_attachments | 邮件的附件 |
list_accounts | 邮件账户和地址 |
list_mailboxes | 文件夹及未读数量 |
list_rules | 包含条件和操作的邮件规则 |
list_calendars | 日历 |
list_events | 日期范围内的事件,展开重复事件 |
list_note_folders | 备忘录账户和文件夹 |
list_notes | 最近的备忘录 |
search_notes | 搜索备忘录 |
read_note | 一篇完整备忘录 |
write — 执行更改(只读模式下隐藏)
| 操作 | 用途 |
|---|---|
send_email | 新邮件;attachments 从附件文件夹获取(改为 draft: true 则会打开草稿) |
reply_message | 回复 / 回复所有人——默认在 Mail 中打开为草稿,draft: false 则发送 |
forward_message | 转发并附带附件——默认保存为草稿,draft: false 则发送 |
set_read | 将一封或多封邮件标记为已读 / 未读 |
set_flag | 使用颜色标记 / 取消标记 |
move_messages | 移动到其他文件夹(可使用 dry_run) |
delete_messages | 移动到账户的废纸篓(可使用 dry_run) |
save_attachments | 将附件保存到附件文件夹 |
create_mailbox | 新建文件夹 |
create_rule · set_rule_enabled · delete_rule | 邮件规则(已删除的规则会作为副本恢复) |
create_event · delete_event | 日历事件(使用 whole_series: true 删除重复事件;已删除的事件会作为副本恢复) |
create_note · update_note · delete_note | 备忘录 |
邮件 ID 来自列表和搜索结果;请传入同一行中的 account 和 mailbox。即使文件夹有误,也仍会根据邮件 ID 找到邮件。
小型模型也能轻松使用:参数名称会进行宽松匹配(folder → mailbox,messageId → id),值会自动转换("false"、"1,2,3"、"tomorrow"),也支持简短的操作名称(reply、search),并且每条结果都会在 notes 中说明对调用的解析方式。任何发送、删除或创建操作都绝不会靠猜测执行:输入不明确时会报错并给出提示。
手动安装与开发
直接从检出目录运行服务,而不是使用 .mcpb:
git clone https://github.com/ipsupport-llc/apple-mail-mcp.git ~/code/apple-mail-mcp
cd ~/code/apple-mail-mcp
./install.sh --print # any client: prints the config block to paste
./install.sh # Claude Desktop: adds an "apple-mail" entry to claude_desktop_config.json (backs it up first)
./test.sh # talks to the server directly and prints your accounts and calendars
./uninstall.sh # removes the entry
install.sh 接受与扩展程序相同的设置:--read-only / --no-read-only、--account Work、--save-dir ~/Documents/Attachments。再次运行时会保留之前的设置,除非你修改它们(--reset 会清除这些设置)。
运行 install.sh 后重启 Claude Desktop。不要同时使用手动安装和 .mcpb。
测试绝不会触碰你的邮件:单元测试使用虚拟 Mail、Calendar 和 Notes 应用来运行服务;协议测试只通过 JSON-RPC 通信。CI 会在每个拉取请求中于 macOS 上运行这两种测试。
/usr/bin/osascript -l JavaScript tests/unit.js server/apple-mail-mcp.js
python3 tests/protocol.py
**发布:**推送一个标签,GitHub Actions 就会运行测试、构建 .mcpb、将其附加到一个版本并将其列入 MCP Registry。
git tag v1.4.0 && git push origin v1.4.0
许可证
MIT © IPSupport LLC。部分功能创意受到 patrickfreyer/apple-mail-mcp(MIT)的启发。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。