Anything speaking CalDAV is handled the same way, because a calendar is identified by the URL the listing hands back and not by a provider name. All-day events and recurrence are explicit arguments, which is what stops an assistant from approximating them with a long single event.
A CalDAV client exposed as MCP tools. It connects to a CalDAV server with a base URL, username and password, lists the calendars on it, and reads or writes events in whichever one you address by URL.
- Every calendar on the server, with both name and URL (list-calendars)
- Events between an ISO 8601 start and end in a named calendar, each carrying uid, summary, start, end and optionally description and location (list-events)
- Events created in a named calendar, with wholeDay for all-day entries and recurrenceRule for repeats (create-event)
- Existing events updated (update-event)
- Events deleted by UID
Npx caldav-mcp, with the CalDAV server's base URL, a username and a password set in the environment. Calendars are addressed by the calendarUrl that list-calendars returns, so that is always the first call.
One command plus a key — npx -y caldav-mcp, then supply credentials
