dav-mcp
OAuth2 authentication, enabling calendar event management.
Works with app-specific password, enabling calendar and contact management.
Enables AI agents in n8n workflows to orchestrate calendar, contact, and task operations via MCP tools.
Full support for CalDAV and CardDAV, enabling calendar, contact, and task management.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dav-mcpshow my upcoming events this week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.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 --httpThen in n8n:
Add AI Agent node
Add MCP Client Tool node and connect to AI Agent
Configure:
MCP Endpoint:
http://localhost:3000/mcpAuthentication: Bearer
Token: your-secret-token
Custom port:
npx dav-mcp --http --port=8080Docker
git clone https://github.com/PhilflowIO/dav-mcp.git
cd dav-mcp
cp .env.example .env
# Edit .env with your credentials
docker-compose upRelated MCP server: MCP Personal Calendar
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)
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, DTSTART, STATUS, custom X-* properties)
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
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
CI/CD and Dependabot credentials
The GitHub Actions workflows expect the following secrets/variables:
Name | Type | Purpose |
| Secret (optional) | Username for GHCR login. Defaults to |
| Secret (required) | PAT with |
| Secret (optional) | Username for GitHub Packages login. Defaults to |
| Repository variable (optional) | Override registry host for GHCR (defaults to |
| Repository variable (optional) | Override registry host for the legacy GitHub Packages Docker registry (defaults to |
| Secret (required for Dependabot) | PAT with |
Node.js version for CI workflows is read from the
engines.nodefield inpackage.jsonso Dependabot-managed updates stay in sync.Dependabot is configured to update both direct and indirect npm dependencies in
package.json/package-lock.jsonthrough the weekly npm check.
PAT scopes:
GHCR_TOKENandGH_PACKAGES_TOKENshould includewrite:packagesandread:packages.GH_PAT_TOKENonly needsread:packagesfor Dependabot.
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
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/PhilflowIOOrg/dav-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server