NestDaddy

Office Outlook Mcp

io.github.chrischall/office-outlook-mcp · v0.13.0

Outlook / Microsoft 365 for Claude — triage mail, reply, answer invites and book meetings, confirmed

Connect Runs on your machine

Terminal
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]
claude_desktop_config.json
{
  "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>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "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>"
      }
    }
  }
}
.vscode/mcp.json
{
  "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

NameDescription
OUTLOOK_ACCESS_TOKEN
Optional, secret
Pre-obtained Outlook bearer token. Overrides the browser bridge. Power users / CI only; tokens last about 25 hours.
OUTLOOK_DISABLE_FETCHPROXY
Optional
Set to '1' to disable browser capture, requiring OUTLOOK_ACCESS_TOKEN.
OUTLOOK_API_BASE
Optional
Override the Outlook REST base URL. Defaults to https://outlook.office.com/api/v2.0.
OUTLOOK_WS_PORT
Optional
fetchproxy concentrator port used for token capture. Defaults to 37149, the fleet-wide shared port.
OUTLOOK_WEB_HOST
Optional
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_TIMEOUT
Optional
Seconds to wait for the Outlook tab to make a request we can read a token from. Defaults to 30.
OUTLOOK_TOKEN_CACHE
Optional
Set to 'false' to stop caching the captured token between runs. Defaults to true.
OUTLOOK_TOKEN_FILE
Optional
Path to the cached token file. Defaults to ~/.office-outlook-mcp/token.json.
OUTLOOK_OUTPUT_DIR
Optional
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_HOST
Optional
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_DIR
Optional
Absolute path where the fetchproxy long-term identity keypair is stored (default ~/.fetchproxy/identity/).
MCP_CONFIRM_MODE
Optional
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_ELICITATION
Optional
"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_SECONDS
Optional
How long a confirmToken stays valid, in seconds. Defaults to 600.
MCP_CONFIRM_SECRET
Optional, secret
Signing key for confirmTokens. Random per process by default; set it only if tokens must survive a server restart.
OUTLOOK_COPILOT_MSAL_CACHE
Optional
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 published12 Nov 2026
Last updated12 Nov 2026
Registry nameio.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.