ical-mcp
Provides tools for managing Apple Calendar events via CalDAV, including listing calendars, querying events, creating, updating, deleting events, and checking free/busy status.
Provides tools for managing iCloud calendars via CalDAV, supporting event CRUD operations and free/busy queries.
Provides tools for managing Nextcloud calendars via CalDAV, supporting event CRUD operations and free/busy queries.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ical-mcplist my events for today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
ical-mcp
MCP server for Apple Calendar and CalDAV providers.
Works with iCloud, Fastmail, Nextcloud, and any CalDAV-compatible calendar. No macOS dependency — runs headless on any platform.
Quick start
# Install
uvx ical-mcp
# Or from source
uv sync
uv run ical-mcpConfiguration
Set these environment variables (or copy .env.example to .env):
Variable | Required | Description |
| Yes | CalDAV server URL (e.g. |
| Yes | Your email / account ID |
| Yes | Password or app-specific password |
| No | Default timezone (default: |
| No | Calendars that allow writes (see Write protection) |
iCloud setup
Go to account.apple.com → Sign-In and Security → App-Specific Passwords
Generate a new password (label it "ical-mcp")
Set
ICAL_MCP_URL=https://caldav.icloud.comSet
ICAL_MCP_USERNAMEto your Apple ID emailSet
ICAL_MCP_PASSWORDto the generated app-specific password
Tools
Tool | Description |
| List all available calendars (shows read/write access per calendar) |
| Query events by date range |
| Create a new event |
| Update an existing event (partial patch, only changed fields) |
| Delete an event |
| Check busy/free status for a time range |
Write protection
All calendars are read-only by default. You must explicitly opt in to writes:
# Single calendar (by name or ID)
ICAL_MCP_WRITABLE_CALENDARS=home
# Multiple calendars
ICAL_MCP_WRITABLE_CALENDARS=home,Work
# All calendars (use with caution)
ICAL_MCP_WRITABLE_CALENDARS=*
# Not set or empty — all calendars are read-onlylist_calendars shows "access": "read-only" or "access": "read-write" for each calendar, so the AI agent knows what it can and can't modify.
Using calendar IDs (UUIDs) instead of names avoids issues with spaces and renames.
Transport
# Local use with Claude Code / Claude Desktop (default)
ical-mcp
# Shared HTTP server for multi-agent access
ical-mcp --transport http --port 8093
# Bind to a specific address (e.g. Tailscale IP)
ical-mcp --transport http --host 100.64.0.1 --port 8093Claude Code configuration
Local (stdio)
{
"mcpServers": {
"ical-mcp": {
"command": "uvx",
"args": ["ical-mcp"],
"env": {
"ICAL_MCP_URL": "https://caldav.icloud.com",
"ICAL_MCP_USERNAME": "your@icloud.com",
"ICAL_MCP_PASSWORD": "xxxx-xxxx-xxxx-xxxx",
"ICAL_MCP_WRITABLE_CALENDARS": "your-calendar-id"
}
}
}
}Remote (HTTP)
{
"mcpServers": {
"ical-mcp": {
"url": "http://your-server:8093/mcp"
}
}
}Safety features
Per-calendar write protection — read-only by default, explicit opt-in per calendar
Backup before mutate — every update/delete logs the full iCal data to stderr
ETag concurrency — updates fail if the event was modified elsewhere since last fetch
Semantic errors — clear messages for auth failures, rate limits, conflicts, and read-only violations
License
MIT
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/aberhamm/ical-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server