Universal MCP server for CalDAV protocol integration. Works with any CalDAV-compatible calendar server including Yandex Calendar, Google Calendar (via CalDAV), Nextcloud, ownCloud, Apple iCloud, and others. - List available calendars - Create calendar events with reminders and attendees - Get events for today, week, or custom date range - Works with any CalDAV-compatible server (Yandex, Google, Ne
Add this skill
npx mdskills install madbonez/caldav-mcpComprehensive CalDAV integration with excellent setup docs and diverse provider support
1# MCP CalDAV Server23Universal MCP server for CalDAV protocol integration. Works with any CalDAV-compatible calendar server including Yandex Calendar, Google Calendar (via CalDAV), Nextcloud, ownCloud, Apple iCloud, and others.45> ๐ **Quick Start**: See [QUICKSTART.md](QUICKSTART.md) for a quick guide to get started with `uv`.6> ๐ง **Cursor Setup**: See [CURSOR_SETUP.md](CURSOR_SETUP.md) for detailed Cursor IDE configuration instructions.78## Features910- List available calendars11- Create calendar events with reminders and attendees12- Get events for today, week, or custom date range13- Works with any CalDAV-compatible server (Yandex, Google, Nextcloud, ownCloud, iCloud, etc.)1415## Installation1617### Using uv (Recommended)1819First, install uv if you haven't already:2021**macOS/Linux:**2223```bash24curl -LsSf https://astral.sh/uv/install.sh | sh25```2627**Windows:**2829```powershell30powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"31```3233Then install the project:3435```bash36uv sync --dev37```3839This will:4041- Create a virtual environment (`.venv`)42- Install all dependencies including dev dependencies43- Generate a `uv.lock` file4445### Using uvx (Run without installation)4647You can also run the server directly without installing it:4849```bash50uvx mcp-caldav51```5253### Using pip5455```bash56pip install -e .57```5859## Configuration6061Set the following environment variables:6263```bash64export CALDAV_URL="https://caldav.example.com/"65export CALDAV_USERNAME="your-username"66export CALDAV_PASSWORD="your-password"67```6869### CalDAV Server URLs7071Common CalDAV server URLs:7273- **Yandex Calendar**: `https://caldav.yandex.ru/`74- **Google Calendar**: `https://apidata.googleusercontent.com/caldav/v2/` (requires OAuth setup)75- **Nextcloud**: `https://your-domain.com/remote.php/dav/calendars/username/`76- **ownCloud**: `https://your-domain.com/remote.php/dav/calendars/username/`77- **Apple iCloud**: `https://caldav.icloud.com/` (requires app-specific password)78- **FastMail**: `https://caldav.fastmail.com/dav/calendars/user/`7980**Note**: Some servers require app-specific passwords instead of regular passwords. Check your calendar provider's documentation for CalDAV setup instructions.8182## Usage8384### IDE Integration (Cursor)8586To use this MCP server in Cursor:87881. Open Cursor Settings โ Features โ MCP Servers โ + Add new global MCP server892. Add the following configuration:9091**Using uvx (Recommended - no installation needed):**9293```json94{95 "mcpServers": {96 "mcp-caldav": {97 "command": "uvx",98 "args": ["mcp-caldav"],99 "env": {100 "CALDAV_URL": "https://caldav.example.com/",101 "CALDAV_USERNAME": "your-username",102 "CALDAV_PASSWORD": "your-password"103 }104 }105 }106}107```108109**Using local installation (after `uv sync` or `pip install`):**110111```json112{113 "mcpServers": {114 "mcp-caldav": {115 "command": "mcp-caldav",116 "env": {117 "CALDAV_URL": "https://caldav.example.com/",118 "CALDAV_USERNAME": "your-username",119 "CALDAV_PASSWORD": "your-password"120 }121 }122 }123}124```125126**Using local development version:**127128```json129{130 "mcpServers": {131 "mcp-caldav": {132 "command": "uv",133 "args": ["run", "--directory", "/path/to/caldav", "mcp-caldav"],134 "env": {135 "CALDAV_URL": "https://caldav.example.com/",136 "CALDAV_USERNAME": "your-username",137 "CALDAV_PASSWORD": "your-password"138 }139 }140 }141}142```143144**Example for Yandex Calendar:**145146```json147{148 "mcpServers": {149 "mcp-caldav": {150 "command": "uvx",151 "args": ["mcp-caldav"],152 "env": {153 "CALDAV_URL": "https://caldav.yandex.ru/",154 "CALDAV_USERNAME": "your-username@yandex.ru",155 "CALDAV_PASSWORD": "your-app-password"156 }157 }158 }159}160```161162> **โ ๏ธ Note**: Yandex Calendar has aggressive rate limiting (60 seconds per MB since 2021).163> Write operations (create/update/delete) may experience 504 timeouts, so space out requests and introduce manual delays.164> For write-heavy workloads, consider using Google Calendar or Nextcloud instead.165> See [PROVIDER_NOTES.md](PROVIDER_NOTES.md) for details.166>167> **Testing status**: End-to-end tests currently run only against Yandex Calendar. Other CalDAV providers follow the same protocol and should work, but they have not been integration-tested yet.168169**Example for Nextcloud:**170171```json172{173 "mcpServers": {174 "mcp-caldav": {175 "command": "uvx",176 "args": ["mcp-caldav"],177 "env": {178 "CALDAV_URL": "https://your-domain.com/remote.php/dav/calendars/username/",179 "CALDAV_USERNAME": "your-username",180 "CALDAV_PASSWORD": "your-password"181 }182 }183 }184}185```186187### As MCP Server188189The server can be used with MCP-compatible clients:190191**Using uv (after `uv sync`):**192193```bash194uv run mcp-caldav195```196197**Note:** `uvx` works only with published packages from PyPI. For local development, use `uv run mcp-caldav` after `uv sync`.198199**Using pip (after installation):**200201```bash202mcp-caldav203```204205Or with custom options:206207```bash208uv run mcp-caldav --caldav-url "https://caldav.example.com/" \209 --caldav-username "your-username" \210 --caldav-password "your-password" \211 --verbose212```213214### Available Tools215216**Basic Operations:**217218- `caldav_list_calendars` - List all available calendars219- `caldav_create_event` - Create a new calendar event (supports recurrence, categories, priority, attendees)220- `caldav_get_events` - Get events for a date range (returns extended fields: UID, categories, priority, attendees, recurrence)221- `caldav_get_today_events` - Get events for today222- `caldav_get_week_events` - Get events for the week223224**Advanced Operations:**225226- `caldav_get_event_by_uid` - Get a specific event by its UID227- `caldav_delete_event` - Delete an event by UID228- `caldav_search_events` - Search events by text, attendees, or location229230**Features Supported:**231232- Recurring events (RRULE) - Daily, Weekly, Monthly, Yearly patterns233- Categories/Tags - Organize events with categories234- Priority - Set priority levels (0-9, 0 = highest)235- Attendees with statuses - Track acceptance status (ACCEPTED/DECLINED/TENTATIVE/NEEDS-ACTION)236- Reminders - Multiple reminders per event237238## Development239240### Code Quality241242This project uses several tools to ensure code quality:243244- **mypy** - Static type checking with strict rules245- **ruff** - Fast linting and code formatting246- **pre-commit** - Automatic checks before commits247248**Run quality checks:**249250```bash251# Install dev dependencies252uv sync --group dev253254# Run all checks255make check256257# Or individually258make lint259make format260make type-check261262# Or using pre-commit263make pre-commit-run264```265266**Setup pre-commit hooks:**267268```bash269uv run pre-commit install270```271272See [CODE_QUALITY.md](CODE_QUALITY.md) for detailed information.273274### Running Tests275276**Unit tests (with mocks):**277278```bash279make test280# or281make test-unit282```283284**E2E tests (require real CalDAV server):**285286```bash287# Create .env.e2e file with your credentials, then:288make test-e2e289```290291**All tests:**292293```bash294make test295```296297**With coverage:**298299```bash300make test-cov # Terminal report301make coverage-html # HTML report302```303304See [tests/e2e/README.md](tests/e2e/README.md) for more details on e2e tests.305306### Project Structure307308```309caldav/310โโโ src/311โ โโโ mcp_caldav/312โ โโโ __init__.py # Main entry point313โ โโโ server.py # MCP server implementation314โ โโโ client.py # CalDAV client wrapper315โโโ tests/316โ โโโ test_server.py # Server unit tests317โ โโโ test_client.py # Client unit tests318โ โโโ e2e/ # End-to-end tests with real server319โ โโโ test_client_e2e.py320โ โโโ conftest.py321โโโ pyproject.toml # Project configuration322โโโ Makefile # Development commands323โโโ README.md # This file324```325326## License327328See LICENSE file for details.329
Full transparency โ inspect the skill content before installing.