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.
CALDAV_SERVER_URLrequiredBase URL of your CalDAV/CardDAV server (e.g. https://example.com/dav.php/)
CALDAV_USERNAMErequiredUsername for DAV server authentication
CALDAV_PASSWORDrequiredsecretPassword or app-specific password for DAV server authentication
AUTH_METHODAuthentication method: 'basic' (default) or 'oauth2' for Google
GOOGLE_SERVER_URLGoogle CalDAV endpoint; required when AUTH_METHOD=oauth2
GOOGLE_USERGoogle account email; required when AUTH_METHOD=oauth2
GOOGLE_CLIENT_IDOAuth2 client ID; required when AUTH_METHOD=oauth2
GOOGLE_CLIENT_SECRETsecretOAuth2 client secret; required when AUTH_METHOD=oauth2
GOOGLE_REFRESH_TOKENsecretOAuth2 refresh token; required when AUTH_METHOD=oauth2
GOOGLE_TOKEN_URLOAuth2 token endpoint; required when AUTH_METHOD=oauth2
Tools & capabilities
Tools this server exposes to the agent.
list_calendars— List all available calendarslist_events— List all eventscreate_event— Create a new calendar eventupdate_event— Update any event field or move/convert eventsupdate_event_raw— Update event with raw iCal datadelete_event— Delete an event permanentlycalendar_query— Search and filter events by text, date range, or locationmake_calendar— Create a new calendar collectionupdate_calendar— Update calendar properties like display name, description, color, timezonedelete_calendar— Permanently delete a calendar and all its eventscalendar_multi_get— Batch fetch multiple specific events by URLsfreebusy_query— Find free and busy time in a rangelist_addressbooks— List all available address bookslist_contacts— List all contactscreate_contact— Create a new contact (vCard)update_contact— Update any contact fieldupdate_contact_raw— Update contact with raw vCard datadelete_contact— Delete a contact permanentlyaddressbook_query— Search and filter contacts by name, email, or organizationaddressbook_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
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.
Yes, dav-mcp is open-source under the MIT License and available on npm as 'dav-mcp'.
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.
dav-mcp works with any RFC 4791/6352-compliant CalDAV/CardDAV server including Nextcloud, Baikal, Radicale, iCloud, and Google Calendar (via OAuth2).
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.
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.
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:
- Add AI Agent node
- Add MCP Client Tool node and connect to AI Agent
- Configure:
- MCP Endpoint:
http://localhost:3000/mcp - Authentication: Bearer
- Token: your-secret-token
- MCP Endpoint:
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.
| Capability | dav-mcp | Most MCPs |
|---|---|---|
| Calendar Management | Full CRUD (12 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 |
| Free/Busy | Works on every server (client-side) | Native REPORT, unsupported by most |
| Server-Side Filtering | Efficient queries | Dumps all data |
| Multi-Provider | Any CalDAV/CardDAV server | Limited provider support |
| Total Tools | 27 tools | 2-6 tools |
Available Tools (27 Total)
CalDAV Tools (12 tools)
- list_calendars - List all available calendars
- list_events - List ALL events (use calendar_query for filtered searches)
- create_event - Create a new calendar event
- 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
- update_event_raw - Update event with raw iCal data (advanced)
- delete_event - Delete an event permanently
- calendar_query - PREFERRED: Search and filter events efficiently by text, date range, or location
- make_calendar - Create a new calendar collection
- update_calendar - Update calendar properties (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 ("when am I free?"), calculated client-side
CardDAV Tools (8 tools)
- list_addressbooks - List all available address books
- list_contacts - List ALL contacts (use addressbook_query for filtered searches)
- create_contact - Create a new contact (vCard)
- update_contact - PREFERRED: Update any contact field (FN, EMAIL, TEL, ORG, ADR, custom X-* properties)
- update_contact_raw - Update contact with raw vCard data (advanced)
- delete_contact - Delete a contact permanently
- addressbook_query - PREFERRED: Search and filter contacts efficiently by name, email, or organization
- addressbook_multi_get - Batch fetch multiple specific contacts by URLs
VTODO Tools (7 tools)
- list_todos - List ALL todos/tasks (use todo_query for filtered searches)
- create_todo - Create a new todo/task with optional due date, priority, status
- update_todo - PREFERRED: Update any todo field (SUMMARY, STATUS, PRIORITY, DUE, PERCENT-COMPLETE, custom X-* properties)
- update_todo_raw - Update todo with raw VTODO iCal data (advanced)
- delete_todo - Delete a todo/task permanently
- todo_query - PREFERRED: Search and filter todos efficiently by status/due date
- 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
- MCP Specification - Model Context Protocol docs
- tsdav Docs - CalDAV/CardDAV library reference
- CalDAV RFC 4791 - CalDAV protocol specification
- CardDAV RFC 6352 - CardDAV protocol specification
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.
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.
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.



