Calendar Tools MCP Server

import { google } from "googleapis"; import { getAuthClient } from "../utils/auth.js"; import { convertToTimeZone } from "../utils/index.js"; interface UpdateEventParams { summary?: string; description?: string; startTime?: string; endTime?: string; attendees?: string[]; } export async function updateEvent(eventId: string, updates: UpdateEventParams) { try { const auth = await getAuthClient(); const calendar = google.calendar({ version: "v3", auth }); // 先取得現有活動資料 const event = await calendar.events.get({ calendarId: process.env.GOOGLE_CALENDAR_ID || "primary", eventId: eventId, }); // 準備更新的資料 const updatedEvent = { ...event.data, summary: updates.summary || event.data.summary, description: updates.description || event.data.description, start: updates.startTime ? { dateTime: convertToTimeZone(updates.startTime, process.env.GOOGLE_TIME_ZONE || "Asia/Taipei"), timeZone: process.env.GOOGLE_TIME_ZONE || "Asia/Taipei", } : event.data.start, end: updates.endTime ? { dateTime: convertToTimeZone(updates.endTime, process.env.GOOGLE_TIME_ZONE || "Asia/Taipei"), timeZone: process.env.GOOGLE_TIME_ZONE || "Asia/Taipei", } : event.data.end, attendees: updates.attendees ? updates.attendees.map((email) => ({ email })) : event.data.attendees, }; const result = await calendar.events.update({ calendarId: process.env.GOOGLE_CALENDAR_ID || "primary", eventId: eventId, requestBody: updatedEvent, sendUpdates: "all", }); return { success: true, data: result.data, }; } catch (error) { return { success: false, error: error instanceof Error ? error.message : "Error updating event", }; } }