Skip to the documentation
MCP server

Calendar

Events and invitations.

Calendar tools

ToolWhat it does
listCalendarEventsEvery occurrence between two moments, a repeating event once for each time it happens, with its place, status and your answer.
getCalendarEventOne event in full, by id or by the threadId of the conversation that carries its invitation: the attendees and their answers, how it repeats and its reminders.
createCalendarEventPut an event on the calendar and invite the attendees from an address you may send as. In the app’s chat it asks first unless you asked for it.
updateCalendarEventChange an event you organise, and send the update to everyone invited. In the app’s chat it asks first unless you asked for it.
cancelCalendarEventCall off a meeting you organise and tell everyone invited. In the app’s chat it always asks first.
deleteCalendarEventTake an event off the calendar without telling anybody. In the app’s chat it always asks first.
respondToCalendarEventAccept, decline or tentatively accept an invitation, and tell the organiser. In the app’s chat it asks first unless you asked for it.

Reading needs calendar:read and every change needs calendar:write. Anything that emails somebody also needs emails:send: inviting, updating or cancelling a meeting with attendees, and every answer to an invitation.

A client limited to some addresses sees and changes only the events one of them organises or attends, and sends only from them.

Reference

listCalendarEvents

Scopescalendar:readThe app's assistant runs it without askingToolkitcalendar

The calendar between two moments, as the Calendar page of the app shows it: every occurrence in the window, a repeating event once for each time it happens, sorted by start, with its event id, place, status and your answer. from and to are ISO 8601 with a zone, at most a year apart, and timezone (an IANA zone, UTC unless you say) decides what an all-day event means. When more follow, the last line gives the offset to pass back.

Inputs

fromstringRequired
Formatdate-time
tostringRequired
Formatdate-time
timezonestring
1 to 64 characters
limitinteger
At least 1At most 200
offsetinteger
At least 0

Also available in

API
GET /calendar/events
SDK
calendar.listEvents()calendar.listAllEvents()calendar.iterateEvents()

getCalendarEvent

Scopescalendar:readThe app's assistant runs it without askingToolkitcalendar

One calendar event in full: when it is, where, who organised it, every attendee and their answer, your own answer, how it repeats and its reminders. Pass id for an event from listCalendarEvents, or threadId for the invitation a conversation carries.

Inputs

idstring
1 to 64 characters
threadIdstring
1 to 256 characters

Also available in

API
GET /calendar/events/{id}GET /threads/{id}/event
SDK
calendar.getEvent()threads.getEvent()

createCalendarEvent

Scopescalendar:writeThe app's assistant asks first unless you asked for itToolkitcalendar

Put an event on the calendar, as New event on the Calendar page does. start and end are ISO 8601 with a zone. With attendees, an invitation goes to each of them from the address in from, which has to be one you may send as, unless sendInvites is false. reminders takes minutes before the start, and recurrence an RRULE such as FREQ=WEEKLY;BYDAY=MO.

Inputs

summarystringRequired
1 to 255 characters
startstringRequired
Formatdate-time
endstringRequired
Formatdate-time
descriptionstring
Up to 8000 characters
locationstring
Up to 255 characters
urlstring
Up to 2000 charactersFormaturi
allDayboolean
timezonestring
1 to 64 characters
recurrencestring
Up to 512 characters
attendeesobject[]
Up to 200 items
emailstringRequired
Up to 320 charactersFormatemail
namestring
Up to 128 characters
optionalboolean
remindersobject[]
Up to 5 items
minutesBeforeintegerRequired
At least 0At most 40320
sendInvitesboolean
fromstring
Up to 320 characters

Also available in

API
POST /calendar/events
SDK
calendar.createEvent()

updateCalendarEvent

Scopescalendar:writeThe app's assistant asks first unless you asked for itToolkitcalendar

Change an event you organise: its title, time, place, attendees, reminders or repeating. A field left out keeps its value, and attendees replaces the whole list. Everyone invited gets the updated invitation unless sendInvites is false.

Inputs

idstringRequired
1 to 64 characters
summarystring
1 to 255 characters
startstring
Formatdate-time
endstring
Formatdate-time
descriptionstring
Up to 8000 characters
locationstring
Up to 255 characters
urlstring
Up to 2000 charactersFormaturi
allDayboolean
timezonestring
1 to 64 characters
recurrencestring
Up to 512 characters
attendeesobject[]
Up to 200 items
emailstringRequired
Up to 320 charactersFormatemail
namestring
Up to 128 characters
optionalboolean
remindersobject[]
Up to 5 items
minutesBeforeintegerRequired
At least 0At most 40320
sendInvitesboolean
fromstring
Up to 320 characters

Also available in

API
PATCH /calendar/events/{id}
SDK
calendar.updateEvent()

cancelCalendarEvent

Scopescalendar:writeThe app's assistant always asks firstToolkitcalendar

Call off a meeting you organise, as Cancel meeting does in the app: it stays on the calendar marked cancelled, and everyone invited is told it is off, from the address in from. A chat always asks first.

Inputs

idstringRequired
1 to 64 characters
fromstring
Up to 320 characters

Also available in

API
POST /calendar/events/{id}/cancel
SDK
calendar.cancelEvent()

deleteCalendarEvent

Scopescalendar:writeThe app's assistant always asks firstToolkitcalendar

Remove an event from the calendar for good, as Remove does in the app. Nobody else is told, so call off a meeting with others in it with cancelCalendarEvent instead. A chat always asks first.

Inputs

idstringRequired
1 to 64 characters

Also available in

API
DELETE /calendar/events/{id}
SDK
calendar.deleteEvent()

respondToCalendarEvent

Scopescalendar:writeThe app's assistant asks first unless you asked for itToolkitcalendar

Answer an invitation: ACCEPTED, DECLINED or TENTATIVE. The answer goes to the organiser by email from the invited address you may send as, or from respondingAs when the invitation went to more than one of yours.

Inputs

idstringRequired
1 to 64 characters
responsestringRequired
One of"ACCEPTED""DECLINED""TENTATIVE"
respondingAsstring
Up to 320 characters

Also available in

API
POST /calendar/events/{id}/respond
SDK
calendar.respondToEvent()