calendar-update-event
Modify details of an existing calendar event, including title, description, location, time, and attendees, using the event ID. Integrates with primary or specified calendars.
Instructions
Update an existing calendar event
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| attendees | No | Array of attendee email addresses | |
| calendarId | No | Calendar ID - Available options: 'primary' (Primary Calendar) | primary |
| description | No | Event description | |
| endDateTime | No | End date/time in ISO format | |
| eventId | Yes | Event ID | |
| location | No | Event location | |
| startDateTime | No | Start date/time in ISO format | |
| summary | No | Event title/summary |
Implementation Reference
- src/calendar.ts:466-538 (handler)The main handler function updateEvent that performs the actual logic of updating a calendar event using the Google Calendar API. It retrieves the existing event, merges updates, calls the API, formats the response, and handles errors.export async function updateEvent( params: z.infer<ReturnType<typeof updateEventSchema>> ) { try { const auth = createCalendarAuth(); const calendar = google.calendar({ version: "v3", auth }); // First get the existing event const existingEvent = await calendar.events.get({ calendarId: params.calendarId, eventId: params.eventId, }); const updatedEvent: any = { ...existingEvent.data }; // Update only the provided fields if (params.summary !== undefined) updatedEvent.summary = params.summary; if (params.description !== undefined) updatedEvent.description = params.description; if (params.location !== undefined) updatedEvent.location = params.location; if (params.startDateTime !== undefined) { updatedEvent.start = { ...updatedEvent.start, dateTime: params.startDateTime, }; } if (params.endDateTime !== undefined) { updatedEvent.end = { ...updatedEvent.end, dateTime: params.endDateTime }; } if (params.attendees !== undefined) { updatedEvent.attendees = params.attendees.map((email) => ({ email })); } const response = await calendar.events.update({ calendarId: params.calendarId, eventId: params.eventId, requestBody: updatedEvent, sendUpdates: "all", }); const updatedEventData = { id: response.data.id, summary: response.data.summary, start: response.data.start, end: response.data.end, location: response.data.location, description: response.data.description, attendees: response.data.attendees, htmlLink: response.data.htmlLink, updated: response.data.updated, }; return { content: [ { type: "text" as const, text: `# Event Updated Successfully ✅\n\n${formatEventToMarkdown(updatedEventData)}`, }, ], }; } catch (error) { return { content: [ { type: "text" as const, text: `Error updating event: ${ error instanceof Error ? error.message : String(error) }`, }, ], }; } }
- src/calendar.ts:205-224 (schema)Zod schema definition for validating input parameters to the updateEvent tool, including eventId, calendarId, and optional fields like summary, description, etc.export const updateEventSchema = () => z.object({ eventId: z.string().describe("Event ID"), calendarId: z .string() .default("primary") .describe(getCalendarDescription()), summary: z.string().optional().describe("Event title/summary"), description: z.string().optional().describe("Event description"), location: z.string().optional().describe("Event location"), startDateTime: z .string() .optional() .describe("Start date/time in ISO format"), endDateTime: z.string().optional().describe("End date/time in ISO format"), attendees: z .array(z.string()) .optional() .describe("Array of attendee email addresses"), });
- src/index.ts:242-249 (registration)Tool registration in the MCP server, linking the name 'calendar-update-event' to the updateEvent handler function and updateEventSchema.server.tool( "calendar-update-event", "Update an existing calendar event", updateEventSchema().shape, async (params) => { return await updateEvent(params); } );