Outlook / Microsoft 365 for Claude — triage mail, reply, answer invites and book meetings, confirmed
Connect Runs on your machine
claude mcp add office-outlook-mcp -e OUTLOOK_ACCESS_TOKEN=<OUTLOOK_ACCESS_TOKEN> -e OUTLOOK_DISABLE_FETCHPROXY=<OUTLOOK_DISABLE_FETCHPROXY> -e OUTLOOK_API_BASE=<OUTLOOK_API_BASE> -e OUTLOOK_WS_PORT=<OUTLOOK_WS_PORT> -e OUTLOOK_WEB_HOST=<OUTLOOK_WEB_HOST> -e OUTLOOK_CAPTURE_TIMEOUT=<OUTLOOK_CAPTURE_TIMEOUT> -e OUTLOOK_TOKEN_CACHE=<OUTLOOK_TOKEN_CACHE> -e OUTLOOK_TOKEN_FILE=<OUTLOOK_TOKEN_FILE> -e OUTLOOK_OUTPUT_DIR=<OUTLOOK_OUTPUT_DIR> -e FETCHPROXY_WS_HOST=<FETCHPROXY_WS_HOST> -e FETCHPROXY_IDENTITY_DIR=<FETCHPROXY_IDENTITY_DIR> -e MCP_CONFIRM_MODE=<MCP_CONFIRM_MODE> -e MCP_CONFIRM_ELICITATION=<MCP_CONFIRM_ELICITATION> -e MCP_CONFIRM_TTL_SECONDS=<MCP_CONFIRM_TTL_SECONDS> -e MCP_CONFIRM_SECRET=<MCP_CONFIRM_SECRET> -e OUTLOOK_COPILOT_MSAL_CACHE=<OUTLOOK_COPILOT_MSAL_CACHE> -- npx -y @chrischall/[email protected]
{
"mcpServers": {
"office-outlook-mcp": {
"command": "npx",
"args": [
"-y",
"@chrischall/[email protected]"
],
"env": {
"OUTLOOK_ACCESS_TOKEN": "<OUTLOOK_ACCESS_TOKEN>",
"OUTLOOK_DISABLE_FETCHPROXY": "<OUTLOOK_DISABLE_FETCHPROXY>",
"OUTLOOK_API_BASE": "<OUTLOOK_API_BASE>",
"OUTLOOK_WS_PORT": "<OUTLOOK_WS_PORT>",
"OUTLOOK_WEB_HOST": "<OUTLOOK_WEB_HOST>",
"OUTLOOK_CAPTURE_TIMEOUT": "<OUTLOOK_CAPTURE_TIMEOUT>",
"OUTLOOK_TOKEN_CACHE": "<OUTLOOK_TOKEN_CACHE>",
"OUTLOOK_TOKEN_FILE": "<OUTLOOK_TOKEN_FILE>",
"OUTLOOK_OUTPUT_DIR": "<OUTLOOK_OUTPUT_DIR>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>",
"MCP_CONFIRM_MODE": "<MCP_CONFIRM_MODE>",
"MCP_CONFIRM_ELICITATION": "<MCP_CONFIRM_ELICITATION>",
"MCP_CONFIRM_TTL_SECONDS": "<MCP_CONFIRM_TTL_SECONDS>",
"MCP_CONFIRM_SECRET": "<MCP_CONFIRM_SECRET>",
"OUTLOOK_COPILOT_MSAL_CACHE": "<OUTLOOK_COPILOT_MSAL_CACHE>"
}
}
}
}
{
"mcpServers": {
"office-outlook-mcp": {
"command": "npx",
"args": [
"-y",
"@chrischall/[email protected]"
],
"env": {
"OUTLOOK_ACCESS_TOKEN": "<OUTLOOK_ACCESS_TOKEN>",
"OUTLOOK_DISABLE_FETCHPROXY": "<OUTLOOK_DISABLE_FETCHPROXY>",
"OUTLOOK_API_BASE": "<OUTLOOK_API_BASE>",
"OUTLOOK_WS_PORT": "<OUTLOOK_WS_PORT>",
"OUTLOOK_WEB_HOST": "<OUTLOOK_WEB_HOST>",
"OUTLOOK_CAPTURE_TIMEOUT": "<OUTLOOK_CAPTURE_TIMEOUT>",
"OUTLOOK_TOKEN_CACHE": "<OUTLOOK_TOKEN_CACHE>",
"OUTLOOK_TOKEN_FILE": "<OUTLOOK_TOKEN_FILE>",
"OUTLOOK_OUTPUT_DIR": "<OUTLOOK_OUTPUT_DIR>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>",
"MCP_CONFIRM_MODE": "<MCP_CONFIRM_MODE>",
"MCP_CONFIRM_ELICITATION": "<MCP_CONFIRM_ELICITATION>",
"MCP_CONFIRM_TTL_SECONDS": "<MCP_CONFIRM_TTL_SECONDS>",
"MCP_CONFIRM_SECRET": "<MCP_CONFIRM_SECRET>",
"OUTLOOK_COPILOT_MSAL_CACHE": "<OUTLOOK_COPILOT_MSAL_CACHE>"
}
}
}
}
{
"servers": {
"office-outlook-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@chrischall/[email protected]"
],
"env": {
"OUTLOOK_ACCESS_TOKEN": "<OUTLOOK_ACCESS_TOKEN>",
"OUTLOOK_DISABLE_FETCHPROXY": "<OUTLOOK_DISABLE_FETCHPROXY>",
"OUTLOOK_API_BASE": "<OUTLOOK_API_BASE>",
"OUTLOOK_WS_PORT": "<OUTLOOK_WS_PORT>",
"OUTLOOK_WEB_HOST": "<OUTLOOK_WEB_HOST>",
"OUTLOOK_CAPTURE_TIMEOUT": "<OUTLOOK_CAPTURE_TIMEOUT>",
"OUTLOOK_TOKEN_CACHE": "<OUTLOOK_TOKEN_CACHE>",
"OUTLOOK_TOKEN_FILE": "<OUTLOOK_TOKEN_FILE>",
"OUTLOOK_OUTPUT_DIR": "<OUTLOOK_OUTPUT_DIR>",
"FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
"FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>",
"MCP_CONFIRM_MODE": "<MCP_CONFIRM_MODE>",
"MCP_CONFIRM_ELICITATION": "<MCP_CONFIRM_ELICITATION>",
"MCP_CONFIRM_TTL_SECONDS": "<MCP_CONFIRM_TTL_SECONDS>",
"MCP_CONFIRM_SECRET": "<MCP_CONFIRM_SECRET>",
"OUTLOOK_COPILOT_MSAL_CACHE": "<OUTLOOK_COPILOT_MSAL_CACHE>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
OUTLOOK_ACCESS_TOKENOptional, secret | Pre-obtained Outlook bearer token. Overrides the browser bridge. Power users / CI only; tokens last about 25 hours. |
OUTLOOK_DISABLE_FETCHPROXYOptional | Set to '1' to disable browser capture, requiring OUTLOOK_ACCESS_TOKEN. |
OUTLOOK_API_BASEOptional | Override the Outlook REST base URL. Defaults to https://outlook.office.com/api/v2.0. |
OUTLOOK_WS_PORTOptional | fetchproxy concentrator port used for token capture. Defaults to 37149, the fleet-wide shared port. |
OUTLOOK_WEB_HOSTOptional | Which Outlook Web host your signed-in tab is on: outlook.cloud.microsoft (default) or outlook.office.com for a tenant still on the legacy app. Only this one host is declared to the browser bridge. |
OUTLOOK_CAPTURE_TIMEOUTOptional | Seconds to wait for the Outlook tab to make a request we can read a token from. Defaults to 30. |
OUTLOOK_TOKEN_CACHEOptional | Set to 'false' to stop caching the captured token between runs. Defaults to true. |
OUTLOOK_TOKEN_FILEOptional | Path to the cached token file. Defaults to ~/.office-outlook-mcp/token.json. |
OUTLOOK_OUTPUT_DIROptional | Absolute directory where outlook_export_messages and outlook_export_events write their files. Defaults to ~/Downloads/office-outlook-mcp. When set, a per-call dest must be inside it. |
FETCHPROXY_WS_HOSTOptional | Bind interface for the fetchproxy concentrator, a literal IP only (default 127.0.0.1). Keep on loopback; it exists for hosted deployments that run each MCP in its own network namespace. |
FETCHPROXY_IDENTITY_DIROptional | Absolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/). |
MCP_CONFIRM_MODEOptional | What outlook_send_message, outlook_reply, outlook_respond_to_invite and the other write tools do on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop): "ask-user" (default: the first call returns a preview and a confirmToken, and the model must get your approval in chat bef… |
MCP_CONFIRM_ELICITATIONOptional | "off" never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE flow. Set it for a client that says it can show prompts but never does. Defaults to on. |
MCP_CONFIRM_TTL_SECONDSOptional | How long a confirmToken stays valid, in seconds. Defaults to 600. |
MCP_CONFIRM_SECRETOptional, secret | Signing key for confirmTokens. Random per process by default; set it only if tokens must survive a server restart. |
OUTLOOK_COPILOT_MSAL_CACHEOptional | Path to the MSAL token cache written by `opencode-m365 login`, read by outlook_ask_copilot. Defaults to ~/.config/opencode-copilot/msal-cache.json. |
Details
| Package | @chrischall/[email protected] (NPM, stdio) |
| First published | 12 Nov 2026 |
| Last updated | 12 Nov 2026 |
| Registry name | io.github.chrischall/office-outlook-mcp |
More communication servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
