A Model Context Protocol server that integrates with Microsoft Outlook through Microsoft Graph API, allowing Claude and other LLMs to check calendar events, schedule new ones, read emails, and send messages.
- 📅 Calendar Integration: View, list, create, update, and delete calendar events
- 📧 Email Integration: Read, send, draft, and manage emails from your Outlook account
- 🔁 Model Context Protocol: Follows MCP standards for LLM tool integration
- 🛡️ Type Safety: Full TypeScript implementation with Zod validation
- Node.js 18+
- Microsoft 365 account with appropriate permissions
- Microsoft Azure App Registration with Graph API permissions (Calendar and Mail)
-
Register an application in Azure Active Directory:
-
Go to Azure Portal
-
Navigate to "App registrations"
-
Create a new registration with a redirect URI of type "Public client/native (mobile & desktop)"
- Register
http://localhostas the redirect URI
- Register
-
Configure API permissions:
- Choose Microsoft Graph and type delegated, as we will act on the users behalf
- For Calendar: "Calendars.Read" and "Calendars.ReadWrite"
- For Email: "Mail.Read", "Mail.ReadWrite" and "Mail.Send"
- For People: "People.Read"
-
-
Note the values from your Azure app registration (Overview) to use for the MCP config as environment variables:
- Client ID (Application (client) ID)
- Authority ID (Directory (tenant) ID)
- Register the MCP server
For Claude Desktop, create or update your configuration in
~/.claude/config.json:
{
"mcpServers": {
"outlook": {
"command": "npx",
"args": [
"mcp_outlook"
],
"env": {
"AUTHORITY": "your-authority-id",
"CLIENT_ID": "your-client-id",
"MCP_SERVER_NAME": "outlook-mcp",
"MCP_SERVER_VERSION": "1.0.0"
}
}
}
}Make sure to replace the path and environment variables with your actual values.
- listCalendarEvents: Lists the user's calendar events for a specified time range
- createCalendarEvent: Creates a new calendar event
- getCalendarEvent: Gets details of a specific calendar event
- updateCalendarEvent: Updates an existing calendar event
- deleteCalendarEvent: Deletes a calendar event
- listEmails: Lists emails from a specified folder (inbox, sent, drafts, etc.)
- getEmail: Gets details of a specific email message
- sendEmail: Sends a new email message
- createDraft: Creates a draft email message without sending it
- markEmailAsRead: Marks an email message as read
- markEmailAsUnread: Marks an email message as unread
- deleteEmail: Deletes an email message
- searchPeople Find a person in the organisation or your recent contacts
- getPerson Get information on a person
- calendar: Resource containing calendar events data
- inbox: Resource containing inbox messages data
Run in development mode with live reloading:
npm run dev
Run linting:
npm run lint
Configure your MCP locally
{
"mcpServers": {
"outlook": {
"command": "node",
"args": [
"/ABSOLUTE/PATH/TO/outlook_mcp/build/index.js"
],
"env": {
"AUTHORITY": "your-authority-id",
"CLIENT_ID": "your-client-id",
"MCP_SERVER_NAME": "outlook-mcp",
"MCP_SERVER_VERSION": "1.0.0"
}
}
}
}