@web4w3/outlook-mcp-server
v1.0.4
Published
MCP server for Outlook.com email read/delete/mark operations via Microsoft Graph API
Downloads
697
Maintainers
Readme
Outlook MCP Server
A Model Context Protocol (MCP) server for accessing and managing Outlook.com email accounts through Claude and other MCP clients.
Features
- List emails: Retrieve recent messages from your Outlook inbox
- Read emails: Get full email details including body, attachments info
- Delete emails: Remove emails permanently
- Mark emails: Set emails as read/unread
- Move emails: Transfer emails to other folders
- Attachments: List and download email attachments
Setup
Prerequisites
- Node.js 18+ and npm
- An Outlook.com or Microsoft 365 account
- Microsoft Azure Application Registration
1. Register Azure Application
- Go to Azure Portal
- Navigate to Azure Active Directory > App registrations
- Click New registration
- Fill in the details:
- Name:
Outlook MCP Server - Supported account types:
Accounts in any organizational directory and personal Microsoft accounts
- Name:
- Click Register
2. Create Client Secret
- In your app registration, go to Certificates & secrets
- Click New client secret
- Add a description and select expiration
- Copy the Value (you'll need this as
OUTLOOK_CLIENT_SECRET)
3. Set API Permissions
- In your app registration, go to API permissions
- Click Add a permission > Microsoft Graph
- Select Delegated permissions
- Search and add these permissions:
Mail.ReadMail.ReadWriteMail.Send
- Click Grant admin consent (if you're in an organization)
4. Get Your Credentials
From your app registration overview page, copy:
- Application (client) ID →
OUTLOOK_CLIENT_ID - Directory (tenant) ID →
OUTLOOK_TENANT_ID(or use "common")
5. Get Refresh Token (for user login)
You'll need to perform a one-time authorization flow. Use this script:
# Generate auth URL
node scripts/get-auth-token.js
# Or, with no cloning, using the published package:
npx --package=@web4w3/outlook-mcp-server outlook-mcp-server-get-auth-token
# Follow the link to login and copy the authorization code
# Then exchange it for a refresh tokenOr use the Microsoft Graph explorer at https://developer.microsoft.com/en-us/graph/graph-explorer
6. Install
npx -y @web4w3/outlook-mcp-serverNo cloning or build step needed. The package is pre-compiled and available on npm as @web4w3/outlook-mcp-server.
7. Configure in Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"outlook": {
"command": "npx",
"args": ["-y", "@web4w3/outlook-mcp-server"],
"env": {
"OUTLOOK_CLIENT_ID": "your_client_id",
"OUTLOOK_CLIENT_SECRET": "your_client_secret",
"OUTLOOK_TENANT_ID": "common",
"OUTLOOK_REFRESH_TOKEN": "your_refresh_token"
}
}
}
}Available Tools
outlook_list_folders
List all mail folders in your Outlook mailbox.
Parameters: None
Returns: Array of folder objects with id and displayName
outlook_list_emails
List recent emails from your mailbox.
Parameters:
limit(number, 1-100, default: 20): Number of emails to retrievefolder(string, optional): Folder name (default: "inbox")
Returns: Array of email summaries with subject, sender, date, read status, and preview
outlook_get_email
Get full details of a specific email including body, recipients, and attachments info.
Parameters:
id(string, required): Email message IDmarkAsRead(boolean, default: false): Mark email as read when retrieving
Returns: Full email object with complete details
outlook_delete_email
Permanently delete an email.
Parameters:
id(string, required): Email message ID
Returns: Confirmation message
outlook_mark_email
Mark an email as read or unread.
Parameters:
id(string, required): Email message IDisRead(boolean, required): True to mark as read, false for unread
Returns: Confirmation message
outlook_move_email
Move an email to a different folder.
Parameters:
id(string, required): Email message IDdestinationFolder(string, required): Target folder ID or name
Returns: Confirmation message
Note: If destinationFolder is a folder name (not an ID), the server will:
- Look up the folder by name
- If not found, create a new folder with that name
- Move the email to the resolved folder ID
outlook_get_attachments
Get list of attachments for an email.
Parameters:
messageId(string, required): Email message ID
Returns: Array of attachment objects with name, size, and MIME type
outlook_get_attachment_content
Download attachment content (base64 encoded).
Parameters:
messageId(string, required): Email message IDattachmentId(string, required): Attachment ID
Returns: Attachment object with base64 encoded content
Integration with Email Analytics Agent
This server is designed to work with the Email Analytics Agent, which provides:
- Intelligent email grouping by sender domain
- Interactive folder assignment
- Rule learning for automatic email organization
Development
Run in development mode with auto-reload:
npm run devBuild TypeScript:
npm run buildStart the compiled server:
npm startCommon Issues
"Missing required environment variable"
Check that all required .env variables are set correctly.
"Unauthorized" or "Invalid credentials"
- Verify your Client ID, Client Secret, and Refresh Token are correct
- Check that your Azure app registration has the required permissions
- Ensure the refresh token hasn't expired (refresh tokens expire if unused for 90 days)
"Permission denied"
Make sure the API permissions in your Azure app registration include:
- Mail.Read
- Mail.ReadWrite
License
MIT
