← Back to directory
M

M365 Assistant MCP Server

Community
MCP server connecting Claude to Microsoft 365
Category
Collaboration #44 of 55
Stars
★ 443 Popular
Transport
stdio (local process)
Runtime
Node.js 14.0.0+
Credentials
API key / credential required
Last commit
⚠
Tools
28
42FMRS · D

This server is feature-rich, covering Outlook, OneDrive, and Power Automate, but setup is complex, requiring Azure AD registration and broad permissions. Suitable for developers familiar with Azure, but security configuration should be considered.

Strongest · Documentation 13/20 Weakest · Maintenance 4/20

Reliability
5/20
Security and permissions
9/20
Maintenance
4/20
Documentation
13/20
Setup experience
11/20
Why each score
Reliability 5/20
Evidence: only the README and repository metadata were supplied — no source files, no server manifest, no CI or test logs to verify. The README's modular directory structure, tool list and test mode are internally coherent, and it claims Jest tests (npm test), but those are assertions, not evidence. Deductions: 25 open issues and zero execution evidence; per static calibration (no real CI workflows plus committed tests, reliability cannot exceed 12) and the missing-evidence rule, the key paths are only 'plausible' — clean startup, handshake and tool behavior cannot be confirmed.
Security and permissions 9/20
Evidence: the README documents OAuth 2.0 delegated permissions close to least privilege (Read/ReadWrite for Mail, Calendars, Files plus offline_access and User.Read), a localhost:3333 redirect URI, and an explicit warning to use the client secret VALUE rather than the Secret ID. Deductions: tokens are stored in plaintext at ~/.outlook-mcp-tokens.json with no mention of encryption; no confirmation mechanism is documented for destructive or high-impact tools (delete-event, onedrive-delete, send-email, flow-run); data-flow boundaries and retention are not fully disclosed. No red line is triggered (no malware, credential theft, exfiltration, or real secrets in examples).
Maintenance 4/20
Evidence: the repository is not archived and has many stars, but stars are a discovery signal only and add no points. Deductions: license is unknown and the README mentions no license file or terms; there is no evidence of releases, commit cadence, dependency updates, or a security-response channel; 25 open issues. A missing license is a major governance gap and forces a low maintenance score.
Documentation 13/20
Evidence: the README is well-layered — install steps, Azure app registration, permission list, .env and Claude Desktop config JSON examples, auth flow, troubleshooting, testing and extension guidance, plus disclosed Power Automate limitations. Deductions: the tool table only has one-line descriptions with no per-tool parameter schemas; no rate-limit, cost, or retention information; the dual MS_CLIENT_ID / OUTLOOK_CLIENT_ID naming is confusing and a hidden assumption.
Setup experience 11/20
Evidence: the install path is clear and complete (npm install → Azure registration and permissions → .env config → Claude Desktop config → start auth-server → authenticate tool), with client config examples and a port-conflict workaround. Deductions: no CI or test execution evidence, so static calibration caps setup at 15; the flow depends on manual Azure configuration, a separate auth server and a local token file — many steps and somewhat fragile.

Static review · not runListed 2026-08-07

Read the FMRS scoring method →

Fit and risk

What it can accessUses the networkChanges third-party account data

Best for

  • Developers needing integration between Microsoft 365 and AI assistants
  • Individuals wanting natural language control of Outlook and OneDrive
  • Teams automating email and calendar management

Not for

  • Organizations with strict security requirements against third-party servers
  • Users needing deep integration with Microsoft Teams or SharePoint (not supported)
  • Beginners wanting a plug-and-play solution without Azure configuration

Required permissions

  • Microsoft Graph delegated permissions: offline_access, User.Read, Mail.ReadWrite, Mail.Send, Calendars.ReadWrite, Files.ReadWrite
  • Power Automate API scope (optional): https://service.flow.microsoft.com//.default
  • Local file system: tokens stored in ~/.outlook-mcp-tokens.json

Risks and side effects

  • OAuth tokens stored in plaintext locally, risk of exposure
  • Azure app registration required, misconfiguration can break service
  • Power Automate integration limited to solution-aware flows with manual triggers
  • Third-party server may introduce supply chain risk

Setup

Before you start

Runtime:Node.js 14.0.0+

OUTLOOK_CLIENT_ID required The Application (client) ID from your Azure Portal app registration, used in the Claude Desktop config.
OUTLOOK_CLIENT_SECRET requiredsecret The client secret VALUE (not the Secret ID) generated under Azure 'Certificates & secrets'; keep it secret.
MS_CLIENT_SECRET optionalsecret Same value as OUTLOOK_CLIENT_SECRET, used in the .env file; must be the secret VALUE.
Other optional settings (3)
USE_TEST_MODE optional Set to true to use mock data for testing without real API calls; defaults to false.
MS_CLIENT_ID optional Same value as OUTLOOK_CLIENT_ID, used in the .env file for the Azure app client ID.
MS_TENANT_ID optional Your Azure app's tenant ID; set it for single-tenant apps to avoid /common endpoint errors.
  1. Clone the repository and install dependencies: npm install.
  2. Register an app in Azure Portal (set redirect URI to http://localhost:3333/auth/callback).
  3. Add required API permissions (Mail.Read, Mail.Send, Calendars.ReadWrite, etc.).
  4. Copy .env.example to .env and fill in Azure credentials.
  5. Update Claude Desktop config to point to index.js.
  6. Run npm run auth-server and use the authenticate tool to complete OAuth.
  7. Optional: configure Power Automate additional permissions.
claude_desktop_config.json
{
  "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"
      }
    }
  }
}

Shown for Claude Desktop. Other clients may use a different file or key (VS Code uses "servers") — the configurator below converts it.

.vscode/mcp.json
{
  "servers": {
    "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"
      }
    }
  }
}

Goes in your project's .vscode/mcp.json (VS Code uses a "servers" key).

Terminal
claude mcp add m365-assistant -e USE_TEST_MODE=false -e OUTLOOK_CLIENT_ID=your-client-id -e OUTLOOK_CLIENT_SECRET=your-client-secret -- node /path/to/outlook-mcp/index.js

Run it in a terminal; replace any <…> placeholders with your own values first.

Check that it works

After completing OAuth authentication, tools such as list-emails, send-email, and onedrive-list should appear in the client's tool list; a list-emails call returning real mail confirms the connection works.

Troubleshooting

  1. Module errors: run `npm install`
  2. Port 3333 in use: `npx kill-port 3333` and restart
  3. Invalid client secret: use the secret VALUE, not the Secret ID
  4. Authentication required: delete `~/.outlook-mcp-tokens.json` and re-authenticate

Things to try

Once connected, you can ask your AI assistant things like:

  • List my 10 most recent emails from the inbox
  • Search my emails for anything containing 'invoice'
  • Create a calendar event tomorrow at 3pm for a team meeting
  • List the files in my OneDrive reports folder

Tools 28

list-emails read-only
List recent emails from inbox
search-emails read-only
Search emails with filters
read-email read-only
Read email content
send-email destructive
Send a new email
mark-as-read writes
Mark email as read/unread
list-events read-only
List calendar events
create-event writes
Create calendar event
accept-event writes
Accept event invitation
Show 20 more tools
decline-event writes
Decline event invitation
delete-event destructive
Delete calendar event
list-folders read-only
List mail folders
create-folder writes
Create mail folder
move-emails writes
Move emails between folders
list-rules read-only
List inbox rules
create-rule writes
Create inbox rule
onedrive-list read-only
List files in a path
onedrive-search read-only
Search files by query
onedrive-download read-only
Get download URL
onedrive-upload writes
Upload small file (<4MB)
onedrive-upload-large writes
Chunked upload (>4MB)
onedrive-share writes
Create sharing link
onedrive-create-folder writes
Create folder
onedrive-delete destructive
Delete file or folder
flow-list-environments read-only
List Power Platform environments
flow-list read-only
List flows in environment
flow-run writes
Trigger a manual flow
flow-list-runs read-only
Get flow run history
flow-toggle writes
Enable/disable a flow

Use cases

Manage Outlook emails and calendar via natural language
Search, upload, and share files in OneDrive
Trigger and monitor Power Automate flows from Claude

Supported clients

Claude Desktop

Listed from the project's documentation, not tested by this site.

Overview

The M365 Assistant MCP Server is a Model Context Protocol (MCP) server that connects Claude with Microsoft 365 services through the Microsoft Graph API and Power Automate API. It supports Outlook email, calendar, folders, and rules; OneDrive file operations; and Power Automate flow control. Features OAuth 2.0 authentication, test mode, and modular design.

Similar servers

Source revision 95d6ff2d2489 Data synced 2026-10-12 Read the FMRS scoring method