Connects Claude to any CalDAV server to manage calendar events through standard protocol operations. You get six tools: list calendars, query events by date range, create events with optional recurrence rules, update existing events by UID, and delete events. Supports the usual event fields like summary, description, location, plus recurring events with daily, weekly, monthly, or yearly patterns. Configuration requires your CalDAV server URL and credentials as environment variables. Useful when you want Claude to schedule meetings, check availability, or manage calendar entries directly instead of just generating ics files or giving you commands to run manually.
🗓️ A CalDAV Model Context Protocol (MCP) server to expose calendar operations as tools for AI assistants.
{
"mcpServers": {
...,
"calendar": {
"command": "npx",
"args": [
"caldav-mcp"
],
"env": {
"CALDAV_BASE_URL": "<CalDAV server URL>",
"CALDAV_USERNAME": "<CalDAV username>",
"CALDAV_PASSWORD": "<CalDAV password>"
}
}
}
}
Run the MCP server in development mode with auto-reload:
npm run dev
This will run the TypeScript code directly with watch mode and automatically load environment variables from .env.
Alternatively, you can compile TypeScript to JavaScript and run it:
npx tsc
node dist/index.js
List all calendars returning both name and URL
Parameters: none
Returns:
List all events between start and end date in the calendar specified by its URL
Parameters:
start: string — Start date (ISO 8601)end: string — End date (ISO 8601)calendarUrl: stringReturns:
uid, summary, start, end, and optionally description and locationCreates an event in the calendar specified by its URL. For all-day events, set wholeDay to true. For a single-day all-day event, use start and end datetimes on the same calendar date; they do not need to be identical timestamps.
Parameters:
summary: stringstart: string — Start datetime (ISO 8601)end: string — End datetime (ISO 8601)wholeDay: boolean (optional) — Create as a whole-day eventcalendarUrl: stringdescription: string (optional)location: string (optional)recurrenceRule: object (optional)
freq: enum (DAILY | WEEKLY | MONTHLY | YEARLY) (optional)interval: number (optional)count: number (optional)until: string (optional)byday: array of string (optional)bymonthday: array of number (optional)bymonth: array of number (optional)Returns:
Updates an existing event in the calendar specified by its URL. Only provided fields are changed. For a one-day full-day event, set wholeDay to true and set start and end to the same calendar day.
Parameters:
uid: string — Unique identifier of the event to update (obtained from list-events)calendarUrl: stringsummary: string (optional)start: string (optional)end: string (optional)wholeDay: boolean (optional) — Update whether this is a whole-day eventdescription: string (optional)location: string (optional)recurrenceRule: object (optional)
freq: enum (DAILY | WEEKLY | MONTHLY | YEARLY) (optional)interval: number (optional)count: number (optional)until: string (optional)byday: array of string (optional)bymonthday: array of number (optional)bymonth: array of number (optional)Returns:
Deletes an event in the calendar specified by its URL
Parameters:
uid: string — Unique identifier of the event to delete (obtained from list-events)calendarUrl: stringReturns:
MIT
CALDAV_BASE_URL*Base URL of the CalDAV server (e.g. https://caldav.example.com)
CALDAV_USERNAME*Username for CalDAV authentication
CALDAV_PASSWORD*secretPassword for CalDAV authentication
gongrzhe/office-powerpoint-mcp-server
gongrzhe/office-word-mcp-server
io.github.mindstone/mcp-server-office
greirson/mcp-todoist
henilcalagiya/mcp-apple-notes
ankimcp/anki-mcp-server-addon