Skip to main content
Glama

update_event

Destructive

Update a calendar event by ID with a full replacement of its title, start/end times, notes, location, alarms, and recurrence; handle recurring occurrences by span.

Instructions

Update an event by id (full replace). start/end ISO — naive = local time. recurrence an RRULE with FREQ, INTERVAL, COUNT, UNTIL, BYDAY (ordinals such as 2TU or -1FR for monthly and yearly), BYMONTHDAY, BYMONTH, BYYEARDAY, BYSETPOS; BYWEEKNO, BYHOUR, BYMINUTE, BYSECOND and WKST are refused. all_day takes a DATE (2026-07-01); a timestamp with a UTC offset is rejected. A start that does not match its recurrence is accepted (RFC 5545 counts it as the first occurrence) and the result's summary says so. alarms are minutes before the start, as in the Google Calendar API. For an all-day event the offset counts from local midnight: -540 is 09:00 on the day, 900 is 09:00 the day before. On a DST-change day the alert shifts an hour, the same as Calendar's own alerts. At most 5. Omit alarms to keep the event's alarms; [] removes them all. span REQUIRED if the target is recurring: 'this-event' (only this occurrence) or 'future-events' (this + all later); ignored for single events. Side effect (full-replace update); needs EventKit (Calendar) access. id from events.

Input Schema

NameRequiredDescriptionDefault
idYes
endYes
spanNo
notesNo
startYes
titleYes
alarmsNo
all_dayNo
calendarNo
locationNo
recurrenceNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.15.1

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only say readOnly=false/destructive=true; the description adds far more: full-replace side effect, EventKit/Calendar access requirement, a whitelist/blacklist of supported RRULE parts (BYWEEKNO/WKST refused), rejection of offset timestamps for all_day, DST shifting of alarms, a 5-alarm cap, and the fact that a non-matching start is accepted with a note in the summary. This is exactly the extra context the annotations cannot convey.

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

Conciseness4/5

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

Front-loads the core operation, then groups constraints by parameter in a roughly scannable order, with every technical caveat (DST, RFC 5545 first-occurrence, alarm cap) being actionable. It is dense and a bit long, but almost nothing is filler; light tightening of the alarm paragraph would help.

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 an 11-parameter destructive mutation with an output schema (so return values need not be explained), the description covers the hard parts: recurrence grammar, alarm encoding, span requirement, and the full-replace consequence. It is nearly complete, missing only note on how unspecified fields (notes/location/calendar) behave under full replace.

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 0%, so the description carries the burden, and it delivers rich meaning for start/end (naive = local), recurrence (enumerated RRULE parts and ordinals), all_day (DATE vs rejected offset), alarms (minutes-before, all-day midnight math, DST), and span (enum values with semantics). It leaves `title`, `notes`, `location`, and `calendar` undocumented, which is the main remaining gap.

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?

Opens with a specific verb+resource plus a crucial qualifier: 'Update an event by id (full replace).' The parenthetical full-replace semantics immediately distinguish it from create_event and delete_event, and the closing pointer to `events` for the `id` reinforces the sibling relationship.

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?

Gives concrete conditional guidance: `span` is REQUIRED for recurring targets and ignored for single events, and omitting `alarms` keeps existing alarms while `[]` removes them. It points to `events` as the source of `id`, but never explicitly contrasts when to reach for update_event versus create_event/delete_event.

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