Skip to main content
Glama
st-designs

MailSyncMCP

by st-designs

MailSyncMCP

在 Claude 中搜索、阅读和回复 Apple Mail 中的每一个账户,而无需交出一个密码。

同样适用于 Gmail、Microsoft 365、iCloud 和自定义域名的 IMAP,因为它读取的是 Mail 已同步的内容,而不是与各家服务商直接通信。完全在你的 Mac 上运行。没有任何内容会被上传到任何地方。

为什么采用这种工作方式

Apple Mail 已经同步了你拥有的每个账户,并且已经在 Keychain 中持有它们的凭据,自行刷新。该服务器读取 Mail 的本地存储,并请求 Mail 撰写邮件。它永远不会看到密码或令牌,不会存储任何凭据,也不会触发重新认证。添加账户就是在 Mail 中添加;这里不需要改动任何东西。

另一种方案是直接与各家服务商通信,这意味着需要 Google Cloud 项目、Azure 应用注册,以及每个账户一个刷新令牌。更糟糕的是,工作和学校账户通常被锁定,第三方 OAuth 应用需要管理员同意,而这往往直接被拒绝。读取 Mail 已经同步的内容可以完全绕开这一切。

Related MCP server: macos-mail-mcp

安全性

搜索和读取是安全的。发送不是。

  1. 无凭据。 没有可泄露或过期的东西。

  2. 两阶段提交。 prepare_* 工具验证请求、渲染完整预览并返回一个五分钟后过期的单次使用令牌。它们不改变任何内容。commit_action(token) 是唯一会执行操作的工具,它只接受一个令牌,因此发出的消息始终是所展示的消息。

  3. 客户端权限提示commit_action 时触发。

  4. 不受信任内容隔离。 消息正文返回时被包裹并标记为数据。由于发送需要只有渲染预览才能生成的令牌,埋在邮件中的指令无法导致邮件被发送。

  5. 审计日志位于 ~/.local/share/mailsync/audit.jsonl,仅追加写入。

服务器仅使用 stdio 通信。没有监听器、没有守护进程、也没有定时器,因此只有在聊天会话中调用工具时它才会执行操作。

设置 MAILSYNC_READ_ONLY=1 可在会话期间完全禁用撰写功能。

关于 AppleScript

applescript/ 中的每个脚本都是静态文件,通过 argv 接收值。绝不生成脚本文本,因此电子邮件中的引号、反斜杠、换行符和 AppleScript 语法都会作为字面数据保留。tests/test_applescript_safety.py 使用恶意载荷对此进行断言。其他 Apple Mail MCP 服务器会将消息数据拼接到脚本源码中,并用转义函数加以防御;本服务器没有可供转义的注入面。

工具

读取:list_accountssearch_mailget_messageget_threadlist_attachmentssave_attachmentmailbox_statsopen_in_mailrefresh_index

撰写:prepare_sendprepare_replyprepare_forwardlist_pendingcommit_action

刻意没有标记、移动、归档或删除邮件的功能。这个服务器唯一能做的就是发送或草拟一封新邮件。

链接回 Mail

返回的每封邮件都带有一个根据其 RFC-822 Message-ID 构建的 message:// URL。点击链接会在 Apple Mail 中打开该邮件,因此聊天中的答案始终可以追溯到真实邮件。Mail 未在本地存储的邮件没有 Message-ID,因此也没有链接。

聊天客户端会将链接目标净化到允许的协议清单(http、https、mailto),因此 message:// 链接会显示为无效文本,而不是可点击的内容。open_in_mail 工具正是为此而存在:请求打开一封邮件,它会直接跳转到 Mail。URL 仍会打印出来,以便复制或在聊天之外使用。

open_in_mail 接受 whole_thread=True,但 Mail 会在各自的窗口中打开每封邮件:没有可脚本化的线程视图。在主查看器上对 set selected messages 进行了反复测试,在 macOS 26 的会话模式下不起作用,返回的对象 AppleScript 桥接器无法转换回。get_thread 是阅读对话的更好方式。

链接始终打开单封邮件,而不是其所在会话。Mail 只注册了三种 URL 方案(mailtomail-pref-pane),其中没有一种能定位整个会话。通过 AppleScript 驱动 Mail 自己的线程列表也尝试过,在 macOS 26 上,set selected messages 要么选中错误的会话,要么报告空选择,在 Gmail 的 All Mail 邮箱和普通 INBOX 中都是如此。与其发布这样的功能,不如让 get_message 返回对话的其余部分,每条消息带一个链接,而 get_thread 按顺序渲染整个往来过程。

安装

python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m mailsync --build-index

注册

Claude Code 和 Claude for Desktop 是独立的应用程序,各有各的配置文件。在一个中注册对另一个不起作用:

应用

配置文件

Claude Code

~/.claude.json,顶层 mcpServers

Claude for Desktop

~/Library/Application Support/Claude/claude_desktop_config.json

将相同的配置添加到所使用的应用中,指向 venv 的 Python:

将包安装到 venv 中时使用 pip install,因此条目不依赖于工作目录。注册后完全退出并重新启动应用。

像这样的本地服务器作为 Mac 上的子进程运行,因此只有在该机器上的应用中可用。浏览器中的 claude.ai 无法访问它。

每个应用各自启动自己的操作系统进程;stdio 无法共享一个进程。这不会造成麻烦,因为两个条目都运行同一个已安装的包,并且每个进程都在 ~/.local/share/mailsync/mailsync.db 读写同一个索引。只需编辑一次代码,两者在下次重启时都会生效。并发访问是安全的:索引以 WAL 模式运行并带有忙碌超时,已在五个读取者和两个并发重建的情况下测试通过。

完全磁盘访问权限

~/Library/Mail 受完全磁盘访问权限保护,服务器会继承启动它的应用的授权。Claude Code 和 Claude for Desktop 是两个独立的 TCC 客户端,因此一个可以访问而另一个不能。请在 系统设置 > 隐私与安全性 > 完全磁盘访问权限 中授予权限,然后完全退出并重新启动应用。

没有该权限时,搜索和阅读仍可从本地索引工作,该索引位于受保护区域之外。只有 refresh_index 会失败,因此数据会过期。该工具会明确说明这一点,而不是模糊地报错。

安装

python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m mailsync --build-index

注册

Claude Code 和 Claude for Desktop 是独立的应用程序,各有自己的配置文件。在一个中注册对另一个没有影响:

应用

配置文件

Claude Code

~/.claude.json,顶层 mcpServers

Claude for Desktop

~/Library/Application Support/Claude/claude_desktop_config.json

将同一条目添加到你所使用的任一配置中,指向 venv 的 Python:

{
  "mcpServers": {
    "mailsync": {
      "command": "/absolute/path/to/Apple-Mail-Sync-MCP/.venv/bin/python",
      "args": ["-m", "mailsync"]
    }
  }
}

因为包是通过 pip install -e . 安装到 venv 中的,所以该条目不依赖于工作目录。完成后退出并重新启动应用。

像这样的本地服务器作为 Mac 上的子进程运行,因此只有在同一台机器上的应用才能访问。浏览器中的 claude.ai 无法连接到它。

每个应用各自启动一个操作系统进程;stdio 无法共享。因为两个条目都运行同一个已安装的包,并且每个进程都在 ~/.local/share/mailsync/mailsync.db 读写同一个索引,所以只需编辑一次代码,两者都会在下次重启时生效。并发访问是安全的:索引以 WAL 模式运行并带有忙碌超时,已在五个读取者和两个并发重建的情况下测试通过。

完全磁盘访问权限

~/Library/Mail 受完全磁盘访问权限保护,服务器会继承启动它的应用的授权。Claude Code 和 Claude for Desktop 是两个独立的 TCC 客户端,因此一个可以访问而另一个不能。请在 系统设置 > 隐私与安全性 > 完全磁盘访问权限 中授予权限,然后完全退出并重新打开应用。

没有该权限时,搜索和读取仍可通过本地索引工作,该索引位于受保护区域之外。只有 refresh_index 会失败,因此数据会过期。该工具会明确说明,而不是含糊地报错。

部分邮件

Mail 只保留部分邮件的完整正文:大约四分之一。其余邮件只包含头部——发件人、收件人、主题、日期,以及 Mail 在正文中首先捕获的行数,这可能只包括问候语和签名而不是正文。对于这些邮件,get_message 使用 fetch_if_available=true,这会要求 Mail 提供其本地副本的全文。此操作仅访问本地。如果 Mail 的副本只是头部,返回的邮件会说明这一点,并且 get_message 会回退到头部字段。

维护

Apple 的 Envelope Index 架构没有文档说明,并且可能在 macOS 更新中发生变化。所有这些都限定在 mailsync/index.py 中,可以从 .eml 文件重建索引,使用 --build-index --full

~/.local/share/mailsync/mailsync.db 中的索引是对 ~/Library/Mail/V10/**/*.emlx 中所有邮件进行 FTS5 全文搜索。Mail 的数据库则按原样读取,绝不写入。

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server that gives Claude and other MCP hosts full access to Mail.app on macOS — search, read, send, reply, flag, move, and more across all accounts configured in Mail.app.
    24
    89
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server for Apple Mail that enables Claude to read, search, manage, and compose emails via AppleScript.
    20
    383
    1
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    MCP server that connects Claude to iCloud Mail, enabling reading, searching, sending, and organizing emails via IMAP/SMTP.
    14
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that provides programmatic access to Apple Mail, enabling AI assistants like Claude to read, send, search, and manage emails on macOS.
    25
    MIT

View all related MCP servers

Related MCP Connectors

  • Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.

  • Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.

  • Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/st-designs/Apple-Mail-Sync-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server