caldav-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CALDAV_URL | Yes | Root of the CalDAV server, e.g. https://dav.example.net. A calendar collection URL works too and limits the server to that one calendar. | |
| ELICITATION | No | Not prefixed — one export reaches every MCP server in the environment. false makes guarded tools use the two-call token instead of a dialog. Default true. | true |
| CALDAV_TOKEN | No | Bearer token instead of username and password. Not both. Required if CALDAV_USERNAME and CALDAV_PASSWORD are not used. | |
| CALDAV_PASSWORD | No | Password or app-specific password. Deleted from the environment once read. Required together with CALDAV_USERNAME unless CALDAV_TOKEN is used. | |
| CALDAV_TIMEZONE | No | IANA zone for timestamps that carry no offset, e.g. Europe/Berlin. Default UTC. | UTC |
| CALDAV_USERNAME | No | Account name. Required together with CALDAV_PASSWORD unless CALDAV_TOKEN is used. | |
| CALDAV_CALENDARS | No | Comma-separated calendars this server may touch, by path or final path segment. Default: every calendar the account can see. | |
| CALDAV_READ_ONLY | No | true registers only the read tools. Default false. | false |
| CALDAV_DENY_TOOLS | No | Subtracted from whatever the allow list left. | |
| CALDAV_MAX_EVENTS | No | Entries a listing returns by default, 1–500. Default 100. | 100 |
| CALDAV_USER_EMAIL | No | The address you are invited as, so respond_to_event can find your own attendee line. | |
| CALDAV_ALLOW_TOOLS | No | Tool names, a prefix with one trailing *, or essential. | |
| CALDAV_INSECURE_TLS | No | true accepts a self-signed certificate on the configured host only. Default false. | false |
| CALDAV_ALLOW_PLAINTEXT | No | true allows a plain http:// URL to a host that is not loopback, which sends the credentials unencrypted on every request. Otherwise such a URL refuses to start. Default false. | false |
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 | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_calendarsA | Every calendar this server may use, with the id to pass to the other tools. Always asks the server rather than answering from a cache — being current is this tool’s whole job. |
| get_server_infoA | Reports the DAV compliance tokens, which components each calendar accepts, and whether the optional features this server relies on actually work here. The first thing to run when something behaves differently than expected — CalDAV implementations differ more than the specification suggests. |
| list_eventsA | Events between two points in time, from every calendar this server may see or from the ones named. Recurring events are expanded into their individual occurrences, so each one has its own id and can be changed on its own. Defaults to the next 30 days. |
| get_eventA | The complete event behind an id from a listing: the untruncated description, every reminder, every attendee, every attachment as metadata. An occurrence id answers with that one instance; a series id answers with the series and its rule. |
| search_eventsA | Finds events whose summary, description or location contains a term. The search runs on the CalDAV server, one request per field and per calendar — the specification combines several field filters with AND, so asking for all three at once would only match entries carrying the term in every one of them. |
| get_free_busyA | Busy periods in a time range — start and end only, no titles and no attendees. The datasparing way to ask "when am I free": nothing anybody else wrote comes back, so there is no untrusted content in the answer at all. |
| list_tasksA | Tasks with a start or due date inside a time range. Tasks with no date at all are not returned by a time-range query — the CalDAV specification defines the filter against the dates, and a task with none of them matches no window. |
| get_taskA | The complete task behind an id from list_tasks, with its untruncated description and every reminder. |
| list_journalsC | Dated notes in a calendar, inside a time range. Most calendar clients hide these; a CalDAV server stores them alongside events and tasks, and some workflows use them as a diary. |
| get_journalA | The complete note behind an id from list_journals, untruncated. This is the longest piece of somebody else’s prose this server hands over, so the text channel carries it inside an explicit untrusted fence. |
| create_eventA | Adds an event to a calendar. The UID and the file name are generated here, so an existing entry can never be overwritten by accident. Times without an offset are read in the timezone argument or in CALDAV_TIMEZONE. |
| update_eventA | Changes the fields named and leaves everything else exactly as it was — including properties this server does not model, attendees, attachments and reminders it cannot write. Pass null to clear a field. Guarded by the entry’s ETag: if it changed since it was read, nothing is written and the answer says what it is now. Changing a whole recurring series asks first. |
| delete_eventA | Removes an event. An occurrence id removes just that occurrence — which iCalendar does by adding an exception date to the series, so the rest of the series is untouched. A series id removes the whole entry. A CalDAV server keeps no history: this cannot be undone. |
| move_eventA | Copies an event into another calendar and removes it from the first. The content survives, the address does not: every id that named this event stops working, and a listing is needed to get the new one. The destination may be a calendar other people can see. |
| respond_to_eventA | Sets your own participation status on an event you were invited to. On a server with scheduling enabled this sends a reply to the organiser, which cannot be unsent — so it asks first. It changes only your own attendee line and never anybody else’s. This server cannot add or remove attendees at all. |
| create_taskA | Adds a task to a calendar that accepts them. list_calendars reports which do — a collection created for events only will refuse a task, and this server checks before writing rather than passing the server’s refusal back. |
| update_taskA | Changes the fields named and leaves everything else as it was. Pass null to clear a field. Guarded by the entry’s ETag. To mark a task done use complete_task, which records the completion time as well. |
| complete_taskA | Sets the task’s status. Marking it done records the completion time and sets it to 100 %; reopening clears both. The previous state is written down in the entry, so this is reversible — which is why it does not ask first. |
| delete_taskA | Removes a task. A CalDAV server keeps no history: this cannot be undone. To mark a task done instead, use complete_task. |
| create_journalA | Adds a dated note to a calendar that accepts journal entries. list_calendars reports which do. |
| update_journalA | Replaces the fields named. A CalDAV server keeps no version history, so the previous text of a note is gone once this succeeds — pass only the fields to change, and pass null to clear one. Guarded by the entry’s ETag, so a note changed elsewhere in the meantime is not silently overwritten. |
| delete_journalA | Removes a dated note. A CalDAV server keeps no history, and a note is somebody’s writing: this cannot be undone. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ni-c/caldav-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server