office-365-mcp-server
A Model Context Protocol (MCP) server for Microsoft 365 integration. Provides 24 consolidated tools for email, calendar, Teams, planner, and notifications through the Microsoft Graph API.
GitHub Stars
4
User Rating
Not Rated
Favorites
0
Views
6
Forks
3
Issues
0
Office MCP Server
This is a comprehensive implementation of the Office MCP (Model Context Protocol) server that connects Claude with Microsoft 365 services through the Microsoft Graph API.
🚀 Headless Operation! Run without browser authentication after initial setup. Automatic token refresh and Windows Task Scheduler support for invisible background operation. See TASK_SCHEDULER_SETUP.md for Windows setup guide.
Features
- Complete Microsoft 365 Integration: Email, Calendar, Teams, OneDrive/SharePoint, Contacts, and Planner
- Headless Operation: Run without browser after initial authentication
- Automatic Token Management: Persistent token storage with automatic refresh
- Email Attachment Handling: Download embedded attachments and map SharePoint URLs to local paths
- Advanced Email Search: Unified search with KQL support and automatic query optimization
- Teams Meeting Management: Access transcripts, recordings, and AI insights
- File Management: Full OneDrive and SharePoint file operations
- Contact Management: Full CRUD operations for Outlook contacts with advanced search
- Task Management: Complete Microsoft Planner integration
- Configurable Paths: Environment variables for all local sync paths
Quick Start
Prerequisites
- Node.js 16 or higher
- Microsoft 365 account (personal or work/school)
- Azure App Registration (see below)
Installation
- Clone the repository:
git clone https://github.com/yourusername/office-mcp.git
cd office-mcp
- Install dependencies:
npm install
- Copy the environment template:
cp .env.example .env
Configure your
.env
file with:- Azure App credentials (see Azure Setup below)
- Local file paths for SharePoint/OneDrive sync
- Optional settings
Run initial authentication:
npm run auth-server
# Visit http://localhost:3000/auth and sign in
- Configure Claude Desktop (see Claude Desktop Configuration below)
Core Capabilities
Email Operations
- Unified Search: Single
email_search
tool with automatic optimization - Attachment Handling: Download embedded attachments, map SharePoint URLs to local paths
- Advanced Features: Categories, rules, focused inbox, folder management
- Batch Operations: Move multiple emails efficiently
Calendar Management
- Full CRUD Operations: Create, read, update, delete events
- Teams Integration: Create meetings with Teams links
- Recurrence Support: Complex recurring event patterns
- UTC Time Handling: Proper timezone management
Teams Features
- Meeting Management: Create, update, cancel meetings
- Transcript Access: Retrieve meeting transcripts
- Recording Access: Access meeting recordings
- Channel Operations: Messages, members, tabs
- Chat Management: Create, send, manage chat messages
File Management
- SharePoint Integration: Local sync path mapping
- OneDrive Support: Full file operations
- Batch Operations: Upload/download multiple files
- Search: Content and metadata search
Contact Management
- Full CRUD Operations: Create, read, update, delete contacts
- Advanced Search: Search by name, email, company, or any contact field
- Complete Contact Fields: Support for emails, phones, addresses, birthdays, notes
- Folder Management: Organize contacts in folders
- Bulk Operations: Handle multiple contacts efficiently
Task Management (Planner)
- Plan Operations: Create and manage plans
- Task Assignment: User lookup and assignment
- Bucket Organization: Group tasks efficiently
- Bulk Operations: Update/delete multiple tasks
Azure App Registration & Configuration
To use this MCP server you need to first register and configure an app in Azure Portal. The following steps will take you through the process of registering a new app, configuring its permissions, and generating a client secret.
App Registration
- Open Azure Portal in your browser
- Sign in with a Microsoft Work or Personal account
- Search for or click on "App registrations"
- Click on "New registration"
- Enter a name for the app, for example "Office MCP Server"
- Select the "Accounts in any organizational directory and personal Microsoft accounts" option
- In the "Redirect URI" section, select "Web" from the dropdown and enter "http://localhost:3000/auth/callback" in the textbox
- Click on "Register"
- From the Overview section of the app settings page, copy the "Application (client) ID" and enter it as the OFFICE_CLIENT_ID in the .env file as well as in the claude-config-sample.json file
App Permissions
- From the app settings page in Azure Portal select the "API permissions" option under the Manage section
- Click on "Add a permission"
- Click on "Microsoft Graph"
- Select "Delegated permissions"
- Search for and select the checkbox next to each of these permissions:
- offline_access
- User.Read
- User.ReadWrite
- User.ReadBasic.All
- Mail.Read
- Mail.ReadWrite
- Mail.Send
- Calendars.Read
- Calendars.ReadWrite
- Contacts.ReadWrite
- Files.Read
- Files.ReadWrite
- Files.ReadWrite.All
- Team.ReadBasic.All
- Team.Create
- Chat.Read
- Chat.ReadWrite
- ChannelMessage.Read.All
- ChannelMessage.Send
- OnlineMeetingTranscript.Read.All
- OnlineMeetings.ReadWrite
- Tasks.Read
- Tasks.ReadWrite
- Group.Read.All
- Directory.Read.All
- Presence.Read
- Presence.ReadWrite
- Click on "Add permissions"
Client Secret
- From the app settings page in Azure Portal select the "Certificates & secrets" option under the Manage section
- Switch to the "Client secrets" tab
- Click on "New client secret"
- Enter a description, for example "Client Secret"
- Select the longest possible expiration time
- Click on "Add"
- Copy the secret value and enter it as the OFFICE_CLIENT_SECRET in the .env file as well as in the claude-config-sample.json file
Environment Configuration
Required Variables
# Azure App Registration
OFFICE_CLIENT_ID=your-azure-app-client-id
OFFICE_CLIENT_SECRET=your-azure-app-client-secret
OFFICE_TENANT_ID=common
# Authentication
OFFICE_REDIRECT_URI=http://localhost:3000/auth/callback
Optional Variables
# Local file paths (customize to your system)
SHAREPOINT_SYNC_PATH=/path/to/your/sharepoint/sync
ONEDRIVE_SYNC_PATH=/path/to/your/onedrive/sync
TEMP_ATTACHMENTS_PATH=/path/to/temp/attachments
SHAREPOINT_SYMLINK_PATH=/path/to/sharepoint/symlink
# Server settings
USE_TEST_MODE=false
TRANSPORT_TYPE=stdio # or 'http' for headless
HTTP_PORT=3333
HTTP_HOST=127.0.0.1
Claude Desktop Configuration
Locate your Claude Desktop configuration file:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Linux:
~/.config/Claude/claude_desktop_config.json
- Windows:
Add the MCP server configuration:
{
"mcpServers": {
"office-mcp": {
"command": "node",
"args": ["/path/to/office-mcp/index.js"],
"env": {
"OFFICE_CLIENT_ID": "your-client-id",
"OFFICE_CLIENT_SECRET": "your-client-secret",
"SHAREPOINT_SYNC_PATH": "/path/to/sharepoint",
"ONEDRIVE_SYNC_PATH": "/path/to/onedrive"
}
}
}
}
Restart Claude Desktop
In Claude, use the
authenticate
tool to connect to Microsoft 365
Testing
MCP Inspector
Test the server directly using the MCP Inspector:
npx @modelcontextprotocol/inspector node index.js
Test Mode
Enable test mode to use mock data without API calls:
USE_TEST_MODE=true node index.js
Authentication Flow
- Start the authentication server:
- Windows: Run
start-auth-server.bat
orrun-office-mcp.bat
- Unix/Linux/macOS: Run
./start-auth-server.sh
- Windows: Run
- The auth server runs on port 3000 and handles OAuth callbacks
- In Claude, use the
authenticate
tool to get an authentication URL - Complete the authentication in your browser
- Tokens are stored in
~/.office-mcp-tokens.json
Headless Operation
Automatic Token Refresh
After initial authentication, the server automatically refreshes tokens without user interaction.
HTTP Transport Mode
For headless environments, use HTTP transport:
TRANSPORT_TYPE=http HTTP_PORT=3333 node index.js
Windows Service (Optional)
For Windows background operation:
- Complete initial authentication
- Configure as Windows Task Scheduler task
- Runs invisibly at system startup
Troubleshooting
Common Issues
Authentication Errors
- Ensure Azure App has correct permissions
- Check token file exists:
~/.office-mcp-tokens.json
- Verify redirect URI matches Azure configuration
Email Search with Date Filters
- Date-filtered searches now route directly to $filter API for reliability
- Use wildcard
*
for all emails in a date range - Both
startDate
andendDate
support ISO format (2025-08-27) or relative (7d/1w/1m/1y)
Email Attachment Issues
- Configure local sync paths in
.env
- Ensure temp directory has write permissions
- Check SharePoint sync is active
- Configure local sync paths in
API Rate Limits
- Server includes automatic retry with exponential backoff
- Reduce request frequency if persistent
Permission Errors
- Verify all required Graph API permissions are granted
- Admin consent may be required for some permissions
Security Considerations
- Token Storage: Tokens are encrypted and stored locally
- Environment Variables: Never commit
.env
files - Client Secrets: Rotate regularly and use Azure Key Vault in production
- Local Paths: Use environment variables instead of hardcoding paths
- Audit Logging: All API calls are logged for security monitoring
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request
License
MIT License - See LICENSE file for details