Skip to main content
Glama
anoopt

Outlook Meetings Scheduler MCP Server

create-event

Schedule Microsoft Outlook calendar events with defined subject, body, start, end times, and time zone using the Microsoft Graph API for efficient meeting management.

Instructions

Create a calendar event using Microsoft Graph API

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bodyYesContent/body of the calendar event
endNoEnd time in ISO format (e.g. 2025-04-20T13:00:00). Defaults to next business day at 1PM
startNoStart time in ISO format (e.g. 2025-04-20T12:00:00). Defaults to next business day at noon
subjectYesSubject of the calendar event
timeZoneNoTime zone for the event. Defaults to GMT Standard Time

Implementation Reference

  • Executes the core logic for creating a calendar event: handles authentication, default times, Graph API call, and response formatting.
    async ({ subject, body, start, end, timeZone = "GMT Standard Time" }) => { const { graph, userEmail, authError } = await getGraphConfig(); if (authError) { return { content: [{ type: "text", text: `🔐 Authentication Required\n\n${authError}\n\nPlease complete the authentication and try again.` }] }; } // Calculate default times if not provided const nextDay: string = format(addBusinessDays(new Date(), 1), 'yyyy-MM-dd'); const startTime: string = start ? start : `${nextDay}T12:00:00`; const endTime: string = end ? end : `${nextDay}T13:00:00`; // Create the event object const event: Event = { subject, body: { contentType: "html", content: `${body}<br/>Request submitted around ${format(new Date(), 'dd-MMM-yyyy HH:mm')}` }, start: { dateTime: startTime, timeZone }, end: { dateTime: endTime, timeZone } }; // Call the Graph API to create the event const result = await graph.createEvent(event, userEmail); if (!result) { return { content: [ { type: "text", text: "Failed to create calendar event. Check the logs for details.", }, ], }; } // Format the result for response const eventUrl = result.webLink || "No event URL available"; const eventId = result.id || "No event ID available"; const successMessage = ` Calendar event created successfully! Subject: ${subject} Start: ${startTime} End: ${endTime} Time Zone: ${timeZone} User: ${userEmail} Event ID: ${eventId} Event URL: ${eventUrl} `; return { content: [ { type: "text", text: successMessage, }, ], }; }
  • Zod input schema defining parameters for the create-event tool.
    { subject: z.string().describe("Subject of the calendar event"), body: z.string().describe("Content/body of the calendar event"), start: z.string().optional().describe("Start time in ISO format (e.g. 2025-04-20T12:00:00). Defaults to next business day at noon"), end: z.string().optional().describe("End time in ISO format (e.g. 2025-04-20T13:00:00). Defaults to next business day at 1PM"), timeZone: z.string().optional().describe("Time zone for the event. Defaults to GMT Standard Time"), },
  • Registers the 'create-event' tool on the MCP server using the registerTool helper, including schema and handler.
    registerTool( server, "create-event", "Create a calendar event using Microsoft Graph API", { subject: z.string().describe("Subject of the calendar event"), body: z.string().describe("Content/body of the calendar event"), start: z.string().optional().describe("Start time in ISO format (e.g. 2025-04-20T12:00:00). Defaults to next business day at noon"), end: z.string().optional().describe("End time in ISO format (e.g. 2025-04-20T13:00:00). Defaults to next business day at 1PM"), timeZone: z.string().optional().describe("Time zone for the event. Defaults to GMT Standard Time"), }, async ({ subject, body, start, end, timeZone = "GMT Standard Time" }) => { const { graph, userEmail, authError } = await getGraphConfig(); if (authError) { return { content: [{ type: "text", text: `🔐 Authentication Required\n\n${authError}\n\nPlease complete the authentication and try again.` }] }; } // Calculate default times if not provided const nextDay: string = format(addBusinessDays(new Date(), 1), 'yyyy-MM-dd'); const startTime: string = start ? start : `${nextDay}T12:00:00`; const endTime: string = end ? end : `${nextDay}T13:00:00`; // Create the event object const event: Event = { subject, body: { contentType: "html", content: `${body}<br/>Request submitted around ${format(new Date(), 'dd-MMM-yyyy HH:mm')}` }, start: { dateTime: startTime, timeZone }, end: { dateTime: endTime, timeZone } }; // Call the Graph API to create the event const result = await graph.createEvent(event, userEmail); if (!result) { return { content: [ { type: "text", text: "Failed to create calendar event. Check the logs for details.", }, ], }; } // Format the result for response const eventUrl = result.webLink || "No event URL available"; const eventId = result.id || "No event ID available"; const successMessage = ` Calendar event created successfully! Subject: ${subject} Start: ${startTime} End: ${endTime} Time Zone: ${timeZone} User: ${userEmail} Event ID: ${eventId} Event URL: ${eventUrl} `; return { content: [ { type: "text", text: successMessage, }, ], }; } );
  • src/index.ts:33-33 (registration)
    Top-level invocation of registerEventCreateTools during server setup, which in turn registers the create-event tool.
    registerEventCreateTools(server);
  • Helper utility that registers tools on the MCP server with standardized logging and error handling wrapping.
    export function registerTool( server: McpServer, name: string, description: string, params: any, handler: (args: any) => Promise<any> ): void { server.tool( name, description, params, async (args: any) => { // Common logging pattern for all tools logger.info(`ℹ️ Executing ${name} tool with params: ${JSON.stringify(args)}`); try { // Call the actual handler function return await handler(args); } catch (error) { logger.error(`Error in ${name}:`, error); return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : 'Unknown error'}` } ] }; } } ); }

Other Tools

Related Tools

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/anoopt/outlook-meetings-scheduler-mcp-server'

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