关于 microsoft-teams
这项 Skill 使用 Microsoft Graph、curl 和 jq 读取及发送 Microsoft Teams 聊天消息,并说明工作或学校账户授权要求,以及不支持频道消息和个人账户的限制。
主要功能
- 01列出一对一和群组聊天
- 02读取近期聊天消息
- 03发送聊天消息
- 04说明账户与权限错误
适用场景
- 01查看近期对话
- 02向 Teams 聊天发送消息
MCP 相关
这是 Skill,而非 MCP 服务;它介绍通过 curl 和 jq 使用 Microsoft Graph。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill microsoft-teams安装后在 Claude Code 中输入/microsoft-teams确认已加载。
详细介绍
通过 curl + jq 操作 Microsoft Graph 中的 Microsoft Teams 聊天。用户的 OAuth bearer token 位于 $MICROSOFT_TEAMS_TOKEN 中;每次调用都需要
Authorization: Bearer $MICROSOFT_TEAMS_TOKEN。基础 URL:
https://graph.microsoft.com/v1.0。
失败响应格式为 {"error":{"code","message"}}——原样显示 message。401 =
重新安装。发送时出现 403/Forbidden 表示用户授予的是只读权限
(Chat.Read)→ 重新连接并授予 Chat.ReadWrite + ChatMessage.Send。
/me/chats 返回 403 "No authorization information present on the request" =
已连接的账户是个人 Microsoft 账户。 Teams 聊天是工作或学校(组织)功能——对于个人 MSA 账户(outlook.com/hotmail 等),Microsoft Graph 不会开放 /me/chats,也不会授予 Chat.* 作用域。请直接告知用户:“Microsoft Teams 聊天需要工作或学校账户;你连接的是个人 Microsoft 账户。请重新连接 Teams 并选择工作或学校账户。”不要重试——该账户无法成功调用。
G="https://graph.microsoft.com/v1.0"; AUTH="Authorization: Bearer $MICROSOFT_TEAMS_TOKEN"
# My chats (1:1 + group), most recent first; expand members for names
curl -sS -H "$AUTH" "$G/me/chats?\$top=20&\$expand=members" \
| jq '.value[] | {id, chatType, topic, members: [.members[].displayName]}'
读取和发送聊天消息
CHAT="CHAT_ID"
# Recent messages
curl -sS -H "$AUTH" "$G/chats/$CHAT/messages?\$top=20" \
| jq '.value[] | {from: .from.user.displayName, created: .createdDateTime, text: .body.content}'
# Send a message (confirm content with the user first). contentType html|text.
curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
-d '{"body":{"contentType":"html","content":"Hi from the assistant 👋"}}' \
"$G/chats/$CHAT/messages" | jq '{id, created: .createdDateTime}'
注意事项
- 仅限聊天。 读取 Teams 频道消息需要
ChannelMessage.Read.All——这是 Microsoft 的“受保护 API”,需要租户管理员 授权;此连接器有意不申请该权限。不要尝试调用/teams/{id}/channels/.../messages;它会返回 403。 - HTML 消息的
body.content包含标记语言——总结时请移除标签。 - OData
$top/$expand中的$需要在 shell 中转义;请为 URL 加上引号。