CalDAV MCP Server
Enables full CRUD operations on calendar events, free/busy queries, and availability slot finding via CalDAV, supporting Nextcloud, Radicale, iCloud, and other RFC 4791-compliant servers.
README
CalDAV MCP Server
MCP (Model Context Protocol) server for interacting with CalDAV calendars. Provides full CRUD operations on calendar events plus free/busy and availability-finding tools.
Supports Nextcloud, Radicale, Fastmail, iCloud, Baikal, Zimbra, SOGo, and any RFC 4791-compliant CalDAV server.
Quick Start
# Install
cd caldav-mcp-server
pip install -e .
# Configure
export CALDAV_URL="https://your-server.com/remote.php/dav/"
export CALDAV_USERNAME="your-username"
export CALDAV_PASSWORD="your-password"
# Run
caldav-mcp-server
# or: python -m caldav_mcp_server.main
Claude Code Integration
Add to ~/.claude.json in the mcpServers section:
{
"mcpServers": {
"caldav": {
"command": "python",
"args": ["-m", "caldav_mcp_server.main"],
"cwd": "/Users/jiangwu/claude/caldav-mcp-server/src",
"env": {
"CALDAV_URL": "https://your-server.com/remote.php/dav/",
"CALDAV_USERNAME": "your-username",
"CALDAV_PASSWORD": "your-password",
"CALDAV_FEATURES": "nextcloud"
}
}
}
}
Environment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
CALDAV_URL |
Yes | — | Full CalDAV server URL |
CALDAV_USERNAME |
Yes | — | Login username |
CALDAV_PASSWORD |
Yes | — | Password or app-specific token |
CALDAV_FEATURES |
No | — | Server compatibility profile |
CALDAV_SSL_VERIFY_CERT |
No | true |
Set to false for self-signed certs, or path to CA bundle |
CALDAV_TIMEOUT |
No | 30 |
HTTP request timeout in seconds |
Tools
| Tool | Description |
|---|---|
calendar_list_calendars |
List all calendars on the server with names, URLs, and supported component types |
calendar_search_events |
Search events by date range with optional text filtering |
calendar_get_event |
Get full details of a single event by UID (summary, times, description, location, attendees, recurrence) |
calendar_create_event |
Create a new event with optional recurrence rules, attendees, and reminders |
calendar_update_event |
Update fields on an existing event (only specified fields are changed) |
calendar_delete_event |
Permanently delete an event by UID |
calendar_get_freebusy |
Get busy time slots in a date range (falls back to event search if server doesn't support free/busy) |
calendar_find_available_slots |
Find free time slots for scheduling, with optional working hours/days constraints |
Time Format
All times use ISO 8601 format: 2026-01-15T09:00:00 or 2026-01-15T09:00:00+02:00. Times without a timezone offset are treated as UTC.
Recurrence Rules
The rrule parameter accepts RFC 5545 recurrence rule strings:
FREQ=WEEKLY;BYDAY=MO,WE,FR— every Monday, Wednesday, FridayFREQ=MONTHLY;BYMONTHDAY=15— 15th of every monthFREQ=DAILY;COUNT=10— every day for 10 occurrences
Server Compatibility
Set CALDAV_FEATURES to one of these profiles to enable server-specific workarounds:
| Profile | Servers |
|---|---|
nextcloud |
Nextcloud |
radicale |
Radicale |
baikal |
Baikal |
fastmail |
Fastmail |
icloud |
Apple iCloud |
google |
Google Calendar |
zimbra |
Zimbra |
sogo |
SOGo |
posteo |
Posteo |
ox |
Open-Xchange / mailbox.org |
synology |
Synology Calendar |
iCloud Setup
- Generate an app-specific password at appleid.apple.com
- Set
CALDAV_URL=https://caldav.icloud.com - Set
CALDAV_USERNAMEto your Apple ID email - Set
CALDAV_PASSWORDto the generated app-specific password - Set
CALDAV_FEATURES=icloud
iCloud limitations: no recurring event expansion, no todos, no free/busy, no calendar creation.
Local Testing with Radicale
pip install radicale
radicale --storage-type filesystem --filesystem-folder /tmp/radicale
# Server runs at http://localhost:5232
# No auth by default — leave CALDAV_USERNAME and CALDAV_PASSWORD empty
Project Structure
caldav-mcp-server/
├── pyproject.toml
├── README.md
├── src/
│ └── caldav_mcp_server/
│ ├── __init__.py
│ ├── main.py # FastMCP entry point + 8 tools
│ ├── auth.py # Client factory + calendar resolution
│ ├── config.py # Pydantic settings from env vars
│ ├── errors.py # Error mapping + decorator
│ └── formatters.py # Markdown + JSON output formatters
└── tests/
└── __init__.py
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.