LABSCO SUMMARY
Mail you can work, not just read.
Composing, replying and sorting put this past the read-only Graph connectors, and having calendar and file search behind the same sign-in is what makes a single request — find the thread, book the follow-up, locate the attachment — one conversation. The tenant admin requirement is the real gate: without it, the app registration cannot get the scopes.
What it is
An MCP server that gives Claude Desktop access to your Microsoft 365 mail, calendar and files using the Microsoft Graph API, authenticating through an Azure-registered application with device-code sign-in and a persisted token cache.
What you get
- Mail — compose, respond, sort, search, filter and analyse the inbox
- Calendar — find invites, list events, and compose, update and send events
- OneDrive — search files and read file metadata
- SharePoint — load drives, search files and read file metadata
Requirements
Built to run locally on macOS with Claude Desktop, and it needs an Azure-registered application: the Graph scopes involved, such as Mail.Read and Calendars.Read, are not user-consentable in most organisations, so you need admin access to an Azure tenant to register it. Create an auth_cache folder in the project root and a .env holding AZURE_CLIENT_ID, AZURE_TENANT_ID and AZURE_GRAPH_SCOPES; file services need further values. Set up with uv venv and uv sync, debug with mcp dev main.py before wiring it into Claude, then register the documented uv run command with an absolute path. On first run device-code sign-in writes auth_record.json into auth_cache. Package version 0.1.0. MIT.
Setup effort
Build from source — git clone https://github.com/Norcim133/OutlookMCPServer.git
USE CASES
01
Getting through an inbox
Filter and sort what arrived, then draft the replies that need one.
02
Setting up a meeting from a conversation
Find the invite or the thread, then compose and send the calendar event.
03
Finding a file someone mentioned
Search OneDrive and SharePoint by name and read the metadata before opening it.
BEFORE YOU INSTALL
What to know first
Requires
- AZURE_CLIENT_ID in your environment
- AZURE_TENANT_ID in your environment
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
Server setup
TERMINAL
git clone https://github.com/Norcim133/OutlookMCPServer.git
cd OutlookMCPServer
uv venv
uv sync
mkdir -p auth_cache
touch .env
echo "AZURE_CLIENT_ID=<YOUR_AZURE_CLIENT_ID>" > .env
echo "AZURE_TENANT_ID=<YOUR_AZURE_TENANT_ID>" >> .env
echo "AZURE_GRAPH_SCOPES=User.Read Mail.Read Mail.Send Mail.ReadWrite" >> .envMCP Clients
Claude Desktop
CLAUDE DESKTOP · JSON
{
"mcpServers": {
"outlook": {
"command": "uv",
"args": [
"run",
"--with",
"azure-identity,mcp[cli],msgraph-core,msgraph-sdk",
"mcp",
"run",
"<YOUR_PATH_TO_OUTLOOK_MCP_SERVER>"
]
}
}
}The configuration on this page does not set AZURE_CLIENT_ID and AZURE_TENANT_ID; the project's instructions put them in a .env file. Check which folder the server reads that file from before you rely on it.