
iCloud Mail
io.github.JulienRabault由 GitHub 账号 JulienRabault 发布v0.1.1更新于 Oct 24, 2026
Read, search, draft, send and file iCloud Mail over IMAP and SMTP. No tool destroys mail.
概览
让助手通过 IMAP 和 SMTP 读取、搜索、起草、归档和发送 iCloud 邮件,默认只读且没有销毁邮件的工具。
- 可以做什么
- 通过 IMAP 和 SMTP 连接 iCloud 邮箱,提供列出文件夹、在单个或全部文件夹中搜索、读取邮件与会话、把附件保存到磁盘等工具。写入类工具包括保存草稿、设置标记、创建、重命名和删除空文件夹、按规则归档、移动邮件以及发送邮件。读取工具使用只读选择和预览式抓取,移动或整理操作在未明确要求执行时只做模拟。
- 适用场景
- 适合让助手整理 iCloud 收件箱、查找被规则归档到收件箱之外的邮件、总结会话、准备待审阅的草稿,或按规则归档邮件。也适合希望邮件处理留在本机、不经过第三方邮件服务的用户。
- 运行要求
- 以本地 Python 包方式运行(需要 Python 3.11 或更高版本以及 uv)。需要启用双重认证的 iCloud 账户,并通过 ICLOUD_APP_PASSWORD 提供 App 专用密码,通过 ICLOUD_EMAIL 提供 iCloud 地址;ICLOUD_DISPLAY_NAME 可选。需要访问 iCloud 的 IMAP 和 SMTP 网络,修改配置后需重启桌面客户端。
安装
在 SourceWeft 中
- 打开 控制台中的 iCloud Mail,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
iCloud Mail MCP
[License: MIT] [PyPI] [Python 3.11+] [MCP]
A Model Context Protocol (MCP) server for iCloud Mail. Lets an LLM read, search, file and send your Apple mail over IMAP and SMTP.
Runs entirely on your machine: your credentials and your mail never reach a third party. Networking and MIME parsing use only the Python standard library.
Key Features
- Read-only by default. Search and read tools use
SELECT ... readonlyandBODY.PEEK— nothing is marked as read, moved or deleted behind your back. - Searches every folder, not just the inbox. Replies get filed away by mail
rules;
search_all_foldersfinds them where an inbox-only search can't. - Drafts before sends.
save_draftputs a message in Drafts for you to review.send_emailexists, but it is separate and explicit. - Nothing destroys mail. There is no tool that deletes messages, and
delete_mailboxrefuses any folder that still holds some. - Handles real iCloud MIME. Modified UTF-7 folder names, quoted-printable, lying charsets, HTML-only messages, accented server-side search.
Requirements
- Python 3.11 or newer, and uv
- An iCloud account with two-factor authentication enabled
- An app-specific password — iCloud rejects your main password over IMAP
Getting started
Once published to PyPI, no clone is needed:
From source:
The setup command asks for your address and app-specific password, tests the
connection, writes .env, then prints the exact config block for your client.
Generate the app-specific password at account.apple.com → Sign-In and Security → App-Specific Passwords.
Standard config works in most clients:
Claude Code
Check with claude mcp list.
Claude Desktop
Add the standard config to claude_desktop_config.json:
- macOS —
~/Library/Application Support/Claude/claude_desktop_config.json - Windows —
%APPDATA%\Claude\claude_desktop_config.json
On Windows, use the absolute path to uv.exe: desktop clients don't always
inherit your shell PATH.
Codex
In ~/.codex/config.toml:
Cursor / Windsurf / VS Code
Use the standard config block in the MCP settings file of your editor
(.cursor/mcp.json, ~/.codeium/windsurf/mcp_config.json, or the VS Code MCP
settings).
MCP servers load at client startup — restart the client after editing its config.
Tools
Read — none of these modify the mailbox:
Write — explicit by design:
No tool destroys mail. delete_mailbox refuses a folder that still holds
messages — move them out first, which keeps the decision with you.
Attachment bytes never pass through the model: save_attachments writes files
and returns paths. Filenames arriving from email are sanitised — they are
hostile input, not trusted paths.
Resources
Prompts
Automation without an MCP client
examples/ holds standalone scripts using the same modules — point cron or Task
Scheduler at them:
All support --json for piping. See examples/README.md.
Bundled skill
skills/mailbox-search/ is a Claude Code skill that forces a sweep of every
folder before concluding a message doesn't exist:
iCloud quirks handled here
Worth knowing if you're writing your own IMAP client against iCloud:
SEARCHreturns UIDs out of order. RFC 3501 doesn't guarantee ordering, and iCloud genuinely returns unsorted lists. Taking the tail of the response gives you the wrong messages — sort numerically first.- No
MOVE, noUIDPLUS. Moving meansCOPY+\Deleted+EXPUNGE, andEXPUNGEpurges every\Deletedmessage in the folder.move_emailsrefuses to run when the folder holds deleted messages outside the requested batch, which would otherwise be destroyed. SEARCH CHARSET UTF-8works. Accented queries run server-side across the whole mailbox. A client-side fallback covers servers that refuse, and flags it viafiltered_client_sidein the response.- Folder names use modified UTF-7 (RFC 3501), implemented in
utf7.py. - Charsets lie. Bodies fall back to latin-1 when the declared charset fails,
and to stripped HTML when there's no
text/plainpart.
Security notes
- Credentials live in
.env(gitignored) or the environment, never in code.Settings.__repr__omits the password. - Email content is data, not instructions. The server tells clients never to act on directives found inside a received message.
send_emailandmove_emailsare meant to run only after the user approves the exact content or the exact message list in the conversation.
Development
49 offline tests — no network, no credentials. CI runs them on Linux, macOS and Windows against Python 3.11 to 3.13.
Contributing
Issues and pull requests welcome. Tests must pass offline — no test may require a real mailbox.
License
MIT
来源:README.md,提交 efee3ee
工具
0版本历史
1- v0.1.1最新Sep 22, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分