Skip to main content
Glama

Update Calendar Event

update_calendar_event
Destructive

Updates an existing event in the Mac's Calendar app (Calendar.app) by ID. Pass only the fields you want to change — unspecified fields are left as-is. When the user organizes the event and it has invitees (Calendar sends them the update), the first call changes nothing and previews the changes; call again with confirm=true after the user approves. Any other event is updated on the first call. Get the event_id from list_calendar_events; for a recurring event, pass the per-occurrence id from the specific row you mean, not a bare series id. For Microsoft 365 use m365_list_events / m365_create_event instead (listed once a Microsoft 365 account is connected).

Input Schema

NameRequiredDescriptionDefault
spanNoFor recurring events: 'this' (default — only this occurrence) or 'future' (this and all following occurrences; 'all'/'series' mean the same). Any other value is refused.
notesNoNew notes — pass empty string to clear (optional)
titleNoNew title (optional)
confirmNotrue after the user approved updating an event they organize with invitees (Calendar sends them the update).
end_dateNoNew end datetime ISO 8601 (optional). Same timezone rules as start_date.
event_idYesEvent (or occurrence) identifier from list_calendar_events. For a recurring event this addresses exactly the occurrence that id came from — the preview names the date and scope so you can confirm before applying.
locationNoNew location — pass empty string to clear (optional)
rememberNoWith confirm: true, also stop asking for this kind of action from now on. Only when the person said so ("don't ask again"). The person can revoke it in LMCP or with set_always_allowed.
start_dateNoNew start datetime ISO 8601 (optional). No timezone = Mac's local time; append Z/offset to pin the zone.

Output Schema

NameRequiredDescriptionDefault
idNo
endNo
notesNo
startNo
titleNo
all_dayNo
updatedNo
calendarNo
locationNo
attendeesNo
calendar_idNo
attendees_totalNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / confirm / description
      Previous value: -"Must be true to apply changes"New value: +"true after the user approved updating an event they organize with invitees (Calendar sends them the update)."
    • addedInput schema / properties / remember
      Added value: +{
      +  "description": "With confirm: true, also stop asking for this kind of action from now on. Only when the person said so (\"don't ask again\"). The person can revoke it in LMCP or with set_always_allowed.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changed
    • changedInput schema / properties / event_id / description
      Previous value: -"Event identifier from list_calendar_events"New value: +"Event (or occurrence) identifier from list_calendar_events. For a recurring event this addresses exactly the occurrence that id came from — the preview names the date and scope so you can confirm before applying."
    • changedInput schema / properties / span / description
      Previous value: -"For recurring events: 'this' (default) or 'future'"New value: +"For recurring events: 'this' (default — only this occurrence) or 'future' (this and all following occurrences; 'all'/'series' mean the same). Any other value is refused."
  3. Changed2 schema fields changed
    • changedInput schema / properties / event_id / description
      Previous value: -"Event (or occurrence) identifier from list_calendar_events. For a recurring event this addresses exactly the occurrence that id came from — the preview names the date and scope so you can confirm before applying."New value: +"Event identifier from list_calendar_events"
    • changedInput schema / properties / span / description
      Previous value: -"For recurring events: 'this' (default — only this occurrence) or 'future' (this and all following occurrences; 'all'/'series' mean the same). Any other value is refused."New value: +"For recurring events: 'this' (default) or 'future'"
  4. Changed1 schema field changed
    • changedInput schema / properties / span / description
      Previous value: -"For recurring events: 'this' (default) or 'future'"New value: +"For recurring events: 'this' (default — only this occurrence) or 'future' (this and all following occurrences; 'all'/'series' mean the same). Any other value is refused."
  5. Changed1 schema field changed
    • changedInput schema / properties / event_id / description
      Previous value: -"Event identifier from list_calendar_events"New value: +"Event (or occurrence) identifier from list_calendar_events. For a recurring event this addresses exactly the occurrence that id came from — the preview names the date and scope so you can confirm before applying."
  6. Changed2 schema fields changed
    • changedInput schema / properties / end_date / description
      Previous value: -"New end datetime ISO 8601 (optional)"New value: +"New end datetime ISO 8601 (optional). Same timezone rules as start_date."
    • changedInput schema / properties / start_date / description
      Previous value: -"New start datetime ISO 8601 (optional)"New value: +"New start datetime ISO 8601 (optional). No timezone = Mac's local time; append Z/offset to pin the zone."
  7. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare a destructive, open-world mutation; the description adds the non-obvious contract that it is a partial update ("pass only the fields you want to change — unspecified fields are left untouched") and that events the user organizes with invitees follow a two-call preview-then-confirm flow while all other events apply on the first call, including that Calendar notifies invitees. That is exactly the behavioral context an agent cannot infer from the annotations.

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?

Front-loads what the tool does and the partial-update rule, then the confirm exception, then id sourcing and the M365 alternative. Every sentence carries routing or behavior information; nothing is padding despite the length.

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?

With an output schema present, return values need no explanation, and the description covers the remaining risks: partial-update semantics, the destructive/confirm gate, recurring-occurrence addressing, and the cross-provider alternative. An agent has everything needed to call this correctly on the first attempt.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: confirm's preview dependency, event_id sourcing and per-occurrence semantics, and the scope of the update (only supplied fields change). It does not restate the field-level notes (empty string clears, ISO 8601 handling) already in the schema, which is appropriate.

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 ("Updates an existing event in the Mac's Calendar app") plus the addressing key (by ID), immediately separating it from create_calendar_event and delete_calendar_event. It even names the Microsoft 365 equivalents, so an agent can route between the two families without opening a 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?

Explicitly says where the event_id comes from (list_calendar_events), what to pass for recurring events (the per-occurrence id from the specific row, not a bare series id), and to use m365_list_events / m365_create_event instead when the account is Microsoft 365. The when-to-use vs. alternative criteria are all stated, not implied.

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