Skip to main content

Version 0.0.3 MCP Python 3.10+ PyPI License

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:

  1. Process env: CALDAV_URL, CALDAV_USERNAME, CALDAV_PASSWORD
  2. ~/.agents/calendar.json (mode 0600)
  3. ~/.agents/.env keys CALDAV_*
{
  "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/:


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)

Source distribution for agents-calendar 0.0.3
File Size Uploaded
agents_calendar-0.0.3.tar.gz 21.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agents-calendar 0.0.3
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.0.3 This release

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page