mcpField
M
microsoft-teams-automation

microsoft-teams-automation

github.com/davepoon生产力3.7k120 次安装2 天前更新
代码仓库

关于 microsoft-teams-automation

面向 Microsoft Teams 自动化的技能,通过 Rube MCP 与 Composio 工具包执行团队协作操作,涵盖消息、会议及团队管理。

主要功能

  1. 01发布频道和聊天消息
  2. 02创建在线会议
  3. 03管理团队与频道
  4. 04搜索 Teams 消息
  5. 05管理成员和聊天

适用场景

  1. 01向指定频道发布通知
  2. 02发送一对一或群组消息
  3. 03查找历史消息
  4. 04安排 Teams 在线会议

MCP 相关

通过 Rube MCP 调用 Composio 的 Microsoft Teams 工具包;需连接 Rube MCP 并启用 Microsoft Teams 授权。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/davepoon/buildwithclaude --skill microsoft-teams-automation

安装后在 Claude Code 中输入/microsoft-teams-automation确认已加载。

详细介绍

通过 Rube MCP 自动化 Microsoft Teams

通过 Rube MCP 使用 Composio 的 Microsoft Teams 工具包,自动化 Microsoft Teams 操作。

工具包文档:composio.dev/toolkits/microsoft_teams

前提条件

  • 必须已连接 Rube MCP(可使用 RUBE_SEARCH_TOOLS)
  • 通过 RUBE_MANAGE_CONNECTIONS 建立有效的 Microsoft Teams 连接,并使用工具包 microsoft_teams
  • 始终先调用 RUBE_SEARCH_TOOLS,以获取当前工具架构

设置

获取 Rube MCP:在客户端配置中将 https://rube.app/mcp 添加为 MCP 服务。无需 API 密钥——只需添加端点即可使用。

  1. 确认 RUBE_SEARCH_TOOLS 能够响应,以验证 Rube MCP 是否可用
  2. 使用工具包 microsoft_teams 调用 RUBE_MANAGE_CONNECTIONS
  3. 如果连接状态不是 ACTIVE,请按照返回的授权链接完成 Microsoft OAuth
  4. 确认连接状态显示为 ACTIVE 后,再运行任何工作流

核心工作流

1. 发送频道消息

适用场景:用户想要在 Teams 频道中发布消息

工具调用顺序:

  1. MICROSOFT_TEAMS_TEAMS_LIST - 列出团队以查找目标团队 [前置步骤]
  2. MICROSOFT_TEAMS_TEAMS_LIST_CHANNELS - 列出团队中的频道 [前置步骤]
  3. MICROSOFT_TEAMS_TEAMS_POST_CHANNEL_MESSAGE - 发布消息 [必需]

关键参数:

  • team_id:团队的 UUID(来自 TEAMS_LIST)
  • channel_id:频道 ID(来自 LIST_CHANNELS,格式:'19:[email protected]')
  • content:消息文本或 HTML
  • content_type:'text' 或 'html'

注意事项:

  • team_id 必须是有效的 UUID 格式
  • channel_id 必须采用 thread 格式(例如,'19:[email protected]')
  • TEAMS_LIST 可能会分页(每页约 100 项);请通过 @odata.nextLink 查找所有团队
  • 如果用户无权访问团队,LIST_CHANNELS 可能返回 403
  • 超过约 28KB 的消息可能触发 400/413 错误;请拆分长内容
  • 限流可能返回 429;请使用指数退避(1 秒/2 秒/4 秒)
2. 发送聊天消息

适用场景:用户想要发送一对一或群组聊天消息

工具调用顺序:

  1. MICROSOFT_TEAMS_CHATS_GET_ALL_CHATS - 列出现有聊天 [可选]
  2. MICROSOFT_TEAMS_LIST_USERS - 查找新聊天所需的用户 [可选]
  3. MICROSOFT_TEAMS_TEAMS_CREATE_CHAT - 创建新聊天 [可选]
  4. MICROSOFT_TEAMS_TEAMS_POST_CHAT_MESSAGE - 发送消息 [必需]

关键参数:

  • chat_id:聊天 ID(来自 GET_ALL_CHATS 或 CREATE_CHAT)
  • content:消息内容
  • content_type:'text' 或 'html'
  • chatType:'oneOnOne' 或 'group'(用于 CREATE_CHAT)
  • members:成员对象数组(用于 CREATE_CHAT)

注意事项:

  • CREATE_CHAT 要求已通过身份验证的用户是成员之一
  • 如果两个用户之间已存在一对一聊天,oneOnOne 聊天会返回现有聊天
  • 群组聊天要求至少有一名成员具有 'owner' 角色
  • 成员的 user_odata_bind 必须使用完整的 Microsoft Graph URL 格式
  • 聊天筛选支持非常有限;必要时请在客户端进行筛选
3. 创建在线会议

适用场景:用户想要安排 Microsoft Teams 会议

工具调用顺序:

  1. MICROSOFT_TEAMS_LIST_USERS - 查找参与者用户 ID [可选]
  2. MICROSOFT_TEAMS_CREATE_MEETING - 创建会议 [必需]

关键参数:

  • subject:会议标题
  • start_date_time:ISO 8601 开始时间(例如,'2024-08-15T10:00:00Z')
  • end_date_time:ISO 8601 结束时间(必须晚于开始时间)
  • participants:包含 user_id 和 role 的用户对象数组

注意事项:

  • end_date_time 必须严格晚于 start_date_time
  • 参与者必须使用有效的 Microsoft 用户 user_id(GUID),不能使用电子邮件地址
  • 此操作会创建独立会议,不会关联日历事件
  • 如需关联日历的会议,请使用 OUTLOOK_CALENDAR_CREATE_EVENT 并设置 is_online_meeting=true
4. 管理团队和频道

使用场景:用户希望列出、创建或管理团队和频道

工具调用顺序:

  1. MICROSOFT_TEAMS_TEAMS_LIST - 列出所有可访问的团队 [必需]
  2. MICROSOFT_TEAMS_GET_TEAM - 获取特定团队的详细信息 [可选]
  3. MICROSOFT_TEAMS_TEAMS_LIST_CHANNELS - 列出团队中的频道 [可选]
  4. MICROSOFT_TEAMS_GET_CHANNEL - 获取频道详细信息 [可选]
  5. MICROSOFT_TEAMS_TEAMS_CREATE_CHANNEL - 创建新频道 [可选]
  6. MICROSOFT_TEAMS_LIST_TEAM_MEMBERS - 列出团队成员 [可选]
  7. MICROSOFT_TEAMS_ADD_MEMBER_TO_TEAM - 将成员添加到团队 [可选]

关键参数:

  • team_id:团队 UUID
  • channel_id:采用 thread 格式的频道 ID
  • filter:OData 筛选字符串(例如,"startsWith(displayName,'Project')")
  • select:以逗号分隔的要返回的属性

注意事项:

  • TEAMS_LIST 分页:大型租户中请跟进 @odata.nextLink
  • 如果权限不匹配,可能不会显示专用频道或共享频道
  • 如果 team_id 或 channel_id 不正确,GET_CHANNEL 会返回 404
  • 始终从列表操作中获取 ID;不要猜测 ID 格式
5. 搜索消息

使用场景:用户希望在 Teams 聊天和频道中查找消息

工具调用顺序:

  1. MICROSOFT_TEAMS_SEARCH_MESSAGES - 使用 KQL 语法搜索 [必需]

关键参数:

  • query:KQL 搜索查询(支持 from:、sent:、attachments 和布尔逻辑)

注意事项:

  • 新发布的消息可能需要 30-60 秒才会出现在搜索结果中
  • 搜索最终一致;不要依赖它来即时确认消息是否送达
  • 使用消息列表工具实时验证消息

常见模式

团队和频道 ID 解析
1. Call MICROSOFT_TEAMS_TEAMS_LIST
2. Find team by displayName
3. Extract team id (UUID format)
4. Call MICROSOFT_TEAMS_TEAMS_LIST_CHANNELS with team_id
5. Find channel by displayName
6. Extract channel id (19:[email protected] format)
用户解析
1. Call MICROSOFT_TEAMS_LIST_USERS
2. Filter by displayName or email
3. Extract user id (UUID format)
4. Use for meeting participants, chat members, or team operations
分页
  • 团队/用户:跟进 @odata.nextLink URL 获取下一页
  • 聊天:自动分页,最多达到 limit;使用 top 设置页面大小(最大为 50)
  • 使用 top 参数控制页面大小
  • 持续获取,直到 @odata.nextLink 不再存在

已知注意事项

身份验证和权限:

  • 不同操作需要不同的 Microsoft Graph 权限
  • 403 错误表示权限不足或无权访问团队
  • 某些操作需要在 Azure AD 租户中获得管理员同意

ID 格式:

  • 团队 ID:UUID 格式(例如,'87b0560f-fc0d-4442-add8-b380ca926707')
  • 频道 ID:Thread 格式(例如,'19:[email protected]')
  • 聊天 ID:多种格式(例如,'19:[email protected]')
  • 用户 ID:UUID 格式
  • 切勿猜测 ID;始终从列表操作中解析

速率限制:

  • Microsoft Graph 会实施请求限制
  • 429 响应中包含 Retry-After 标头
  • 每秒请求数控制在几次以内
  • 批量操作有助于减少请求总数

消息格式:

  • HTML content_type 支持富文本格式
  • 自适应卡片需要额外处理
  • 消息大小限制约为 28KB
  • 将较长内容拆分为多条消息

Quick Reference

TaskTool SlugKey Params
List teamsMICROSOFT_TEAMS_TEAMS_LISTfilter, select, top
Get team detailsMICROSOFT_TEAMS_GET_TEAMteam_id
List channelsMICROSOFT_TEAMS_TEAMS_LIST_CHANNELSteam_id, filter
Get channelMICROSOFT_TEAMS_GET_CHANNELteam_id, channel_id
Create channelMICROSOFT_TEAMS_TEAMS_CREATE_CHANNELteam_id, displayName
Post to channelMICROSOFT_TEAMS_TEAMS_POST_CHANNEL_MESSAGEteam_id, channel_id, content
List chatsMICROSOFT_TEAMS_CHATS_GET_ALL_CHATSuser_id, limit
Create chatMICROSOFT_TEAMS_TEAMS_CREATE_CHATchatType, members, topic
Post to chatMICROSOFT_TEAMS_TEAMS_POST_CHAT_MESSAGEchat_id, content
Create meetingMICROSOFT_TEAMS_CREATE_MEETINGsubject, start_date_time, end_date_time
List usersMICROSOFT_TEAMS_LIST_USERSfilter, select, top
List team membersMICROSOFT_TEAMS_LIST_TEAM_MEMBERSteam_id
Add team memberMICROSOFT_TEAMS_ADD_MEMBER_TO_TEAMteam_id, user_id
Search messagesMICROSOFT_TEAMS_SEARCH_MESSAGESquery
Get chat messageMICROSOFT_TEAMS_GET_CHAT_MESSAGEchat_id, message_id
List joined teamsMICROSOFT_TEAMS_LIST_USER_JOINED_TEAMS(none)

Powered by Composio

评论

支持 Markdown