cal-scheduler
Timezone-correct CalDAV scheduling MCP server with validated recurrence and single-occurrence edits.
Versions
1.0.0latestTools 11
list_calendars List the calendars available on the account. Returns `{"calendars": [name, ...]}` with account calendar names sorted alphabetically.
create_calendar Create a new calendar with the given display name. Returns `{"ok": True, "created": name}`. The name must be unique; a duplicate name raises an error.
delete_calendar Delete a calendar and all of its events. Irreversible. Returns `{"ok": True, "deleted": name}`.
list_events List event occurrences in [start, end], expanding recurring series. Dates are interpreted in the calendar's configured zone. Returns one entry per occurrence (recurring instances are expanded), sorted by start.
resolve_datetime Show how a datetime string will be interpreted, without writing anything. Use this to confirm a zone before committing an event.
create_event Create an event (single, or recurring if `rrule` is given). `start`/`end` are ISO 8601 (see parameter docs for zone + default-duration details — read those before writing). `rrule` is a raw RRULE body, e.g. "FREQ=WEEKLY;COUNT=12". `calendar` is required in practice — there is no default calendar. Pick deliberately; events are not validated against calendar type.
update_event Edit a whole event/series. Only the fields you pass change. Preserves the UID and any single-occurrence exclusions/overrides. If you move `start` without giving `end`, the duration is kept. Moving `start` re-anchors the whole series — occurrences before the new start stop being generated (this retimes an entire series; it does not split one at a date).
delete_event Delete a whole event/series (and any of its overrides). Irreversible.
mark_done Mark an event (or one occurrence of a series) done at the current UTC moment. `occurrence=None` marks the whole event / series; otherwise marks only that occurrence (via a RECURRENCE-ID override). Idempotent: re-marking replaces the prior timestamp. The response includes `series_remaining` and `overrides` for parity with move_occurrence / exclude_occurrence.
exclude_occurrence Drop a single occurrence of a recurring series (EXDATE). `occurrence` is the instance's current start exactly as returned by `list_events`, including the UTC offset (e.g. `2026-06-18T09:00:00+12:00`). Bare local times may not match. The response includes `series_remaining` (occurrences left in the series) and `overrides` (RECURRENCE-ID overrides on the series) so the rest-of-series-unchanged claim is observable.
move_occurrence Reschedule a single occurrence of a series (RECURRENCE-ID override). `occurrence` is the instance's current start exactly as returned by `list_events`, including the UTC offset (e.g. `2026-06-18T09:00:00+12:00`). Bare local times may not match. `new_start`/`new_end` are where it moves to. Omit `new_end` to keep the occurrence's existing duration. The rest of the series is unchanged. The response includes `series_remaining` (occurrences left in the series) and `overrides` (RECURRENCE-ID overrides on the series) so the rest-of-series-unchanged claim is observable.
Permissions 2
filesystem low env_vars low