MCP-сервер Outlook (модульный).
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.json and re-authenticate Testing # Run with MCP Inspector npm run inspect # Run in test mode (mock data) npmA comprehensive MCP (Model Context Protocol) server that connects Claude with Microsoft 365 services through the Microsoft Graph API and Power Automate API.
├── 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 data
| Tool | Description |
|---|---|
list-emails | List recent emails from inbox |
search-emails | Search emails with filters |
read-email | Read email content |
send-email | Send a new email |
mark-as-read | Mark email as read/unread |
list-events | List calendar events |
create-event | Create calendar event |
accept-event | Accept event invitation |
decline-event | Decline event invitation |
delete-event | Delete calendar event |
list-folders | List mail folders |
create-folder | Create mail folder |
move-emails | Move emails between folders |
list-rules | List inbox rules |
create-rule | Create inbox rule |
| Tool | Description |
|---|---|
onedrive-list | List files in a path |
onedrive-search | Search files by query |
onedrive-download | Get download URL |
onedrive-upload | Upload small file (<4MB) |
onedrive-upload-large | Chunked upload (>4MB) |
onedrive-share | Create sharing link |
onedrive-create-folder | Create folder |
onedrive-delete | Delete file or folder |
| Tool | Description |
|---|---|
flow-list-environments | List Power Platform environments |
flow-list | List flows in environment |
flow-run | Trigger a manual flow |
flow-list-runs | Get flow run history |
flow-toggle | Enable/disable a flow |
npm install.env.example to .env and add your Azure credentialsnpm run auth-servernpm install
http://localhost:3333/auth/callback.env fileoffline_accessUser.ReadMail.Read, Mail.ReadWrite, Mail.SendCalendars.Read, Calendars.ReadWriteFiles.Read, Files.ReadWriteFor Power Automate (optional):
cp .env.example .env
Edit .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=false
Important Notes:
MS_CLIENT_ID and MS_CLIENT_SECRET in the .env fileMS_TENANT_ID for single-tenant apps to avoid /common endpoint errorsOUTLOOK_CLIENT_ID and OUTLOOK_CLIENT_SECRETAdd 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"
}
}
}
}
npm run auth-serverauthenticate tool in Claude~/.outlook-mcp-tokens.jsonPower Automate requires a separate token with the Flow API scope. Configure additional Azure AD permissions for https://service.flow.microsoft.com//.default scope.
Limitations:
"Cannot find module"
npm install
"Port 3333 in use"
npx kill-port 3333
npm run auth-server
"Invalid client secret" (AADSTS7000215)
"Authentication required"
~/.outlook-mcp-tokens.json and re-authenticate# Run with MCP Inspector
npm run inspect
# Run in test mode (mock data)
npm run test-mode
# Run Jest tests
npm test
TOOLS array in index.js