MCP Tools Reference: calendarmcp.googleapis.com

Tool: create_event

Creates a calendar event.

Use this tool for queries like:

  • Create an event on my calendar for tomorrow at 2pm called 'Meeting with Jane'.
  • Schedule a meeting with john.doe@google.com next Monday from 10am to 11am.

Example:

 create_event(
            summary='Meeting with Jane',
            start_time='2024-09-17T14:00:00',
            end_time='2024-09-17T15:00:00'
        )
        # Creates an event on the primary calendar for September 17, 2024 from 2pm to 3pm called 'Meeting with Jane'. 

The following sample demonstrate how to use curl to invoke the create_event MCP tool.

Curl Request
curl  
--location  
 'https://calendarmcp.googleapis.com/mcp' 
  
 \ 
--header  
 'content-type: application/json' 
  
 \ 
--header  
 'accept: application/json, text/event-stream' 
  
 \ 
--data  
 '{ 
 "method": "tools/call", 
 "params": { 
 "name": "create_event", 
 "arguments": { 
 // provide these details according to the tool MCP specification 
 } 
 }, 
 "jsonrpc": "2.0", 
 "id": 1 
 }' 
  

Input Schema

Request message for CreateEvent.

CreateEventRequest

JSON representation
 { 
 "summary" 
 : 
 string 
 , 
 "startTime" 
 : 
 string 
 , 
 "endTime" 
 : 
 string 
 , 
 "timeZone" 
 : 
 string 
 , 
 "attendeeEmails" 
 : 
 [ 
 string 
 ] 
 , 
 "recurrenceData" 
 : 
 [ 
 string 
 ] 
 , 
 "calendarId" 
 : 
 string 
 "description" 
 : 
 string 
 "location" 
 : 
 string 
 "allDay" 
 : 
 boolean 
 "notificationLevel" 
 : 
 enum ( NotificationLevel 
) 
 "addGoogleMeetUrl" 
 : 
 boolean 
 "visibility" 
 : 
 string 
 "colorId" 
 : 
 string 
 } 
Fields
summary

string

Required. Title of the event.

startTime

string

Required. The start time of the event formatted as per ISO 8601.

endTime

string

Required. The end time of the event formatted as per ISO 8601.

timeZone

string

Required. Time zone of the event (formatted as an IANA Time Zone Database name, e.g. Europe/Zurich ).

attendeeEmails[]

string

Optional. The additional attendees of the event, as email addresses.

recurrenceData[]

string

Optional. The recurrence data of the event as RRULE , RDATE or EXDATE as per RFC 5545. Use this field to create a recurring event.

Union field _calendar_id .

_calendar_id can be only one of the following:

calendarId

string

Optional. The calendar ID to create the event on. The default is the user's primary calendar.

Union field _description .

_description can be only one of the following:

description

string

Optional. Description of the event. Can contain HTML.

Union field _location .

_location can be only one of the following:

location

string

Optional. Geographic location of the event as free-form text.

Union field _all_day .

_all_day can be only one of the following:

allDay

boolean

Optional. Whether the event is an all-day event. The default is False. If true, the start and end time must be set to midnight UTC.

Union field _notification_level .

_notification_level can be only one of the following:

notificationLevel

enum ( NotificationLevel )

Optional. Which email notification should be sent for this event update. Possible values are:

  • NONE - No email notifications are sent (default).
  • EXTERNAL_ONLY - Only external (non-Calendar) attendees receive email notifications.
  • ALL - All event attendees receive email notifications.

Union field _add_google_meet_url .

_add_google_meet_url can be only one of the following:

addGoogleMeetUrl

boolean

Optional. Allows to create a Google Meet url for the event. By default, no Google Meet url is created. No Google Meet url is created if Meet is disabled for the user, but the event creation will succeed.

Union field _visibility .

_visibility can be only one of the following:

visibility

string

Optional. Visibility of the event. Possible values are:

  • default - Uses the default visibility for events on the calendar. This is the default value.
  • public - The event is public and event details are visible to all readers of the calendar.
  • private - The event is private and only event attendees may view event details.

Union field _color_id .

_color_id can be only one of the following:

colorId

string

Optional. The color of the event. This is an ID referring to an entry in the calendar's color palette. Event color ID (string 1 - 11 ):

  • 1: Lavender
  • 2: Sage
  • 3: Grape
  • 4: Flamingo
  • 5: Banana
  • 6: Tangerine
  • 7: Peacock
  • 8: Graphite
  • 9: Blueberry
  • 10: Basil
  • 11: Tomato.

Output Schema

Event

JSON representation
 { 
 "id" 
 : 
 string 
 , 
 "status" 
 : 
 string 
 , 
 "htmlLink" 
 : 
 string 
 , 
 "created" 
 : 
 string 
 , 
 "updated" 
 : 
 string 
 , 
 "summary" 
 : 
 string 
 , 
 "description" 
 : 
 string 
 , 
 "location" 
 : 
 string 
 , 
 "creator" 
 : 
 { 
 object (  Principal 
 
) 
 } 
 , 
 "organizer" 
 : 
 { 
 object (  Principal 
 
) 
 } 
 , 
 "start" 
 : 
 { 
 object (  DateOrDateTime 
 
) 
 } 
 , 
 "end" 
 : 
 { 
 object (  DateOrDateTime 
 
) 
 } 
 , 
 "recurrence" 
 : 
 [ 
 string 
 ] 
 , 
 "recurringEventId" 
 : 
 string 
 , 
 "originalStartTime" 
 : 
 { 
 object (  DateOrDateTime 
 
) 
 } 
 , 
 "transparency" 
 : 
 string 
 , 
 "visibility" 
 : 
 string 
 , 
 "attendees" 
 : 
 [ 
 { 
 object (  Attendee 
 
) 
 } 
 ] 
 , 
 "eventType" 
 : 
 string 
 , 
 "conferenceUrl" 
 : 
 string 
 , 
 "colorId" 
 : 
 string 
 } 
Fields
id

string

Opaque identifier of the event. When creating new single or recurring events, you can specify their IDs. Provided IDs must follow these rules:

  • characters allowed in the ID are those used in base32hex encoding, i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938
  • the length of the ID must be between 5 and 1024 characters
  • the ID must be unique per calendar

Due to the globally distributed nature of the system, we cannot guarantee that ID collisions will be detected at event creation time. To minimize the risk of collisions we recommend using an established UUID algorithm such as one described in RFC4122.

If you do not specify an ID, it will be automatically generated by the server.

Note that the icalUID and the id are not identical and only one of them should be supplied at event creation time. One difference in their semantics is that in recurring events, all occurrences of one event have different ids while they all share the same icalUIDs.

status

string

Status of the event. Optional. Possible values are:

  • confirmed - The event is confirmed. This is the default status.
  • tentative - The event is tentatively confirmed.
  • cancelled - The event is cancelled (deleted). The list method returns cancelled events only on incremental sync (when syncToken or updatedMin are specified) or if the showDeleted flag is set to true. The get method always returns them.

A cancelled status represents two different states depending on the event type:

  1. Cancelled exceptions of an uncancelled recurring event indicate that this instance should no longer be presented to the user. Clients should store these events for the lifetime of the parent recurring event.Cancelled exceptions are only guaranteed to have values for the id, recurringEventId and originalStartTime fields populated. The other fields might be empty.
  2. All other cancelled events represent deleted events. Clients should remove their locally synced copies. Such cancelled events will eventually disappear, so do not rely on them being available indefinitely. Deleted events are only guaranteed to have the id field populated.

On the organizer's calendar, cancelled events continue to expose event details (summary, location, etc.) so that they can be restored (undeleted). Similarly, the events to which the user was invited and that they manually removed continue to provide details. However, incremental sync requests with showDeleted set to false will not return these details.

If an event changes its organizer (for example via the move operation) and the original organizer is not on the attendee list, it will leave behind a cancelled event where only the id field is guaranteed to be populated.

htmlLink

string

An absolute link to this event in the Google Calendar Web UI. Read-only.

created

string

Creation time of the event (as a ISO 8601 formatted timestamp). Read-only.

updated

string

Last modification time of the main event data (as a ISO 8601 formatted timestamp). Updating event reminders will not cause this to change. Read-only.

summary

string

Title of the event.

description

string

Description of the event. Can contain HTML. Optional.

location

string

Geographic location of the event as free-form text. Optional.

creator

object ( Principal )

The creator of the event. Read-only.

organizer

object ( Principal )

The organizer of the event. If the organizer is also an attendee, this is indicated with a separate entry in attendees with the organizer field set to True. Read-only.

start

object ( DateOrDateTime )

The (inclusive) start time of the event. For a recurring event, this is the start time of the first instance.

end

object ( DateOrDateTime )

The (exclusive) end time of the event. For a recurring event, this is the end time of the first instance.

recurrence[]

string

List of RRULE, EXRULE, RDATE and EXDATE lines for a recurring event, as specified in RFC5545. Note that DTSTART and DTEND lines are not allowed in this field; event start and end times are specified in the start and end fields. This field is omitted for single events or instances of recurring events.

recurringEventId

string

For an instance of a recurring event, this is the id of the recurring event to which this instance belongs. Immutable.

originalStartTime

object ( DateOrDateTime )

For an instance of a recurring event, this is the time at which this event would start according to the recurrence data in the recurring event identified by recurringEventId. It uniquely identifies the instance within the recurring event series even if the instance was moved to a different time. Immutable.

transparency

string

Whether the event blocks time on the calendar. Optional. Possible values are:

  • opaque - Default value. The event does block time on the calendar. This is equivalent to setting Show me as to Busy in the Calendar UI.
  • transparent - The event does not block time on the calendar. This is equivalent to setting Show me as to Available in the Calendar UI.
visibility

string

Visibility of the event. Optional. Possible values are:

  • default - Uses the default visibility for events on the calendar. This is the default value.
  • public - The event is public and event details are visible to all readers of the calendar.
  • private - The event is private and only event attendees may view event details.
  • confidential - The event is private. This value is provided for compatibility reasons.
attendees[]

object ( Attendee )

The attendees of the event.

eventType

string

Specific type of the event. This cannot be modified after the event is created. Possible values are:

  • birthday - A special all-day event with an annual recurrence.
  • default - A regular event or not further specified.
  • focusTime - A focus-time event.
  • fromGmail - An event from Gmail. This type of event cannot be created.
  • outOfOffice - An out-of-office event.
  • workingLocation - A working location event.
conferenceUrl

string

The Google Meet link for the event.

colorId

string

Event color ID (string 1 - 11 ):

  • 1: Lavender
  • 2: Sage
  • 3: Grape
  • 4: Flamingo
  • 5: Banana
  • 6: Tangerine
  • 7: Peacock
  • 8: Graphite
  • 9: Blueberry
  • 10: Basil
  • 11: Tomato.

In Google Calendar, event colors function as categories — settable per-event or per-series. Users may assign custom labels to colors in the web UI (e.g., 1:1s , Break ), but the API only exposes numeric IDs, not those labels. Only affects your own calendar view — each attendee controls their own event color.

Principal

JSON representation
 { 
 "email" 
 : 
 string 
 , 
 "displayName" 
 : 
 string 
 , 
 "self" 
 : 
 boolean 
 } 
Fields
email

string

Email address of the principal (calendar).

displayName

string

The principal's name, if available.

self

boolean

Whether this principal corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.

DateOrDateTime

JSON representation
 { 
 "date" 
 : 
 string 
 , 
 "dateTime" 
 : 
 string 
 , 
 "timeZone" 
 : 
 string 
 } 
Fields
date

string

An ISO 8601 formatted date at midnight UTC such as 2019-11-20T00:00:00Z . If this field is set, date_time must not be set.

dateTime

string

An ISO 8601 formatted timestamp such as 2019-11-20T08:19:06-07:00 or 2019-11-20T08:19:06Z . If this field is set, date must not be set.

timeZone

string

TZDB timezone name if available.

Attendee

JSON representation
 { 
 "id" 
 : 
 string 
 , 
 "email" 
 : 
 string 
 , 
 "displayName" 
 : 
 string 
 , 
 "organizer" 
 : 
 boolean 
 , 
 "self" 
 : 
 boolean 
 , 
 "resource" 
 : 
 boolean 
 , 
 "optionalAttendee" 
 : 
 boolean 
 , 
 "responseStatus" 
 : 
 string 
 , 
 "comment" 
 : 
 string 
 , 
 "additionalGuests" 
 : 
 integer 
 } 
Fields
id

string

The attendee's Profile ID, if available.

email

string

The attendee's email address, if available. This field must be present when adding an attendee. It must be a valid email address as per RFC5322. Required when adding an attendee.

displayName

string

The attendee's name, if available. Optional.

organizer

boolean

Whether the attendee is the organizer of the event. Read-only. The default is False.

self

boolean

Whether this entry represents the calendar on which this copy of the event appears. Read-only. The default is False.

resource

boolean

Whether the attendee is a resource. Can only be set when the attendee is added to the event for the first time. Subsequent modifications are ignored. Optional. The default is False.

optionalAttendee

boolean

Whether this is an optional attendee. Optional. The default is False.

responseStatus

string

The attendee's response status. Possible values are:

  • needsAction - The attendee has not responded to the invitation (recommended for new events).
  • declined - The attendee has declined the invitation.
  • tentative - The attendee has tentatively accepted the invitation.
  • accepted - The attendee has accepted the invitation.
comment

string

The attendee's response comment. Optional.

additionalGuests

integer

Number of additional guests. Optional. The default is 0.

Tool Annotations

Destructive Hint: ❌ | Idempotent Hint: ❌ | Read Only Hint: ❌ | Open World Hint: ❌

Create a Mobile Website
View Site in Mobile | Classic
Share by: