Skip to main content
Glama
peadams21

Google Calendar MCP Server

by peadams21

create_event

Add new events to Google Calendar by specifying title, time, location, attendees, and recurrence rules.

Instructions

Create a new event in Google Calendar

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
calendarIdNoCalendar ID (default: 'primary')primary
summaryYesEvent title/summary
descriptionNoEvent description
startYes
endYes
locationNoEvent location
attendeesNoList of attendees
recurrenceNoRecurrence rules (RRULE format)

Implementation Reference

  • The main handler function for the 'create_event' tool. It constructs an event object from the validated arguments and uses the Google Calendar API to insert the new event, returning success or error response.
    async function handleCreateEvent(args: z.infer<typeof CreateEventArgsSchema>) { try { const event = { summary: args.summary, description: args.description, start: args.start, end: args.end, location: args.location, attendees: args.attendees, recurrence: args.recurrence, }; const response = await calendar.events.insert({ calendarId: args.calendarId, requestBody: event, }); return { content: [ { type: "text", text: JSON.stringify({ success: true, event: response.data, message: `Event "${args.summary}" created successfully`, }, null, 2), }, ], }; } catch (error) { return { content: [ { type: "text", text: JSON.stringify({ success: false, error: error instanceof Error ? error.message : "Unknown error", }, null, 2), }, ], isError: true, }; } }
  • Zod schema defining the input parameters for the 'create_event' tool, used for validation before calling the handler.
    const CreateEventArgsSchema = z.object({ calendarId: z.string().optional().default("primary"), summary: z.string(), description: z.string().optional(), start: z.object({ dateTime: z.string(), timeZone: z.string().optional(), }), end: z.object({ dateTime: z.string(), timeZone: z.string().optional(), }), location: z.string().optional(), attendees: z.array(z.object({ email: z.string(), displayName: z.string().optional(), })).optional(), recurrence: z.array(z.string()).optional(), });
  • src/index.ts:152-222 (registration)
    Tool registration in the tools array, defining the name, description, and input schema for 'create_event' returned by ListToolsRequestHandler.
    name: "create_event", description: "Create a new event in Google Calendar", inputSchema: { type: "object", properties: { calendarId: { type: "string", description: "Calendar ID (default: 'primary')", default: "primary", }, summary: { type: "string", description: "Event title/summary", }, description: { type: "string", description: "Event description", }, start: { type: "object", properties: { dateTime: { type: "string", description: "Start date and time (RFC3339 timestamp)", }, timeZone: { type: "string", description: "Time zone (e.g., 'America/New_York')", }, }, required: ["dateTime"], }, end: { type: "object", properties: { dateTime: { type: "string", description: "End date and time (RFC3339 timestamp)", }, timeZone: { type: "string", description: "Time zone (e.g., 'America/New_York')", }, }, required: ["dateTime"], }, location: { type: "string", description: "Event location", }, attendees: { type: "array", items: { type: "object", properties: { email: { type: "string" }, displayName: { type: "string" }, }, required: ["email"], }, description: "List of attendees", }, recurrence: { type: "array", items: { type: "string" }, description: "Recurrence rules (RRULE format)", }, }, required: ["summary", "start", "end"], }, },
  • src/index.ts:551-554 (registration)
    Dispatch case in the CallToolRequestHandler switch statement that validates arguments using the schema and calls the handleCreateEvent function.
    case "create_event": { const validatedArgs = CreateEventArgsSchema.parse(args); return await handleCreateEvent(validatedArgs); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/peadams21/Google-Calendar-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server