Skip to main content
Glama

List calendar events

list_events
Read-onlyIdempotent

Retrieve calendar events that overlap a specified start/end interval, expand recurring series into occurrences, and page results with a cursor.

Instructions

List events that overlap the start-inclusive, end-exclusive interval and expand recurring series into occurrences, across at most 366 days. Use list_calendars first to obtain calendar_id and use get_event instead for one known event. Continue with next_cursor and unchanged query filters when more results are available.

Input Schema

NameRequiredDescriptionDefault
endYesExclusive end of the event search interval; must be after start and no more than 366 days later.
limitNoMaximum events to return in this page, from 1 to 500; defaults to 100.
startYesInclusive start of the event search interval as an ISO 8601 instant.
cursorNoOpaque next_cursor from the preceding page. Reuse it with the same calendar, interval, and timezone.
timezoneNoFallback IANA timezone used when an event lacks timezone metadata during recurrence expansion.
calendar_idYesOpaque calendar ID returned by list_calendars.

Output Schema

NameRequiredDescriptionDefault
eventsYesEvents in deterministic chronological order for this page.
next_cursorYesOpaque cursor for the next page, or null when this is the last page.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv0.2.0
    • addedOutput schema / properties / events / items / properties / travel_minutes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Apple Calendar travel time in whole minutes before the start, or null when none is set."
      +}
    • changedOutput schema / properties / events / items / required
      Previous value: -[
      -  "calendar_id",
      -  "resource_id",
      -  "uid",
      -  "href",
      -  "etag",
      -  "summary",
      -  "start",
      -  "end",
      -  "description",
      -  "location",
      -  "rrule",
      -  "alarms",
      -  "recurring",
      -  "recurrence_exception",
      -  "recurrence_id"
      -]New value: +[
      +  "calendar_id",
      +  "resource_id",
      +  "uid",
      +  "href",
      +  "etag",
      +  "summary",
      +  "start",
      +  "end",
      +  "description",
      +  "location",
      +  "rrule",
      +  "alarms",
      +  "travel_minutes",
      +  "recurring",
      +  "recurrence_exception",
      +  "recurrence_id"
      +]
  2. Changed18 schema fields changedv0.1.7
    • changedInput schema / properties / end / pattern
      Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • changedInput schema / properties / start / pattern
      Previous value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    • removedOutput schema / properties / events / items / properties / alarms / items / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / alarms / items / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / events / items / properties / alarms / items / properties / uid / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / alarms / items / properties / uid / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / events / items / properties / description / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / description / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / events / items / properties / etag / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / etag / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / events / items / properties / location / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / location / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / events / items / properties / recurrence_id / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / recurrence_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / events / items / properties / rrule / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / events / items / properties / rrule / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / next_cursor / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / next_cursor / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed31 schema fields changedv0.1.1
    • addedInput schema / properties / calendar_id / description
      Added value: +"Opaque calendar ID returned by list_calendars."
    • addedInput schema / properties / cursor / description
      Added value: +"Opaque next_cursor from the preceding page. Reuse it with the same calendar, interval, and timezone."
    • addedInput schema / properties / end / description
      Added value: +"Exclusive end of the event search interval; must be after start and no more than 366 days later."
    • addedInput schema / properties / limit / description
      Added value: +"Maximum events to return in this page, from 1 to 500; defaults to 100."
    • addedInput schema / properties / start / description
      Added value: +"Inclusive start of the event search interval as an ISO 8601 instant."
    • addedInput schema / properties / timezone / description
      Added value: +"Fallback IANA timezone used when an event lacks timezone metadata during recurrence expansion."
    • addedOutput schema / properties / events / description
      Added value: +"Events in deterministic chronological order for this page."
    • addedOutput schema / properties / events / items / properties / alarms / description
      Added value: +"Normalized alarms attached to the event."
    • addedOutput schema / properties / events / items / properties / alarms / items / description
      Added value: +"A normalized alarm returned by iCloud Calendar."
    • addedOutput schema / properties / events / items / properties / alarms / items / properties / action / description
      Added value: +"Stored iCalendar alarm action."
    • addedOutput schema / properties / events / items / properties / alarms / items / properties / description / description
      Added value: +"Stored alarm notification text, when available."
    • addedOutput schema / properties / events / items / properties / alarms / items / properties / minutes_before / description
      Added value: +"Whole minutes before event start, when representable."
    • addedOutput schema / properties / events / items / properties / alarms / items / properties / uid / description
      Added value: +"Stored alarm UID, when available."
    • addedOutput schema / properties / events / items / properties / calendar_id / description
      Added value: +"Opaque ID of the containing calendar."
    • addedOutput schema / properties / events / items / properties / description / description
      Added value: +"Stored event notes."
    • changedOutput schema / properties / events / items / properties / end / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "date_time": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|[+-]\\d{2}:\\d{2})$",
      -        "type": "string"
      -      },
      -      "timezone": {
      -        "maxLength": 4096,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "date_time",
      -      "timezone"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "date": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "date"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "A stored timed calendar value.",
      +    "properties": {
      +      "date_time": {
      +        "description": "Stored ISO 8601 date-time with seconds and an explicit UTC offset or Z.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|[+-]\\d{2}:\\d{2})$",
      +        "type": "string"
      +      },
      +      "timezone": {
      +        "description": "IANA timezone associated with the stored date-time.",
      +        "maxLength": 4096,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date_time",
      +      "timezone"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "An all-day calendar value.",
      +    "properties": {
      +      "date": {
      +        "description": "Calendar date in YYYY-MM-DD format.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedOutput schema / properties / events / items / properties / end / description
      Added value: +"Normalized event end."
    • addedOutput schema / properties / events / items / properties / etag / description
      Added value: +"Current ETag for optimistic concurrency, when available."
    • addedOutput schema / properties / events / items / properties / href / description
      Added value: +"Redacted fingerprint of the CalDAV resource URL."
    • addedOutput schema / properties / events / items / properties / location / description
      Added value: +"Stored event location."
    • addedOutput schema / properties / events / items / properties / raw_ical / description
      Added value: +"Raw iCalendar resource, included only when explicitly requested."
    • addedOutput schema / properties / events / items / properties / recurrence_exception / description
      Added value: +"Whether this result is an overridden recurrence instance."
    • addedOutput schema / properties / events / items / properties / recurrence_id / description
      Added value: +"Occurrence identifier for an expanded recurring event."
    • addedOutput schema / properties / events / items / properties / recurring / description
      Added value: +"Whether this event belongs to a recurring series."
    • addedOutput schema / properties / events / items / properties / resource_id / description
      Added value: +"Opaque event ID accepted by get_event, update_event, and delete_event."
    • addedOutput schema / properties / events / items / properties / rrule / description
      Added value: +"Stored RFC 5545 recurrence rule without the RRULE: prefix."
    • changedOutput schema / properties / events / items / properties / start / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "date_time": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|[+-]\\d{2}:\\d{2})$",
      -        "type": "string"
      -      },
      -      "timezone": {
      -        "maxLength": 4096,
      -        "minLength": 1,
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "date_time",
      -      "timezone"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "date": {
      -        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "date"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "description": "A stored timed calendar value.",
      +    "properties": {
      +      "date_time": {
      +        "description": "Stored ISO 8601 date-time with seconds and an explicit UTC offset or Z.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:Z|[+-]\\d{2}:\\d{2})$",
      +        "type": "string"
      +      },
      +      "timezone": {
      +        "description": "IANA timezone associated with the stored date-time.",
      +        "maxLength": 4096,
      +        "minLength": 1,
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date_time",
      +      "timezone"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "An all-day calendar value.",
      +    "properties": {
      +      "date": {
      +        "description": "Calendar date in YYYY-MM-DD format.",
      +        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "date"
      +    ],
      +    "type": "object"
      +  }
      +]
    • addedOutput schema / properties / events / items / properties / start / description
      Added value: +"Normalized event start."
    • addedOutput schema / properties / events / items / properties / summary / description
      Added value: +"Stored event title."
    • addedOutput schema / properties / events / items / properties / uid / description
      Added value: +"Stored iCalendar UID."
    • addedOutput schema / properties / next_cursor / description
      Added value: +"Opaque cursor for the next page, or null when this is the last page."
  4. First observedv0.1.0

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint/idempotentHint/non-destructive, yet the description still adds real behavior: recurring series are expanded into occurrences, the interval is start-inclusive/end-exclusive, the window is capped at 366 days, and cursors must be replayed with identical filters. It stops short of stating result ordering or how cancelled/declined events are treated, which matters for a paginated list.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with zero filler: capability and boundary semantics first, then routing to siblings/prerequisites, then pagination. Each sentence earns its place and the most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations carry the safety profile. Combined with a fully documented six-parameter schema, the description supplies exactly the missing pieces: recurrence expansion, interval boundary rules, the 366-day cap, and cursor reuse constraints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with start/end/cursor/limit/timezone all documented in the schema itself; the description mostly restates the interval semantics rather than adding new parameter meaning. Baseline 3 applies when the schema already carries the parameter burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list events) plus precise scope: half-open interval overlap and recurrence expansion into occurrences. It explicitly distinguishes itself from get_event (single known event) and list_calendars (ID lookup), so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit prerequisites ('Use list_calendars first to obtain calendar_id'), an explicit alternative ('use get_event instead for one known event'), and pagination continuation rules ('Continue with next_cursor and unchanged query filters'). When-to-use, when-not-to-use, and follow-up behavior are all covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.