Skip to main content
Glama

Google Calendar MCP Server

by am2rican5
schemas.ts3.6 kB
import { z } from "zod"; import type { Tool } from "@modelcontextprotocol/sdk/types.js"; import { ToolSchema } from "@modelcontextprotocol/sdk/types.js"; import { zodToJsonSchema } from "zod-to-json-schema"; import type { CalendarEvent } from "../model.js"; // Extract the input schema type from ToolSchema const ToolInputSchema = ToolSchema.shape.inputSchema; type ToolInput = z.infer<typeof ToolInputSchema>; // Calendar event schema export const CalendarEventSchema: z.ZodType<CalendarEvent> = z.object({ summary: z.string().describe("The summary of the event"), description: z.string().describe("The description of the event"), start: z.string().describe("The start date of the event. Format: YYYY-MM-DD"), end: z.string().describe("The end date of the event. Format: YYYY-MM-DD"), anyoneCanAddSelf: z .boolean() .optional() .describe("Whether anyone can add themselves to the event"), colorId: z.string().optional().describe("The color of the event"), }); // Tool schemas export const ListCalendarsSchema = z.object({ pageToken: z.string().optional().describe("The next page token"), }); export const ListCalendarEventsSchema = z.object({ calendarId: z.string().describe("The calendar ID"), startsAt: z .string() .describe("The start date of the events. Format: YYYY-MM-DD"), endsAt: z.string().describe("The end date of the events. Format: YYYY-MM-DD"), pageToken: z.string().optional().describe("The next page token"), }); export const CreateCalendarEventSchema = z.object({ calendarId: z.string().describe("The calendar ID"), event: CalendarEventSchema, }); export const GetCalendarEventSchema = z.object({ calendarId: z.string().describe("The calendar ID"), eventId: z.string().describe("The event ID"), }); export const EditCalendarEventSchema = z.object({ calendarId: z.string().describe("The calendar ID"), eventId: z.string().describe("The event ID"), event: CalendarEventSchema, }); export const DeleteCalendarEventSchema = z.object({ calendarId: z.string().describe("The calendar ID"), eventId: z.string().describe("The event ID"), }); // Enum for tool names export enum ToolName { ListCalendars = "list_calendars", ListCalendarEvents = "list_calendar_events", CreateCalendarEvent = "create_calendar_event", GetCalendarEvent = "get_calendar_event", EditCalendarEvent = "edit_calendar_event", DeleteCalendarEvent = "delete_calendar_event", } // Function to convert Zod schema to JSON schema for tool input export function createToolInputSchema(schema: z.ZodType<unknown>): ToolInput { return zodToJsonSchema(schema) as ToolInput; } // Function to create tool definitions export function createTools(): Tool[] { return [ { name: ToolName.ListCalendars, description: "List all calendars", inputSchema: createToolInputSchema(ListCalendarsSchema), }, { name: ToolName.ListCalendarEvents, description: "Get events from a calendar", inputSchema: createToolInputSchema(ListCalendarEventsSchema), }, { name: ToolName.CreateCalendarEvent, description: "Create a calendar event", inputSchema: createToolInputSchema(CreateCalendarEventSchema), }, { name: ToolName.GetCalendarEvent, description: "Get a calendar event", inputSchema: createToolInputSchema(GetCalendarEventSchema), }, { name: ToolName.EditCalendarEvent, description: "Edit a calendar event", inputSchema: createToolInputSchema(EditCalendarEventSchema), }, { name: ToolName.DeleteCalendarEvent, description: "Delete a calendar event", inputSchema: createToolInputSchema(DeleteCalendarEventSchema), }, ]; }

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/am2rican5/mcp-google-calendar'

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