PluginBench
MCP Server
Maintained
MIT

io.github.PhilflowIO/dav-mcp MCP Server

io.github.PhilflowIO/dav-mcp

AI-orchestrated calendars, contacts & tasks across any DAV platform with 27 production-ready tools.

What is the io.github.PhilflowIO/dav-mcp MCP server?

The dav-mcp MCP server gives AI agents complete control over calendars, contacts, and tasks via CalDAV, CardDAV, and VTODO protocols. It provides 27 tools for full CRUD operations across any RFC-compliant DAV server including Nextcloud, Baikal, Radicale, iCloud, and Google Calendar.

dav-mcp transforms AI agents into orchestrating assistants that can manage calendars, contacts, and tasks with field-agnostic updates, server-side filtering, and free/busy queries. Unlike typical calendar MCPs that offer only 2-3 basic tools, dav-mcp provides complete functionality across all three domains, enabling precise automation workflows in n8n, Claude Desktop, and Cursor.

How to install io.github.PhilflowIO/dav-mcp

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • CALDAV_SERVER_URL
    required

    Base URL of your CalDAV/CardDAV server (e.g. https://example.com/dav.php/)

  • CALDAV_USERNAME
    required

    Username for DAV server authentication

  • CALDAV_PASSWORD
    required
    secret

    Password or app-specific password for DAV server authentication

  • AUTH_METHOD

    Authentication method: 'basic' (default) or 'oauth2' for Google

  • GOOGLE_SERVER_URL

    Google CalDAV endpoint; required when AUTH_METHOD=oauth2

  • GOOGLE_USER

    Google account email; required when AUTH_METHOD=oauth2

  • GOOGLE_CLIENT_ID

    OAuth2 client ID; required when AUTH_METHOD=oauth2

  • GOOGLE_CLIENT_SECRET
    secret

    OAuth2 client secret; required when AUTH_METHOD=oauth2

  • GOOGLE_REFRESH_TOKEN
    secret

    OAuth2 refresh token; required when AUTH_METHOD=oauth2

  • GOOGLE_TOKEN_URL

    OAuth2 token endpoint; required when AUTH_METHOD=oauth2

~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "dav-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "dav-mcp"
      ],
      "env": {
        "CALDAV_SERVER_URL": "<YOUR_CALDAV_SERVER_URL>",
        "CALDAV_USERNAME": "<YOUR_CALDAV_USERNAME>",
        "CALDAV_PASSWORD": "<YOUR_CALDAV_PASSWORD>",
        "AUTH_METHOD": "<YOUR_AUTH_METHOD>",
        "GOOGLE_SERVER_URL": "<YOUR_GOOGLE_SERVER_URL>",
        "GOOGLE_USER": "<YOUR_GOOGLE_USER>",
        "GOOGLE_CLIENT_ID": "<YOUR_GOOGLE_CLIENT_ID>",
        "GOOGLE_CLIENT_SECRET": "<YOUR_GOOGLE_CLIENT_SECRET>",
        "GOOGLE_REFRESH_TOKEN": "<YOUR_GOOGLE_REFRESH_TOKEN>",
        "GOOGLE_TOKEN_URL": "<YOUR_GOOGLE_TOKEN_URL>"
      }
    }
  }
}

Tools & capabilities

Tools this server exposes to the agent.

  • list_calendars — List all available calendars
  • list_events — List all events
  • create_event — Create a new calendar event
  • update_event — Update any event field or move/convert events
  • update_event_raw — Update event with raw iCal data
  • delete_event — Delete an event permanently
  • calendar_query — Search and filter events by text, date range, or location
  • make_calendar — Create a new calendar collection
  • update_calendar — Update calendar properties like display name, description, color, timezone
  • delete_calendar — Permanently delete a calendar and all its events
  • calendar_multi_get — Batch fetch multiple specific events by URLs
  • freebusy_query — Find free and busy time in a range
  • list_addressbooks — List all available address books
  • list_contacts — List all contacts
  • create_contact — Create a new contact (vCard)
  • update_contact — Update any contact field
  • update_contact_raw — Update contact with raw vCard data
  • delete_contact — Delete a contact permanently
  • addressbook_query — Search and filter contacts by name, email, or organization
  • addressbook_multi_get — Batch fetch multiple specific contacts by URLs

Use cases

  • Automate meeting management in n8n: query calendars by date range to find Friday meetings and take actions
  • Search contacts efficiently: find all employees at a specific organization using addressbook_query filters
  • Manage task workflows: query overdue high-priority tasks and update their status or delete completed items
  • Create events and tasks from AI conversations: have Claude or Cursor create calendar events or todos based on natural language requests
  • Batch operations: fetch multiple specific events, contacts, or tasks by URL for efficient bulk updates

io.github.PhilflowIO/dav-mcp MCP server FAQ

What is dav-mcp?

dav-mcp is an MCP server that gives AI agents 27 tools to manage calendars, contacts, and tasks across any CalDAV/CardDAV-compliant server. It supports full CRUD operations, field-agnostic updates, and efficient server-side filtering.

Is dav-mcp free?

Yes, dav-mcp is open-source under the MIT License and available on npm as 'dav-mcp'.

How do I install dav-mcp in Claude Desktop or Cursor?

Add dav-mcp to your MCP config file (located at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows, or ~/.config/Claude/claude_desktop_config.json on Linux) with your DAV server credentials, then restart Claude Desktop.

What servers does dav-mcp support?

dav-mcp works with any RFC 4791/6352-compliant CalDAV/CardDAV server including Nextcloud, Baikal, Radicale, iCloud, and Google Calendar (via OAuth2).

What authentication methods are supported?

dav-mcp supports basic authentication (username/password) for standard DAV servers and OAuth2 for Google Calendar. Credentials are passed through only and never logged or cached.

Can I run dav-mcp remotely?

Yes, dav-mcp can run as an HTTP server with Bearer token authentication for use in n8n and other remote integrations. Docker images are available at ghcr.io/philflowio/dav-mcp.

README (reference)

Source of truth, from the repository.

dav-mcp

Give your AI agents the power of organization — Transform them into orchestrating assistants managing calendars, contacts, and tasks.

Built on 26 production-ready tools spanning CalDAV, CardDAV, and VTODO protocols.

License: MIT npm version


Quick Start

Claude Desktop / Cursor (Local)

Add to your MCP config file:

{
  "mcpServers": {
    "dav-mcp": {
      "command": "npx",
      "args": ["-y", "dav-mcp"],
      "env": {
        "CALDAV_SERVER_URL": "https://dav.example.com",
        "CALDAV_USERNAME": "your_username",
        "CALDAV_PASSWORD": "your_password"
      }
    }
  }
}

Config file locations:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

Restart Claude Desktop after adding the configuration.


n8n (Remote HTTP)

Start the HTTP server:

CALDAV_SERVER_URL=https://dav.example.com \
CALDAV_USERNAME=your_username \
CALDAV_PASSWORD=your_password \
BEARER_TOKEN=your-secret-token \
npx dav-mcp --http

Then in n8n:

  1. Add AI Agent node
  2. Add MCP Client Tool node and connect to AI Agent
  3. Configure:
    • MCP Endpoint: http://localhost:3000/mcp
    • Authentication: Bearer
    • Token: your-secret-token

Custom port:

npx dav-mcp --http --port=8080

Docker

Pull the published image (distroless, runs as non-root, no shell):

docker run -d --name dav-mcp -p 3000:3000 --env-file .env \
  ghcr.io/philflowio/dav-mcp:latest

Tags: latest, the exact release (4.0.0) and the minor line (4.0). Set PORT to serve on a different port; the healthcheck follows it.

Or build from source:

git clone https://github.com/PhilflowIO/dav-mcp.git
cd dav-mcp
cp .env.example .env
# Edit .env with your credentials
docker-compose up

The Orchestration

When partial tools force your AI to improvise, complete tools let it execute precise operations across all components.

Capabilitydav-mcpMost MCPs
Calendar ManagementFull CRUD (12 tools)Create + list only (2-3 tools)
Contact ManagementComplete CardDAV (8 tools)Often missing entirely
Task ManagementFull VTODO support (7 tools)Rarely included
Field-Based UpdatesAll RFC properties + custom fieldsRarely available
Free/BusyWorks on every server (client-side)Native REPORT, unsupported by most
Server-Side FilteringEfficient queriesDumps all data
Multi-ProviderAny CalDAV/CardDAV serverLimited provider support
Total Tools27 tools2-6 tools

Available Tools (27 Total)

CalDAV Tools (12 tools)

  1. list_calendars - List all available calendars
  2. list_events - List ALL events (use calendar_query for filtered searches)
  3. create_event - Create a new calendar event
  4. update_event - PREFERRED: Update any event field (SUMMARY, LOCATION, STATUS, custom X-* properties); move or convert an event with start_date/end_date/all_day
  5. update_event_raw - Update event with raw iCal data (advanced)
  6. delete_event - Delete an event permanently
  7. calendar_query - PREFERRED: Search and filter events efficiently by text, date range, or location
  8. make_calendar - Create a new calendar collection
  9. update_calendar - Update calendar properties (display name, description, color, timezone)
  10. delete_calendar - Permanently delete a calendar and all its events
  11. calendar_multi_get - Batch fetch multiple specific events by URLs
  12. freebusy_query - Find free and busy time in a range ("when am I free?"), calculated client-side

CardDAV Tools (8 tools)

  1. list_addressbooks - List all available address books
  2. list_contacts - List ALL contacts (use addressbook_query for filtered searches)
  3. create_contact - Create a new contact (vCard)
  4. update_contact - PREFERRED: Update any contact field (FN, EMAIL, TEL, ORG, ADR, custom X-* properties)
  5. update_contact_raw - Update contact with raw vCard data (advanced)
  6. delete_contact - Delete a contact permanently
  7. addressbook_query - PREFERRED: Search and filter contacts efficiently by name, email, or organization
  8. addressbook_multi_get - Batch fetch multiple specific contacts by URLs

VTODO Tools (7 tools)

  1. list_todos - List ALL todos/tasks (use todo_query for filtered searches)
  2. create_todo - Create a new todo/task with optional due date, priority, status
  3. update_todo - PREFERRED: Update any todo field (SUMMARY, STATUS, PRIORITY, DUE, PERCENT-COMPLETE, custom X-* properties)
  4. update_todo_raw - Update todo with raw VTODO iCal data (advanced)
  5. delete_todo - Delete a todo/task permanently
  6. todo_query - PREFERRED: Search and filter todos efficiently by status/due date
  7. todo_multi_get - Batch fetch multiple specific todos by URLs

Real-World Applications

n8n Automation Workflows

  • Meeting Management: "Show me all Friday meetings" → calendar_query with date filter returns only relevant events
  • Contact Search: "Find everyone at Google" → addressbook_query with org filter finds matches efficiently
  • Task Reporting: "Show overdue high-priority tasks" → todo_query with filters returns specific results
  • Scheduled Cleanup: Daily cron job deletes completed tasks using targeted queries

Claude Desktop Integration

  • Quick Event Creation: "Create team meeting tomorrow 2 PM" → create_event executes immediately
  • Contact Lookup: "What's Sarah's email?" → addressbook_query with name filter finds contact
  • Calendar Overview: "What's on my calendar next week?" → calendar_query with date range shows events
  • Calendar Management: "Create a new calendar called Project Luna" → make_calendar creates collection

Works Across All Major Providers

Works with any CalDAV/CardDAV server that follows RFC 4791 and RFC 6352:

  • Nextcloud - Full support
  • Baikal - Full support
  • Radicale - Full support
  • iCloud - Works with app-specific password
  • Any RFC-compliant server - Standard protocol support

Google Calendar (OAuth2)

For Google Calendar, use OAuth2 authentication:

{
  "mcpServers": {
    "dav-mcp": {
      "command": "npx",
      "args": ["-y", "dav-mcp"],
      "env": {
        "AUTH_METHOD": "OAuth",
        "GOOGLE_USER": "your@gmail.com",
        "GOOGLE_CLIENT_ID": "your-client-id",
        "GOOGLE_CLIENT_SECRET": "your-client-secret",
        "GOOGLE_REFRESH_TOKEN": "your-refresh-token"
      }
    }
  }
}

Security

  • Input Validation: All inputs validated with Zod schemas before execution
  • Rate Limiting: 100 requests/minute per session (HTTP mode)
  • Bearer Auth: Token authentication for HTTP transport
  • No Credential Storage: Pass-through only, never logged or cached
  • Structured Logging: Audit trail with request IDs, no PII exposure
  • CORS Protection: Whitelist origins, block cross-site attacks

Documentation


Contributing

Pull requests are welcome! Please read CONTRIBUTING.md for guidelines.


License

MIT License - see LICENSE for details


Acknowledgments

Built with:

  • tsdav - Excellent TypeScript CalDAV/CardDAV library
  • tsdav-utils - Field-agnostic utility layer for RFC-compliant field updates
  • MCP SDK - Model Context Protocol by Anthropic
  • ical.js - RFC-compliant iCalendar parser

Questions? Issues? Create a GitHub issue


Built for AI agents managing calendars, contacts, and tasks

Related MCP servers

Query 190 Apple Health metrics from any MCP agent: zero-dependency, read-only, local-first.

0
JavaScript
MIT
View repository →

Publish and share access-controlled Markdown documents from any MCP-enabled AI tool.

Guideline-cited lab results analysis for diabetes, kidney, lupus & cancer care. Free sample report.

0
JavaScript
Apache-2.0
View repository →

Unpaid qualification-gated operational_context canary. Staging data. No wallet.

View repository →

Share context and questions between Claude instances — VS Code, claude.ai web, and mobile.

View repository →

OSM-sourced local business data across 9 niches — cuisine, dietary options, delivery, accessibility.