Skip to main content
Glama

update_calendar_event

Updates fields on an existing single calendar event; only the fields supplied are changed, all others keep their current value. Imported (subscription-sourced) events cannot be edited.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idYesEvent id from create_calendar_event or list_calendar_events.
notesNoNew notes.
titleNoNew event title.
endDateNoAll-day only: new LAST day, inclusive, YYYY-MM-DD. Alone it keeps the current first day. Dates are stored in the event's own end rule (see list_calendar_events).
isAllDayNoTrue for all-day, false for timed.
locationNoReplaces the location outright. $type 'Address' takes line1-3/postalCode/countryCode; 'OnlineLocation' takes url/notes.
timezoneNoIANA zone for the wall-clock times, e.g. 'Europe/London'. Null means UTC.
startDateNoAll-day only (preferred for all-day): new first day, YYYY-MM-DD. Without endDate the event becomes a single day.
descriptionNoNew description.
endDateTimeNoNew end of a timed event, ISO 8601 UTC. Must not precede startDateTime. For all-day events send endDate instead. An all-day endDateTime is stored as given and keeps the event's own end rule (see list_calendar_events): with no source a midnight end names the LAST day, on a device-calendar event the day after it.
startDateTimeNoNew start of a timed event, ISO 8601 UTC. For an all-day event send startDate instead.
reminderOffsetMinutesNoNew reminder lead times, in minutes before the event starts. Send the full list: it replaces the current one. [] clears all reminders; omit to keep them. Reminders move with the start. Not allowed on imported events (device calendar or subscription). Each value is whole hours, 60-1380 (1-23 hours), or whole days, a multiple of 1440 up to 525600 (365 days); a week is 10080. Up to 5 values. An all-day event counts from 00:00 on its first day, so 300 (5 hours) is 19:00 the evening before. Day and week reminders arrive at 19:00 on the earlier day; hour reminders arrive that many hours before the start, or up to 15 minutes earlier. Every household member is reminded.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
itemsYes
titleNo
messageNo
variantNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedInput schema / properties / endDate
      Added value: +{
      +  "description": "All-day only: new LAST day, inclusive, YYYY-MM-DD. Alone it keeps the current first day. Dates are stored in the event's own end rule (see list_calendar_events).",
      +  "examples": [
      +    "2026-08-06"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / endDateTime / description
      Previous value: -"New end, ISO 8601 UTC. Must not precede startDateTime."New value: +"New end of a timed event, ISO 8601 UTC. Must not precede startDateTime. For all-day events send endDate instead. An all-day endDateTime is stored as given and keeps the event's own end rule (see list_calendar_events): with no source a midnight end names the LAST day, on a device-calendar event the day after it."
    • addedInput schema / properties / reminderOffsetMinutes
      Added value: +{
      +  "description": "New reminder lead times, in minutes before the event starts. Send the full list: it replaces the current one. [] clears all reminders; omit to keep them. Reminders move with the start. Not allowed on imported events (device calendar or subscription). Each value is whole hours, 60-1380 (1-23 hours), or whole days, a multiple of 1440 up to 525600 (365 days); a week is 10080. Up to 5 values. An all-day event counts from 00:00 on its first day, so 300 (5 hours) is 19:00 the evening before. Day and week reminders arrive at 19:00 on the earlier day; hour reminders arrive that many hours before the start, or up to 15 minutes earlier. Every household member is reminded.",
      +  "examples": [
      +    [
      +      1440,
      +      10080
      +    ]
      +  ],
      +  "items": {
      +    "description": "One lead time in minutes: whole hours 60-1380, or a multiple of 1440 for days.",
      +    "examples": [
      +      1440
      +    ],
      +    "maximum": 525600,
      +    "minimum": 60,
      +    "multipleOf": 60,
      +    "type": "integer"
      +  },
      +  "maxItems": 5,
      +  "type": "array",
      +  "uniqueItems": true
      +}
    • addedInput schema / properties / startDate
      Added value: +{
      +  "description": "All-day only (preferred for all-day): new first day, YYYY-MM-DD. Without endDate the event becomes a single day.",
      +  "examples": [
      +    "2026-08-04"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / startDateTime / description
      Previous value: -"New start, ISO 8601 UTC."New value: +"New start of a timed event, ISO 8601 UTC. For an all-day event send startDate instead."
  2. Changed25 schema fields changed
    • changedInput schema / properties / description / description
      Previous value: -"New longer free-text description of the event. Omit to leave unchanged. Up to 2000 characters."New value: +"New description."
    • addedInput schema / properties / description / examples
      Added value: +[
      +  "Annual checkup with Dr. Smith"
      +]
    • changedInput schema / properties / endDateTime / description
      Previous value: -"New end date-time, ISO 8601 in UTC (Z-suffix). Must not be before startDateTime. Omit to leave unchanged."New value: +"New end, ISO 8601 UTC. Must not precede startDateTime."
    • changedInput schema / properties / id / description
      Previous value: -"Id of the calendar event to update."New value: +"Event id from create_calendar_event or list_calendar_events."
    • changedInput schema / properties / isAllDay / description
      Previous value: -"True for an all-day event with no specific start/end time; false for a timed event. Omit to leave unchanged."New value: +"True for all-day, false for timed."
    • addedInput schema / properties / isAllDay / examples
      Added value: +[
      +  false
      +]
    • changedInput schema / properties / location / description
      Previous value: -"New location, replacing the existing one entirely. Omit to leave unchanged. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes)."New value: +"Replaces the location outright. $type 'Address' takes line1-3/postalCode/countryCode; 'OnlineLocation' takes url/notes."
    • changedInput schema / properties / location / properties / $type / description
      Previous value: -"Location type discriminator"New value: +"Which location shape this is."
    • addedInput schema / properties / location / properties / $type / examples
      Added value: +[
      +  "Address"
      +]
    • changedInput schema / properties / location / properties / countryCode / description
      Previous value: -"Country code for the address (Address type)."New value: +"ISO country code, e.g. GB."
    • changedInput schema / properties / location / properties / line1 / description
      Previous value: -"First line of the street address (Address type). At least one of line1-3/postalCode is required when $type is 'Address'."New value: +"Address line 1. An Address needs one of line1-3 or postalCode."
    • changedInput schema / properties / location / properties / line2 / description
      Previous value: -"Second line of the street address (Address type), e.g. building or suite."New value: +"Address line 2, e.g. flat or suite."
    • addedInput schema / properties / location / properties / line2 / examples
      Added value: +[
      +  "Flat 3"
      +]
    • changedInput schema / properties / location / properties / line3 / description
      Previous value: -"Third line of the street address (Address type)."New value: +"Address line 3."
    • addedInput schema / properties / location / properties / line3 / examples
      Added value: +[
      +  "London"
      +]
    • changedInput schema / properties / location / properties / notes / description
      Previous value: -"Notes about the location, e.g. parking instructions or a meeting passcode. Up to 500 characters for OnlineLocation."New value: +"Access detail, e.g. parking or passcode."
    • addedInput schema / properties / location / properties / notes / examples
      Added value: +[
      +  "Parking on level 2"
      +]
    • changedInput schema / properties / location / properties / postalCode / description
      Previous value: -"Postal or ZIP code (Address type). Up to 20 characters."New value: +"Postal or ZIP code."
    • changedInput schema / properties / location / properties / url / description
      Previous value: -"URL for online locations (OnlineLocation type). Must be an absolute http/https URL."New value: +"Absolute http/https join link."
    • addedInput schema / properties / location / properties / url / examples
      Added value: +[
      +  "https://meet.google.com/abc-defg-hij"
      +]
    • changedInput schema / properties / notes / description
      Previous value: -"New freeform notes attached to the event. Omit to leave unchanged. Up to 5000 characters."New value: +"New notes."
    • addedInput schema / properties / notes / examples
      Added value: +[
      +  "Moved to Thursday"
      +]
    • changedInput schema / properties / startDateTime / description
      Previous value: -"New start date-time, ISO 8601 in UTC (Z-suffix). Wall clock is interpreted against the supplied timezone if any. Omit to leave unchanged."New value: +"New start, ISO 8601 UTC."
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone id (e.g. 'Europe/London') describing the wall-clock zone of startDateTime/endDateTime; null = UTC. Omit to leave unchanged."New value: +"IANA zone for the wall-clock times, e.g. 'Europe/London'. Null means UTC."
    • changedInput schema / properties / title / description
      Previous value: -"New event title/summary. Omit to leave unchanged. Up to 200 characters."New value: +"New event title."
  3. Changed25 schema fields changed
    • addedInput schema / examples
      Added value: +[
      +  {
      +    "endDateTime": "2026-08-04T15:30:00Z",
      +    "id": "0198f3a1b2c34d5e6f7089ab1c2d3e4f",
      +    "notes": "Moved to Thursday",
      +    "startDateTime": "2026-08-04T14:30:00Z"
      +  }
      +]
    • addedInput schema / properties / description / description
      Added value: +"New longer free-text description of the event. Omit to leave unchanged. Up to 2000 characters."
    • changedInput schema / properties / endDateTime / description
      Previous value: -"ISO 8601 date-time in UTC (Z-suffix)"New value: +"New end date-time, ISO 8601 in UTC (Z-suffix). Must not be before startDateTime. Omit to leave unchanged."
    • addedInput schema / properties / endDateTime / examples
      Added value: +[
      +  "2026-08-04T15:30:00Z"
      +]
    • addedInput schema / properties / id / description
      Added value: +"Id of the calendar event to update."
    • addedInput schema / properties / id / examples
      Added value: +[
      +  "0198f3a1b2c34d5e6f7089ab1c2d3e4f"
      +]
    • addedInput schema / properties / isAllDay / description
      Added value: +"True for an all-day event with no specific start/end time; false for a timed event. Omit to leave unchanged."
    • changedInput schema / properties / location / description
      Previous value: -"Location. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes)."New value: +"New location, replacing the existing one entirely. Omit to leave unchanged. Set $type to 'Address' for physical (with line1-3, postalCode, countryCode) or 'OnlineLocation' for virtual (with url, notes)."
    • addedInput schema / properties / location / properties / countryCode / description
      Added value: +"Country code for the address (Address type)."
    • addedInput schema / properties / location / properties / countryCode / examples
      Added value: +[
      +  "GB"
      +]
    • addedInput schema / properties / location / properties / line1 / description
      Added value: +"First line of the street address (Address type). At least one of line1-3/postalCode is required when $type is 'Address'."
    • addedInput schema / properties / location / properties / line1 / examples
      Added value: +[
      +  "221B Baker Street"
      +]
    • addedInput schema / properties / location / properties / line2 / description
      Added value: +"Second line of the street address (Address type), e.g. building or suite."
    • addedInput schema / properties / location / properties / line3 / description
      Added value: +"Third line of the street address (Address type)."
    • addedInput schema / properties / location / properties / notes / description
      Added value: +"Notes about the location, e.g. parking instructions or a meeting passcode. Up to 500 characters for OnlineLocation."
    • addedInput schema / properties / location / properties / postalCode / description
      Added value: +"Postal or ZIP code (Address type). Up to 20 characters."
    • addedInput schema / properties / location / properties / postalCode / examples
      Added value: +[
      +  "NW1 6XE"
      +]
    • changedInput schema / properties / location / properties / url / description
      Previous value: -"URL for online locations"New value: +"URL for online locations (OnlineLocation type). Must be an absolute http/https URL."
    • addedInput schema / properties / notes / description
      Added value: +"New freeform notes attached to the event. Omit to leave unchanged. Up to 5000 characters."
    • changedInput schema / properties / startDateTime / description
      Previous value: -"ISO 8601 date-time in UTC (Z-suffix). Wall clock is interpreted against the supplied timezone if any."New value: +"New start date-time, ISO 8601 in UTC (Z-suffix). Wall clock is interpreted against the supplied timezone if any. Omit to leave unchanged."
    • addedInput schema / properties / startDateTime / examples
      Added value: +[
      +  "2026-08-04T14:30:00Z"
      +]
    • changedInput schema / properties / timezone / description
      Previous value: -"IANA timezone id (e.g. 'Europe/London') describing the wall-clock zone of startDateTime/endDateTime; null = UTC."New value: +"IANA timezone id (e.g. 'Europe/London') describing the wall-clock zone of startDateTime/endDateTime; null = UTC. Omit to leave unchanged."
    • addedInput schema / properties / timezone / examples
      Added value: +[
      +  "Europe/London"
      +]
    • addedInput schema / properties / title / description
      Added value: +"New event title/summary. Omit to leave unchanged. Up to 200 characters."
    • addedInput schema / properties / title / examples
      Added value: +[
      +  "Dentist appointment (rescheduled)"
      +]
  4. First observed

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context: partial update preserves unspecified fields, and imported (subscription-sourced) events reject edits. This goes beyond the annotations without contradicting them.

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?

Two sentences carry the essential purpose and restriction, front-loaded with the main action. No filler or repetition of schema details.

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

Completeness4/5

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

For a tool with 12 parameters, a rich schema, and an output schema, the description provides the necessary high-level orientation: what it updates, how partial updates behave, and the key constraint. It is not exhaustive, but the schema and annotations carry the remaining detail.

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%, so each parameter is already documented. The description adds the overarching rule that only supplied fields change, which is not explicit in any one parameter, but it does not detail individual parameter behavior beyond the schema.

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?

The description states a specific verb and resource: 'Updates fields on an existing single calendar event' and scopes it to single events, distinguishing it from update_recurring_calendar_event. The added restriction on imported events further clarifies its domain.

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

Usage Guidelines4/5

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

It clearly says to use it for existing single events and warns that imported events cannot be edited. It also explains partial-update semantics ('only the fields supplied are changed'). However, it does not explicitly name alternatives like update_recurring_calendar_event, leaving that contrast implicit.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources