# iCloud

Connect an AI agent to iCloud Mail, Calendar and Drive to search messages, check availability or locate files. Sending email requires approval.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 5
- Author: epinethrone
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/epinethrone/icloud-mcp
- Updated: 2026-10-24
- HTML: https://affpapa.org/en/nevibecode/mcp/icloud

## What it does

The MCP server gives an agent access to iCloud Mail, Calendar, Contacts, Reminders, Notes and iCloud Drive. It can search messages and files, check calendar availability, and manage reminders. Maps and Messages are available too; sending Messages is disabled by default.

Run the server locally or host it yourself. Sign-in uses an iCloud username and an app-specific password, which stays on your machine. Outgoing email waits for approval or goes to Drafts, while invitations to other people are turned off. You’ll need an app-specific password to connect the account.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `ICLOUD_USERNAME`, `ICLOUD_APP_PASSWORD`, `ICLOUD_DISPLAY_NAME`, `DEFAULT_TIMEZONE`, `SEND_REQUIRES_APPROVAL`, `AGENT_NOTES_FILE`, `OWNER_ADDRESSES`, `WARMUP_ON_START`, `TOOL_WORKERS` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env ICLOUD_USERNAME=<ICLOUD_USERNAME> --env ICLOUD_APP_PASSWORD=<ICLOUD_APP_PASSWORD> --env ICLOUD_DISPLAY_NAME=<ICLOUD_DISPLAY_NAME> --env DEFAULT_TIMEZONE=<DEFAULT_TIMEZONE> --env SEND_REQUIRES_APPROVAL=<SEND_REQUIRES_APPROVAL> --transport stdio icloud -- uvx icloud-mcp-server
```
Replace <…> with your own values. 4 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from icloud-mcp-server <command>

### Codex

**Platform CLI**
```bash
codex mcp add icloud --env ICLOUD_USERNAME=<ICLOUD_USERNAME> --env ICLOUD_APP_PASSWORD=<ICLOUD_APP_PASSWORD> --env ICLOUD_DISPLAY_NAME=<ICLOUD_DISPLAY_NAME> --env DEFAULT_TIMEZONE=<DEFAULT_TIMEZONE> --env SEND_REQUIRES_APPROVAL=<SEND_REQUIRES_APPROVAL> -- uvx icloud-mcp-server
```
Replace <…> with your own values. 4 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from icloud-mcp-server <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "icloud": {
            "command": "uvx",
            "args": [
                "icloud-mcp-server"
            ],
            "env": {
                "ICLOUD_USERNAME": "<ICLOUD_USERNAME>",
                "ICLOUD_APP_PASSWORD": "<ICLOUD_APP_PASSWORD>",
                "ICLOUD_DISPLAY_NAME": "<ICLOUD_DISPLAY_NAME>",
                "DEFAULT_TIMEZONE": "<DEFAULT_TIMEZONE>",
                "SEND_REQUIRES_APPROVAL": "<SEND_REQUIRES_APPROVAL>"
            }
        }
    }
}
```
Replace <…> with your own values. 4 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from icloud-mcp-server <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "icloud": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "icloud-mcp-server"
            ],
            "env": {
                "ICLOUD_USERNAME": "<ICLOUD_USERNAME>",
                "ICLOUD_APP_PASSWORD": "<ICLOUD_APP_PASSWORD>",
                "ICLOUD_DISPLAY_NAME": "<ICLOUD_DISPLAY_NAME>",
                "DEFAULT_TIMEZONE": "<DEFAULT_TIMEZONE>",
                "SEND_REQUIRES_APPROVAL": "<SEND_REQUIRES_APPROVAL>"
            }
        }
    }
}
```
Replace <…> with your own values. 4 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from icloud-mcp-server <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e ICLOUD_USERNAME=<ICLOUD_USERNAME> -e ICLOUD_APP_PASSWORD=<ICLOUD_APP_PASSWORD> -e ICLOUD_DISPLAY_NAME=<ICLOUD_DISPLAY_NAME> -e DEFAULT_TIMEZONE=<DEFAULT_TIMEZONE> -e SEND_REQUIRES_APPROVAL=<SEND_REQUIRES_APPROVAL> icloud uvx icloud-mcp-server
```
Replace <…> with your own values. 4 more environment variables are in the server README. uvx runs the command named after the package; if the README names another one, use uvx --from icloud-mcp-server <command>

## When to use it
- search email by topic or sender
- check calendar availability
- locate a document in iCloud Drive
- create a reminder for a date
- draft an email reply that waits for approval

## Example prompts
- Find the email about my heating and draft a polite reply.
- Check when I have an hour free next week.
- Find my tax return in iCloud Drive and tell me what I paid last year.

## Similar
- [Reactive Resume](https://affpapa.org/en/nevibecode/mcp/reactive-resume.md) — MCP server · ★ 44908
- [screenpipe](https://affpapa.org/en/nevibecode/mcp/screenpipe.md) — MCP server · ★ 22082
- [Inbox Zero](https://affpapa.org/en/nevibecode/mcp/inbox-zero.md) — MCP server · ★ 12826
- [kaneo](https://affpapa.org/en/nevibecode/mcp/kaneo.md) — MCP server · ★ 9623
- [Mindwtr](https://affpapa.org/en/nevibecode/mcp/mindwtr.md) — MCP server · ★ 2330
- [Azure DevOps (ADO)](https://affpapa.org/en/nevibecode/mcp/azure-devops-ado.md) — MCP server · ★ 2071

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
