/ Verzeichnis / Playground / Microsoft Teams
● Community InditexTech 🔑 Eigener Schlüssel nötig

Microsoft Teams

von InditexTech · InditexTech/mcp-teams-server

Read Teams channels, post messages, and @-mention engineers in natural language — a chat-ops bridge for teams that live in Microsoft Teams.

Inditex's community MCP for Microsoft Teams wraps the Graph API to let an agent read channel messages, post messages/replies, @-mention users, and list teams/channels. Requires Azure AD app registration with chosen Graph scopes. Great for incident comms and standup automation.

Warum nutzen

Hauptfunktionen

Live-Demo

In der Praxis

ms-teams.replay ▶ bereit
0/0

Installieren

Wählen Sie Ihren Client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Öffne Claude Desktop → Settings → Developer → Edit Config. Nach dem Speichern neu starten.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Cursor nutzt das gleiche mcpServers-Schema wie Claude Desktop. Projektkonfiguration schlägt die globale.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Klicken Sie auf das MCP-Servers-Symbol in der Cline-Seitenleiste, dann "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Gleiche Struktur wie Claude Desktop. Windsurf neu starten zum Übernehmen.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "ms-teams",
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  ]
}

Continue nutzt ein Array von Serverobjekten statt einer Map.

~/.config/zed/settings.json
{
  "context_servers": {
    "ms-teams": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-teams-server"
        ]
      }
    }
  }
}

In context_servers hinzufügen. Zed lädt beim Speichern neu.

claude mcp add ms-teams -- uvx mcp-teams-server

Einzeiler. Prüfen mit claude mcp list. Entfernen mit claude mcp remove.

Anwendungsfälle

Praxisnahe Nutzung: Microsoft Teams

Mirror an incident Slack-style thread into a Teams channel

👤 Ops / on-call in Microsoft-shop orgs ⏱ ~30 min advanced

Wann einsetzen: Sentry fires a critical issue; you want the summary plus @-mention of on-call posted in your #incidents Teams channel.

Voraussetzungen
  • Azure AD app registration with Graph scopes ChannelMessage.Send, Channel.ReadBasic.All, User.Read.All — entra.microsoft.com → App registrations → New, grant admin consent
  • Team ID and Channel ID of target channel — Right-click channel → Get link to channel; IDs embedded in URL
Ablauf
  1. Compose the alert
    From the Sentry issue [paste], draft a 3-line incident summary: what broke, user impact, suspected release.✓ Kopiert
    → Concise summary
  2. Identify who to @-mention
    Who's on-call? Resolve their Teams user id from their email [email]. Return the mention object.✓ Kopiert
    → Resolved user + AAD id
  3. Post to the channel
    Post the summary to channel <id>, @-mentioning the on-call engineer. Also post a follow-up reply with a link to the Sentry issue.✓ Kopiert
    → messageId returned; visible in Teams

Ergebnis: Every incident gets a structured message in Teams with the right people tagged.

Fallstricke
  • @-mentions need a mention object with AAD id; plain @name text doesn't notify — Resolve user AAD id via Graph first, pass in the mentions array of the message payload
  • Admin consent required; app won't work until consent granted org-wide — Ask an AAD admin to grant admin consent for your app's scopes
Kombinieren mit: sentry

Post a daily engineering standup digest to a team channel

👤 Tech leads on MS-Teams orgs ⏱ ~20 min intermediate

Wann einsetzen: Every morning: post 'yesterday's merged PRs + today's on-call + open P1s' to #eng-standup.

Ablauf
  1. Assemble the digest upstream
    Pull yesterday's merged GitHub PRs for our repos + current on-call + open P1 tickets. Summarize in 8 bullets.✓ Kopiert
    → Digest content
  2. Post with formatting
    Post to channel <id> with markdown headings (Teams supports basic formatting in messages).✓ Kopiert
    → Message visible
  3. Pin the thread
    Optionally, reply to yesterday's standup thread marking it outdated.✓ Kopiert
    → Reply posted

Ergebnis: A predictable daily standup in Teams; nobody has to run it manually.

Fallstricke
  • Teams markdown rendering is limited — some GitHub markdown breaks — Use plain text + bold + lists only; avoid tables and nested code blocks
Kombinieren mit: github · linear

Summarize what happened in a busy channel while you were away

👤 Anyone returning from PTO or a long meeting ⏱ ~10 min beginner

Wann einsetzen: You missed 200 messages in #platform and want the gist.

Ablauf
  1. Fetch recent messages
    Get last 200 messages in channel <id>. Return text + author + timestamp.✓ Kopiert
    → Message stream
  2. Cluster into topics
    Group messages into 3–5 topical threads. Name each topic and list key takeaways.✓ Kopiert
    → Topic summaries
  3. Flag anything directed at me
    Highlight any message that @-mentions me (email <email>) or is a reply to my past messages. Those are must-reads.✓ Kopiert
    → Personal-action list

Ergebnis: A 30-second catch-up on a noisy channel.

Fallstricke
  • Pulling long threads hits message-size limits — Page in batches of 50; summarize per-batch before final rollup

Route inbound customer questions to the right team via @-mentions

👤 Customer-success ops ⏱ ~20 min intermediate

Wann einsetzen: A partner asks a technical question in a shared channel; you want it routed to the domain expert.

Ablauf
  1. Classify the question
    Read this message [paste]. Which internal team owns this (billing, integrations, data)?✓ Kopiert
    → Single team label
  2. Resolve the right engineer
    From our on-call rota [paste or lookup], who's on-call for that team today? Return AAD id.✓ Kopiert
    → Person + AAD id
  3. Reply with the mention
    Reply in the same thread @-mentioning that person and asking them to take a look.✓ Kopiert
    → Reply posted with working mention

Ergebnis: Questions never languish unowned in a shared channel.

Fallstricke
  • Routing to someone on PTO is worse than not routing — Cross-reference against the calendar/out-of-office; escalate to backup if primary is out

Kombinationen

Mit anderen MCPs für 10-fache Wirkung

ms-teams + sentry

Post Sentry alerts to Teams with @-mention to on-call

For Sentry issue <id>, summarize and post to Teams channel <id>, mentioning on-call engineer <email>.✓ Kopiert
ms-teams + github

Post GitHub PR review requests to Teams

When a PR is opened tagged 'needs-platform-review', post a Teams message in #platform with a link and @-mention the reviewer rotation.✓ Kopiert
ms-teams + monday

Post monday.com status updates to a Teams project channel

Every Friday, summarize monday board <id> items moved this week, post to Teams #proj-atlas.✓ Kopiert

Werkzeuge

Was dieses MCP bereitstellt

WerkzeugEingabenWann aufrufenKosten
list_teams Discover teams the bot is a member of 1 Graph call
list_channels team_id Inventory channels in a team 1 Graph call
list_messages team_id, channel_id, top? Read recent channel messages 1 Graph call
send_message team_id, channel_id, content, mentions? Post to a channel 1 Graph call
send_reply team_id, channel_id, message_id, content, mentions? Reply inside an existing thread 1 Graph call
resolve_user email|user_principal_name Before building a mention object 1 Graph call

Kosten & Limits

Was der Betrieb kostet

API-Kontingent
Microsoft Graph throttling: ~10k requests per 10 min per app per tenant
Tokens pro Aufruf
Channel message fetch: 200–1500 tokens per page.
Kosten in €
Free with an M365 org that has Teams licenses.
Tipp
Cache team/channel IDs — they rarely change. Resolve user AAD ids once per email and reuse.

Sicherheit

Rechte, Secrets, Reichweite

Minimale Scopes: ChannelMessage.Send Channel.ReadBasic.All User.Read.All
Credential-Speicherung: Azure AD client id, client secret, tenant id as env vars
Datenabfluss: All calls to graph.microsoft.com (within your tenant)
Niemals gewähren: Group.ReadWrite.All Directory.ReadWrite.All

Fehlerbehebung

Häufige Fehler und Lösungen

AADSTS70011: Invalid scope

Scope name wrong or not granted. Admin consent required for Graph app scopes.

Prüfen: Check App Registration → API Permissions → Status column must show 'Granted'
403 Forbidden on sendMessage

App lacks ChannelMessage.Send permission, or user isn't a member of the team.

@-mention doesn't notify the user

You used plain text @name instead of the mentions array with AAD id. Resolve user first, then include mention object.

429 throttled

Too many Graph calls. Back off exponentially; batch when possible; cache IDs.

Alternativen

Microsoft Teams vs. andere

AlternativeWann stattdessenKompromiss
Slack MCPTeam is on SlackDifferent platform; Slack MCP is simpler to auth
Power Automate / FlowYou want no-code automation within M365Less flexible for AI agent driven workflows

Mehr

Ressourcen

📖 Offizielle README auf GitHub lesen

🐙 Offene Issues ansehen

🔍 Alle 400+ MCP-Server und Skills durchsuchen