Microsoft MCP
Access Microsoft services like Outlook, Calendar, and OneDrive via the Microsoft Graph API.
Microsoft MCP
Powerful MCP server for Microsoft Graph API - a complete AI assistant toolkit for Outlook, Calendar, OneDrive, and Contacts.
Features
- Email Management: Read, send, reply, manage attachments, organize folders
- Calendar Intelligence: Create, update, check availability, respond to invitations
- OneDrive Files: Upload, download, browse with pagination
- Contacts: Search and list contacts from your address book
- Multi-Account: Support for multiple Microsoft accounts (personal, work, school)
- Unified Search: Search across emails, files, events, and people
Quick Start with Claude Desktop
# Add Microsoft MCP server (replace with your Azure app ID)
claude mcp add microsoft-mcp -e MICROSOFT_MCP_CLIENT_ID=your-app-id-here -- uvx --from git+https://github.com/elyxlz/microsoft-mcp.git microsoft-mcp
# Start Claude Desktop
claude
Usage Examples
# Email examples
> read my latest emails with full content
> reply to the email from John saying "I'll review this today"
> send an email with attachment to alice@example.com
# Calendar examples
> show my calendar for next week
> check if I'm free tomorrow at 2pm
> create a meeting with Bob next Monday at 10am
# File examples
> list files in my OneDrive
> upload this report to OneDrive
> search for "project proposal" across all my files
# Multi-account
> list all my Microsoft accounts
> send email from my work account
Available Tools
Email Tools
list_emails
- List emails with optional body contentget_email
- Get specific email with attachmentscreate_email_draft
- Create email draft with attachments supportsend_email
- Send email immediately with CC/BCC and attachmentsreply_to_email
- Reply maintaining thread contextreply_all_email
- Reply to all recipients in threadupdate_email
- Mark emails as read/unreadmove_email
- Move emails between foldersdelete_email
- Delete emailsget_attachment
- Get email attachment contentsearch_emails
- Search emails by query
Calendar Tools
list_events
- List calendar events with detailsget_event
- Get specific event detailscreate_event
- Create events with location and attendeesupdate_event
- Reschedule or modify eventsdelete_event
- Cancel eventsrespond_event
- Accept/decline/tentative response to invitationscheck_availability
- Check free/busy times for schedulingsearch_events
- Search calendar events
Contact Tools
list_contacts
- List all contactsget_contact
- Get specific contact detailscreate_contact
- Create new contactupdate_contact
- Update contact informationdelete_contact
- Delete contactsearch_contacts
- Search contacts by query
File Tools
list_files
- Browse OneDrive files and foldersget_file
- Download file contentcreate_file
- Upload files to OneDriveupdate_file
- Update existing file contentdelete_file
- Delete files or folderssearch_files
- Search files in OneDrive
Utility Tools
unified_search
- Search across emails, events, and fileslist_accounts
- Show authenticated Microsoft accountsauthenticate_account
- Start authentication for a new Microsoft accountcomplete_authentication
- Complete the authentication process after entering device code
Manual Setup
1. Azure App Registration
- Go to Azure Portal → Microsoft Entra ID → App registrations
- New registration → Name:
microsoft-mcp
- Supported account types: Personal + Work/School
- Authentication → Allow public client flows: Yes
- API permissions → Add these delegated permissions:
- Mail.ReadWrite
- Calendars.ReadWrite
- Files.ReadWrite
- Contacts.Read
- People.Read
- User.Read
- Copy Application ID
2. Installation
git clone https://github.com/elyxlz/microsoft-mcp.git
cd microsoft-mcp
uv sync
3. Authentication
# Set your Azure app ID
export MICROSOFT_MCP_CLIENT_ID="your-app-id-here"
# Run authentication script
uv run authenticate.py
# Follow the prompts to authenticate your Microsoft accounts
4. Claude Desktop Configuration
Add to your Claude Desktop configuration:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"microsoft": {
"command": "uvx",
"args": ["--from", "git+https://github.com/elyxlz/microsoft-mcp.git", "microsoft-mcp"],
"env": {
"MICROSOFT_MCP_CLIENT_ID": "your-app-id-here"
}
}
}
}
Or for local development:
{
"mcpServers": {
"microsoft": {
"command": "uv",
"args": ["--directory", "/path/to/microsoft-mcp", "run", "microsoft-mcp"],
"env": {
"MICROSOFT_MCP_CLIENT_ID": "your-app-id-here"
}
}
}
}
Multi-Account Support
All tools require an account_id
parameter as the first argument:
# List accounts to get IDs
accounts = list_accounts()
account_id = accounts[0]["account_id"]
# Use account for operations
send_email(account_id, "user@example.com", "Subject", "Body")
list_emails(account_id, limit=10, include_body=True)
create_event(account_id, "Meeting", "2024-01-15T10:00:00Z", "2024-01-15T11:00:00Z")
Development
# Run tests
uv run pytest tests/ -v
# Type checking
uv run pyright
# Format code
uvx ruff format .
# Lint
uvx ruff check --fix --unsafe-fixes .
Example: AI Assistant Scenarios
Smart Email Management
# Get account ID first
accounts = list_accounts()
account_id = accounts[0]["account_id"]
# List latest emails with full content
emails = list_emails(account_id, limit=10, include_body=True)
# Reply maintaining thread
reply_to_email(account_id, email_id, "Thanks for your message. I'll review and get back to you.")
# Forward with attachments
email = get_email(email_id, account_id)
attachments = [get_attachment(email_id, att["id"], account_id) for att in email["attachments"]]
send_email(account_id, "boss@company.com", f"FW: {email['subject']}", email["body"]["content"], attachments=attachments)
Intelligent Scheduling
# Get account ID first
accounts = list_accounts()
account_id = accounts[0]["account_id"]
# Check availability before scheduling
availability = check_availability(account_id, "2024-01-15T10:00:00Z", "2024-01-15T18:00:00Z", ["colleague@company.com"])
# Create meeting with details
create_event(
account_id,
"Project Review",
"2024-01-15T14:00:00Z",
"2024-01-15T15:00:00Z",
location="Conference Room A",
body="Quarterly review of project progress",
attendees=["colleague@company.com", "manager@company.com"]
)
Security Notes
- Tokens are cached locally in
~/.microsoft_mcp_token_cache.json
- Use app-specific passwords if you have 2FA enabled
- Only request permissions your app actually needs
- Consider using a dedicated app registration for production
Troubleshooting
- Authentication fails: Check your CLIENT_ID is correct
- "Need admin approval": Use
MICROSOFT_MCP_TENANT_ID=consumers
for personal accounts - Missing permissions: Ensure all required API permissions are granted in Azure
- Token errors: Delete
~/.microsoft_mcp_token_cache.json
and re-authenticate
License
MIT
Related Servers
Remote MCP Server on Cloudflare
A remote MCP server designed to run on Cloudflare Workers, featuring OAuth login support.
Contentstack
Interact with Contentstack's Content Management API to manage your CMS content.
Kubernetes MCP Server
Provides safe, read-only access to Kubernetes cluster resources for debugging and inspection.
Tencent Cloud Live
An MCP server for interacting with the Tencent Cloud Live Streaming service API.
Multi-Cloud VM MCP Server
Manage virtual machines across multiple cloud providers, including AWS EC2, Azure Virtual Machines, and GCP Compute Engine.
Alpha Vantage
Access real-time and historical stock market data from the Alpha Vantage API.
Cloudflare MCP Server
Deploy a remote, authentication-free MCP server on Cloudflare Workers.
Cloudinary
Interact with Cloudinary's media management platform using natural language.
Security Infrastructure MCP Servers
Integrate with security platforms like Splunk SIEM, CrowdStrike EDR, and Microsoft MISP.
China Weather
Query weather information and meteorological warnings for Chinese cities using the QWeather API.