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-mcpRelated MCP server: iCloud CalDAV MCP Connector
Configuration
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
Maintenance
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
- 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/aberhamm/ical-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server