icloud-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IMAP_USER | Yes | Your iCloud email address (e.g., you@icloud.com). | |
| IMAP_PASSWORD | Yes | Your Apple app-specific password generated from appleid.apple.com. |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List all configured email accounts (names and IMAP hosts). Use the account name in any mail tool's account parameter. |
| get_inbox_summaryC | Get a summary of a mailbox including total, unread, and recent email counts |
| get_mailbox_summaryA | Get total, unread, and recent email counts for any specific mailbox/folder |
| get_top_sendersA | Get the top senders by email count from a sample of the inbox |
| get_unread_sendersC | Get top senders of unread emails |
| get_emails_by_senderC | Get all emails from a specific sender |
| read_inboxB | Read emails from iCloud inbox with pagination |
| get_emailB | Get full content of a specific email by UID |
| search_emailsB | Search emails by keyword or targeted field queries, with optional filters for date, read status, domain, and more |
| count_emailsA | Count how many emails match a set of filters without moving or deleting them. Use this before bulk_move or bulk_delete to preview how many emails will be affected. |
| bulk_moveA | Move emails matching any combination of filters from one mailbox to another. Uses safe copy-verify-delete with fingerprint verification and a persistent manifest. Use dryRun: true to preview without making changes. |
| bulk_deleteA | Delete emails matching any combination of filters. Processes in chunks of 250 with per-chunk timeouts for reliability. Use dryRun: true to preview without making changes. |
| bulk_flagC | Flag or unflag emails matching any combination of filters in bulk |
| bulk_delete_by_senderC | Delete all emails from a specific sender |
| bulk_move_by_senderB | Move all emails from a specific sender to a folder |
| bulk_delete_by_subjectC | Delete all emails matching a subject pattern |
| bulk_mark_readB | Mark all emails as read, optionally filtered by sender |
| bulk_mark_unreadB | Mark all emails as unread, optionally filtered by sender |
| delete_older_thanC | Delete all emails older than a certain number of days |
| get_emails_by_date_rangeC | Get emails between two dates |
| flag_emailA | Flag or unflag a single email |
| mark_as_readA | Mark a single email as read or unread |
| delete_emailC | Delete a single email |
| move_emailB | Move a single email to a different mailbox/folder |
| list_mailboxesA | List all mailboxes/folders in iCloud Mail |
| create_mailboxC | Create a new mailbox/folder |
| rename_mailboxC | Rename an existing mailbox/folder |
| delete_mailboxA | Delete a mailbox/folder. The folder must be empty first. |
| empty_trashA | Permanently delete all emails in the trash (Deleted Messages or Trash folder). Use dryRun: true to preview first. |
| get_move_statusA | Check the status of the current or most recent bulk move operation. Shows progress, chunk statuses, and any failures. Call this to monitor a long-running move or inspect a failed one. |
| abandon_moveA | Abandon an in-progress move operation so a new one can start. Only use if you are certain the operation should not be resumed. Emails already moved will not be returned to source. |
| log_writeA | Write a step to the session log. Use this to record your plan before starting, and after each completed step. Helps maintain progress across long operations. |
| log_readA | Read the current session log to see what has been done so far. |
| log_clearA | Clear the session log and start fresh. Use this at the start of a new task. |
| list_attachmentsA | List all attachments in an email without downloading them. Returns filename, MIME type, size, and IMAP part ID for each attachment. |
| get_attachmentA | Download a specific attachment from an email. Returns the file content as base64-encoded data. Use list_attachments first to get the partId. Maximum 20 MB per request; use offset+length for larger files. |
| get_unsubscribe_infoA | Get the List-Unsubscribe header from an email, parsed into email and URL components. Useful for AI-assisted inbox cleanup. |
| mark_older_than_readA | Mark all unread emails older than N days as read. Useful for bulk triage of a cluttered inbox. |
| bulk_move_by_domainA | Move all emails from a specific domain to a folder. Convenience wrapper around bulk_move with a domain filter. |
| get_email_rawA | Get the raw RFC 2822 source of an email (full headers + MIME body) as base64-encoded data. Useful for debugging or export. Capped at 1 MB. |
| bulk_flag_by_senderB | Flag or unflag all emails from a specific sender |
| archive_older_thanA | Safely move emails older than N days from a source mailbox to an archive folder. Uses the same safe copy-verify-delete pipeline as bulk_move. Use dryRun: true to preview. |
| get_storage_reportA | Estimate storage usage by size bucket and identify top senders by email size. Uses SEARCH LARGER queries for bucketing and samples large emails for sender analysis. |
| get_threadA | Find all emails in the same thread as a given email. Uses subject matching + References/In-Reply-To header filtering. Note: iCloud does not support server-side threading — results are approximate. |
| create_ruleA | Create a saved rule that applies a specific action to emails matching a set of filters. Rules are stored persistently and can be run on demand or all at once with run_all_rules. |
| list_rulesA | List all saved rules with their filters, actions, and run history. |
| run_ruleB | Run a specific saved rule by name. Use dryRun: true to preview what would be affected without making changes. |
| delete_ruleB | Delete a saved rule by name. |
| run_all_rulesA | Run all saved rules in sequence. Use dryRun: true to preview all rules without making changes. |
| compose_emailA | Compose and send a new email via iCloud SMTP. The From address is always your iCloud account. Supports plain text, HTML, or both (multipart/alternative). |
| reply_to_emailA | Reply to an existing email. Automatically sets correct threading headers (In-Reply-To, References) and prefixes the subject with Re:. Supports plain text and/or HTML body. |
| forward_emailB | Forward an existing email to one or more recipients. Fetches the original email body and includes it as a forwarded message block. Supports plain text and/or HTML note. |
| save_draftA | Save a draft email to your iCloud Drafts folder without sending it. Supports plain text, HTML, or both. The draft can be edited and sent later from Mail.app or iCloud.com. |
| get_digest_stateA | Get the current inbox digest state — last run timestamp, processed email UIDs (to skip on next run), pending actions, and per-sender skip counts for smart unsubscribe. |
| update_digest_stateA | Update the digest state after a run. Merges new processed UIDs into the existing list, updates lastRun, replaces pendingActions, and accumulates per-sender skip counts. |
| list_contactsA | List contacts from iCloud Contacts. Returns names, phones, emails, and other fields. |
| search_contactsB | Search iCloud Contacts by name, email address, or phone number. |
| get_contactA | Get full details for a specific contact by ID. Use list_contacts or search_contacts to find a contactId. |
| create_contactC | Create a new contact in iCloud Contacts. |
| update_contactA | Update an existing contact in iCloud Contacts. Only provided fields are changed; others are preserved. |
| delete_contactA | Delete a contact from iCloud Contacts permanently. |
| list_calendarsA | List all calendars in iCloud Calendar (e.g. Personal, Work, LSAT PREP). Returns calendarId, name, and supported event types. |
| list_eventsA | List events in a specific iCloud calendar within a date range. Use list_calendars first to get a calendarId. |
| get_eventA | Get full details of a specific calendar event by its ID. |
| create_eventA | Create a new event in an iCloud calendar. For all-day events use allDay:true and YYYY-MM-DD for start/end. |
| update_eventB | Update an existing calendar event. Only provided fields are changed; others are preserved. |
| delete_eventA | Delete a calendar event permanently from iCloud Calendar. |
| search_eventsA | Search for events by title/summary across all calendars within an optional date range. |
| suggest_event_from_emailA | Fetch an email and return its content formatted for calendar event extraction. After calling this tool, extract the event fields from the returned content (pay attention to _dateAnchor for resolving relative dates like "Tuesday"), present a summary to the user for confirmation, then call create_event. No API key required. |
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/adamzaidi/icloud-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server