mcpField
I
icloud-mcp

icloud-mcp

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

关于 icloud-mcp

icloud-mcp 为 AI 助手提供 iCloud 邮件、日历和联系人的访问能力,也可连接标准 IMAP、CalDAV 和 CardDAV 服务。默认只读;写入需显式启用并逐项确认。

主要功能

  1. 01列出并搜索邮件、日程和联系人
  2. 02读取邮件时不将其标记为已读
  3. 03将凭据存入操作系统钥匙串
  4. 04写入操作需显式启用并确认

适用场景

  1. 01搜索和读取 iCloud 邮件
  2. 02按日期范围查看日历事件
  3. 03按姓名、组织或电子邮件查找联系人
  4. 04启用确认后发送邮件或编辑记录

MCP 相关

该 MCP 服务通过 stdio 与客户端通信,提供邮件、日历和联系人相关工具及资源。修改数据的工具默认禁用,需设置环境变量并逐项确认。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"eodozzy-icloud": {
"command": "uvx",
"args": [
"icloud-mcp"
],
"env": {
"ICLOUD_USERNAME": "<ICLOUD_USERNAME>",
"ICLOUD_KEYRING_SERVICE": "<ICLOUD_KEYRING_SERVICE>",
"ICLOUD_APP_PASSWORD": "<ICLOUD_APP_PASSWORD>",
"ICLOUD_ENABLE_WRITES": "<ICLOUD_ENABLE_WRITES>",
"ICLOUD_IMAP_HOST": "<ICLOUD_IMAP_HOST>",
"ICLOUD_IMAP_PORT": "<ICLOUD_IMAP_PORT>",
"ICLOUD_SMTP_HOST": "<ICLOUD_SMTP_HOST>",
"ICLOUD_SMTP_PORT": "<ICLOUD_SMTP_PORT>",
"ICLOUD_CALDAV_URL": "<ICLOUD_CALDAV_URL>",
"ICLOUD_CARDDAV_URL": "<ICLOUD_CARDDAV_URL>",
"ICLOUD_TZ": "<ICLOUD_TZ>"
}
}
}
}
启动命令uvx icloud-mcp
需要配置的环境变量
ICLOUD_USERNAMEYour Apple ID email (the IMAP/CalDAV username).
ICLOUD_KEYRING_SERVICE密钥OS-keyring service name to read the app-specific password from. Default: icloud-mcp. Set to reuse an existing entry.
ICLOUD_APP_PASSWORD密钥App-specific password. Fallback only; preferred storage is the OS keyring. Used only when no keyring entry is found.
ICLOUD_ENABLE_WRITESEnable mutating tools (send/reply/forward mail, create/update/delete event & contact). Off by default; each write still requires interactive confirmation. Accepts 1/true/yes/on.
ICLOUD_IMAP_HOSTIMAP host override. Default: imap.mail.me.com
ICLOUD_IMAP_PORTIMAP port override. Default: 993
ICLOUD_SMTP_HOSTSMTP host override (used only by write/send tools). Default: smtp.mail.me.com
ICLOUD_SMTP_PORTSMTP port override. Default: 587
ICLOUD_CALDAV_URLCalDAV base URL override. Default: https://caldav.icloud.com/
ICLOUD_CARDDAV_URLCardDAV base URL override. Default: https://contacts.icloud.com/
ICLOUD_TZIANA timezone for rendering/scoping events. Default: system local time.

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

安装包
pypiicloud-mcp0.1.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

icloud-mcp

PyPI Python License: MIT

一个 Model Context Protocol 服务,通过 IMAP 和 CalDAV 为 AI 助手提供对 iCloud 邮件和日历的只读访问权限。凭据保存在操作系统的钥匙串中(默认使用 macOS Keychain),绝不会存储在配置文件或代码仓库中。

默认配置面向 iCloud,但所有端点均可覆盖,因此也适用于任何标准 IMAP/CalDAV 提供商。

状态

默认只读;写入功能必须明确选择启用。 邮件、日历和通讯录都可以列出、搜索和读取,但无法进行任何更改:IMAP 连接以只读模式打开,并使用 BODY.PEEK[] 获取正文,因此邮件甚至不会被标记为已读。

变更类工具涵盖邮件(send_mail、reply_mail、forward_mail)、日历(create_event、update_event、delete_event)和通讯录(create_contact、update_contact、delete_contact)——但除非设置 ICLOUD_ENABLE_WRITES=1,否则这些工具全部禁用;即使启用,每次写入操作也都必须先进行交互式确认(MCP elicitation)。请参阅写入(选择启用)。

写入(选择启用)

变更操作通过两种方式进行限制:

  1. 操作员开关 — 除非在服务的环境中设置了 ICLOUD_ENABLE_WRITES=1,否则写入工具会拒绝执行并返回说明性错误。
  2. 逐项操作确认 — 启用后,每个写入工具都会回调客户端,要求其在执行前确认具体操作。破坏性操作(删除事件/通讯录)也采用相同的限制方式——无需额外的强制标志,只需进行同样的确认。

iCloud 会提供一个适用于 IMAP、SMTP、CalDAV 和 CardDAV 的单一 App 专用密码——没有按权限限定的“仅写入”凭据——因此,写入安全性由结构设计保障:邮件通过单独的新 SMTP 连接发送(读取路径中的 IMAP 客户端不具备发送能力),并且所有变更操作都受到选择启用标志和确认机制的保护。

安装

pip install icloud-mcp

也可以不安装而直接运行——适用于按需启动服务的 MCP 客户端:

uvx icloud-mcp

要直接从 GitHub 安装最新的未发布代码:

pip install git+https://github.com/eodozzy/icloud-mcp

或者用于本地开发:

git clone [email protected]:eodozzy/icloud-mcp
cd icloud-mcp
python3 -m venv .venv && .venv/bin/pip install -e ".[test]"

需要 Python 3.11+。

凭据

为你的 Apple ID 生成一个 App 专用密码(切勿使用主密码),然后将其存入钥匙串:

# macOS
security add-generic-password -a "[email protected]" -s "icloud-mcp" -w "xxxx-xxxx-xxxx-xxxx"

在其他平台上,使用跨平台的 keyring 库——keyring set icloud-mcp [email protected] 也可以在任何平台上使用。

用户名来自 ICLOUD_USERNAME 环境变量。密码的解析顺序如下:

  1. 操作系统钥匙串(ICLOUD_KEYRING_SERVICE,默认值为 icloud-mcp,以及用户名)
  2. ICLOUD_APP_PASSWORD 环境变量(后备方案)

要复用现有的钥匙串条目(例如名为 my-icloud 的条目),请设置 ICLOUD_KEYRING_SERVICE=my-icloud。

配置

设置 ICLOUD_USERNAME(必填)。其他配置均为可选——完整的端点/时区覆盖列表请参阅 .env.example。

注册到 MCP 客户端

该服务通过 stdio 使用 MCP:客户端会将 icloud-mcp 命令作为子进程启动,并通过 stdin/stdout 与其通信。将其“安装”到客户端,只需告知客户端要运行的命令以及要传递的环境变量——密码本身仍保存在钥匙串中,绝不会存储在客户端配置中。

如果 icloud-mcp 不在你的 PATH 中(例如你将其安装到了虚拟环境中),请使用启动器的绝对路径,例如 /path/to/repo/.venv/bin/icloud-mcp。

Claude Code
claude mcp add icloud \
  --env [email protected] \
  --env ICLOUD_KEYRING_SERVICE=icloud-mcp \
  -- icloud-mcp

然后运行 claude mcp list 进行确认。添加 -s user,即可让它在所有项目中使用,而不仅限于当前项目。

Claude Desktop

将服务添加到 Claude Desktop 的配置文件中。在 macOS 上,文件路径为:

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

(在 Windows 上:%APPDATA%\Claude\claude_desktop_config.json。)

最简单的打开方式是 Settings → Developer → Edit Config。在文件现有内容旁添加 mcpServers 键——不要再粘贴第二个顶层 { ... } 对象,否则文件会变成无效 JSON:

{
  "mcpServers": {
    "icloud": {
      "command": "icloud-mcp",
      "env": {
        "ICLOUD_USERNAME": "[email protected]",
        "ICLOUD_KEYRING_SERVICE": "icloud-mcp"
      }
    }
  }
}

如果文件中已包含其他键,请将 mcpServers 合并为同级键(记得在键之间添加逗号):

{
  "someExistingSetting": "...",
  "mcpServers": { "icloud": { "...": "..." } }
}

然后完全退出 Claude Desktop(按 ⌘Q,而不只是关闭窗口),再重新打开。服务会显示为本地 MCP 服务,其工具也会变为可用。

注意:

  • 首次调用时会提示访问 Keychain。 macOS 会询问是否允许 icloud-mcp 读取钥匙串项目;点击 Always Allow 可避免重复提示。
  • Claude Desktop 可能会在保存自身偏好设置时重写此文件,并删除它不识别的手动添加键。如果你更改其他设置后服务消失,只需重新添加 mcpServers 块。

工具和资源

工具(由模型调用):

工具描述
list_mail列出文件夹(默认为 INBOX)中的邮件,按时间从新到旧排列,可选 since_date
search_mail对收件箱(或指定文件夹)进行全文搜索
list_folders列出可用的 IMAP 邮箱文件夹名称
get_message根据 UID 获取一封邮件,包含完整正文
list_events指定日期范围内的日历事件
search_events在指定日期范围内查找标题包含指定文本的事件
list_calendars所有日历的名称
list_contacts列出通讯录联系人(姓名、电子邮件、电话、组织)
search_contacts根据姓名、组织和电子邮件中的文本查找联系人
send_mail ⚠️发送纯文本电子邮件
reply_mail ⚠️根据 UID 回复邮件(引用原邮件;reply_all 为可选项)
forward_mail ⚠️根据 UID 将邮件转发给新收件人
create_event ⚠️创建日历事件
update_event ⚠️根据 UID 编辑事件(仅修改传入的字段)
delete_event ⚠️根据 UID 删除事件
create_contact ⚠️创建新联系人
update_contact ⚠️根据 UID 编辑联系人(合并到现有 vCard 中)
delete_contact ⚠️根据 UID 删除联系人

⚠️ 写入工具需要设置 ICLOUD_ENABLE_WRITES=1,且每项操作都需确认——参见 写入操作(选择启用)。

资源(被动上下文):

URI描述
icloud://mail/inbox/recent收件箱中最新的邮件
icloud://calendar/today今天和明天的日历事件

行为说明

  • 标头为空或缺失: Subject 标头缺失或存在但为空的邮件会显示为 (no subject);From 为空或缺失时会显示为 (unknown)。(有些邮件的主题行为空,而不是完全没有主题行——两种情况都会统一处理。)
  • 摘要片段优先使用 text/plain 部分;对于仅包含 HTML 的邮件,会移除标签(丢弃 <style>/<script>/<head> 中的内容),以便仍能获得 易读的预览。
  • 正文中重复封装的标头: 某些发件人(例如 USPS Informed Delivery)会在解码后的正文开头嵌入 多余的 MIME 标头块。系统会移除开头的 Content-*/MIME-Version 标头块,避免这些标头泄漏到摘要片段或正文中。
  • since_date 精确到日期,并根据 IMAP 服务的时区进行计算 (iCloud 使用 UTC),因此在你当地时间中,设为今天的 since_date 可能会包含昨天深夜的邮件。

开发

.venv/bin/pytest            # run the fixture-based test suite (no live account)
.venv/bin/mcp dev -m icloud_mcp.server   # interactive MCP Inspector

安全说明

  • 应用专用密码仅存储在操作系统密钥环中 — 绝不会存入 .env, 也绝不会提交到代码库。
  • 只读访问(邮件、日历、联系人)无法修改任何内容;IMAP 会话以只读模式打开。
  • 默认关闭写入功能。启用该功能需要设置 ICLOUD_ENABLE_WRITES=1,并且每次操作都需进行交互式确认;邮件通过与读取路径隔离的独立 SMTP 连接发送。
  • 可随时从 appleid.apple.com 撤销应用专用密码,且不会影响你的 Apple ID。

许可证

MIT — 请参阅 LICENSE。


本项目与 Apple Inc. 无关联,也未获其认可或赞助。iCloud 是 Apple Inc. 的商标。

评论

支持 Markdown

第一次接触 MCP?

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

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