dav-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AUTH_METHOD | No | Authentication method, set to 'OAuth' for Google Calendar integration | |
| GOOGLE_USER | No | Your Google email address for OAuth authentication | |
| BEARER_TOKEN | No | Bearer token for HTTP authentication (used when running in HTTP mode) | |
| CALDAV_PASSWORD | No | Your CalDAV/CardDAV password | |
| CALDAV_USERNAME | No | Your CalDAV/CardDAV username | |
| GOOGLE_CLIENT_ID | No | Your Google OAuth client ID | |
| CALDAV_SERVER_URL | No | The URL of the CalDAV/CardDAV server | |
| GOOGLE_CLIENT_SECRET | No | Your Google OAuth client secret | |
| GOOGLE_REFRESH_TOKEN | No | Your Google OAuth refresh token |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_calendarsA | List all available calendars from the CalDAV server. Use this to get calendar URLs needed for other operations |
| list_eventsA | List ALL events from a single calendar without filtering. WARNING: Returns all events which can be many thousands - use calendar_query instead for searching with filters (supports multi-calendar search). |
| create_eventB | Create a new calendar event with title, date, time, optional description and location |
| update_eventA | PREFERRED: Update event fields without iCal formatting. Use start_date/end_date/all_day to move an event or convert it between all-day and timed. Use fields for everything else: SUMMARY (title), DESCRIPTION (details), LOCATION (place), STATUS (TENTATIVE/CONFIRMED/CANCELLED), and any other RFC 5545 property including custom X-* properties (e.g., X-ZOOM-LINK, X-MEETING-ROOM). |
| update_event_rawA | ADVANCED: Update event with raw iCal data. Requires manual iCal formatting - use update_event instead for simple field updates (summary, description). Only use this if you have complete pre-formatted iCal data or need to update advanced iCal properties. |
| delete_eventA | Permanently delete a calendar event. WARNING: This action cannot be undone — the event is removed from the server immediately. Use only when the user explicitly requests deletion. Obtain the event URL and etag from list_events or calendar_query first. The etag ensures no conflicting changes occurred since the event was last retrieved. |
| calendar_queryA | ⭐ PREFERRED: Search and filter calendar events efficiently. Use instead of list_events to avoid loading thousands of entries. Omit calendar_url to search across ALL calendars automatically. |
| freebusy_queryA | Find free and busy time in a date range — use for "when am I free?", "am I available Tuesday afternoon?" or finding a slot for a new meeting. Searches all calendars unless one is given. Events marked TRANSPARENT (does not block time) and cancelled events are ignored; recurring events are expanded. |
| make_calendarA | Create a new calendar collection on the CalDAV server with optional color, description, timezone, and component types |
| update_calendarA | Update an existing calendar's properties (display name, description, color, timezone). Use this when user asks to "rename calendar", "change calendar color", or "update calendar properties" |
| delete_calendarA | Permanently delete a calendar and all its events. WARNING: This action cannot be undone! Use this when user explicitly asks to "delete calendar" or "remove calendar" |
| calendar_multi_getA | Batch fetch multiple specific calendar events by their URLs. Use when you have exact event URLs and want to retrieve their details |
| list_addressbooksA | List all available address books from the CardDAV server. Use this to get address book URLs needed for other contact operations |
| list_contactsA | List ALL contacts from an address book without filtering. WARNING: Returns all contacts which can be thousands - use addressbook_query instead when searching for specific contacts by name, email, or organization to save tokens |
| create_contactA | Create a new contact (vCard) with name, email, phone, organization, and other details |
| update_contactB | PREFERRED: Update contact fields without vCard formatting. Supports: FN (full name), N (structured name), EMAIL, TEL (phone), ORG (organization), TITLE (job title), NOTE, URL, ADR (address), BDAY (birthday), and any RFC 6350 vCard property including custom X-* properties. |
| update_contact_rawA | ADVANCED: Update contact with raw vCard data. Requires manual vCard formatting - use update_contact instead for simple field updates (name, email, phone). Only use this if you have complete pre-formatted vCard data or need to update advanced vCard properties. |
| delete_contactA | Permanently delete a contact (vCard) from the address book. WARNING: This action cannot be undone — the contact is removed from the server immediately. Use only when the user explicitly requests deletion. Obtain the vCard URL and etag from list_contacts or addressbook_query first. The etag ensures no conflicting changes occurred since the contact was last retrieved. |
| addressbook_queryA | ⭐ PREFERRED: Search and filter contacts efficiently (name, email, organization). Use for "find contacts with...", "search for email...", "contacts at company..." queries. Use instead of list_contacts when ANY filter is specified. Omit addressbook_url to search across ALL addressbooks automatically. |
| addressbook_multi_getA | Batch fetch multiple specific contacts by their URLs. Use when you have exact contact URLs and want to retrieve their details |
| list_todosA | List ALL todos/tasks from a calendar. WARNING: Returns all todos without filtering - use todo_query for searches with filters by status, summary, or due date. |
| create_todoA | Create a new todo/task in a calendar. Use this when user wants to add a task, todo item, or reminder with optional due date, priority, and status. |
| update_todoA | PREFERRED: Update todo fields without iCal formatting. Supports: SUMMARY (title), DESCRIPTION (details), STATUS (NEEDS-ACTION/IN-PROCESS/COMPLETED/CANCELLED), PRIORITY (0-9), DUE (due date), PERCENT-COMPLETE (0-100), and any RFC 5545 VTODO property including custom X-* properties. |
| update_todo_rawA | ADVANCED: Update todo with raw VTODO iCal data. Requires manual iCal formatting - use update_todo instead for simple field updates (summary, description, status). Only use this if you have complete pre-formatted VTODO data or need to update advanced iCal properties. |
| delete_todoA | Permanently delete a todo/task from the calendar. WARNING: This action cannot be undone — the todo is removed from the server immediately. Use only when the user explicitly requests deletion. Obtain the todo URL and etag from list_todos or todo_query first. The etag ensures no conflicting changes occurred since the todo was last retrieved. |
| todo_queryA | ⭐ PREFERRED: Search and filter todos efficiently. Use instead of list_todos to conserve tokens. Omit calendar_url to search across ALL calendars automatically. |
| todo_multi_getA | Batch fetch multiple specific todos by their URLs. More efficient than fetching one by one when you have exact todo URLs. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 27 tools
Each tool targets a distinct operation: list vs query vs multi-get vs create/update/delete, and raw update variants are explicitly differentiated from their field-based counterparts. Even overlapping tools like list_events and calendar_query are clearly scoped with warnings and usage guidance.
Most tools follow a consistent verb_noun pattern (list_, create_, update_, delete_, *_query, *_multi_get). The lone exception is make_calendar instead of create_calendar, which breaks the otherwise uniform create_* convention.
At 27 tools, the surface is heavy but defends its size by covering three distinct resource domains (calendars, todos, contacts) with full CRUD plus query and batch operations. It sits just above the 16-25 'heavy' band, yet all tools serve a concrete purpose rather than being redundant.
The calendar, event, todo, and contact domains have strong lifecycle coverage (list/query/get/create/update/delete), plus freebusy and raw updates. The main gap is the lack of addressbook creation/update/deletion—only list_addressbooks exists—but this is a minor limitation for the core workflows.