icloud-mcp
iCloud MCP Server
MCP (Model Context Protocol) server for iCloud integration, providing tools for managing calendars (CalDAV), contacts (CardDAV), and email (IMAP/SMTP).
Features
Stateless Architecture: No state stored between requests
Full CRUD Operations: Complete management of calendars, contacts, and email
Flexible Authentication: Via headers or environment variables
Multiple Transports: stdio (local) or Streamable HTTP (server)
Docker Support: Easy deployment with Docker and Docker Compose
Supported Operations
Calendar Tools (CalDAV)
calendar_list_calendars- List all calendarscalendar_list_events- List events with date filteringcalendar_create_event- Create new eventcalendar_update_event- Update existing eventcalendar_delete_event- Delete eventcalendar_search_events- Search events by text
Contacts Tools (CardDAV)
contacts_list- List all contactscontacts_get- Get specific contactcontacts_create- Create new contact (name, phones, emails, addresses, organization, title)contacts_update- Update existing contactcontacts_delete- Delete contactcontacts_search- Search contacts by text
Email Tools (IMAP/SMTP)
email_list_folders- List mail foldersemail_list_messages- List messages in folderemail_get_message- Get full message detailsemail_get_messages- Get multiple messages at once (bulk fetch)email_search- Search messages by textemail_send- Send email via SMTPemail_move- Move message to folderemail_delete- Delete or trash messageemail_mark_read- Mark message as reademail_mark_unread- Mark message as unread
Installation
Prerequisites
Python 3.10 - 3.12 (Python 3.13+ not yet supported due to dependency compatibility)
iCloud account with App-Specific Password (Generate here)
Local Installation
# Clone repository
git clone <repository-url>
cd icloud-mcp
# Create virtual environment with Python 3.10-3.12
python3.12 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install package in editable mode
pip install -e .
# Configure environment
cp .env.example .env
# Edit .env with your credentialsDocker Installation
# Clone repository
git clone <repository-url>
cd icloud-mcp
# Configure environment
cp .env.example .env
# Edit .env with your credentials
# Build and run with Docker Compose
docker-compose up -dConfiguration
Environment Variables
Create a .env file with the following variables:
# iCloud Credentials (fallback if not in headers)
ICLOUD_EMAIL=your-email@icloud.com
ICLOUD_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx
# iCloud Servers (optional, defaults to standard iCloud servers)
CALDAV_SERVER=https://caldav.icloud.com
CARDDAV_SERVER=https://contacts.icloud.com
IMAP_SERVER=imap.mail.me.com
SMTP_SERVER=smtp.mail.me.com
# Server Configuration
MCP_SERVER_PORT=8000
IMAP_PORT=993
SMTP_PORT=587Authentication
The server supports two authentication methods (checked in order):
Request Headers (recommended for multi-user scenarios):
X-Apple-Email: iCloud email addressX-Apple-App-Specific-Password: App-specific password
Environment Variables (fallback):
ICLOUD_EMAILICLOUD_APP_SPECIFIC_PASSWORD
If credentials are not found in either location, the server returns a 401 error.
Usage
Local Usage (stdio transport)
# Using Python directly
python run.py
# Or using the module
python -m icloud_mcp.serverServer Usage (Streamable HTTP transport)
# Using Python
python run.py --http --port 8000
# Using Docker Compose
docker-compose upThe server will be available at http://localhost:8000/mcp.
Integration with Claude Desktop
This method allows Claude Desktop to directly launch the MCP server as a subprocess.
Step 1: Install dependencies locally:
pip install -e .Step 2: Create a .env file with your credentials:
cp .env.example .env
# Edit .env and add your iCloud credentialsStep 3: Find your Claude Desktop configuration file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Step 4: Add this configuration (replace the path):
{
"mcpServers": {
"icloud": {
"command": "python",
"args": ["/absolute/path/to/icloud-mcp/run.py"],
"network": {
"enabled": true,
"allowedDomains": [
"caldav.icloud.com",
"contacts.icloud.com",
"*.contacts.icloud.com",
"imap.mail.me.com",
"smtp.mail.me.com"
]
}
}
}
}Important: Replace /absolute/path/to/icloud-mcp/ with the actual full path to your project directory.
Example on macOS:
{
"mcpServers": {
"icloud": {
"command": "python",
"args": ["/Users/username/Projects/icloud-mcp/run.py"],
"network": {
"enabled": true,
"allowedDomains": [
"caldav.icloud.com",
"contacts.icloud.com",
"*.contacts.icloud.com",
"imap.mail.me.com",
"smtp.mail.me.com"
]
}
}
}
}Note: The network.allowedDomains configuration is required for contacts to work properly, as the server needs to access iCloud's CardDAV servers.
Step 5: Restart Claude Desktop completely (Quit and reopen)
Verification
After restarting Claude Desktop:
Open Claude Desktop application
Look for the šØ (tools/hammer) icon in the bottom-right corner
You should see "icloud" server listed with green status
Try commands like:
"List my calendars"
"Show my contacts"
"Get my unread emails"
Troubleshooting
Server doesn't appear:
Check JSON syntax in config file (use a JSON validator)
View logs: Help ā Show Logs in Claude Desktop
Verify the path to
run.pyis absolute (not relative)Ensure Python is in your PATH
Check that you're using Python 3.10-3.12 (not 3.13+)
401 Authentication errors:
Ensure you're using an App-Specific Password, not your regular Apple password
Generate one at: https://appleid.apple.com/account/manage
Check
.envfile has correct credentials
Contacts not working (empty results or errors):
Ensure you've added the
network.allowedDomainsconfiguration to Claude Desktop configThe domains
contacts.icloud.comand*.contacts.icloud.commust be in the allowed listRestart Claude Desktop after updating the config
Tools fail with 500 errors:
Check server logs for details
Verify iCloud credentials are valid
Ensure network connectivity to iCloud servers
Architecture
Stateless Design
The server is fully stateless:
No sessions or state stored between requests
Each request contains all necessary authentication information
Connections to iCloud services are created per-request and closed immediately
Perfect for horizontal scaling and serverless deployments
Technical Implementation
Transport: Streamable HTTP protocol with
/mcpendpointCalendar (CalDAV): Uses
caldavlibrary for standard CalDAV operationsContacts (CardDAV): Direct HTTP/WebDAV implementation using
requestswith proper RFC 6352 CardDAV protocolEmail (IMAP/SMTP): Uses
imapclientfor IMAP and standardsmtplibfor SMTPAuthentication: Headers via
get_http_headers()with environment variable fallback
Security Considerations
Always use HTTPS in production when using HTTP transport
Store App-Specific Passwords securely (use secret management tools)
Consider using header-based authentication for multi-user scenarios
Never commit
.envfile to version controlNetwork access is restricted to allowed iCloud domains only
Development
Project Structure
icloud-mcp/
āāā src/
ā āāā icloud_mcp/
ā āāā __init__.py
ā āāā config.py # Configuration management
ā āāā auth.py # Authentication handling
ā āāā calendar.py # CalDAV tools
ā āāā contacts.py # CardDAV tools (direct HTTP/WebDAV)
ā āāā email.py # IMAP/SMTP tools
ā āāā server.py # FastMCP server and tool registration
āāā .env.example # Example environment configuration
āāā .gitignore
āāā Dockerfile
āāā docker-compose.yml
āāā pyproject.toml # Python project configuration and dependencies
āāā run.py # Entry point script
āāā README.mdRunning Tests
# Install development dependencies
pip install -e ".[dev]"
# Run tests (when added)
pytestCode Formatting
# Format code
black src/
# Lint code
ruff check src/License
MIT License - See LICENSE file for details
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes
Submit a pull request
Support
For issues and questions:
Open an issue on GitHub
Check existing issues for solutions
Review iCloud API documentation
Acknowledgments
Built with:
FastMCP - MCP server framework
caldav - CalDAV library for calendar operations
requests - HTTP library for CardDAV operations
IMAPClient - IMAP library
vobject - vCard/iCalendar parsing
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/ken-grafals/icloud-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server