The Outlook Meetings Scheduler MCP Server enables scheduling and managing Outlook calendar events via Microsoft Graph API. Key capabilities include:
Find email addresses: Locate a person's email by name
Create events: Schedule simple calendar events or events with attendees
Manage events: Retrieve, list, update, and delete calendar events, with optional filtering by subject or date range
Modify attendees: Add or remove attendees from existing events
Customize events: Set event details like subject, body, time, timezone, location, and attendees
Integrate workflows: Combine with other services for automated task management
Provides Docker-based deployment options for running the MCP server in a containerized environment, with configuration examples for both VS Code and Claude Desktop.
Enables integration with GitHub for creating issues, finding pull requests, and identifying contributors, allowing combined workflows such as creating GitHub issues and scheduling follow-up meetings.
Supports running the MCP server directly with Node.js from a local build, allowing for custom deployment and configuration.
Enables installation and execution of the MCP server using NPX, allowing for easy deployment without manual installation.
Outlook Meetings Scheduler MCP Server
MCP Server for scheduling meetings in Microsoft Outlook using Microsoft Graph API.
This MCP server allows you to create calendar events, create events with attendees (including finding their email addresses). It integrates seamlessly with other MCP servers, such as the GitHub MCP server, to enhance your workflow.
Sample queries
Schedule a meeting with Sarah for tomorrow at 3 PM.
Create a meeting called "Project Kickoff" for tomorrow at 2 PM. Add Megan and John as required attendees.
Usage with GitHub MCP Server
Create an issue in the organization/repo repository titled "Fix pagination bug in user dashboard" with the description "Users report seeing duplicate entries when navigating between pages." Then schedule a calendar reminder for me to review this issue tomorrow at 3 PM.
Related MCP server: Microsoft MCP
Demo

Tools
find-personFind a person's email address by their name
Input:
name(string)Returns: List of matching people with names and email addresses
create-eventCreate a calendar event using Microsoft Graph API
Inputs:
subject(string): Subject of the calendar eventbody(string): Content/body of the calendar eventstart(optional): ISO format datetime (e.g., 2025-04-20T12:00:00)end(optional): ISO format datetime (e.g., 2025-04-20T13:00:00)timeZone(optional): Time zone for the event (default: "GMT Standard Time")
Returns: Event details including URL and ID
create-event-with-attendeesCreate a calendar event with attendees using Microsoft Graph API
Inputs:
subject(string): Subject of the calendar eventbody(string): Content/body of the calendar eventstart(optional): ISO format datetime (e.g., 2025-04-20T12:00:00)end(optional): ISO format datetime (e.g., 2025-04-20T13:00:00)timeZone(optional): Time zone for the event (default: "GMT Standard Time")location(optional): Location of the eventattendees: Array of { email, name (optional), type (optional) }
Returns: Event details including URL, ID, and attendees list
get-eventGet details of a calendar event by its ID
Input:
eventId(string): ID of the event to retrieve
Returns: Detailed event information including subject, time, attendees, and URL
list-eventsList calendar events with optional filtering
Inputs:
subject(optional): Filter events by subject containing this textstartDate(optional): Start date in ISO format (e.g., 2025-04-20T00:00:00) to filter events fromendDate(optional): End date in ISO format (e.g., 2025-04-20T23:59:59) to filter events untilmaxResults(optional): Maximum number of events to return
Returns: List of calendar events with basic information and IDs
delete-eventDelete a calendar event
Input:
eventId(string): ID of the event to delete
Returns: Confirmation of event deletion
update-eventUpdate an existing calendar event
Inputs:
eventId(string): ID of the event to updatesubject(optional): New subject for the calendar eventbody(optional): New content/body for the calendar eventstart(optional): New start time in ISO format (e.g., 2025-04-20T12:00:00)end(optional): New end time in ISO format (e.g., 2025-04-20T13:00:00)timeZone(optional): New time zone for the eventlocation(optional): New location for the eventattendees(optional): Array of { email, name (optional), type (optional) }
Returns: Updated event details showing changes
update-event-attendeesAdd or remove attendees from a calendar event
Inputs:
eventId(string): ID of the event to updateaddAttendees(optional): Array of attendees to add: { email, name (optional), type (optional) }removeAttendees(optional): Array of email addresses to remove from the event
Returns: Updated event attendee information
Setup
Authentication Modes
This MCP server supports three authentication modes:
1. Interactive (Delegated)
Thank you Lokka
Best for: User-impersonation scenarios, accessing user-specific data
Prompts user to login interactively
Uses delegated permissions
Authenticates as the signed-in user
2. Client Credentials (App-Only)
Best for: Server-to-server scenarios, automated processes
Uses Azure AD application credentials
Requires Application permissions
Works without user interaction
3. Client Provided Token
Best for: Custom token management, pre-acquired tokens
Uses a token provided by the client
Requires managing token refresh externally
Microsoft Graph API Setup
For Interactive (Delegated) Mode
Register an application in the Microsoft Azure Portal (or use an existing app)
Add a redirect URI:
http://localhost(Mobile and desktop applications platform)Enable public client flows: Go to Authentication > Advanced settings > "Allow public client flows" = YES
Grant necessary Delegated permissions: Microsoft Graph API > Delegated permissions > Calendars.ReadWrite, People.Read, User.Read
Note your Client ID and Tenant ID (Client Secret not needed for interactive mode with custom app)
Note: The server uses a built-in multi-tenant app by default, so custom app setup is optional. When authentication is needed, the device code and login URL will appear directly in your MCP client chat interface.
For Client Credentials (App-Only) Mode
Register an application in the Microsoft Azure Portal
Create a client secret
Grant necessary Application permissions: Microsoft Graph API > Application permissions > Calendars.ReadWrite, People.Read.All, User.ReadBasic.All
Grant admin consent for your organization
Note your Client ID, Client Secret, and Tenant ID
Usage with VS Code
Authentication Mode Configuration
The MCP server supports different authentication modes via the AUTH_MODE environment variable:
interactive(default) - User authentication with browser or device code flowclient_credentials- App-only authentication with client secretclient_provided_token- Use a pre-acquired token
Backward Compatibility: If AUTH_MODE is not specified, the server automatically detects the mode:
Presence of
CLIENT_SECRET→client_credentialsmodePresence of
ACCESS_TOKEN→client_provided_tokenmodeNeither present →
interactivemode (default)
Local Node.js
You can run the MCP server directly with Node.js from your local build:
Clone the repository and build the project:
For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressing
Ctrl + Shift + Pand typing Preferences:Open User Settings (JSON).
Optionally, you can add it to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others:
Interactive Mode (Default - Zero Configuration):
Interactive Mode with Custom App:
Client Credentials Mode:
Client Provided Token Mode:
Note:
Uses a built-in multi-tenant Azure AD app (works for any organization)
USER_EMAIL is automatically determined from the signed-in user
Users will see a one-time consent prompt (no admin approval needed)
Zero configuration required - works out of the box
Interactive Mode with Custom App:
Use a custom app if you need specific branding or tenant restrictions.
Replace /path/to/outlook-meetings-scheduler-mcp-server with the absolute path to your cloned repository.
Docker
Run the MCP server using Docker locally. Build the Docker image with the following command:
For manual installation, add the following JSON block to your User Settings (JSON) file in VS Code. You can do this by pressing Ctrl + Shift + P and typing Preferences: Open User Settings (JSON).
Optionally, you can add it to a file called .vscode/mcp.json in your workspace. This will allow you to share the configuration with others.
NPX
Interactive Mode (Default - Zero Configuration):
Interactive Mode with Custom App:
Client Credentials Mode:
Client Provided Token Mode:
Usage with Claude Desktop
Docker
Run the MCP server using Docker locally. Build the Docker image with the following command:
Add the following to your
claude_desktop_config.json:
NPX
Interactive Mode (Default - Zero Configuration):
Interactive Mode with Custom App:
Client Credentials Mode:
Client Provided Token Mode:
Example Scenarios
Integration with GitHub MCP Server
You can combine this MCP server with other MCP servers like the GitHub MCP server for powerful workflows.
Create an Issue and Schedule a Follow-up Review
This will:
Use the GitHub MCP server to create the issue
Use the Outlook Meetings Scheduler MCP server to create a calendar event for the review
Schedule a Code Review Meeting Based on a Pull Request
This will:
Use GitHub MCP server to find the pull request and identify contributors
Use the Outlook Meetings Scheduler MCP server to schedule a meeting with those team members
Configuration for Multi-MCP Setup
To use both GitHub and Outlook MCP servers together :
Direct Usage
Finding a Colleague's Email
Creating a Simple Calendar Event
Scheduling a Meeting with Single Attendee
This will find Sarah's email address and create a calendar event.
To find Sarah's email address, the MCP server will use the find-person tool - which uses the Microsoft Graph API to find relevant people for USER_EMAIL or searches for the name in the organization.
Scheduling a Meeting with Multiple Attendees
Environment Variables
Interactive Mode (Default)
Variable | Description | Required | Default |
| Authentication mode | No |
|
| Azure AD Application (Client) ID | No | Built-in multi-tenant app |
| Azure AD Tenant ID | No |
(multi-tenant) |
| Email address of the user | No | Auto-detected from signed-in user |
| Custom redirect URI | No |
|
Client Credentials Mode
Variable | Description | Required |
| Authentication mode | Yes |
| Azure AD Application (Client) ID | Yes |
| Azure AD Application Client Secret | Yes |
| Azure AD Tenant ID | Yes |
| Email address of the user whose calendar to access | Yes |
Client Provided Token Mode
Variable | Description | Required | Default |
| Authentication mode | Yes | - |
| Pre-acquired access token | Yes | - |
| Email address of the user | Yes | - |
| Token expiration date (ISO format) | No | 1 hour from start time |
How to Obtain an Access Token
You can obtain an access token through several methods:
1. Azure CLI (For Microsoft Graph - Recommended for testing):
Note: The Azure CLI token has broad permissions but may not include specific calendar scopes (Calendars.ReadWrite). For production use, consider methods 3 or 4 below with explicit scope configuration.
2. PowerShell REST API (Recommended for Windows):
3. From Your Own Application (Most Reliable):
4. Using OAuth2 Device Code Flow (Interactive):
5. Client Credentials Flow (App-Only):
Important: Ensure your Azure AD app registration has the required delegated or application permissions:
Delegated: Calendars.ReadWrite, People.Read, User.Read
Application: Calendars.ReadWrite, People.Read.All, User.ReadBasic.All (requires admin consent)
Authentication Mode Details
client_credentials
Best for: Automated scenarios, server-to-server communication
Requires:
CLIENT_ID,CLIENT_SECRET,TENANT_ID,USER_EMAILPermissions: Application permissions (e.g., Calendars.ReadWrite)
Note: Requires admin consent for the application
interactive (Default)
Best for: User-impersonation scenarios, delegated access (most common use case)
Setup: Zero configuration required - works out of the box
Requires: Nothing (uses built-in multi-tenant app)
Optional:
CLIENT_IDandTENANT_IDfor custom appPermissions: Delegated permissions (e.g., Calendars.ReadWrite)
Authentication Flow:
Attempts browser-based interactive login first
Falls back to device code flow if browser auth fails
Device code and URL appear in MCP client chat for easy access
User will be prompted to authenticate in their browser
Note: Uses built-in multi-tenant app (works for any organization)
client_provided_token
Best for: Custom token management, integration with existing auth systems
Requires:
ACCESS_TOKEN,USER_EMAILOptional:
TOKEN_EXPIRES_ON(if not provided, assumes 1-hour validity from start time)Token Sources: Microsoft Graph PowerShell, custom applications, OAuth2 flows, Azure CLI (with limitations)
Use Cases: Testing with specific scopes, integration with existing auth flows, CI/CD pipelines, development/debugging
Note: Token refresh must be handled externally
Build
License
This MCP server is licensed under the ISC License. For more details, please see the LICENSE file in the project repository.
Disclaimer
This MCP server is not affiliated with Microsoft or Microsoft Graph API. Use at your own risk. Ensure you comply with your organization's policies and guidelines when using this tool.