A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
MCP server for iCloud services (Email, Calendar, Contacts)
Connect Claude to your Apple services via the Model Context Protocol
Features • Installation • Configuration • Tools • Architecture
This MCP server enables Claude to interact with your Apple services in two modes:
Uses AppleScript to access native macOS apps. Faster, works offline, more services.
| Service | App | Tools |
|---|---|---|
| Mail.app | 6 | |
| Calendar | Calendar.app | 5 |
| Contacts | Contacts.app | 5 |
| Reminders | Reminders.app | 7 |
| Notes | Notes.app | 5 |
| Messages | Messages.app | 1 |
| Safari | Safari.app | 4 |
Uses iCloud protocols (IMAP, CalDAV, CardDAV). Requires app-specific password.
| Service | Protocol | Endpoint |
|---|---|---|
| IMAP / SMTP | imap.mail.me.com / smtp.mail.me.com | |
| Calendar | CalDAV | caldav.icloud.com |
| Contacts | CardDAV | contacts.icloud.com |
# Clone the repository
git clone https://github.com/MrGo2/icloud-mcp.git
cd icloud-mcp
# Install dependencies
npm install
# Configure (optional for local mode)
cp .env.example .env
No configuration needed! Just run:
npm start
On first use, macOS will prompt for access to each app. Grant permission in System Settings > Privacy & Security > Automation.
Generate an App-Specific Password
iCloud MCP and copy the 16-character passwordConfigure .env
USE_LOCAL_MODE=false
ICLOUD_EMAIL=your-email@icloud.com
ICLOUD_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
Add to your Claude Desktop MCP settings (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"apple": {
"command": "node",
"args": ["/path/to/icloud-mcp/index.js"]
}
}
}
| Tool | Description |
|---|---|
about | Server information |
check-auth-status | Verify credentials |
| Tool | Description |
|---|---|
list-emails | List emails from a folder |
read-email | Read full email content |
send-email | Compose and send email |
search-emails | Search by criteria |
mark-as-read | Mark read/unread |
list-folders | List mail folders |
| Tool | Description |
|---|---|
list-events | List upcoming events |
list-calendars | List all calendars |
create-event | Create new event |
update-event | Update existing event |
delete-event | Delete an event |
| Tool | Description |
|---|---|
list-contacts | List contacts |
search-contacts | Search by name/email |
read-contact | Get contact details |
create-contact | Create new contact |
delete-contact | Delete a contact |
| Tool | Description |
|---|---|
list-reminder-lists | List all reminder lists |
list-reminders | List reminders from a list |
create-reminder | Create new reminder |
update-reminder | Update reminder |
complete-reminder | Mark as complete |
delete-reminder | Delete reminder |
search-reminders | Search reminders |
| Tool | Description |
|---|---|
list-note-folders | List note folders |
list-notes | List notes |
read-note | Read note content |
create-note | Create new note |
search-notes | Search notes |
| Tool | Description |
|---|---|
send-message | Send iMessage/SMS |
| Tool | Description |
|---|---|
list-safari-tabs | List open tabs |
get-current-safari-url | Get current tab URL |
open-safari-url | Open URL in new tab |
close-safari-tab | Close a tab |
icloud-mcp/
├── index.js # MCP server (mode switching)
├── config.js # Configuration
├── auth/ # Credential management
├── email/
│ ├── imap-client.js # Cloud: IMAP
│ ├── smtp-client.js # Cloud: SMTP
│ ├── local-client.js # Local: Mail.app
│ └── index.js
├── calendar/
│ ├── caldav-client.js # Cloud: CalDAV
│ ├── local-client.js # Local: Calendar.app
│ └── index.js
├── contacts/
│ ├── carddav-client.js # Cloud: CardDAV
│ ├── local-client.js # Local: Contacts.app
│ └── index.js
├── reminders/ # Local only
├── notes/ # Local only
├── messages/ # Local only
├── safari/ # Local only
└── utils/
├── applescript.js # AppleScript executor
├── date-utils.js
└── error-handler.js
"Show me my reminders for today"
"Create a reminder to buy milk tomorrow at 5pm"
"Send an iMessage to +34612345678 saying I'll be there in 10 minutes"
"What tabs do I have open in Safari?"
"Send an email to john@example.com with subject 'Meeting Tomorrow'"
| Feature | Local Mode | Cloud Mode |
|---|---|---|
| Speed | Fast (~100ms) | Slower (~500ms+) |
| Works offline | ✅ | ❌ |
| Remote access | ❌ | ✅ |
| Services | 7 | 3 |
| Tools | 31 | 17 |
| Requirements | macOS | App-specific password |
| Feature | Status | Reason |
|---|---|---|
| Read Messages | ❌ | macOS security limitation |
| Edit Notes | ⚠️ Limited | AppleScript limitation |
| iCloud Drive | ❌ | Requires CloudKit |
| Find My | ❌ | Internal API only |
| Issue | Solution |
|---|---|
| Permission denied | Grant access in System Settings > Privacy & Security > Automation |
| App not responding | Make sure the app (Mail, Calendar, etc.) is running |
| Authentication failed (cloud) | Use app-specific password, not Apple ID password |
| IMAP timeout (cloud) | iCloud servers can be slow - retry |
# Run in local mode (default)
npm start
# Run in cloud mode
USE_LOCAL_MODE=false npm start
# Test with MCP Inspector
npm run inspect
MIT © Carlos Lorenzo
Built for use with Claude and the Model Context Protocol
A Jetbrains IDE IntelliJ plugin aimed to provide coding agents the ability to leverage intelliJ's indexing of the codeba
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots