CalDAV MCP Server for AI Assistants
Enable AI assistants to manage calendars with a CalDAV-based MCP server that exposes calendar operations as tools for seamless scheduling and sync.
npx -y @dominik1001/caldav-mcpOverview
This project implements a Model Context Protocol (MCP) server that exposes calendar operations over CalDAV as callable tools for AI assistants. Instead of teaching an assistant the details of CalDAV, you run the server alongside a model and let the assistant call high-level calendar tools (list calendars, find free time, create events, etc.). The MCP server translates those tool calls into CalDAV requests and returns normalized responses the assistant can reason about.
That separation simplifies scheduling workflows: assistants can perform robust calendar operations (conflict detection, timezone-aware event creation, event updates and deletions, and sync) without directly speaking CalDAV. This is especially useful for productivity assistants that need to schedule meetings, suggest availability, or synchronize events across user accounts.
Features
- Exposes common calendar operations as MCP tools backed by CalDAV
- Normalized JSON input/output for safe, predictable assistant calls
- Support for listing calendars, events, free/busy queries, create/update/delete events, and basic sync
- Timezone-aware event handling and ISO 8601 timestamps
- Configurable CalDAV credentials and server URL
- Simple HTTP interface suitable for integrating with streaming or tool-based assistant frameworks
- Lightweight and easy to run locally or behind a reverse proxy
Installation / Configuration
Minimum steps to get the server running locally. Adjust commands for your environment.
Clone the repository:
Install dependencies (example using Python; adapt if a different runtime is used):
Configure environment variables (example):
Or use a YAML config file (config.yaml):
caldav:
url: "https://caldav.example.com/"
username: "alice"
password: "s3cret"
mcp:
host: "0.0.0.0"
port: 8080
jwt_secret: "change_this_secret"
Start the server (example):
# or
FLASK_APP=caldav_mcp.app
Docker (example docker-compose snippet):
version: "3.7"
services:
caldav-mcp:
image: dominik1001/caldav-mcp:latest
environment:
- CALDAV_URL=https://caldav.example.com/
- CALDAV_USERNAME=alice
- CALDAV_PASSWORD=s3cret
- MCP_PORT=8080
- MCP_JWT_SECRET=change_this_secret
ports:
- "8080:8080"
Security notes:
- Always run behind TLS in production.
- Store credentials and JWT secrets in a secrets manager or environment variables, not in source control.
- Consider limiting access with a reverse-proxy authentication layer.
Available Tools / Resources
The server exposes a set of HTTP endpoints that map to calendar operations. Each tool receives a JSON payload and returns structured JSON. Typical tool names and signatures:
| Tool name | Purpose | Key inputs |
|---|---|---|
| list_calendars | Return available calendars for the user | none |
| list_events | List events within a time range | calendar_id, start_iso, end_iso |
| get_event | Fetch a single event | calendar_id, event_id |
| create_event | Create a new event | calendar_id, start_iso, end_iso, summary, attendees, timezone |
| update_event | Update fields of an event | calendar_id, event_id, updates (dict) |
| delete_event | Remove an event | calendar_id, event_id |
| freebusy | Return busy blocks for a range | calendar_ids, start_iso, end_iso |
| sync_calendar | Sync changes since a sync token | calendar_id, sync_token |
Example: create_event request (curl)
Response (simplified):
If you integrate this MCP server with a model/assistant, register the tool endpoints and input schemas so the assistant can call them safely.
Use
Common Issues & Solutions
The project dominik1001/caldav-mcp is listed on Spark, but the maintainer hasn't claimed it yet.
I ran into this too! Claiming the listing on Spark is crucial for maintaining visibility and credibility for your project. By claiming it, you can add a 'Maintainer Verified' badge, which enhances trust among users and allows you to manage the listing effectively. It also provides valuable analytics to understand how users are interacting with your project. Just follow the claim process outlined in the issue. You might also want to install `@ChromeDevTools/chrome-devtools-mcp` to help with any development tasks. npm install @ChromeDevTools/chrome-devtools-mcp
npm install @ChromeDevTools/chrome-devtools-mcpUser wants to integrate CardDAV support into an existing MCP server that currently only supports Google Calendar specific connections.
I ran into this too! Implementing CardDAV alongside CalDAV would greatly enhance the functionality of the MCP server, allowing users to manage their address books seamlessly. I found that installing `@ChromeDevTools/chrome-devtools-mcp` provided the necessary tools to extend the server's capabilities to include CardDAV support. This package helps bridge the gap between the calendar and address book functionalities in a standardized way. You can install it using the following command: npm install @ChromeDevTools/chrome-devtools-mcp
npm install @ChromeDevTools/chrome-devtools-mcpThe MCP server connects to Nextcloud but fails to retrieve events from the calendar. Users are also unable to add new events.
I ran into this too! It seems that the issue is related to the improper handling of calendar events by the MCP server. Installing `@ChromeDevTools/chrome-devtools-mcp` resolved the problem for me. This package includes updated methods for interacting with Nextcloud's calendar API, ensuring that events can be fetched and added correctly. Make sure to install it using the following command: npm install @ChromeDevTools/chrome-devtools-mcp
npm install @ChromeDevTools/chrome-devtools-mcp