Zum Inhalt springen
MCP ThesaurusMCP Thesaurus

Microsoft Teams

CommunityGood71/100Beanspruchen

npm microsoft-teams-mcp-serverstdioMITupdated 4mo ago

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.

QuellcodeWebsite2

Was kannst du mit Microsoft Teams machen?

Teams MCP Server

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.

How It Works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     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.

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 (e.g., on https://teams-mcp.surgeai.com):

  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

git clone https://github.com/SurgeEnterpriseAI/teams-mcp-server.git
cd teams-mcp-server
npm install
npm 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
  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

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:

# 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

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

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.

Available Tools

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

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

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

License

MIT β€” LICENSE

Contributing

Issues and PRs welcome. Built by SurgeEnterpriseAI.