iCloud MCP Server Apple
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ICLOUD_EMAIL | No | Your iCloud address, required for cloud mode. | |
| USE_LOCAL_MODE | No | Set to 'false' to select cloud mode. Defaults to 'true' (local mode). | true |
| ICLOUD_APP_PASSWORD | No | App-specific password, required for cloud mode. | |
| ICLOUD_MCP_IMSG_PATH | No | Explicit path to the imsg binary. If unset, the server searches ICLOUD_MCP_IMSG_PATH, IMSG_PATH, Homebrew prefixes, and PATH. |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| aboutA | Returns information about this iCloud MCP server |
| check-auth-statusA | Check if iCloud credentials are configured correctly |
| set-modeA | Switch between LOCAL (AppleScript/macOS apps) and CLOUD (iCloud protocols) modes |
| list-emailsA | Lists emails from a folder (default: inbox) |
| read-emailA | Reads the full content of an email by UID |
| send-emailA | Sends an email immediately from the user's account to one or more comma-separated recipients, with optional CC, BCC and HTML body. Cloud mode delivers over SMTP and returns the new message ID; local mode sends through Mail.app, which only sends plain text and returns no ID. There is no draft step, so the message goes out as soon as the tool runs. |
| search-emailsA | Searches one mail folder (inbox by default) by free text, sender, subject and unread state; the filters combine as AND. Results carry the same summary fields as list-emails, including the ref handle that read-email and mark-as-read take. |
| mark-as-readA | Marks an email as read or unread |
| list-foldersA | Lists all email folders |
| list-eventsA | Lists upcoming calendar events within a look-ahead window (30 days by default, up to 365). Each event carries its title, start and end times, and the ref handle that update-event and delete-event take as their eventUrl argument. |
| create-eventB | Creates a new calendar event |
| update-eventA | Updates an existing calendar event. Only the fields you pass are changed. In cloud mode the CalDAV property-merge preserves recurrence, invitees and alarms (experimental: the live round-trip is not yet verified). |
| delete-eventA | Deletes a calendar event |
| list-calendarsA | Lists all available calendars |
| list-contactsA | Lists contacts from the user's address book, up to 50 per call, including the handle that read-contact and delete-contact take. For a targeted lookup, search-contacts filters by name, email or phone instead of paging through the full list. |
| search-contactsA | Search contacts by name, email, or phone |
| read-contactA | Get detailed information about a specific contact |
| create-contactA | Creates a contact in the user's address book (Contacts.app in local mode, iCloud over CardDAV in cloud mode). Every field is optional, so pass at least a name (displayName, or firstName and lastName) along with any known email, phone, organization, job title or notes. |
| delete-contactA | Permanently deletes a contact from the user's address book. Takes the handle returned by list-contacts or search-contacts; confirm the target with read-contact first, because there is no undo through this server. |
| list-contact-accountsA | Lists all contact accounts (iCloud, Google, Exchange, etc.) - LOCAL mode only |
| list-contact-groupsA | Lists contact groups from all accounts or a specific account - LOCAL mode only |
| list-reminder-listsA | Lists all reminder lists from Reminders.app (LOCAL mode only) |
| list-remindersA | Lists reminders from a specific list or all lists (LOCAL mode only) |
| create-reminderA | Creates a new reminder (LOCAL mode only) |
| update-reminderB | Updates an existing reminder (LOCAL mode only) |
| complete-reminderA | Marks a reminder as complete or incomplete (LOCAL mode only) |
| delete-reminderA | Deletes a reminder (LOCAL mode only) |
| search-remindersA | Search reminders by text in name or body (LOCAL mode only) |
| list-note-foldersA | Lists all folders in Notes.app (LOCAL mode only) |
| list-notesA | Lists notes from a specific folder or all folders |
| read-noteA | Reads the content of a specific note |
| create-noteB | Creates a new note |
| search-notesA | Search notes by text in title or content |
| list-chatsA | List recent iMessage/SMS conversations with contact names and last message preview |
| read-messagesA | Read message history for a specific iMessage/SMS conversation |
| send-messageA | Send an iMessage or SMS. IMPORTANT: Always confirm with user before sending. |
| react-messageB | Send a tapback reaction (love, like, dislike, laugh, emphasis, question) |
| list-safari-tabsA | Lists all open tabs in Safari across all windows |
| get-current-safari-urlA | Gets the URL and title of the current/active Safari tab |
| open-safari-urlA | Opens a URL in Safari (new tab or new window) |
| close-safari-tabB | Closes a Safari tab |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MrGo2/icloud-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server