NestDaddy

Microsoft Teams Mcp

io.github.chrischall/microsoft-teams-mcp · v0.13.1

Microsoft Teams for Claude — read any chat or channel and its unread messages; send and react

Connect Runs on your machine

Terminal
claude mcp add microsoft-teams-mcp -e TEAMS_WS_PORT=<TEAMS_WS_PORT> -e FETCHPROXY_WS_HOST=<FETCHPROXY_WS_HOST> -e FETCHPROXY_IDENTITY_DIR=<FETCHPROXY_IDENTITY_DIR> -e TEAMS_ACCESS_TOKEN=<TEAMS_ACCESS_TOKEN> -e TEAMS_DISABLE_FETCHPROXY=<TEAMS_DISABLE_FETCHPROXY> -e TEAMS_CHATSVC_REGION=<TEAMS_CHATSVC_REGION> -e TEAMS_CHATSVC_BASE=<TEAMS_CHATSVC_BASE> -e TEAMS_CAPTURE_TIMEOUT=<TEAMS_CAPTURE_TIMEOUT> -e TEAMS_TOKEN_CACHE=<TEAMS_TOKEN_CACHE> -e TEAMS_TOKEN_FILE=<TEAMS_TOKEN_FILE> -e TEAMS_SUBSTRATE_TOKEN_FILE=<TEAMS_SUBSTRATE_TOKEN_FILE> -e TEAMS_RECAP_TOKEN_FILE=<TEAMS_RECAP_TOKEN_FILE> -e TEAMS_MCPS_REGION=<TEAMS_MCPS_REGION> -e TEAMS_SHAREPOINT_TOKEN_FILE=<TEAMS_SHAREPOINT_TOKEN_FILE> -e TEAMS_TIME_ZONE=<TEAMS_TIME_ZONE> -e TEAMS_OUTPUT_DIR=<TEAMS_OUTPUT_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> -- npx -y @chrischall/[email protected]
claude_desktop_config.json
{
  "mcpServers": {
    "microsoft-teams-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/[email protected]"
      ],
      "env": {
        "TEAMS_WS_PORT": "<TEAMS_WS_PORT>",
        "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
        "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>",
        "TEAMS_ACCESS_TOKEN": "<TEAMS_ACCESS_TOKEN>",
        "TEAMS_DISABLE_FETCHPROXY": "<TEAMS_DISABLE_FETCHPROXY>",
        "TEAMS_CHATSVC_REGION": "<TEAMS_CHATSVC_REGION>",
        "TEAMS_CHATSVC_BASE": "<TEAMS_CHATSVC_BASE>",
        "TEAMS_CAPTURE_TIMEOUT": "<TEAMS_CAPTURE_TIMEOUT>",
        "TEAMS_TOKEN_CACHE": "<TEAMS_TOKEN_CACHE>",
        "TEAMS_TOKEN_FILE": "<TEAMS_TOKEN_FILE>",
        "TEAMS_SUBSTRATE_TOKEN_FILE": "<TEAMS_SUBSTRATE_TOKEN_FILE>",
        "TEAMS_RECAP_TOKEN_FILE": "<TEAMS_RECAP_TOKEN_FILE>",
        "TEAMS_MCPS_REGION": "<TEAMS_MCPS_REGION>",
        "TEAMS_SHAREPOINT_TOKEN_FILE": "<TEAMS_SHAREPOINT_TOKEN_FILE>",
        "TEAMS_TIME_ZONE": "<TEAMS_TIME_ZONE>",
        "TEAMS_OUTPUT_DIR": "<TEAMS_OUTPUT_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>"
      }
    }
  }
}
~/.cursor/mcp.json
{
  "mcpServers": {
    "microsoft-teams-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/[email protected]"
      ],
      "env": {
        "TEAMS_WS_PORT": "<TEAMS_WS_PORT>",
        "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
        "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>",
        "TEAMS_ACCESS_TOKEN": "<TEAMS_ACCESS_TOKEN>",
        "TEAMS_DISABLE_FETCHPROXY": "<TEAMS_DISABLE_FETCHPROXY>",
        "TEAMS_CHATSVC_REGION": "<TEAMS_CHATSVC_REGION>",
        "TEAMS_CHATSVC_BASE": "<TEAMS_CHATSVC_BASE>",
        "TEAMS_CAPTURE_TIMEOUT": "<TEAMS_CAPTURE_TIMEOUT>",
        "TEAMS_TOKEN_CACHE": "<TEAMS_TOKEN_CACHE>",
        "TEAMS_TOKEN_FILE": "<TEAMS_TOKEN_FILE>",
        "TEAMS_SUBSTRATE_TOKEN_FILE": "<TEAMS_SUBSTRATE_TOKEN_FILE>",
        "TEAMS_RECAP_TOKEN_FILE": "<TEAMS_RECAP_TOKEN_FILE>",
        "TEAMS_MCPS_REGION": "<TEAMS_MCPS_REGION>",
        "TEAMS_SHAREPOINT_TOKEN_FILE": "<TEAMS_SHAREPOINT_TOKEN_FILE>",
        "TEAMS_TIME_ZONE": "<TEAMS_TIME_ZONE>",
        "TEAMS_OUTPUT_DIR": "<TEAMS_OUTPUT_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>"
      }
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "microsoft-teams-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@chrischall/[email protected]"
      ],
      "env": {
        "TEAMS_WS_PORT": "<TEAMS_WS_PORT>",
        "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
        "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>",
        "TEAMS_ACCESS_TOKEN": "<TEAMS_ACCESS_TOKEN>",
        "TEAMS_DISABLE_FETCHPROXY": "<TEAMS_DISABLE_FETCHPROXY>",
        "TEAMS_CHATSVC_REGION": "<TEAMS_CHATSVC_REGION>",
        "TEAMS_CHATSVC_BASE": "<TEAMS_CHATSVC_BASE>",
        "TEAMS_CAPTURE_TIMEOUT": "<TEAMS_CAPTURE_TIMEOUT>",
        "TEAMS_TOKEN_CACHE": "<TEAMS_TOKEN_CACHE>",
        "TEAMS_TOKEN_FILE": "<TEAMS_TOKEN_FILE>",
        "TEAMS_SUBSTRATE_TOKEN_FILE": "<TEAMS_SUBSTRATE_TOKEN_FILE>",
        "TEAMS_RECAP_TOKEN_FILE": "<TEAMS_RECAP_TOKEN_FILE>",
        "TEAMS_MCPS_REGION": "<TEAMS_MCPS_REGION>",
        "TEAMS_SHAREPOINT_TOKEN_FILE": "<TEAMS_SHAREPOINT_TOKEN_FILE>",
        "TEAMS_TIME_ZONE": "<TEAMS_TIME_ZONE>",
        "TEAMS_OUTPUT_DIR": "<TEAMS_OUTPUT_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>"
      }
    }
  }
}

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
TEAMS_WS_PORT
Optional
fetchproxy concentrator port used for the browser bridge. Defaults to 37149, the fleet-wide shared port.
FETCHPROXY_WS_HOST
Optional
Bind interface for the bridge (default 127.0.0.1; a literal IP only, anything else is ignored). Keep on loopback — it exists for ONE topology: a hosted child in its own network namespace.
FETCHPROXY_IDENTITY_DIR
Optional
Where to store the long-term fetchproxy identity keypair (default ~/.fetchproxy/identity/; an absolute path only, anything else is ignored). Exists for a host that runs a separate child per caller, so they can share one identity.
TEAMS_ACCESS_TOKEN
Optional, secret
A pre-obtained Teams chat-service bearer token (the JWT itself). Leave blank to capture one from your signed-in Teams browser tab via the ContextMint Bridge extension.
TEAMS_DISABLE_FETCHPROXY
Optional
Set to true to never capture a token from the browser; then TEAMS_ACCESS_TOKEN is required. Leave blank.
TEAMS_CHATSVC_REGION
Optional
The Teams chat-service region in the API path. Defaults to amer. Leave blank unless your tenant lives elsewhere.
TEAMS_CHATSVC_BASE
Optional
Full override for the chat-service API base (default https://teams.cloud.microsoft/api/chatsvc/<region>/v1). Leave blank.
TEAMS_CAPTURE_TIMEOUT
Optional
Seconds to wait for the Teams tab to issue a chat-service request when capturing a token. Defaults to 30.
TEAMS_TOKEN_CACHE
Optional
Set to false to keep the captured token in memory only. Defaults to on: it is cached so a restart within its ~23h lifetime needs no browser.
TEAMS_TOKEN_FILE
Optional
Where the captured token is cached. Defaults to ~/.microsoft-teams-mcp/token.json.
TEAMS_SUBSTRATE_TOKEN_FILE
Optional
Where the captured Substrate search token is cached. Defaults to ~/.microsoft-teams-mcp/substrate-token.json.
TEAMS_RECAP_TOKEN_FILE
Optional
Where the captured meeting-recap token is cached. Defaults to ~/.microsoft-teams-mcp/recap-token.json.
TEAMS_MCPS_REGION
Optional
The region in the Teams meeting-recap API path (teams.cloud.microsoft/api/mcps/<region>). Defaults to us. Leave blank unless your tenant lives elsewhere.
TEAMS_SHAREPOINT_TOKEN_FILE
Optional
Where the captured SharePoint tokens are cached. Defaults to ~/.microsoft-teams-mcp/sharepoint-tokens.json.
TEAMS_TIME_ZONE
Optional
Default IANA time zone (e.g. America/New_York) for time_local on read results. Unset means UTC only.
TEAMS_OUTPUT_DIR
Optional
Folder teams_export_messages writes exports into. Unset means ~/Downloads/microsoft-teams-mcp.
MCP_CONFIRM_MODE
Optional
What the writes (teams_send_message, teams_edit_message, teams_delete_message, teams_react, teams_mark_read, teams_rename_chat, teams_add_chat_members, teams_remove_chat_members, teams_create_group_chat and the read tools' mark_read) do on a client that cannot show a confirmation prompt (claude.ai,…
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.

Details

Package@chrischall/[email protected] (NPM, stdio)
First published12 Nov 2026
Last updated12 Nov 2026
Registry nameio.github.chrischall/microsoft-teams-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.