icloud-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IMAP_PORT | No | IMAP port | 993 |
| SMTP_PORT | No | SMTP port | 587 |
| IMAP_SERVER | No | IMAP server hostname | imap.mail.me.com |
| SMTP_SERVER | No | SMTP server hostname | smtp.mail.me.com |
| ICLOUD_EMAIL | No | iCloud email address (fallback if not provided in headers) | |
| CALDAV_SERVER | No | CalDAV server URL | https://caldav.icloud.com |
| CARDDAV_SERVER | No | CardDAV server URL | https://contacts.icloud.com |
| MCP_SERVER_PORT | No | Port for the MCP HTTP server | 8000 |
| ICLOUD_APP_SPECIFIC_PASSWORD | No | iCloud app-specific password (fallback if not provided in headers) |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| calendar_list_calendarsA | List the account's calendars with their IDs (URLs). Reminders lists are included with read_only=true; they cannot hold events. |
| calendar_list_eventsA | List events in a date range, sorted by start. Each entry has id/url, summary, description, location, start, end (ISO 8601 with offset, or a date for all_day events), start_timezone, recurring, rrule, attendees and calendar. Recurring series are expanded into one entry per occurrence; all occurrences share the series id, so update/delete apply to the whole series. |
| calendar_search_eventsA | Search events by text within an optional date range (same output as calendar_list_events). |
| calendar_create_eventA | Create a calendar event (optionally recurring, with alerts) and email iTIP invitations to attendees. Returns the created event including its id/url. If some invitations could not be sent,
|
| calendar_update_eventA | Update fields of an existing event. Only provided fields change; recurring series are updated as a whole. |
| calendar_delete_eventA | Delete an event (the whole series for recurring events) and email cancellations to its attendees. |
| contacts_listA | List contacts from the default address book: id/url, name, phones, emails, addresses, organization, title, notes. |
| contacts_searchA | Find contacts by name, organization, email or phone number. |
| contacts_getA | Get one contact with all fields. |
| contacts_createA | Create a contact in the default address book and return it with its id/url. |
| contacts_updateA | Update a contact. Only provided fields change; list fields replace the existing values (entries that keep the same number/address keep their labels such as home/work). |
| contacts_deleteA | Delete a contact permanently. |
| email_list_foldersA | List mail folders with their IMAP flags (e.g. \Sent, \Trash). |
| email_list_messagesA | List the newest messages in a folder: id, subject, from, to, date, flags, unread, has_attachments and body_text. |
| email_searchA | Server-side IMAP search. All provided filters are combined with AND; at least one is required. Returns the same fields as email_list_messages, newest first. |
| email_get_messageA | Get one message: headers (from, to, cc, reply_to, date, Message-ID), flags, body_text and the attachments list. Attachments are described by index, name, mime_type and size; download one with email_get_attachment. |
| email_get_messagesA | Fetch several messages in one round trip (same fields as email_get_message). Missing IDs yield an error entry. |
| email_get_attachmentA | Download an email attachment. With save_dir the file is written to disk and its path returned; otherwise the file is returned inline (images as image content, other types as an embedded resource). |
| email_sendA | Send an email from the account (SMTP) and store a copy in the Sent folder. |
| email_save_draftA | Save a message to the Drafts folder without sending it, so the user can review and send it from any mail client. |
| email_moveA | Move a message to another folder. The message gets a new UID in the destination folder. |
| email_deleteA | Move a message to Trash, or delete it permanently. |
| email_mark_readB | Mark a message as read (set \Seen). |
| email_mark_unreadA | Mark a message as unread (clear \Seen). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 24 tools
Each tool maps to a distinct resource-action pair across calendar, contacts, and email, with list/search/get variants clearly separated by purpose. Batch operations and single-item fetches are explicitly distinguished, and no two tools appear interchangeable.
All tool names follow a uniform lowercase snake_case pattern of domain_verb_noun, such as calendar_create_event, contacts_update, and email_list_messages. The domain prefix makes the resource area immediately clear, and there are no mixed conventions or vague verbs.
24 tools is above the typical single-domain range, but the server intentionally covers three distinct iCloud domains—Calendar, Contacts, and Mail—and each tool serves a specific operational need. The count is slightly heavy but well justified by the breadth of functionality exposed.
Calendar events and contacts have full create/read/update/delete coverage, while email covers searching, fetching, sending, drafting, moving, deleting, and read-state management. Recurring events, invitations, and attachments are handled, leaving no obvious dead ends in the core workflows.