Microsoft Teams for Claude — read any chat or channel and its unread messages; send and react
Connect Runs on your machine
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]
{
"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>"
}
}
}
}
{
"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>"
}
}
}
}
{
"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
| Name | Description |
|---|---|
TEAMS_WS_PORTOptional | fetchproxy concentrator port used for the browser bridge. Defaults to 37149, the fleet-wide shared port. |
FETCHPROXY_WS_HOSTOptional | 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_DIROptional | 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_TOKENOptional, 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_FETCHPROXYOptional | Set to true to never capture a token from the browser; then TEAMS_ACCESS_TOKEN is required. Leave blank. |
TEAMS_CHATSVC_REGIONOptional | The Teams chat-service region in the API path. Defaults to amer. Leave blank unless your tenant lives elsewhere. |
TEAMS_CHATSVC_BASEOptional | Full override for the chat-service API base (default https://teams.cloud.microsoft/api/chatsvc/<region>/v1). Leave blank. |
TEAMS_CAPTURE_TIMEOUTOptional | Seconds to wait for the Teams tab to issue a chat-service request when capturing a token. Defaults to 30. |
TEAMS_TOKEN_CACHEOptional | 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_FILEOptional | Where the captured token is cached. Defaults to ~/.microsoft-teams-mcp/token.json. |
TEAMS_SUBSTRATE_TOKEN_FILEOptional | Where the captured Substrate search token is cached. Defaults to ~/.microsoft-teams-mcp/substrate-token.json. |
TEAMS_RECAP_TOKEN_FILEOptional | Where the captured meeting-recap token is cached. Defaults to ~/.microsoft-teams-mcp/recap-token.json. |
TEAMS_MCPS_REGIONOptional | 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_FILEOptional | Where the captured SharePoint tokens are cached. Defaults to ~/.microsoft-teams-mcp/sharepoint-tokens.json. |
TEAMS_TIME_ZONEOptional | Default IANA time zone (e.g. America/New_York) for time_local on read results. Unset means UTC only. |
TEAMS_OUTPUT_DIROptional | Folder teams_export_messages writes exports into. Unset means ~/Downloads/microsoft-teams-mcp. |
MCP_CONFIRM_MODEOptional | 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_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. |
Details
| Package | @chrischall/[email protected] (NPM, stdio) |
| First published | 12 Nov 2026 |
| Last updated | 12 Nov 2026 |
| Registry name | io.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.
