关于 mcp-teams
mcp-teams 是面向 Agent 的 Microsoft Teams MCP 服务,可读取团队、频道、聊天和消息。默认只读,只有启用更高权限模式及安全限制后才开放发送或删除操作。
主要功能
- 01列出团队、频道和成员
- 02读取频道消息及主题回复
- 03读取聊天及聊天消息
- 04在安全限制下发送频道和聊天消息
- 05管理员模式下软删除自己的消息
适用场景
- 01查看频道近期讨论和回复
- 02核对成员及可用频道
- 03发送聊天或频道更新
- 04在管理员限制下删除自己的消息
MCP 相关
通过 Microsoft Graph 向 MCP 客户端提供 Microsoft Teams 数据和消息操作。写入工具受配置的模式与确认机制限制。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @dockndevai/mcp-teamsTEAMS_CLIENT_IDEntra (Azure AD) app (client) id. For browser sign-in, register a public client with redirect URI http://localhost.TEAMS_TENANT_IDDirectory tenant: a tenant id, or common | organizations | consumers (default common).TEAMS_CLIENT_SECRET密钥App secret for app-only (client-credentials) auth. Omit to use interactive browser sign-in.TEAMS_TOKEN密钥A pre-obtained Microsoft Graph bearer token (alternative to browser or app-only auth).TEAMS_MODEAccess mode: read-only | read-write | admin. Starts read-only; writes need read-write.TEAMS_ALLOW_SENDSet true to permit posting messages (channel/chat send & reply). Off by default.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-teams
一款默认安全的 Model Context Protocol 服务,用于通过 Microsoft Graph 操作 Microsoft Teams。它让 Agent 能够读取和操作 Teams——列出已加入的团队、频道和成员,读取频道消息和线程回复,读取 1:1 聊天、群组聊天及其消息;在更高权限模式下,还可以向频道发帖、在线程中回复、发送聊天消息,以及软删除消息。
**浏览器登录:**首次运行时会打开浏览器并跳转到 Microsoft 登录页面,随后缓存令牌并在后台静默刷新——服务永远不会接触你的密码。
这是 dockndevai MCP 服务套件的一部分——所有服务采用统一的治理模式。
它能为 Agent 提供什么
服务以只读模式启动(参见默认安全);只有提高模式后,才会注册更高权限的工具。
| 工具 | 用途 | 所需模式 |
|---|---|---|
whoami | 确认当前使用的帐户 | 只读 |
list_teams | 用户已加入的团队 | 只读 |
list_channels | 团队中的频道 | 只读 |
list_team_members | 团队成员 | 只读 |
list_channel_messages | 频道中的近期消息 | 只读 |
get_channel_message | 单条频道消息及其正文 | 只读 |
list_message_replies | 频道消息的线程 | 只读 |
list_chats | 用户的 1:1 / 群组聊天 | 只读 |
list_chat_messages | 聊天中的消息 | 只读 |
send_channel_message | 向频道发帖 | 读写 + TEAMS_ALLOW_SEND |
reply_channel_message | 在频道线程中回复 | 读写 + TEAMS_ALLOW_SEND |
send_chat_message | 发送聊天消息 | 读写 + TEAMS_ALLOW_SEND |
delete_channel_message | 软删除自己的消息 | 管理员 + TEAMS_ALLOW_DELETE |
安装
npx -y @dockndevai/mcp-teams
你需要一个 Entra (Azure AD) 应用注册。若要使用默认的浏览器登录方式,请注册一个公共客户端并添加重定向 URI http://localhost(平台:移动和桌面应用程序),然后将其应用程序(客户端)ID用作 TEAMS_CLIENT_ID。授予委派权限 Team.ReadBasic.All、Channel.ReadBasic.All、ChannelMessage.Read.All(若要发帖,还需 ChannelMessage.Send / Chat.ReadWrite)。交互式使用无需客户端密钥。
配置
{
"mcpServers": {
"teams": {
"command": "npx",
"args": ["-y", "@dockndevai/mcp-teams"],
"env": {
"TEAMS_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
"TEAMS_TENANT_ID": "common",
"TEAMS_MODE": "read-only"
}
}
}
}
首次使用时,服务会打开浏览器供你登录,并将令牌缓存到 ~/.mcp-teams/token.json(0600);后续运行会在后台静默刷新。
Claude Code / Cursor / Codex / VS Code / Windsurf 配置示例请参阅 docs/CLIENTS.md;所有受支持的变量请参阅 .env.example。
身份验证
身份验证模式会自动选择(可通过 TEAMS_AUTH 覆盖):
- interactive(默认)——仅设置
TEAMS_CLIENT_ID。使用带 PKCE 的授权码流程和环回重定向:浏览器打开后,你只需批准一次,访问令牌和刷新令牌便会缓存到磁盘。大多数 Teams 消息 API 仅支持委派权限,因此这是主要模式。服务永远不会处理你的密码。 - client-credentials(仅应用)——设置了
TEAMS_CLIENT_SECRET;服务会自行获取应用令牌。请注意,若未获得 Microsoft 的受保护 API 审批,若干 Teams 消息 API 不支持仅应用令牌。 - token——将
TEAMS_TOKEN设置为预先获取的 Graph 持有者令牌。令牌有效期由你管理。
默认安全
访问模型由 src/security.ts 强制执行,基于 Graph 令牌自身的范围/角色实施纵深防御:
TEAMS_MODE—read-only(默认)→read-write→admin。只有模式允许相应功能时,才会注册工具。只读模式开放 9 个读取工具;发布消息需要read-write;删除需要admin。TEAMS_ALLOW_SEND— 发布的消息会对其他人可见,且无法悄悄撤回,因此除read-write外,还需要启用此标志。TEAMS_ALLOW_DELETE— 删除操作除需要admin模式外,还需要启用此标志。删除属于软删除(可恢复),且仅限删除你自己的消息。TEAMS_TEAM_ALLOWLIST/TEAMS_PROTECTED_TEAMS— 限制可发布消息/执行管理操作的团队;标记可读取但禁止发布消息的团队。- 交互式确认 — 当客户端支持 MCP elicitation 时,发布和删除操作会暂停,并请求人工批准确切目标后才会执行;不支持 elicitation 的客户端则会回退到
TEAMS_ALLOW_SEND/TEAMS_ALLOW_DELETE门控。 TEAMS_DRY_RUN— 验证并记录写入操作,但不执行。TEAMS_AUDIT_LOG— 在 stderr 中为每个受保护操作记录一行 JSON 审计日志(默认开启)。
请参阅 SECURITY.md。
开发
npm install
npm run build
# introspect the tool list without signing in (uses a fake token, no network):
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | TEAMS_TOKEN=x node dist/index.js
npm test
许可证
MIT
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。