loading…
Search for a command to run...
loading…
Microsoft Teams MCP Server for Claude — Read/send messages, list channels, search across Teams. Works with Claude Cowork, Desktop & Code.
Microsoft Teams MCP Server for Claude — Read/send messages, list channels, search across Teams. Works with Claude Cowork, Desktop & Code.
The first open-source Microsoft Teams connector for Claude. Any Microsoft 365 user can connect — just sign in with your work account. No setup, no credentials, no self-hosting required.
Read messages, list channels, search across Teams, send messages — all from Claude Code, Claude Desktop, or Claude Cowork.
Built by SurgeEnterpriseAI.
┌─────────────┐ Click "Connect" ┌──────────────────────┐
│ Claude User │ ──────────────────────► │ Teams MCP Server │
│ (Cowork/ │ │ (hosted by Surge) │
│ Desktop/ │ SSE/MCP Protocol │ │
│ 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.
/connect, sign in with Microsoft, doneIf someone is already hosting this server (e.g., on https://teams-mcp.surgeai.com):
No API keys, no Azure portal, no setup.
git clone https://github.com/SurgeEnterpriseAI/teams-mcp-server.git
cd teams-mcp-server
npm install
npm run build
Teams MCP Serverhttps://your-server.com/auth/callbackConfigure:
ChannelMessage.Read.All, ChannelMessage.SendChat.Read, Chat.ReadWrite, ChatMessage.SendTeam.ReadBasic.All, Channel.ReadBasic.AllUser.Readcp .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:
# Railway
railway login && railway init && railway up
# Or Azure
az webapp up --name teams-mcp-server --runtime "NODE:20-lts"
# Or just run directly
TRANSPORT_MODE=http node dist/index.js
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.
Add to your .mcp.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.
| Tool | What it does |
|---|---|
teams_list_teams |
List all your Teams |
teams_list_channels |
List channels in a team |
teams_read_channel_messages |
Read recent channel messages |
teams_send_channel_message |
Send a message to a channel |
teams_reply_to_message |
Reply in a channel thread |
teams_read_message_replies |
Read thread replies |
teams_list_chats |
List your DMs and group chats |
teams_read_chat_messages |
Read messages from a chat |
teams_send_chat_message |
Send a direct/group chat message |
teams_search_messages |
Search messages across all Teams |
teams_get_profile |
Get your Microsoft 365 profile |
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)
| Variable | Required | Default | Description |
|---|---|---|---|
TEAMS_CLIENT_ID |
Yes | — | Azure AD app client ID |
TEAMS_CLIENT_SECRET |
Yes | — | Azure AD client secret |
TEAMS_AUTHORITY |
No | common |
common for multi-tenant, or a specific tenant ID |
TRANSPORT_MODE |
No | auto |
auto, stdio, or http |
PORT |
No | 3000 |
HTTP server port |
BASE_URL |
No | http://localhost:3000 |
Public URL |
REDIRECT_URI |
No | {BASE_URL}/auth/callback |
OAuth callback URL |
TOKEN_STORE_PATH |
No | ./.data/tokens |
Token cache directory |
LOG_LEVEL |
No | info |
Logging level |
MIT — LICENSE
Issues and PRs welcome. Built by SurgeEnterpriseAI.
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"microsoft-teams-mcp-server": {
"command": "npx",
"args": [
"-y",
"microsoft-teams-mcp-server"
]
}
}
}