/ 目录 / 演练场 / Microsoft Teams
● 社区 InditexTech 🔑 需要你的密钥

Microsoft Teams

作者 InditexTech · InditexTech/mcp-teams-server

读取Teams频道、发送消息、以自然语言@工程师——为生活在Microsoft Teams中的团队搭建的chat-ops桥梁。

Inditex社区开发的Microsoft Teams MCP包装了Graph API,让智能体能读取频道消息、发送消息/回复、@提及用户,以及列出团队/频道。需要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

将事件Slack风格线程镜像到Teams频道

👤 Microsoft生态组织中的Ops / 值班人员 ⏱ ~30 min advanced

何时使用: Sentry触发关键问题;你想在#incidents Teams频道中发送摘要以及@提及值班人员。

前置条件
  • Azure AD应用注册,包含Graph作用域ChannelMessage.Send、Channel.ReadBasic.All、User.Read.All — entra.microsoft.com → App registrations → New,授予管理员同意
  • 目标频道的Team ID和Channel ID — 右键点击频道 → 获取频道链接;ID嵌入在URL中
步骤
  1. 撰写告警
    从Sentry问题[粘贴]中,起草3行事件摘要:什么出故障了、用户影响、可疑发布。✓ 已复制
    → 简洁摘要
  2. 确定要@提及的人
    谁值班?从他们的邮箱[邮箱]解析他们的Teams用户ID。返回提及对象。✓ 已复制
    → 已解析的用户 + AAD ID
  3. 发送到频道
    将摘要发送到频道<id>,@提及值班工程师。还要发送一个后续回复,包含Sentry问题的链接。✓ 已复制
    → 返回messageId;在Teams中可见

结果: 每个事件都在Teams中获得一条结构化消息,标记正确的人员。

注意事项
  • @提及需要一个包含AAD ID的mention对象;纯文本@name不会通知 — 先通过Graph解析用户AAD ID,在消息负载的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

总结你不在时忙碌频道中发生的事情

👤 任何从PTO或长会议回来的人 ⏱ ~10 min beginner

何时使用: 你错过了#platform中的200条消息,想了解要点。

步骤
  1. 获取最近消息
    获取频道<id>中最后的200条消息。返回文本 + 作者 + 时间戳。✓ 已复制
    → 消息流
  2. 聚类成主题
    将消息分组为3-5个主题线程。为每个主题命名并列出关键要点。✓ 已复制
    → 主题摘要
  3. 标记任何针对我的内容
    突出显示任何@提及我(邮箱<邮箱>)或回复我过去消息的消息。这些是必读内容。✓ 已复制
    → 个人操作列表

结果: 对喧闹频道的30秒快速追赶。

注意事项
  • 拉取长线程会触及消息大小限制 — 分50条一页;在最终汇总前按页总结

通过@提及将入站客户问题路由到正确的团队

👤 客户成功运营 ⏱ ~20 min intermediate

何时使用: 合作伙伴在共享频道中提出技术问题;你想将其路由给该领域的专家。

步骤
  1. 分类问题
    阅读这条消息[粘贴]。哪个内部团队拥有这个(计费、集成、数据)?✓ 已复制
    → 单一团队标签
  2. 确定正确的工程师
    从我们的值班轮转表[粘贴或查询],谁今天为该团队值班?返回AAD ID。✓ 已复制
    → 人员 + AAD ID
  3. 带提及的回复
    在同一线程中回复,@提及那个人并要求他们查看一下。✓ 已复制
    → 带有有效提及的回复已发送

结果: 问题永远不会在共享频道中无人认领地搁浅。

注意事项
  • 路由给在PTO中的人比不路由更糟 — 与日历/不在办公室交叉检查;如果主要人员不在,升级到备用人员

组合

与其他 MCP 搭配,撬动十倍杠杆

ms-teams + sentry

将Sentry告警发送到Teams,并@提及值班人员

对于Sentry问题<id>,总结并发送到Teams频道<id>,提及值班工程师<邮箱>。✓ 已复制
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 在构建提及对象之前 1 Graph call

成本与限制

运行它的成本

API 配额
Microsoft Graph限流:每个应用每个租户每10分钟约10k个请求
每次调用 Token 数
频道消息获取:每页200-1500个tokens。
费用
具有Teams许可证的M365组织免费。
提示
缓存团队/频道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应用作用域需要管理员同意。

验证: Check App Registration → API Permissions → Status column must show 'Granted'
403 Forbidden on sendMessage

应用缺少ChannelMessage.Send权限,或用户不是团队成员。

@-mention doesn't notify the user

你使用纯文本@name而不是包含AAD ID的mentions数组。先解析用户,然后包含提及对象。

429 throttled

Graph调用过多。指数退避;尽可能批处理;缓存ID。

替代方案

Microsoft Teams 对比其他方案

替代方案何时用它替代权衡
Slack MCP团队在Slack上不同的平台;Slack MCP更易于身份验证
Power Automate / Flow你想在M365内进行无代码自动化对于AI智能体驱动的工作流不够灵活

更多

资源

📖 阅读 GitHub 上的官方 README

🐙 查看未解决的 issue

🔍 浏览全部 400+ MCP 服务器和 Skills