No description
  • JavaScript 99.8%
  • Dockerfile 0.2%
Find a file
PhilflowIO 9156150948 fix: lazy-init DAV clients to allow server startup without DAV connection
Server now starts and responds to MCP introspection (tools/list, ping)
even when no DAV server is reachable. DAV clients are initialized on
first tool call instead. Bump to v3.0.7.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 13:00:04 +02:00
.github/workflows fix: update server.json to latest schema and add mcpName to package.json 2026-04-03 13:59:35 +02:00
__tests__ refactor: remove redundant try-catch from update-*-fields handlers 2026-02-13 22:59:28 +01:00
docs feat(v2.6.0): Add field-based update tools for LLM-friendly operations 2025-10-26 11:43:35 +01:00
src fix: lazy-init DAV clients to allow server startup without DAV connection 2026-04-04 13:00:04 +02:00
tests/integration refactor: remove redundant try-catch from update-*-fields handlers 2026-02-13 22:59:28 +01:00
.dockerignore Add test files and Docker configuration 2025-10-02 09:02:09 +02:00
.env.example v3.0.1: CLI flags and user-focused docs 2026-01-20 13:34:15 +01:00
.gitignore fix: lazy-init DAV clients to allow server startup without DAV connection 2026-04-04 13:00:04 +02:00
.npmrc Add npm scripts for dependency management 2025-10-10 08:23:37 +02:00
CHANGELOG.md v3.0.1: CLI flags and user-focused docs 2026-01-20 13:34:15 +01:00
comprehensive-test.js feat: Add automated MCP test suite infrastructure (v2.0.0) 2025-10-08 10:01:07 +02:00
docker-compose.yml Add test files and Docker configuration 2025-10-02 09:02:09 +02:00
Dockerfile feat!: v3.0.0 - Replace HTTP+SSE with STDIO and Stateless HTTP transports 2026-01-20 11:17:38 +01:00
glama.json chore: add glama.json for Glama MCP directory verification 2026-04-04 09:03:09 +02:00
jest.config.js feat!: v3.0.0 - Replace HTTP+SSE with STDIO and Stateless HTTP transports 2026-01-20 11:17:38 +01:00
LICENSE Initial commit: tsdav-mcp-server v0.1.0 2025-10-02 08:14:54 +02:00
MIGRATION.md feat!: v3.0.0 - Replace HTTP+SSE with STDIO and Stateless HTTP transports 2026-01-20 11:17:38 +01:00
package-lock.json chore: update dependencies to latest versions 2026-01-20 14:51:17 +01:00
package.json fix: lazy-init DAV clients to allow server startup without DAV connection 2026-04-04 13:00:04 +02:00
README.md v3.0.1: CLI flags and user-focused docs 2026-01-20 13:34:15 +01:00
server.json fix: lazy-init DAV clients to allow server startup without DAV connection 2026-04-04 13:00:04 +02:00

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

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.

Capability dav-mcp Most MCPs
Calendar Management Full CRUD (11 tools) Create + list only (2-3 tools)
Contact Management Complete CardDAV (8 tools) Often missing entirely
Task Management Full VTODO support (7 tools) Rarely included
Field-Based Updates All RFC properties + custom fields Rarely available
Server-Side Filtering Efficient queries Dumps all data
Multi-Provider Any CalDAV/CardDAV server Limited provider support
Total Tools 26 tools 2-6 tools

Available Tools (26 Total)

CalDAV Tools (11 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, DTSTART, STATUS, custom X-* properties)
  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

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