Microsoft 365 Teams

io.github.mindstone由 GitHub 账号 mindstone 发布v0.3.3更新于 Nov 7, 2026

Microsoft 365 Teams via Graph: list chats, read/send messages, list teams/channels, presence.

发布方自己的服务:Microsoft Learn MCP

已验证STDIO仅桌面效率与工作流沟通与协作

概览

AI 生成的概览

本地 MCP 服务器,让助手通过 Microsoft Graph 读取、搜索和发送 Teams 聊天与频道消息、查找同事,并查看或设置在线状态。

可以做什么
  • 列出并查看聊天,包括聊天详情和最近的聊天消息
  • 发送聊天消息、在会话中回复,并在发送前打开可编辑的撰写表单
  • 按关键词搜索聊天和频道消息,并按姓名或邮箱查找同事
  • 创建新的单聊或群聊并返回新的聊天 ID
  • 列出团队和频道、读取频道消息,并在频道中发帖或回复
  • 查看自己或同事的在线状态,并设置自己的状态(可限定持续时间)
适用场景
当你希望助手直接在 Microsoft Teams 中工作时适用:跟进聊天或频道、查找同事、起草并发送消息,或查看和设置在线状态。适合已为同一账号处理 Microsoft 365 登录的宿主环境。
运行要求
通过 npx 在本地运行,需要 Node.js 20+ 和 npm。需要 MS_CLIENT_ID(Microsoft Entra 应用客户端 ID)和 MS_CONFIG_DIR(存放凭据和 accounts.json 的用户配置目录)。它本身不执行 OAuth:需由宿主应用完成登录并写入令牌文件,通常借助配套的 Microsoft 邮件服务器的 authenticate_microsoft_account 工具。可选:MS_ACCOUNT_EMAIL、MS_MCP_PACKAGE_ID、MICROSOFT_REQUEST_TIMEOUT_MS。
安装前请注意
它会从 MS_CONFIG_DIR 读取令牌文件,该目录包含敏感的 Microsoft 凭据,应妥善保护。发送、回复和创建聊天会向同事发出真实消息,set_presence 会改变你对外显示的状态。多个工具需要可能须经租户管理员批准的 Graph 权限,缺少权限时部分调用会返回重新连接的提示。消息内容和目录查询会发送至 Microsoft Graph。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Microsoft 365 Teams,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

@mindstone/mcp-server-microsoft-teams

[npm version] [License: FSL-1.1-MIT]

Microsoft 365 Teams MCP server — list and read Teams chats and channel messages, send messages and replies, start new chats, look up colleagues, search messages, and read or set presence via the Microsoft Graph API.

Cohort-style Microsoft 365 Teams MCP. Reuses the OAuth surface owned by @mindstone/mcp-server-microsoft-mail so the host signs in once and gets Teams plus mail plus calendar plus files plus SharePoint from the same credentials.

Status

Why this exists

When we ported this in May 2026, Microsoft's own Graph MCP lineup did not yet ship a stand-alone Teams server, and the community options at the time treated Teams as its own login surface — every connector ran a separate OAuth dance and stored its own copy of the refresh token. We pulled the bundled connector out of MindstoneRebel as a 1:1 port so that the same five-connector Microsoft 365 cohort (mail, calendar, files, teams, SharePoint) shares a single set of credentials, a single shared-library package for token persistence and request timeouts, and the structured auth_required envelope the host already knows how to recover from. Teams reuses @mindstone/mcp-server-microsoft-mail's authenticate_microsoft_account tool rather than declaring its own. Some Teams Graph APIs may require tenant admin approval — see Microsoft's Teams Graph docs.

Example interaction

"Show me my last 10 messages in the project chat with Alice and Bob."

Tools the host calls:

  1. list_chats — filters chats by participants [email protected] and [email protected].
  2. list_chat_messages — returns the latest 10 messages from the resolved chat ID.

Response (trimmed):

json
{  "chat": {    "id": "19:[email protected]",    "topic": "Project planning",    "members": ["[email protected]", "[email protected]"]  },  "messages": [    { "id": "171...", "from": "Alice", "body": "Pushed the updated forecast", "createdDateTime": "2026-05-19T08:42:00Z" }  ]}

Requirements

  • Node.js 20+
  • npm
  • A host application that performs the Microsoft OAuth flow and writes per-account token files into ${MS_CONFIG_DIR}/credentials/${sanitised-email}.token.json and an ${MS_CONFIG_DIR}/accounts.json index. This server reads those files; it does not initiate OAuth itself.

One-click install

[Add to Cursor] [Add to VS Code] [Add to VS Code Insiders]

After clicking the button, your host will prompt you to fill: MS_CLIENT_ID, MS_CONFIG_DIR, MS_MCP_PACKAGE_ID, MICROSOFT_REQUEST_TIMEOUT_MS.

Manual config for Claude Desktop / Claude Code / Goose / Continue.dev (Microsoft 365 Teams)
json
{  "mcpServers": {    "Microsoft 365 Teams": {      "command": "npx",      "args": [        "-y",        "@mindstone/mcp-server-microsoft-teams"      ],      "env": {        "MS_CLIENT_ID": "",        "MS_CONFIG_DIR": "",        "MS_MCP_PACKAGE_ID": "Microsoft365Teams",        "MICROSOFT_REQUEST_TIMEOUT_MS": "60000"      }    }  }}

Quick Start

Install & build

bash
cd <path-to-repo>/connectors/microsoft-teamsnpm installnpm run build

npx (once published)

bash
npx -y @mindstone/mcp-server-microsoft-teams

Local

bash
node dist/index.js

Configuration

This server runs alongside a host application that owns the Microsoft 365 OAuth flow. The host writes credentials to disk; this server reads them.

Required environment variables

NameDescription
MS_CLIENT_IDMicrosoft Entra (Azure AD) application client ID.
MS_CONFIG_DIRPath to the per-user Microsoft config directory (credentials/, accounts.json).

Optional environment variables

NameDescriptionDefault
MS_ACCOUNT_EMAILAccount email when running in multi-account per-instance mode.First account in accounts.json.
MS_MCP_PACKAGE_IDLogical package ID surfaced in error responses.Microsoft365Teams
MICROSOFT_REQUEST_TIMEOUT_MSOverride the upstream Microsoft Graph request timeout (max 300000 ms).60000
MICROSOFT_DISABLE_REFRESHSet to 1 to disable token refresh on this surface. Tools fail closed with the structured auth_required response so the host can drive reauth. Cloud surfaces set this to 1.unset

Host configuration examples

Claude Desktop / Cursor

json
{  "mcpServers": {    "Microsoft365Teams": {      "command": "npx",      "args": ["-y", "@mindstone/mcp-server-microsoft-teams"],      "env": {        "MS_CLIENT_ID": "your-entra-application-client-id",        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"      }    }  }}

Sign in via @mindstone/mcp-server-microsoft-mail's authenticate_microsoft_account first; the Teams tools then reuse the credentials it writes to ${MS_CONFIG_DIR}/.

Local development (no npm publish needed)

json
{  "mcpServers": {    "Microsoft365Teams": {      "command": "node",      "args": ["<path-to-repo>/connectors/microsoft-teams/dist/index.js"],      "env": {        "MS_CLIENT_ID": "your-entra-application-client-id",        "MS_CONFIG_DIR": "/absolute/path/to/microsoft-config"      }    }  }}

Tools (17)

ToolDescription
list_chatsList recent Teams chats.
get_chatGet details about a specific chat.
list_chat_messagesList recent messages from a chat.
send_chat_messageSend a message to a chat.
reply_to_messageReply to a specific chat message, creating a threaded reply.
compose_chat_messageOpen an inline editable compose form before sending; the form posts via send_chat_message when the user clicks Send.
find_userLook up people by display name or email. Requires User.ReadBasic.All.
create_chatCreate a 1:1 or group chat by member email/user ID and return the new chat ID.
search_messagesSearch chat and channel messages by keyword.
list_teamsList teams you are a member of.
list_channelsList channels in a team.
list_channel_messagesList recent messages in a channel. Requires ChannelMessage.Read.All.
send_channel_messagePost a new message to a channel. Requires ChannelMessage.Send.
reply_to_channel_messageReply to an existing channel message. Requires ChannelMessage.Send.
get_presenceGet your current presence status.
get_user_presenceGet a colleague's presence status. Requires Presence.Read.All.
set_presenceSet your own presence status, optionally for a limited duration. Requires Presence.ReadWrite.

Some Teams Graph APIs may require tenant admin approval. Tools marked with a required permission check the connected account's token up front and return actionable reconnect guidance when the permission is missing (under Microsoft's managed consent policy, ChannelMessage.Read.All is admin-consent-gated in most tenants).

Compose send status

In hosts that remember send status, sending a message closes its other compose copies. Reloaded cards show "Message sent" with the send time and hide Reopen because they do not have the sent contents. The copy used to send keeps its posted contents in a read-only sent view, including when confirmation follows a lost reply. After an error or block reply, a later sent status from another copy shows only the sent bar, without this copy's contents. While a send is in progress, other copies show “Sending…” with Send, Retry, Cancel and Save draft (where available) disabled. Replies to this copy’s own requests keep those controls locked until the other send ends. If the send ends without a confirmed outcome, those copies return to editing and keep any earlier uncertainty. A copy waiting for its own Send reply keeps its sending view. Sent views stay read-only, and uncertainty remains until a send is confirmed. After an error or missing confirmation, check whether the message was sent before using Retry; the notice stays visible while editing and returns on Reopen. Collapsing the card does not resolve that uncertainty. Policy-block explanations stay visible while editing with Send disabled. Cancel says "Nothing sent" only when no send may have gone through, including a not-dispatched failure before the request left the device.

When sending is blocked by your settings, your organization or security policy, the card hides Retry and keeps Cancel. If the server is stopped, Retry remains available.

Send requests declare _meta: { 'mcp-app/cardOutcome': 'sent' } to supporting hosts.

Security notes

  • No authentication tool of its own; sign-in is delegated to @mindstone/mcp-server-microsoft-mail so the cohort has a single OAuth surface.
  • Per-tool Graph calls run under a composed caller + cohort timeout signal.

Licence

FSL-1.1-MIT — Functional Source License, Version 1.1, with MIT future licence. Free for non-competing use; relicenses to MIT on the converter date in LICENSE.

来源:connectors/microsoft-teams/README.md,提交 5510a4b

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v0.3.2Nov 4, 2026
  2. v0.3.1Sep 16, 2026

评分

已满足适用检查项的 80%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。

其他 Microsoft 集成