
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 分