Labsco
MCP SERVER

CalDAV & CardDAV Tools

by PhilflowIO

Read and write calendars, contacts and tasks on any CalDAV/CardDAV server — Nextcloud, Baikal, Radicale, iCloud.

Calendars, Meetings & SchedulingVerified
Summary
Full read-write across calendars, contacts and tasks — not create-and-list.

Updates go through named fields rather than raw iCal or vCard, so changing a title, a location or a task's status is one call instead of re-serialising the whole entry, with the raw variants kept for properties the field list does not reach. The query tools filter on the server, which is what makes this usable on an account where listing a calendar in full would return thousands of entries.

What it is

One server covering the CalDAV and CardDAV protocols: calendars and their events, address books and their contacts, and VTODO tasks — each with list, filtered search, create, update and delete.

What you get
  • Events created, retitled, moved or deleted on any calendar the account can reach
  • Filtered event search by text, date range or location — across every calendar at once when you leave the calendar out
  • Calendars themselves created, renamed, recoloured, retimezoned or deleted
  • Contacts created and changed field by field — name, email, phone, organization, note — with no vCard to hand-write
  • Contact search by name, email or organization instead of pulling the whole address book
  • Tasks with due date, priority, status and percent-complete, searchable by status or due date
  • Raw iCal and vCard updates for the properties the field-level tools do not cover
  • Batch fetch by URL for events, contacts and todos, instead of one call each
Requirements

A CalDAV/CardDAV account, passed as DAV_BASE_URL, DAV_USERNAME and DAV_PASSWORD. iCloud works with an app-specific password; Google Calendar goes through OAuth2 instead — AUTH_METHOD set to OAuth, plus GOOGLE_USER, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET and GOOGLE_REFRESH_TOKEN. Runs over stdio through npx, or as an HTTP server with --http, serving http://localhost:3000/mcp behind a BEARER_TOKEN and rate-limited to 100 requests/minute per session. Any server following RFC 4791 and RFC 6352 works.

Setup effort

One command plus a key — npx -y dav-mcp, then supply credentials