Kelly
FreeNot checkedA local MCP server for CalDAV that gives Claude read access to your calendar, enabling planning, conflict checking, and schedule summaries.
About
A local MCP server for CalDAV that gives Claude read access to your calendar, enabling planning, conflict checking, and schedule summaries.
README
Your calendar in Claude's context — a local MCP server for CalDAV.
Status: working prototype
What it does
Kelly gives Claude read access to your CalDAV calendar so it can help you plan your day, check for conflicts, summarize your week, or answer questions about your schedule — without you copy-pasting events.
- Runs locally on your machine — credentials never leave your device
- Stores credentials securely in macOS Keychain
- Read-only — Kelly can't create, modify, or delete events
Architecture
┌─────────────────────────────────────────────────────┐
│ Your machine │
│ │
│ ┌──────────────┐ stdio ┌──────────────────┐ │
│ │ Claude │◄─────────►│ kelly │ │
│ │ Desktop/Code │ │ (MCP server) │ │
│ └──────────────┘ └────────┬─────────┘ │
│ │ │
│ macOS Keychain │
│ (credentials) │
└──────────────────────────────┼──────────────────────┘
│ HTTPS (Digest auth)
▼
┌───────────────────┐
│ CalDAV server │
│ (Pixel/SabreDAV) │
└───────────────────┘
Quick Start
Prerequisites
- Python 3.10+
- uv (Python package manager)
Install
git clone <this-repo>
cd kelly
uv sync
Store credentials
kelly setup
You'll be prompted for your CalDAV principal URL, username, and password. These are stored in macOS Keychain — not in any file.
Add to Claude Desktop
Add this to your Claude Desktop MCP config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"kelly": {
"command": "uv",
"args": ["run", "--directory", "/path/to/kelly", "kelly", "serve"]
}
}
}
Add to Claude Code
claude mcp add kelly -- uv run --directory /path/to/kelly kelly serve
Verify
Ask Claude: "Check my calendar connection" — it should call the check_connection tool and report success.
Available Tools
| Tool | Description |
|---|---|
check_connection |
Verify CalDAV credentials and server connectivity |
list_calendars |
List available calendars under your principal |
list_upcoming_events |
Fetch events for the next N days, optionally filtered by calendar name |
Security Model
| Aspect | Detail |
|---|---|
| Credential storage | macOS Keychain (primary), env vars (fallback for CI/Docker) |
| Transport | stdio only — no network listener, no exposed ports |
| Scope | Read-only — no calendar mutations possible |
| Network | Outbound HTTPS to your CalDAV server only |
| Dependencies | Minimal: requests, icalendar, fastmcp, keyring |
Environment variable fallback
If you can't use Keychain (CI, Docker, Linux), set these instead:
export CALDAV_PRINCIPAL_URL="https://caldav.example.com/principals/you/"
export CALDAV_USER="your-username"
export CALDAV_PASS="your-password"
Development
Run tests
uv run pytest
Project structure
kelly/
├── __init__.py # Package version
├── cli.py # CLI: kelly setup | kelly serve
├── server.py # FastMCP server + tool definitions
├── caldav.py # CalDAV protocol (PROPFIND, REPORT, iCal parsing)
└── credentials.py # Keychain/env credential loading
tests/
├── test_caldav.py # CalDAV logic tests (mocked HTTP)
├── test_server.py # MCP tool tests
└── test_credentials.py # Credential fallback tests
Installing Kelly
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/theorange7/kelly-kalendarFAQ
Is Kelly MCP free?
Yes, Kelly MCP is free — one-click install via Unyly at no cost.
Does Kelly need an API key?
No, Kelly runs without API keys or environment variables.
Is Kelly hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Kelly in Claude Desktop, Claude Code or Cursor?
Open Kelly on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Notion
Read and write pages in your workspace
by NotionLinear
Issues, cycles, triage — from Claude
by LinearGoogle Drive
Search and read your Drive files
by Googlemindsdb/mindsdb
Connect and unify data across various platforms and databases with [MindsDB as a single MCP server](https://docs.mindsdb.com/mcp/overview).
by mindsdbCompare Kelly with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All productivity MCPs
