/ 目錄 / 演練場 / Microsoft Teams
● 社群 InditexTech 🔑 需要你的金鑰

Microsoft Teams

作者 InditexTech · InditexTech/mcp-teams-server

用自然語言讀取 Teams 頻道、發送訊息並 @-提及工程師——為習慣使用 Microsoft Teams 的團隊打造的 Chat-Ops 橋接工具。

Inditex 社群版 Microsoft Teams MCP 封裝了 Graph API,讓 AI 代理能讀取頻道訊息、發送訊息與回覆、@-提及使用者,以及列出團隊與頻道。需透過 Azure AD 應用程式註冊並設定所需的 Graph 權限範圍,非常適合用於事件通報與每日站會自動化。

為什麼要用

核心特性

即時演示

實際使用效果

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 使用與 Claude Desktop 相同的 mcpServers 格式。專案級設定優先於全域。

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

點擊 Cline 側欄中的 MCP Servers 圖示,然後選 "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 使用伺服器物件陣列,而非映射。

~/.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

將事件通報討論串同步至 Teams 頻道

👤 使用 Microsoft 生態系的組織中負責維運與值班的人員 ⏱ ~30 min advanced

何時使用: Sentry 觸發嚴重問題時,希望將摘要及 @-提及值班人員的訊息發布到 #incidents Teams 頻道。

前置條件
  • 已完成 Azure AD 應用程式註冊,並取得 ChannelMessage.Send、Channel.ReadBasic.All、User.Read.All 等 Graph 權限範圍 — 前往 entra.microsoft.com → 應用程式註冊 → 新增,並由管理員授予同意
  • 目標頻道的 Team ID 與 Channel ID — 在頻道上按右鍵 → 取得頻道連結;ID 已嵌入在 URL 中
步驟
  1. 撰寫警示訊息
    根據 Sentry 問題 [貼上內容],起草一段三行的事件摘要:發生什麼問題、使用者影響、可能的問題版本。✓ 已複製
    → 簡潔的摘要內容
  2. 確認 @-提及對象
    目前值班人員是誰?請透過其電子郵件 [email] 解析對應的 Teams 使用者 ID,並回傳 mention 物件。✓ 已複製
    → 已解析的使用者資訊與 AAD ID
  3. 發布至頻道
    將摘要發布至頻道 <id>,並 @-提及值班工程師。同時在該訊息下回覆一則附有 Sentry 問題連結的訊息。✓ 已複製
    → 已回傳 messageId,且訊息在 Teams 中可見

結果: 每次事件都能在 Teams 中產生結構化訊息,並標記正確的負責人員。

注意事項
  • @-提及需要包含 AAD ID 的 mention 物件;單純的 @名稱 文字不會發出通知 — 先透過 Graph 解析使用者的 AAD ID,再將其傳入訊息 payload 的 mentions 陣列中
  • 需要管理員同意;未完成組織範圍授權前,應用程式無法正常運作 — 請 AAD 管理員針對應用程式的權限範圍授予管理員同意
搭配使用: sentry

每日自動發布工程師站會摘要至團隊頻道

👤 使用 MS Teams 組織的技術主管 ⏱ ~20 min intermediate

何時使用: 每天早上:將「昨日合併的 PR + 今日值班人員 + 待處理的 P1 問題」發布到 #eng-standup 頻道。

步驟
  1. 彙整上游摘要資料
    擷取昨日各儲存庫已合併的 GitHub PR、目前值班人員,以及待處理的 P1 工單,以 8 條重點整理成摘要。✓ 已複製
    → 摘要內容
  2. 以格式化方式發布
    發布至頻道 <id>,使用 Markdown 標題格式(Teams 訊息支援基本格式)。✓ 已複製
    → 訊息已顯示
  3. 標記舊討論串
    可選:在昨日的站會討論串中回覆,標記該討論串已過期。✓ 已複製
    → 回覆已發布

結果: Teams 中每天固定出現站會摘要,無需人工執行。

注意事項
  • Teams 的 Markdown 渲染功能有限——部分 GitHub Markdown 語法無法正確顯示 — 僅使用純文字、粗體和清單;避免使用表格和巢狀程式碼區塊
搭配使用: github · linear

摘要離線期間錯過的熱絡頻道訊息

👤 剛從休假或長時間會議返回的所有人 ⏱ ~10 min beginner

何時使用: 你錯過了 #platform 頻道中的 200 則訊息,想快速掌握重點。

步驟
  1. 擷取最新訊息
    取得頻道 <id> 中最後 200 則訊息,回傳訊息內容、作者與時間戳記。✓ 已複製
    → 訊息串流
  2. 依主題分群
    將訊息分組為 3 至 5 個主題討論串,為每個主題命名並列出重要結論。✓ 已複製
    → 主題摘要
  3. 標示需要我關注的訊息
    找出所有 @-提及我(電子郵件 <email>)的訊息,或是對我過去訊息的回覆,這些是必讀項目。✓ 已複製
    → 個人待辦清單

結果: 30 秒內掌握熱絡頻道的最新動態。

注意事項
  • 擷取較長的討論串可能超出訊息大小限制 — 每次擷取 50 則分批處理;逐批摘要後再進行最終彙整

透過 @-提及將客戶問題轉派給對應團隊

👤 客戶成功維運人員 ⏱ ~20 min intermediate

何時使用: 合作夥伴在共用頻道中提出技術問題,需要將問題轉派給對應的領域專家。

步驟
  1. 分類問題
    閱讀這則訊息 [貼上內容],判斷由哪個內部團隊負責(帳務、串接、資料)。✓ 已複製
    → 單一團隊標籤
  2. 找到合適的工程師
    根據我們的值班輪班表 [貼上或查詢],今天該團隊的值班人員是誰?回傳 AAD ID。✓ 已複製
    → 人員資訊與 AAD ID
  3. 回覆並附上提及
    在同一則討論串中回覆,@-提及該人員並請他協助處理。✓ 已複製
    → 附有正確提及的回覆已發布

結果: 共用頻道中的問題不再無人認領、長時間擱置。

注意事項
  • 將問題轉派給正在休假的人,比不轉派更糟 — 與行事曆或請假狀態交叉比對;若主要負責人不在,則升級轉派給備援人員

組合

與其他 MCP 搭配,撬動十倍槓桿

ms-teams + sentry

將 Sentry 警示發布至 Teams 並 @-提及值班人員

針對 Sentry 問題 <id>,整理摘要並發布至 Teams 頻道 <id>,同時提及值班工程師 <email>。✓ 已複製
ms-teams + github

將 GitHub PR 審查請求發布至 Teams

當標記為 'needs-platform-review' 的 PR 開啟時,在 #platform 頻道發布一則附有連結的 Teams 訊息,並 @-提及審查輪班人員。✓ 已複製
ms-teams + monday

將 monday.com 的狀態更新發布至 Teams 專案頻道

每週五彙整本週 monday 看板 <id> 中異動的項目,發布至 Teams #proj-atlas 頻道。✓ 已複製

工具

此 MCP 暴露的能力

工具輸入參數何時呼叫成本
list_teams 查詢機器人所屬的團隊 1 Graph call
list_channels team_id 列出某個團隊下的所有頻道 1 Graph call
list_messages team_id, channel_id, top? 讀取頻道中的最新訊息 1 Graph call
send_message team_id, channel_id, content, mentions? 發布訊息至頻道 1 Graph call
send_reply team_id, channel_id, message_id, content, mentions? 在現有討論串中回覆 1 Graph call
resolve_user email|user_principal_name 在建立 mention 物件之前先解析使用者 1 Graph call

成本與限制

運行它的成本

API 配額
Microsoft Graph 流量限制:每個應用程式每個租戶每 10 分鐘約可發送 ~10,000 次請求
每次呼叫 Token 數
頻道訊息擷取:每頁約 200–1500 個 token。
費用
使用擁有 Teams 授權的 M365 組織時免費。
提示
快取團隊與頻道 ID——這些 ID 很少變動。每個電子郵件的使用者 AAD ID 解析一次後即可重複使用。

安全

權限、密鑰、影響範圍

最小權限: ChannelMessage.Send Channel.ReadBasic.All User.Read.All
憑證儲存: 將 Azure AD 用戶端 ID、用戶端密鑰、租戶 ID 設定為環境變數
資料出站: 所有請求皆發送至 graph.microsoft.com(在您的租戶範圍內)
切勿授予: Group.ReadWrite.All Directory.ReadWrite.All

故障排查

常見錯誤與修復

AADSTS70011: Invalid scope

權限範圍名稱有誤或尚未授權。Graph 應用程式權限範圍需要管理員同意。

驗證: 檢查應用程式註冊 → API 權限 → 狀態欄必須顯示「已授予」
403 Forbidden on sendMessage

應用程式缺少 ChannelMessage.Send 權限,或使用者不是該團隊的成員。

@-mention doesn't notify the user

你使用了純文字的 @名稱,而非包含 AAD ID 的 mentions 陣列。請先解析使用者,再傳入 mention 物件。

429 throttled

Graph API 呼叫次數過多。請採用指數退避策略;盡量批次處理;快取各種 ID。

替代方案

Microsoft Teams 對比其他方案

替代方案何時用它替代權衡
Slack MCP團隊使用 Slack不同平台;Slack MCP 的驗證設定較為簡單
Power Automate / Flow希望在 M365 內使用無程式碼自動化對於 AI 代理驅動的工作流程靈活度較低

更多

資源

📖 閱讀 GitHub 上的官方 README

🐙 查看未解決的 issue

🔍 瀏覽全部 400+ MCP 伺服器和 Skills