agents-calendar
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@agents-calendarwhat's on my calendar tomorrow?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Quickstart
pip install agents-calendar && agents-calendar sync --initMerges MCP into host configs. Prints where credentials go. Does not write secrets into mcp.json. init is the same command.
🤖 Agent-Driven Setup: Give your coding agent this repo (clone or URL), then tell it to "install and set up agents-calendar."
Source checkouts can also be installed and managed with vand.
Related MCP server: icloud-calendar-mcp
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, optionalCALDAV_CALENDAR~/.agents/calendar.json(mode0600)~/.agents/.envkeysCALDAV_*
{
"url": "https://example.com/dav/calendars/user/calendar/",
"username": "user",
"password": "app-password",
"calendar": "Work",
"timezone": "UTC"
}calendar (or CALDAV_CALENDAR) is optional: the collection, by display name or URL, that add writes to. list searches every collection unless --calendar names one. Both commands and the MCP tools accept calendar per call.
timezone is an optional IANA name (America/New_York, Europe/Berlin, UTC, …). CALDAV_TIMEZONE overrides it. See Time zones.
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 |
| Cursor, Claude Desktop, Zed ( |
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 |
| Collections under the configured URL |
| VEVENTs between ISO |
| Get a single VEVENT by |
| Create. |
| Replace. |
| Delete. Same |
Six tools. Pass local wall time; the package applies the IANA zone. See Time zones.
Time zones
Offsets come from Python zoneinfo and the IANA time zone database (tzdata is installed with this package). Nothing here hard-codes a region.
The zone for a call is the first one that exists:
The
timezoneargument /--timezoneCALDAV_TIMEZONE, ortimezoneincalendar.jsonThe calendar collection's CalDAV
calendar-timezone, when that id is an IANA nameThe host zone (
TZ, then the OS database)UTC
A naive value such as 2026-10-22T10:00:00 means 10:00 in that zone on that date. Daylight-saving transitions are per date. 2026-10-22T10:00:00Z or 2026-10-22T10:00:00+02:00 is an absolute instant and is stored as that instant. Do not convert a local wall time to UTC before sending it; a wrong offset stores a different instant.
If the wall time falls in a spring-forward gap, or occurs twice on a fall-back, the call fails and names the zone. Send an explicit offset for the instant you mean. Those ambiguous instants are stored as UTC, because DTSTART;TZID cannot represent both occurrences.
Timed events are written with DTSTART;TZID=… and a VTIMEZONE. The CalDAV server expands RRULE in that zone, so a weekly 10:00 stays 10:00 across the change. All-day events are DTSTART;VALUE=DATE / DTEND;VALUE=DATE. DTEND is exclusive: the same start and end date is one day, and a later end date is already exclusive.
Each event returns dtstart (UTC, or YYYY-MM-DD when all_day), dtstart_local (offset or date), the same pair for the end, timezone (IANA name), and all_day.
An update changes only the fields you pass. RRULE, alarms, attendees, and other properties stay. SEQUENCE increments.
CLI
Machine-readable catalog: python -m agents_calendar --help-json (do not scrape --help).
Command | Purpose |
| Merge MCP. Alias: |
| List collections |
| Events in that range with local & UTC times |
| Get event details by href |
| Create. Optional |
| Replace fields you pass |
| Delete |
| 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 testsLicense
MIT. See LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Agent-Native Google Calendar - manage events, sync, and public booking
- WorkwaeOAuthcom.workwae
Email, calendar and contacts for AI agents: Gmail, Microsoft 365 and IMAP accounts behind one API.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables LLM agents to read, schedule, update, and delete calendar events and tasks on a self-hosted CalDAV server, and to query availability for free/busy slots.-
- AlicenseAqualityCmaintenanceEnables agents to read, create, update, and delete iCloud Calendar events, including recurring events, via CalDAV.6MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to connect to CalDAV servers to list calendars and events, create, update, and delete calendar events, and manage tasks (VTODOs) including listing, creating, updating, completing, and deleting them.614 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to connect to CalDAV servers and manage calendars through natural language, including listing calendars and browsing, creating, updating, and deleting events and tasks (VTODOs). Supports recurring events, all-day events, due-date filtering, status changes, and pagination of long task lists.614 npmMIT