Agent-Native Calendar
Agent-Native Google Calendar - manage events, sync, and public booking
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Read-only-by-default MCP server for iCloud mail, calendar, and contacts (IMAP/CalDAV/CardDAV).
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ICLOUD_USERNAME, ICLOUD_KEYRING_SERVICE, ICLOUD_APP_PASSWORD, ICLOUD_ENABLE_WRITES, ICLOUD_IMAP_HOST, ICLOUD_IMAP_PORT, ICLOUD_SMTP_HOST, ICLOUD_SMTP_PORT, ICLOUD_CALDAV_URL, ICLOUD_CARDDAV_URL, ICLOUD_TZค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"icloud": {
"command": "uvx",
"args": [
"icloud-mcp"
],
"env": {
"ICLOUD_USERNAME": "ใส่ค่าของคุณ",
"ICLOUD_KEYRING_SERVICE": "ใส่ค่าของคุณ",
"ICLOUD_APP_PASSWORD": "ใส่ค่าของคุณ",
"ICLOUD_ENABLE_WRITES": "ใส่ค่าของคุณ",
"ICLOUD_IMAP_HOST": "ใส่ค่าของคุณ",
"ICLOUD_IMAP_PORT": "ใส่ค่าของคุณ",
"ICLOUD_SMTP_HOST": "ใส่ค่าของคุณ",
"ICLOUD_SMTP_PORT": "ใส่ค่าของคุณ",
"ICLOUD_CALDAV_URL": "ใส่ค่าของคุณ",
"ICLOUD_CARDDAV_URL": "ใส่ค่าของคุณ",
"ICLOUD_TZ": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add icloud --env ICLOUD_USERNAME='ใส่ค่าของคุณ' --env ICLOUD_KEYRING_SERVICE='ใส่ค่าของคุณ' --env ICLOUD_APP_PASSWORD='ใส่ค่าของคุณ' --env ICLOUD_ENABLE_WRITES='ใส่ค่าของคุณ' --env ICLOUD_IMAP_HOST='ใส่ค่าของคุณ' --env ICLOUD_IMAP_PORT='ใส่ค่าของคุณ' --env ICLOUD_SMTP_HOST='ใส่ค่าของคุณ' --env ICLOUD_SMTP_PORT='ใส่ค่าของคุณ' --env ICLOUD_CALDAV_URL='ใส่ค่าของคุณ' --env ICLOUD_CARDDAV_URL='ใส่ค่าของคุณ' --env ICLOUD_TZ='ใส่ค่าของคุณ' -- uvx icloud-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"icloud": {
"command": "uvx",
"args": [
"icloud-mcp"
],
"env": {
"ICLOUD_USERNAME": "ใส่ค่าของคุณ",
"ICLOUD_KEYRING_SERVICE": "ใส่ค่าของคุณ",
"ICLOUD_APP_PASSWORD": "ใส่ค่าของคุณ",
"ICLOUD_ENABLE_WRITES": "ใส่ค่าของคุณ",
"ICLOUD_IMAP_HOST": "ใส่ค่าของคุณ",
"ICLOUD_IMAP_PORT": "ใส่ค่าของคุณ",
"ICLOUD_SMTP_HOST": "ใส่ค่าของคุณ",
"ICLOUD_SMTP_PORT": "ใส่ค่าของคุณ",
"ICLOUD_CALDAV_URL": "ใส่ค่าของคุณ",
"ICLOUD_CARDDAV_URL": "ใส่ค่าของคุณ",
"ICLOUD_TZ": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"icloud": {
"type": "stdio",
"command": "uvx",
"args": [
"icloud-mcp"
],
"env": {
"ICLOUD_USERNAME": "ใส่ค่าของคุณ",
"ICLOUD_KEYRING_SERVICE": "ใส่ค่าของคุณ",
"ICLOUD_APP_PASSWORD": "ใส่ค่าของคุณ",
"ICLOUD_ENABLE_WRITES": "ใส่ค่าของคุณ",
"ICLOUD_IMAP_HOST": "ใส่ค่าของคุณ",
"ICLOUD_IMAP_PORT": "ใส่ค่าของคุณ",
"ICLOUD_SMTP_HOST": "ใส่ค่าของคุณ",
"ICLOUD_SMTP_PORT": "ใส่ค่าของคุณ",
"ICLOUD_CALDAV_URL": "ใส่ค่าของคุณ",
"ICLOUD_CARDDAV_URL": "ใส่ค่าของคุณ",
"ICLOUD_TZ": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ICLOUD_KEYRING_SERVICE envICLOUD_ENABLE_WRITES envICLOUD_IMAP_HOST envICLOUD_IMAP_PORT envICLOUD_SMTP_HOST envICLOUD_SMTP_PORT envICLOUD_CALDAV_URL envICLOUD_CARDDAV_URL envICLOUD_TZ envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub eodozzy ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: ICLOUD_USERNAME, ICLOUD_APP_PASSWORD
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.1.1) เข้า registry 4 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Agent-Native Calendar, Excel MCP Server, MCP Server for Excel
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Agent-Native Google Calendar - manage events, sync, and public booking
ให้ AI สร้างและแก้ไฟล์ Excel ได้เอง ทั้งสูตร กราฟ และ PivotTable โดยไม่ต้องมีโปรแกรม Excel ในเครื่อง
Excel automation for AI - Sheets, Power Query, DAX, VBA, Tables, Ranges and more. Windows only.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
A Model Context Protocol server that gives AI assistants read-only access to your iCloud mail and calendar over IMAP and CalDAV. Credentials live in your OS keyring (macOS Keychain by default) — never in a config file or the repo.
Defaults target iCloud, but every endpoint is overridable, so it works against any standard IMAP/CalDAV provider.
Read-only by default; writes are strictly opt-in. Mail, calendar, and contacts can be listed, searched, and read with no ability to change anything: the IMAP connection is opened read-only and bodies are fetched with BODY.PEEK[], so messages are never even marked as read.
Mutating tools span mail (send_mail, reply_mail, forward_mail), calendar (create_event, update_event, delete_event), and contacts (create_contact, update_contact, delete_contact) — but all are disabled unless you set `ICLOUD_ENABLE_WRITES=1`, and even then every write requires an interactive confirmation (MCP elicitation) before it runs. See Writes (opt-in).
Mutations are gated two ways:
ICLOUD_ENABLE_WRITES=1 is set in the server's environment.iCloud issues a single app-specific password covering IMAP, SMTP, CalDAV, and CardDAV — there is no scoped "write-only" credential — so write-safety is *structural*: mail is sent over a separate, fresh SMTP connection (the read path's IMAP client has no send capability), and the opt-in flag + confirmation guard every mutation.
pip install icloud-mcp
Or run it without installing — handy for MCP clients that launch the server on demand:
uvx icloud-mcp
To install the latest unreleased code straight from GitHub:
pip install git+https://github.com/eodozzy/icloud-mcp
Or for local development:
git clone git@github.com:eodozzy/icloud-mcp
cd icloud-mcp python3 -m venv .venv && .venv/bin/pip install -e ".[test]"
Requires Python 3.11+.
Generate an app-specific password for your Apple ID (never use your main password), then store it in your keyring:
# macOS
security add-generic-password -a "you@icloud.com" -s "icloud-mcp" -w "xxxx-xxxx-xxxx-xxxx"
On other platforms, the cross-platform keyring library is used — keyring set icloud-mcp you@icloud.com also works anywhere.
The username comes from the ICLOUD_USERNAME environment variable. Resolution order for the password:
ICLOUD_KEYRING_SERVICE, default icloud-mcp, + username)ICLOUD_APP_PASSWORD environment variable (fallback)To reuse an existing keyring entry (e.g. one named my-icloud), set ICLOUD_KEYRING_SERVICE=my-icloud.
Set ICLOUD_USERNAME (required). All else is optional — see .env.example for the full list of endpoint/timezone overrides.
The server speaks MCP over stdio: a client launches the icloud-mcp command as a subprocess and talks to it over stdin/stdout. "Installing" it into a client just means telling that client which command to run and which env vars to pass — the password itself stays in the keyring, never in the client config.
If icloud-mcp isn't on your PATH (e.g. you installed into a virtualenv), use the absolute path to the launcher, e.g. /path/to/repo/.venv/bin/icloud-mcp.
claude mcp add icloud \
--env ICLOUD_USERNAME=you@icloud.com \ --env ICLOUD_KEYRING_SERVICE=icloud-mcp \ -- icloud-mcp
Then claude mcp list to confirm. Add -s user to make it available across all projects rather than just the current one.
Add the server to Claude Desktop's config file. On macOS this is:
~/Library/Application Support/Claude/claude_desktop_config.json
(On Windows: %APPDATA%\Claude\claude_desktop_config.json.)
The easiest way to open it is Settings → Developer → Edit Config. Add an mcpServers key alongside whatever is already in the file — do not paste a second top-level { ... } object, or the file becomes invalid JSON:
{
"mcpServers": { "icloud": { "command": "icloud-mcp", "env": { "ICLOUD_USERNAME": "you@icloud.com", "ICLOUD_KEYRING_SERVICE": "icloud-mcp" } } } }
If the file already contains other keys, merge mcpServers in as a sibling (remember the comma between keys):
{
"someExistingSetting": "...", "mcpServers": { "icloud": { "...": "..." } } }
Then fully quit Claude Desktop (⌘Q, not just closing the window) and reopen it. The server shows up as a *Local MCP server* and its tools become available.
Notes:
icloud-mcp may read the keyring item; click Always Allow to avoid repeat prompts.mcpServers block.Tools (model-invoked):
| Tool | Description |
|---|---|
list_mail | List a folder (default INBOX), newest first, with optional since_date |
search_mail | Full-text search the inbox (or a named folder) |
list_folders | List the available IMAP mailbox folder names |
get_message | Fetch one message by UID, with full body |
list_events | Calendar events in a date window |
search_events | Events whose title matches text, in a window |
list_calendars | Names of all calendars |
list_contacts | List address-book contacts (name, emails, phones, org) |
search_contacts | Find contacts matching text across name, org, and emails |
send_mail ⚠️ | Send a plain-text email |
reply_mail ⚠️ | Reply to a message by UID (quotes original; reply_all optional) |
forward_mail ⚠️ | Forward a message by UID to a new recipient |
create_event ⚠️ | Create a calendar event |
update_event ⚠️ | Edit an event by UID (only the fields you pass) |
delete_event ⚠️ | Delete an event by UID |
create_contact ⚠️ | Create a new contact |
update_contact ⚠️ | Edit a contact by UID (merges into the existing vCard) |
delete_contact ⚠️ | Delete a contact by UID |
⚠️ Write tools require ICLOUD_ENABLE_WRITES=1 and confirm each action — see Writes (opt-in).
Resources (passive context):
| URI | Description |
|---|---|
icloud://mail/inbox/recent | Most recent inbox messages |
icloud://calendar/today | Today + tomorrow's events |
Subject header is absent *or* present-but-blank render as (no subject); a blank/absent From renders as (unknown). (Some mail has an empty subject line rather than no subject line at all — both are normalized.)text/plain part; for HTML-only mail, tags are stripped ( / / content discarded) so you still get a readable preview.Content-*/MIME-Version header block is stripped so those headers don't leak into the snippet or body.since_date of today can include late-yesterday messages in your local time..venv/bin/pytest # run the fixture-based test suite (no live account)
.venv/bin/mcp dev -m icloud_mcp.server # interactive MCP Inspector
.env, never committed.ICLOUD_ENABLE_WRITES=1 *and* an interactive confirmation per action, and mail is sent over a separate SMTP connection isolated from the read path.MIT — see LICENSE.
Not affiliated with, endorsed by, or sponsored by Apple Inc. iCloud is a trademark of Apple Inc.