Microsoft Teams

io.github.SurgeEnterpriseAIPublished by GitHub account SurgeEnterpriseAIv1.0.0Updated Oct 24, 2026

Connect Claude to Microsoft Teams — read/send messages, list channels, search chats.

The publisher's own server: Microsoft Learn MCP

Overview

AI-generated overview

Connects Claude to Microsoft Teams so an assistant can list teams and channels, read and send messages, search chats, and view your profile.

What you can do
List your teams and the channels within a team, and read recent channel messages and thread replies, plus reply in a thread or post a new channel message. List your direct and group chats, read chat messages, and send direct or group chat messages. Search messages across all Teams and retrieve your Microsoft 365 profile.
When to use it
Useful when you want Claude to work inside Microsoft Teams: catching up on channel or chat conversations, searching for past messages, or drafting and sending replies without switching apps.
Requirements
Runs as a local Node.js process (npm package) over stdio, or as a hosted HTTP/SSE server. Sign-in uses your own Microsoft 365 work account via OAuth. Self-hosting needs an Azure AD app registration with a client secret and delegated Microsoft Graph permissions, set through TEAMS_CLIENT_ID and TEAMS_CLIENT_SECRET.
Before you install
The server can send messages and replies to channels and chats on your behalf, so review anything it drafts before sending. It holds OAuth tokens for your Microsoft account, cached on disk by default, and a self-hosted deployment requires the TEAMS_CLIENT_SECRET. The README states the hosted version passes messages through without storing them, but your Teams content is sent to Microsoft Graph and, if hosted, to the operator's server.

Installation

In SourceWeft

  1. Open Microsoft Teams in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Teams MCP Server

Let Claude read and send your Microsoft Teams messages. An open-source MCP server that connects Claude Code, Claude Desktop and Claude Cowork to Microsoft Teams: list your teams and channels, read channel and chat messages, search across Teams, and post or reply — all by asking Claude in plain English.

  • What it does: gives Claude 11 Teams tools through Microsoft Graph, using your own Microsoft 365 sign-in. Claude sees only what you can already see in Teams. Messages pass through; nothing is stored except your sign-in token on your machine.
  • Who it's for: people who live in Teams and use Claude — developers, team leads, support and ops people who want "summarise #standup since Monday" or "reply to Priya's question in #release" without switching windows. Also teams that want to host one shared Teams connector for everyone in their company.
  • Cost: free and MIT-licensed. You need a Microsoft 365 work or school account and permission to register an app in Azure (or an admin who does it for you once).

[Teams MCP Server — 76-second walkthrough]

▶ Watch the 76-second walkthrough: Teams MCP Server — how it works (captions on; transcript)

Install in 3 steps (Claude Code, on your own computer)

  1. Register an app in Azure (5 minutes, once). Azure Portal → App registrations → New registration → any name, Accounts in any organizational directory, redirect URI type Web = http://localhost:3333/callback. Then add a client secret and the delegated Microsoft Graph permissions listed in Azure AD App Registration below. Copy the client ID and secret.
  2. Add the server to Claude:
    bash
    claude mcp add teams -e TEAMS_CLIENT_ID=<your-client-id> -e TEAMS_CLIENT_SECRET=<your-secret> -- npx -y microsoft-teams-mcp-server
  3. Sign in once. Start Claude and ask "List my Teams." A browser window opens; sign in with your Microsoft work account. Done — the token is cached, so you won't be asked again.

Using Claude Desktop instead? Put the same command and env in claude_desktop_config.json (see Claude Desktop). Want one server for your whole company? See Self-host.

Using it (plain English)

You don't call the tools yourself — you just ask Claude, and Claude picks the right one. Things you can say:

You sayWhat happens
"Which Teams am I in?"Lists your teams.
"What channels does the Platform team have?"Lists that team's channels.
"Summarise what happened in #standup today."Reads recent channel messages and summarises them.
"Show me the replies to Ravi's deploy message."Reads a thread's replies.
"Find every message that mentions the invoice bug."Searches across all your Teams.
"What did Anita say in our chat yesterday?"Lists your chats and reads the one with Anita.
"Post 'Release 4.2 is live' in #announcements."Sends a channel message.
"Reply in that thread: 'Fixed in PR 812.'"Replies in a channel thread.
"Send Anita a chat: 'Running 10 minutes late.'"Sends a chat message.

Good to know:

  • Your access, nothing more. Claude uses your sign-in, so it can only see teams, channels and chats you're in. Each person who connects signs in with their own account.
  • You approve what gets sent. Claude asks permission before each tool call unless you've allowed that tool. A good setup: allow the read and search tools, and keep the three send/reply tools on "ask" so you see every message before it posts.
  • Sign-in lasts. The token is saved in .data/tokens (local) and refreshed silently. Delete that folder to sign out.
  • Search needs a work account. Microsoft search across Teams doesn't work for personal Microsoft accounts.
  • If something fails, ask Claude "what was the error?" — the server returns Microsoft's own message (for example, a missing permission or admin consent).

How It Works

┌─────────────┐     Click "Connect"     ┌──────────────────────┐│ Claude User  │ ──────────────────────► │ Teams MCP Server     ││ (Cowork/     │                         │ (hosted by you or    ││  Desktop/    │     SSE/MCP Protocol    │  your company)       ││  Code)       │ ◄─────────────────────► │  ┌────────────────┐  │└─────────────┘                          │  │ OAuth (common)  │  │                                         │  │ Any M365 user   │  │       User signs in with their          │  │ can sign in     │  │       own Microsoft account             │  └───────┬────────┘  │       ─────────────────────►            │          │           │                                         │  ┌───────▼────────┐  │                                         │  │ Microsoft       │  │                                         │  │ Graph API       │  │                                         │  └────────────────┘  │                                         └──────────────────────┘

The user connects their own Microsoft 365 account. They see their own teams, their own channels, their own messages. Each user's tokens are isolated. The server is the bridge — it never stores messages, just passes them through.

Features

  • One-click connect — visit /connect, sign in with Microsoft, done
  • Multi-tenant — any Microsoft 365 organization, any user
  • 11 tools — teams, channels, messages, chats, search, profile
  • Dual transport — STDIO for Claude Code, HTTP/SSE for Cowork & remote
  • Multi-user — each session gets isolated OAuth tokens
  • Auto-detect — picks the right transport based on launch method
  • Token caching — silent refresh, no re-login every session
  • Retry logic — automatic retries on throttled Graph API calls
  • TypeScript — fully typed, clean architecture, MIT licensed

For Users: Connect in 1 Click

If someone is already hosting this server for your company:

  1. Claude asks you to connect Microsoft Teams
  2. You click the auth link
  3. Sign in with your Microsoft work account
  4. Done — Claude can now read your Teams

No API keys, no Azure portal, no setup.

For Developers: Self-Host

1. Clone & Install

bash
git clone https://github.com/SurgeEnterpriseAI/teams-mcp-server.gitcd teams-mcp-servernpm installnpm run build

2. Azure AD App Registration

  1. Go to Azure Portal → App registrations → New registration
  2. Name: Teams MCP Server
  3. Supported account types: "Accounts in any organizational directory (Any Azure AD directory - Multitenant)"
  4. Redirect URI: Web → https://your-server.com/auth/callback (hosted) and/or http://localhost:3333/callback (local STDIO sign-in)
  5. Click Register

Configure:

  • Certificates & secrets → New client secret → copy the Value
  • API Permissions → Add Delegated (Microsoft Graph):
    • ChannelMessage.Read.All, ChannelMessage.Send
    • Chat.Read, Chat.ReadWrite, ChatMessage.Send
    • Team.ReadBasic.All, Channel.ReadBasic.All
    • User.Read
  • Click Grant admin consent (for your own tenant; other tenants consent on first login)

3. Configure & Deploy

bash
cp .env.example .env# Set TEAMS_CLIENT_ID, TEAMS_CLIENT_SECRET# Set BASE_URL and REDIRECT_URI to your production URL# TEAMS_AUTHORITY=common (multi-tenant, default)

Deploy to Railway, Render, Azure App Service, or any Node.js host:

bash
# Railwayrailway login && railway init && railway up
# Or Azureaz webapp up --name teams-mcp-server --runtime "NODE:20-lts"
# Or just run directlyTRANSPORT_MODE=http node dist/index.js

4. Submit to MCP Registry

Once deployed and tested, submit your server URL to Anthropic's MCP connector registry. Users will then see "Microsoft Teams" as a connect option in Claude Cowork — just like Slack and Gmail.

For Claude Code Users: Local STDIO Mode

Quickest: claude mcp add as in Install in 3 steps. Or add to your .mcp.json from a clone:

json
{  "mcpServers": {    "teams": {      "command": "node",      "args": ["/path/to/teams-mcp-server/dist/index.js"],      "cwd": "/path/to/teams-mcp-server"    }  }}

First run will open your browser for Microsoft login. After that, tokens are cached.

Claude Desktop

In claude_desktop_config.json:

json
{  "mcpServers": {    "teams": {      "command": "npx",      "args": ["-y", "microsoft-teams-mcp-server"],      "env": {        "TEAMS_CLIENT_ID": "<your-client-id>",        "TEAMS_CLIENT_SECRET": "<your-secret>",        "TRANSPORT_MODE": "stdio"      }    }  }}

Available Tools

ToolWhat it does
teams_list_teamsList all your Teams
teams_list_channelsList channels in a team
teams_read_channel_messagesRead recent channel messages
teams_send_channel_messageSend a message to a channel
teams_reply_to_messageReply in a channel thread
teams_read_message_repliesRead thread replies
teams_list_chatsList your DMs and group chats
teams_read_chat_messagesRead messages from a chat
teams_send_chat_messageSend a direct/group chat message
teams_search_messagesSearch messages across all Teams
teams_get_profileGet your Microsoft 365 profile

Architecture

src/├── index.ts               Main entry (auto-detects transport)├── config.ts              Central configuration├── logger.ts              Structured logging├── types.ts               TypeScript interfaces├── sessions.ts            Multi-user session manager├── auth/│   ├── oauth.ts           MSAL OAuth (multi-tenant, per-user)│   └── token-store.ts     Persistent token cache├── graph/│   ├── client.ts          Graph HTTP client with retries│   ├── teams.ts           Teams & channels API│   ├── messages.ts        Channel messages API│   ├── chats.ts           DM & group chat API│   └── search.ts          Search & profile API├── mcp/│   ├── server.ts          MCP server factory│   └── tools/             11 tool definitions├── transport/│   ├── stdio.ts           STDIO (Claude Code)│   └── http.ts            Express + SSE (Cowork / remote)

Environment Variables

VariableRequiredDefaultDescription
TEAMS_CLIENT_IDYes—Azure AD app client ID
TEAMS_CLIENT_SECRETYes—Azure AD client secret
TEAMS_AUTHORITYNocommoncommon for multi-tenant, or a specific tenant ID
TRANSPORT_MODENoautoauto, stdio, or http
PORTNo3000HTTP server port
BASE_URLNohttp://localhost:3000Public URL
REDIRECT_URINo{BASE_URL}/auth/callbackOAuth callback URL
TOKEN_STORE_PATHNo./.data/tokensToken cache directory
LOG_LEVELNoinfoLogging level

For AI assistants

A short, structured summary for LLMs and AI search lives in docs/llms.md.

License

MIT — LICENSE

Contributing

Issues and PRs welcome. Built by SurgeEnterpriseAI — Surge Software Solutions, Bengaluru.

Source: README.md at commit a6475b5

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

Other Microsoft integrations