M365 Assistant MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@M365 Assistant MCP Serversend an email to Sarah about the meeting agenda"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
M365 Assistant MCP Server
A comprehensive MCP (Model Context Protocol) server that connects Claude with Microsoft 365 services through the Microsoft Graph API and Power Automate API.
Supported Services
Outlook - Email, calendar, folders, and rules
OneDrive - Files, folders, search, and sharing
Power Automate - Flows, environments, and run history
Related MCP server: Outlook MCP Server
Directory Structure
├── index.js # Main entry point
├── config.js # Configuration settings
├── auth/ # Authentication modules
│ ├── index.js # Authentication exports
│ ├── token-manager.js # Token storage and refresh (Graph + Flow)
│ └── tools.js # Auth-related tools
├── calendar/ # Calendar functionality
│ ├── index.js # Calendar exports
│ ├── list.js # List events
│ ├── create.js # Create event
│ ├── delete.js # Delete event
│ ├── cancel.js # Cancel event
│ ├── accept.js # Accept event
│ └── decline.js # Decline event
├── email/ # Email functionality
│ ├── index.js # Email exports
│ ├── list.js # List emails
│ ├── search.js # Search emails
│ ├── read.js # Read email
│ ├── send.js # Send email
│ └── mark-as-read.js # Mark email read/unread
├── folder/ # Folder functionality
│ ├── index.js # Folder exports
│ ├── list.js # List folders
│ ├── create.js # Create folder
│ └── move.js # Move emails
├── rules/ # Email rules functionality
│ ├── index.js # Rules exports
│ ├── list.js # List rules
│ └── create.js # Create rule
├── onedrive/ # OneDrive functionality
│ ├── index.js # OneDrive exports
│ ├── list.js # List files/folders
│ ├── search.js # Search files
│ ├── download.js # Get download URL
│ ├── upload.js # Simple upload (<4MB)
│ ├── upload-large.js # Chunked upload (>4MB)
│ ├── share.js # Create sharing link
│ └── folder.js # Create/delete folders
├── power-automate/ # Power Automate functionality
│ ├── index.js # Power Automate exports
│ ├── flow-api.js # Flow API client
│ ├── list-environments.js # List environments
│ ├── list-flows.js # List flows
│ ├── run-flow.js # Trigger flow
│ ├── list-runs.js # Run history
│ └── toggle-flow.js # Enable/disable flow
└── utils/ # Utility functions
├── graph-api.js # Microsoft Graph API helper
├── odata-helpers.js # OData query building
└── mock-data.js # Test mode dataFeatures
Authentication: OAuth 2.0 authentication with Microsoft Graph API (+ Flow API for Power Automate)
Email Management: List, search, read, send, and organize emails
Calendar Management: List, create, accept, decline, and delete calendar events
OneDrive Integration: List, search, upload, download, and share files
Power Automate: List environments/flows, trigger flows, view run history
Modular Structure: Clean separation of concerns for maintainability
Test Mode: Simulated responses for testing without real API calls
Available Tools
Outlook (Email & Calendar)
Tool | Description |
| List recent emails from inbox |
| Search emails with filters |
| Read email content |
| Send a new email |
| Mark email as read/unread |
| List calendar events |
| Create calendar event |
| Accept event invitation |
| Decline event invitation |
| Delete calendar event |
| List mail folders |
| Create mail folder |
| Move emails between folders |
| List inbox rules |
| Create inbox rule |
OneDrive
Tool | Description |
| List files in a path |
| Search files by query |
| Get download URL |
| Upload small file (<4MB) |
| Chunked upload (>4MB) |
| Create sharing link |
| Create folder |
| Delete file or folder |
Power Automate
Tool | Description |
| List Power Platform environments |
| List flows in environment |
| Trigger a manual flow |
| Get flow run history |
| Enable/disable a flow |
Quick Start
Install dependencies:
npm installAzure setup: Register app in Azure Portal (see detailed steps below)
Configure environment: Copy
.env.exampleto.envand add your Azure credentialsConfigure Claude: Update your Claude Desktop config with the server path
Start auth server:
npm run auth-serverAuthenticate: Use the authenticate tool in Claude to get the OAuth URL
Start using: Access your M365 data through Claude!
Installation
Prerequisites
Node.js 14.0.0 or higher
npm or yarn package manager
Azure account for app registration
Install Dependencies
npm installAzure App Registration & Configuration
App Registration
Open Azure Portal
Search for "App registrations"
Click "New registration"
Name: "M365 MCP Server"
Account type: "Accounts in any organizational directory and personal Microsoft accounts"
Redirect URI: Web →
http://localhost:3333/auth/callbackClick "Register"
Copy the "Application (client) ID" for your
.envfile
App Permissions
Go to "API permissions" under Manage
Click "Add a permission" → "Microsoft Graph" → "Delegated permissions"
Add these permissions:
offline_accessUser.ReadMail.Read,Mail.ReadWrite,Mail.SendCalendars.Read,Calendars.ReadWriteFiles.Read,Files.ReadWrite
Click "Add permissions"
For Power Automate (optional):
Requires additional Azure AD configuration with Flow API scope
See Power Automate section below for details
Client Secret
Go to "Certificates & secrets" → "Client secrets"
Click "New client secret"
Add description and select expiration
Copy the VALUE (not the Secret ID)
Configuration
1. Environment Variables
cp .env.example .envEdit .env:
# Get these values from Azure Portal > App Registrations > Your App
MS_CLIENT_ID=your-application-client-id-here
MS_CLIENT_SECRET=your-client-secret-VALUE-here
MS_TENANT_ID=your-tenant-id-here
USE_TEST_MODE=falseImportant Notes:
Use
MS_CLIENT_IDandMS_CLIENT_SECRETin the.envfileSet
MS_TENANT_IDfor single-tenant apps to avoid/commonendpoint errorsFor Claude Desktop config, you'll use
OUTLOOK_CLIENT_IDandOUTLOOK_CLIENT_SECRETAlways use the client secret VALUE, never the Secret ID
2. Claude Desktop Configuration
Add to your Claude Desktop config:
{
"mcpServers": {
"m365-assistant": {
"command": "node",
"args": ["/path/to/outlook-mcp/index.js"],
"env": {
"USE_TEST_MODE": "false",
"OUTLOOK_CLIENT_ID": "your-client-id",
"OUTLOOK_CLIENT_SECRET": "your-client-secret"
}
}
}
}Authentication
Graph API (Outlook + OneDrive)
Start auth server:
npm run auth-serverUse the
authenticatetool in ClaudeVisit the provided URL and sign in
Tokens saved to
~/.outlook-mcp-tokens.json
Power Automate (Optional)
Power Automate requires a separate token with the Flow API scope. Configure additional Azure AD permissions for https://service.flow.microsoft.com//.default scope.
Limitations:
Only solution-aware flows are accessible
Only manual trigger flows can be run via API
Requires environment ID for most operations
Troubleshooting
Common Issues
"Cannot find module"
npm install"Port 3333 in use"
npx kill-port 3333
npm run auth-server"Invalid client secret" (AADSTS7000215)
Use the secret VALUE, not the Secret ID
"Authentication required"
Delete
~/.outlook-mcp-tokens.jsonand re-authenticate
Testing
# Run with MCP Inspector
npm run inspect
# Run in test mode (mock data)
npm run test-mode
# Run Jest tests
npm testExtending the Server
Create new module directory
Implement tool handlers in separate files
Export tool definitions from module index
Import and add to
TOOLSarray inindex.js
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/ryaker/outlook-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server