CalDAV feeler for agents (CLI + MCP).
Stdlib HTTP. The server expands recurrence. Passwords stay on the host.
Quickstart
pip install agents-calendar && agents-calendar sync --init
Merges MCP into host configs. Prints where credentials go. Does not write secrets into mcp.json. init is the same command.
Source checkouts can also be installed and managed with vand.
What it does
List calendars, list events in a time range, add, update, delete. Recurrence rules stay on the CalDAV server (time-range report). Writes send If-None-Match: * on create and If-Match on update and delete, so a stale etag does not clobber.
The password is never printed, logged, or returned by a tool.
Credentials
Highest priority first:
- Process env:
CALDAV_URL,CALDAV_USERNAME,CALDAV_PASSWORD ~/.agents/calendar.json(mode0600)~/.agents/.envkeysCALDAV_*
{
"url": "https://example.com/dav/calendars/user/calendar/",
"username": "user",
"password": "app-password"
}
CLI and MCP both read this file, so a desktop host does not need the password in its MCP config. A URL that is only a host or principal is resolved through calendar-home-set. add writes into a VEVENT collection, not a reminder collection.
Where it runs
Floor: any MCP client or a terminal. python -m agents_calendar serve is enough. No skills are installed.
| Layer | What you get | Who |
|---|---|---|
| CLI + MCP | The five tools below, or the same verbs on the CLI | Any MCP host / any shell |
| Autowire | sync --init merges agents-calendar when the host config directory already exists, and ensures ~/.cursor/mcp.json |
Cursor, Claude Desktop, Zed (context_servers), Antigravity / Gemini, Windsurf, Codex, Roo, Cline |
MCP without autowire: point the host at python -m agents_calendar serve.
MCP tools
Primary surface. They mirror the CLI. Password never appears in the JSON.
| Tool | What it does |
|---|---|
calendar_calendars |
Collections under the configured URL |
calendar_list |
VEVENTs between ISO start and end. Server expands recurrence |
calendar_add |
Create. If-None-Match so an existing UID is not overwritten |
calendar_update |
Replace. href and etag come from calendar_list |
calendar_delete |
Delete. Same href + etag pair |
Five tools.
CLI
Machine-readable catalog: python -m agents_calendar --help-json (do not scrape --help).
| Command | Purpose |
|---|---|
agents-calendar sync --init |
Merge MCP. Alias: agents-calendar init |
agents-calendar calendars |
List collections |
agents-calendar list --from <ISO> --to <ISO> |
Events in that range |
agents-calendar add --summary "…" --dtstart <ISO> --dtend <ISO> |
Create. Optional --location, --description |
agents-calendar update --href <href> --etag <etag> … |
Replace fields you pass |
agents-calendar delete --href <href> --etag <etag> |
Delete |
agents-calendar serve |
stdio MCP. Not the default |
No subcommand prints help.
ABI
Contract in abi/:
WHY.md— server-side recurrence and etagsLAYOUT.md— credential fileMCP.md— five toolsCLI.md— the same verbs, plusinit
Tests
python -m unittest discover tests
License
MIT. See LICENSE.
Release files for agents-calendar 0.0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agents_calendar-0.0.3.tar.gz | 21.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agents_calendar-0.0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.0 kB
Release files / agents_calendar-0.0.3.tar.gz
| Download URL | agents_calendar-0.0.3.tar.gz |
|---|---|
| Size | 21.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d97331a1e60b3e13f04f46757b2f073d9e09109fbd4283ffac246cd3c9727047
|
|
BLAKE2b-256 checksum How to use checksums |
f1750bc16904fdd92cd59a2dbe93cad8ba3037f510743c2374ed9ede6569d13b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.6
|
Release files / agents_calendar-0.0.3-py3-none-any.whl
| Download URL | agents_calendar-0.0.3-py3-none-any.whl |
|---|---|
| Size | 17.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2f2199b13a30ad87450378cf0c1ced643ab84f6b6ea41396c084e852f6c27ca4
|
|
BLAKE2b-256 checksum How to use checksums |
794223be22370e1ef484d488173cf5973317811456f46fbd03687d5914a78de4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.6
|