Context7
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Read, search, draft, send and file iCloud Mail over IMAP and SMTP. No tool destroys mail.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ICLOUD_EMAIL, ICLOUD_APP_PASSWORD, ICLOUD_DISPLAY_NAMEค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"icloud": {
"command": "uvx",
"args": [
"icloud-mail-mcp"
],
"env": {
"ICLOUD_EMAIL": "ใส่ค่าของคุณ",
"ICLOUD_APP_PASSWORD": "ใส่ค่าของคุณ",
"ICLOUD_DISPLAY_NAME": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add icloud --env ICLOUD_EMAIL='ใส่ค่าของคุณ' --env ICLOUD_APP_PASSWORD='ใส่ค่าของคุณ' --env ICLOUD_DISPLAY_NAME='ใส่ค่าของคุณ' -- uvx icloud-mail-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"icloud": {
"command": "uvx",
"args": [
"icloud-mail-mcp"
],
"env": {
"ICLOUD_EMAIL": "ใส่ค่าของคุณ",
"ICLOUD_APP_PASSWORD": "ใส่ค่าของคุณ",
"ICLOUD_DISPLAY_NAME": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"icloud": {
"type": "stdio",
"command": "uvx",
"args": [
"icloud-mail-mcp"
],
"env": {
"ICLOUD_EMAIL": "ใส่ค่าของคุณ",
"ICLOUD_APP_PASSWORD": "ใส่ค่าของคุณ",
"ICLOUD_DISPLAY_NAME": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ICLOUD_DISPLAY_NAME envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub JulienRabault ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: ICLOUD_EMAIL, ICLOUD_APP_PASSWORD
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.1.1) เข้า registry 2 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Context7, Codebase Memory, Exa
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
ส่งคู่มือการใช้ไลบรารีและเฟรมเวิร์กรุ่นล่าสุดให้ AI อ่านก่อนตอบ ช่วยให้โค้ดที่ AI เขียนไม่ใช้คำสั่งเก่าที่เลิกใช้แล้ว
Codebase knowledge graph for AI agents — 162 languages, sub-ms queries, 99% fewer tokens.
Connect AI agents to Exa for web search, content fetching, and multi-step research.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
SELECT ... readonly and BODY.PEEK — nothing is marked as read, moved or deleted behind your back.search_all_folders finds them where an inbox-only search can't.save_draft puts a message in Drafts for you to review. send_email exists, but it is separate and explicit.delete_mailbox refuses any folder that still holds some.Once published to PyPI, no clone is needed:
uvx --from icloud-mail-mcp icloud-mcp-setup # interactive configuration
uvx --from icloud-mail-mcp icloud-mcp # run the server
From source:
git clone https://github.com/JulienRabault/icloud-mcp.git
cd icloud-mcp uv sync uv run python -m icloud_mcp.setup
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:
{
"mcpServers": { "icloud-mail": { "command": "uv", "args": ["run", "--directory", "/path/to/icloud-mcp", "python", "-m", "icloud_mcp"] } } }
Claude Code
claude mcp add icloud-mail --scope user -- uv run --directory /path/to/icloud-mcp python -m icloud_mcp
Check with claude mcp list.
Claude Desktop
Add the standard config to claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonOn Windows, use the absolute path to uv.exe: desktop clients don't always inherit your shell PATH.
Codex
In ~/.codex/config.toml:
[mcp_servers.icloud-mail]
command = "uv" args = ["run", "--directory", "/path/to/icloud-mcp", "python", "-m", "icloud_mcp"]
</details>
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.
Read — none of these modify the mailbox:
| Tool | Description |
|---|---|
list_folders | List folders, optionally with message and unread counts |
folder_status | Counts for one folder without listing messages |
search_emails | Search one folder: text, sender, recipient, subject, dates, flags, size |
search_all_folders | The same search across every folder at once |
read_email | Full message: decoded body, optional HTML, attachment metadata |
get_thread | Rebuild a conversation, optionally with each message body |
save_attachments | Write attachments to disk and return their paths |
Write — explicit by design:
| Tool | Description |
|---|---|
save_draft | Put a message in Drafts. Nothing is sent |
set_flag | Read/unread, flagged, answered. Reversible |
create_mailbox | Create a folder, accented names included |
rename_mailbox | Rename a folder, messages follow |
delete_mailbox | Delete an empty folder. Refuses while it holds mail |
auto_organize | File messages by rules. Simulates unless dry_run=false |
move_emails | Move between folders. Simulates unless dry_run=false |
send_email | Actually sends. No draft step, no undo |
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.
| URI | Content |
|---|---|
icloud://folders | Every folder with message and unread counts |
icloud://unread | Unread messages in the inbox |
| Prompt | Purpose |
|---|---|
triage_inbox | Sort recent mail into action required / info / waiting / ignorable |
draft_reply | Read a message and its thread, draft a reply into Drafts |
follow_up | Reconstruct an exchange with a contact, say who owes whom a reply |
examples/ holds standalone scripts using the same modules — point cron or Task Scheduler at them:
uv run python examples/daily_digest.py # what arrived today
uv run python examples/watch_sender.py acme.com # exit 1 if nothing new uv run python examples/waiting_on_reply.py # threads nobody answered uv run python examples/auto_file.py --apply # file mail by rules
All support --json for piping. See examples/README.md.
skills/mailbox-search/ is a Claude Code skill that forces a sweep of every folder before concluding a message doesn't exist:
cp -r skills/mailbox-search ~/.claude/skills/
Worth knowing if you're writing your own IMAP client against iCloud:
COPY + \Deleted + EXPUNGE, and EXPUNGE purges *every* \Deleted message in the folder. move_emails refuses to run when the folder holds deleted messages outside the requested batch, which would otherwise be destroyed.filtered_client_side in the response.utf7.py.text/plain part..env (gitignored) or the environment, never in code. Settings.__repr__ omits the password.send_email and move_emails are meant to run only after the user approves the exact content or the exact message list in the conversation.uv run pytest -q
49 offline tests — no network, no credentials. CI runs them on Linux, macOS and Windows against Python 3.11 to 3.13.
src/icloud_mcp/
config.py env / .env loading utf7.py modified UTF-7 for folder names models.py frozen Pydantic models mime.py header, body and attachment decoding imap_client.py connection, LIST, STATUS, SELECT, FETCH search.py SEARCH criteria, threading, multi-folder search smtp_client.py MIME building, SMTP send, copy to Sent attachments.py attachment extraction, filename sanitising drafts.py APPEND to Drafts flags.py \Seen, \Flagged, \Answered move.py COPY + EXPUNGE with the anti-purge guard mailboxes.py create, rename, delete (empty only) organize.py rule-based filing server.py tools, resources, prompts setup_wizard.py interactive configuration cli.py terminal checks
Issues and pull requests welcome. Tests must pass offline — no test may require a real mailbox.
MIT