Provider-agnostic CalDAV calendar MCP server for AI assistants
Project description
calendar-mcp
Provider-agnostic CalDAV calendar MCP server for AI assistants. Connect any CalDAV calendar to Claude Desktop, Cursor, VS Code, or any MCP-compatible client.
Features
- 10 calendar tools: list_calendars, get_events, get_event, today, upcoming, search_events, free_busy, create_event, update_event, delete_event
- Provider auto-detection: Automatically configures Google, Apple iCloud, Nextcloud, Fastmail from your CalDAV URL
- Any CalDAV server: Works with Radicale, Baikal, ownCloud, or any standard CalDAV provider
- Read-only mode: Optional safety mode that disables all write operations
- Zero external dependencies: Pure Python stdlib for CalDAV/iCal (only
mcpSDK required) - RFC 5545 compliant: Proper iCalendar parsing with recurrence rules, durations, timezones, attendees
Quick Start
pip install calendar-mcp
Configuration
Set three environment variables:
export CALENDAR_MCP_URL="https://caldav.icloud.com/"
export CALENDAR_MCP_USERNAME="you@icloud.com"
export CALENDAR_MCP_PASSWORD="your-app-password"
All Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
CALENDAR_MCP_URL |
Yes | — | CalDAV server URL |
CALENDAR_MCP_USERNAME |
Yes | — | Username (usually email) |
CALENDAR_MCP_PASSWORD |
Yes | — | Password or app-specific password |
CALENDAR_MCP_PROVIDER |
No | Auto-detected | Force provider: google, apple, nextcloud, fastmail, generic |
CALENDAR_MCP_CALENDAR_ID |
No | First calendar | Default calendar name |
CALENDAR_MCP_READ_ONLY |
No | false | Set to true to disable write operations |
CALENDAR_MCP_TIMEZONE |
No | UTC | Default timezone |
Provider Auto-Detection
| URL Pattern | Provider | Default CalDAV URL |
|---|---|---|
| googleusercontent.com | https://apidata.googleusercontent.com/caldav/v2/ | |
| caldav.icloud.com | apple | https://caldav.icloud.com/ |
| office365.com | outlook | https://outlook.office365.com/caldav/v2/ |
| caldav.fastmail.com | fastmail | https://caldav.fastmail.com/dav/calendars/user/{email}/ |
| nextcloud, owncloud | nextcloud | (your server URL) |
| anything else | generic | (your server URL) |
Client Configuration
Claude Desktop
{
"mcpServers": {
"calendar": {
"command": "calendar-mcp",
"env": {
"CALENDAR_MCP_URL": "https://caldav.icloud.com/",
"CALENDAR_MCP_USERNAME": "you@icloud.com",
"CALENDAR_MCP_PASSWORD": "your-app-password"
}
}
}
}
Claude Code
claude mcp add -e CALENDAR_MCP_URL=https://caldav.icloud.com/ -e CALENDAR_MCP_USERNAME=you@icloud.com -e CALENDAR_MCP_PASSWORD=your-app-password calendar calendar-mcp
Tools
| Tool | Description | Write? |
|---|---|---|
list_calendars |
List all calendars on the account | No |
get_events |
Get events in a date range (configurable days ahead/back) | No |
get_event |
Get a single event by UID | No |
today |
Get all events for today | No |
upcoming |
Get events in the next N hours | No |
search_events |
Search by text in title, description, location | No |
free_busy |
Free/busy summary with total hours | No |
create_event |
Create a new event | Yes |
update_event |
Update an existing event (partial updates) | Yes |
delete_event |
Delete an event by UID | Yes |
Write tools are disabled when CALENDAR_MCP_READ_ONLY=true.
License
Dual-licensed:
- AGPL-3.0 — free for open-source use (see LICENSE)
- Commercial — for proprietary use (see LICENSE-COMMERCIAL)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file calendar_mcp-1.0.0.tar.gz.
File metadata
- Download URL: calendar_mcp-1.0.0.tar.gz
- Upload date:
- Size: 33.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d10cda5830ac1093297c944cfdd39105c33e6f537e2ffa2137a09abdce38431
|
|
| MD5 |
1cee43687ce4204f7b7e657b48605298
|
|
| BLAKE2b-256 |
f87a0fab26376aa0ec68b3a9b0fd53dfa6b3d0d848989c0e73677c09ff674732
|
File details
Details for the file calendar_mcp-1.0.0-py3-none-any.whl.
File metadata
- Download URL: calendar_mcp-1.0.0-py3-none-any.whl
- Upload date:
- Size: 32.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5209be4dd87b29889dc07954e1bdc49d28e7f034d68c6ff6ce58b4cb702851d4
|
|
| MD5 |
a64feec498ad4f18177c43ae745d4f93
|
|
| BLAKE2b-256 |
0c88ba359b3f7a98a3254bab8e6d7a8c3aed1bbe45fb75b4768cbdedee1be964
|