/ Каталог / Песочница / Microsoft Teams
● Сообщество InditexTech 🔑 Нужен свой ключ

Microsoft Teams

автор 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.

Зачем использовать

Ключевые функции

Живое демо

Как выглядит на практике

ms-teams.replay ▶ готово
0/0

Установка

Выберите клиент

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

Откройте Claude Desktop → Settings → Developer → Edit Config. Перезапустите после сохранения.

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

Cursor использует ту же схему mcpServers, что и Claude Desktop. Конфиг проекта приоритетнее глобального.

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

Щёлкните значок MCP Servers на боковой панели Cline, затем "Edit Configuration".

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

Тот же формат, что и Claude Desktop. Перезапустите Windsurf для применения.

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

Continue использует массив объектов серверов, а не map.

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

Добавьте в context_servers. Zed перезагружается автоматически.

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

Однострочная команда. Проверить: claude mcp list. Удалить: claude mcp remove.

Сценарии использования

Реальные сценарии: Microsoft Teams

Mirror an incident Slack-style thread into a Teams channel

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

Когда использовать: Sentry fires a critical issue; you want the summary plus @-mention of on-call posted in your #incidents Teams channel.

Предварительные требования
  • 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
Поток
  1. Compose the alert
    From the Sentry issue [paste], draft a 3-line incident summary: what broke, user impact, suspected release.✓ Скопировано
    → Concise summary
  2. Identify who to @-mention
    Who's on-call? Resolve their Teams user id from their email [email]. Return the mention object.✓ Скопировано
    → 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.✓ Скопировано
    → messageId returned; visible in Teams

Итог: Every incident gets a structured message in Teams with the right people tagged.

Подводные камни
  • @-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
Сочетать с: sentry

Post a daily engineering standup digest to a team channel

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

Когда использовать: Every morning: post 'yesterday's merged PRs + today's on-call + open P1s' to #eng-standup.

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

Итог: A predictable daily standup in Teams; nobody has to run it manually.

Подводные камни
  • Teams markdown rendering is limited — some GitHub markdown breaks — Use plain text + bold + lists only; avoid tables and nested code blocks
Сочетать с: github · linear

Summarize what happened in a busy channel while you were away

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

Когда использовать: You missed 200 messages in #platform and want the gist.

Поток
  1. Fetch recent messages
    Get last 200 messages in channel <id>. Return text + author + timestamp.✓ Скопировано
    → Message stream
  2. Cluster into topics
    Group messages into 3–5 topical threads. Name each topic and list key takeaways.✓ Скопировано
    → 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.✓ Скопировано
    → Personal-action list

Итог: A 30-second catch-up on a noisy channel.

Подводные камни
  • 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

Когда использовать: A partner asks a technical question in a shared channel; you want it routed to the domain expert.

Поток
  1. Classify the question
    Read this message [paste]. Which internal team owns this (billing, integrations, data)?✓ Скопировано
    → 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.✓ Скопировано
    → Person + AAD id
  3. Reply with the mention
    Reply in the same thread @-mentioning that person and asking them to take a look.✓ Скопировано
    → Reply posted with working mention

Итог: Questions never languish unowned in a shared channel.

Подводные камни
  • 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

Комбинации

Сочетайте с другими MCP — эффект x10

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>.✓ Скопировано
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.✓ Скопировано
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.✓ Скопировано

Инструменты

Что предоставляет этот MCP

ИнструментВходные данныеКогда вызыватьСтоимость
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

Стоимость и лимиты

Во что обходится

Квота API
Microsoft Graph throttling: ~10k requests per 10 min per app per tenant
Токенов на вызов
Channel message fetch: 200–1500 tokens per page.
Деньги
Free with an M365 org that has Teams licenses.
Совет
Cache team/channel IDs — they rarely change. Resolve user AAD ids once per email and reuse.

Безопасность

Права, секреты, радиус поражения

Минимальные скоупы: ChannelMessage.Send Channel.ReadBasic.All User.Read.All
Хранение учётных данных: Azure AD client id, client secret, tenant id as env vars
Исходящий трафик: All calls to graph.microsoft.com (within your tenant)
Никогда не давайте: Group.ReadWrite.All Directory.ReadWrite.All

Устранение неполадок

Частые ошибки и исправления

AADSTS70011: Invalid scope

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

Проверить: 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.

Альтернативы

Microsoft Teams в сравнении

АльтернативаКогда использоватьКомпромисс
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

Ещё

Ресурсы

📖 Читать официальный README на GitHub

🐙 Открытые задачи

🔍 Все 400+ MCP-серверов и Skills