# caldav-mcp
<div align="center">
🗓️ A CalDAV Model Context Protocol (MCP) server to expose calendar operations as tools for AI assistants.
[](https://github.com/dominik1001/caldav-mcp/actions/workflows/release.yml)
[](https://www.npmjs.com/package/caldav-mcp)
[](https://choosealicense.com/licenses/mit/)
[](https://github.com/prettier/prettier)
[](https://modelcontextprotocol.io)
[](https://github.com/semantic-release/semantic-release)
</div>
## ✨ Features
- Connect to CalDAV servers
- List calendars
- List calendar events within a specific timeframe
- Create calendar events
- Delete calendar events by UID
## Setup
```
{
"mcpServers": {
...,
"calendar": {
"command": "npx",
"args": [
"caldav-mcp"
],
"env": {
"CALDAV_BASE_URL": "<CalDAV server URL>",
"CALDAV_USERNAME": "<CalDAV username>",
"CALDAV_PASSWORD": "<CalDAV password>"
}
}
}
}
```
## Development
### Quick Start
Run the MCP server in development mode with auto-reload:
```bash
npm run dev
```
This will run the TypeScript code directly with watch mode and automatically load environment variables from `.env`.
### Manual Build
Alternatively, you can compile TypeScript to JavaScript and run it:
1. Compile:
```bash
npx tsc
```
2. Run:
```bash
node dist/index.js
```
## Available Tools
### create-event
Creates a new calendar event.
Parameters:
- `summary`: String - Event title/summary
- `start`: DateTime string - Event start time
- `end`: DateTime string - Event end time
Returns:
- The unique ID of the created event
### list-events
Lists events within a specified timeframe.
Parameters:
- `start`: DateTime string - Start of the timeframe
- `end`: DateTime string - End of the timeframe
- `calendarUrl`: String - URL of the calendar
Returns:
- A list of events that fall within the given timeframe, each containing:
- `uid`: Unique identifier for the event (required for deletion)
- `summary`: Event title/summary
- `start`: Event start time
- `end`: Event end time
### delete-event
Deletes an event from the calendar.
Parameters:
- `uid`: String - Unique identifier of the event to delete (obtained from list-events)
- `calendarUrl`: String - URL of the calendar
Returns:
- Confirmation message when the event is successfully deleted
### list-calendars
Lists all available calendars.
Parameters: none
Returns:
- List of all available calendars
## License
MIT