Tool: list_events
Lists calendar events in a given calendar satisfying the given conditions.
Key Features:
- Any Calendar ID, which can be user's primary calendar or others.
- Keyword matching.
- Time range filtering.
- Retrieves ALL events matching the time and keyword constraints.
Use search_events tool instead if:
- You need to find the (top K) most relevant events rather than all events satisfying the constraints.
- You need semantic search capabilities.
- You are searching only the user's primary calendar for specific information.
Use this tool for queries like:
- What's on my calendar tomorrow?
- What's on my calendar for July 14th 2025?
- What are my meetings next week?
- Do I have any conflicts this afternoon?
Example:
list_events(
start_time='2024-09-17T06:00:00',
end_time='2024-09-17T12:00:00',
page_size=10
)
# Returns up to 10 calendar events between 6:00 AM and 12:00 PM on September 17, 2024 from the user's primary calendar.
The following sample demonstrate how to use curl
to invoke the list_events
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": "list_events", "arguments": { // provide these details according to the tool MCP specification } }, "jsonrpc": "2.0", "id": 1 }' |
Input Schema
ListEventsRequest
| JSON representation |
|---|
{ "eventTypeFilter" : [ string ] , "calendarId" : string "pageSize" : integer "pageToken" : string "startTime" : string "endTime" : string "timeZone" : string "orderBy" : string "fullText" : string } |
eventTypeFilter[]
string
Optional. The event types to return. Possible values are:
-
default- Regular events (default). -
outOfOffice- Out of office events. -
focusTime- Focus time events. -
workingLocation- Working location events. -
birthday- Birthday events. -
fromGmail- Events from Gmail.
If empty, only the following event types are returned: default
, outOfOffice
, focusTime
, fromGmail
Union field _calendar_id
.
_calendar_id
can be only one of the following:
calendarId
string
Optional. The calendar ID to list events from. The default is the user's primary calendar.
Union field _page_size
.
_page_size
can be only one of the following:
pageSize
integer
Optional. Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incomplete pages can be detected by a non-empty next_page_token
field in the response. By default the value is 250 events. The page size can never be larger than 2500 events.
Union field _page_token
.
_page_token
can be only one of the following:
pageToken
string
Optional. Token specifying which result page to return.
Union field _start_time
.
_start_time
can be only one of the following:
startTime
string
Optional. Lower bound (exclusive) for an event's end time. Only events ending strictly after this time are returned (i.e., the start of the time window to search). Defaults to the current time if neither start_time
nor end_time
is provided. If specified, must be less than or equal to end_time
. Must be an ISO 8601 timestamp. For example, 2026-06-03T10:00:00-07:00, 2026-06-03T10:00:00Z, or 2026-06-03T10:00:00. Milliseconds may be provided but are ignored.
Union field _end_time
.
_end_time
can be only one of the following:
endTime
string
Optional. Upper bound (exclusive) for an event's start time. Only events starting strictly before this time are returned (i.e., the end of the time window to search). If specified, must be greater than or equal to start_time
. Must be an ISO 8601 timestamp. For example, 2026-06-03T10:00:00-07:00, 2026-06-03T10:00:00Z, or 2026-06-03T10:00:00. Milliseconds may be provided but are ignored.
Union field _time_zone
.
_time_zone
can be only one of the following:
timeZone
string
Optional. Time zone used in the response and to resolve timezone-less dates in the request (formatted as an IANA Time Zone Database name, e.g. Europe/Zurich
). The default is the time zone of the calendar.
Union field _order_by
.
_order_by
can be only one of the following:
orderBy
string
Optional. The order in which events should be returned. Possible values are:
-
default- Unspecified, but deterministic ordering (default). -
startTime- Order by start time ascending. -
startTimeDesc- Order by start time descending. -
lastModified- Order by last modification time ascending.
Union field _full_text
.
_full_text
can be only one of the following:
fullText
string
Optional. Free-form search query to search across title, description, location and attendees.
Output Schema
ListEventsResponse
| JSON representation |
|---|
{ "summary" : string , "description" : string , "updated" : string , "timeZone" : string , "accessRole" : string , "defaultReminders" : [ { object ( |
summary
string
Title of the calendar.
description
string
Description of the calendar.
updated
string
Last modification time of the calendar (as a ISO 8601 timestamp).
timeZone
string
The time zone of the calendar.
accessRole
string
The user's access role for this calendar. Read-only. Possible values are:
-
none- The user has no access. -
freeBusyReader- The user has read access to free/busy information. -
reader- The user has read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. -
writer- The user has read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. -
owner- The user has manager access to the calendar. This role has all of the permissions of the writer role with the additional ability to see and modify access levels of other users. Important: the owner role is different from the calendar's data owner. A calendar has a single data owner, but can have multiple users with owner role.
defaultReminders[]
object (
Reminder
)
The default reminders on the calendar for the authenticated user. These reminders apply to all events on this calendar that do not explicitly override them (i.e. do not have reminders.useDefault set to True).
events[]
object (
Event
)
List of events on the calendar.
Union field _next_page_token
.
_next_page_token
can be only one of the following:
nextPageToken
string
Token used to access the next page of this result. Omitted if no further results are available.
Reminder
| JSON representation |
|---|
{ "method" : string , "minutes" : integer } |
method
string
How the reminder is delivered to the user. Possible values are:
-
email- Reminders are sent via email. -
popup- Reminders are sent via a UI popup.
Required when adding a reminder.
minutes
integer
Number of minutes in advance that the reminder should be delivered.
Event
| JSON representation |
|---|
{ "id" : string , "status" : string , "htmlLink" : string , "created" : string , "updated" : string , "summary" : string , "description" : string , "location" : string , "creator" : { object ( |
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:
- 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.
- 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
|
Email address of the principal (calendar). |
displayName
|
The principal's name, if available. |
self
|
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
|
An ISO 8601 formatted date at midnight UTC such as |
dateTime
|
An ISO 8601 formatted timestamp such as |
timeZone
|
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 } |
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: ❌

