calendarUrl— a calendar’s CalDAV URL, fromlist_calendars. Optional everywhere; tools default to your default calendar.uid— an event’s iCalendar UID, returned bycreate_calendar_eventandlist_calendar_events. Required to update, delete, or RSVP.
Schedule a meeting
Prompt
Tool call — create_calendar_event
Result
Block your own time
Not every calendar entry is a meeting. Omitattendees to place a personal event — a focus block, a travel buffer, a placeholder for plans still firming up — and no invitation email goes out:
Tool call — create_calendar_event
addedAttendees on update_calendar_event — they get a normal invitation at that point.
Create a recurring series
recurrence turns a single create call into a series. Use the structured form, or pass a raw RFC 5545 RRULE:
Prompt
Tool call — create_calendar_event
start and end describe the first occurrence. Bound a series with either until (an instant) or count (number of occurrences) — not both.
Reschedule or edit
An update is a diff, not a re-specification: pass theuid and only the fields that change. Everything you omit — the title, the other attendees, the recurrence rule — is kept as stored, so a series never collapses by accident.
Tool call — update_calendar_event
end too when the duration changes. Attendees are notified of the change automatically.
Because omitting a field means “keep it”, clearing one takes an explicit empty value: attendees: [] uninvites everyone, location: "" and description: "" clear those fields, and recurrence: "none" turns a series back into a one-off.
Change just the attendees
To add or drop specific attendees without reading the list back first, passaddedAttendees / removedAttendees — they act against the stored list, so you name only the address that changes. (attendees replaces the whole list instead; read the current one from list_calendar_events if you use it.) Add notify: "none" to keep a trivial edit silent (e.g. dropping your own duplicate address without disturbing everyone else):
Tool call — update_calendar_event
recurrenceId (the occurrence’s original start); the master rule and every other occurrence stay unchanged.
Cancel an event
Tool call — delete_calendar_event
Cancel one occurrence
To skip a single instance of a recurring series — say this week’s standup — passrecurrenceId, the occurrence’s original start. The master rule and every other occurrence stay put, and attendees are notified so just that instance drops off their calendars.
Prompt
Tool call — delete_calendar_event
Result
recurrenceId must name an actual occurrence by its original start (find occurrences with list_calendar_events). Omit it to cancel the entire series.
RSVP to an invitation
When someone invites you, the invitation lands in your calendar and your agent can answer it:Prompt
uid with list_calendar_events, then:
Tool call — respond_to_event
Result
respond_to_event only sets your own attendance — it never modifies the event itself.
Keep a workstream separate
A dedicated calendar keeps project events out of your personal one:Tool call — create_calendar
Result
calendarUrl to create_calendar_event to add events to it. Calendars are plain CalDAV collections on the open-protocol surface — see Open protocols.