Microsoft 365 Teams

io.github.mindstonePublished by GitHub account mindstonev0.3.2Updated Nov 4, 2026

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

The publisher's own server: Microsoft Learn MCP

Overview

AI-generated overview

Local MCP server that lets an assistant read, search and send Microsoft Teams chats and channel messages, look up colleagues, and read or set presence via…

What you can do
  • List and inspect chats, including chat details and recent chat messages
  • Send chat messages, reply in threads, and open an editable compose form before sending
  • Search chat and channel messages by keyword and look up colleagues by name or email
  • Create new 1:1 or group chats and return the new chat ID
  • List teams and channels, read channel messages, and post or reply to channel messages
  • Read your own or a colleague's presence and set your own status, optionally for a limited duration
When to use it
Useful when you want an assistant to work inside Microsoft Teams: catching up on chats or channels, finding a colleague, drafting and sending messages, or checking and setting presence. It fits hosts that already handle Microsoft 365 sign-in for the same account.
Requirements
Runs locally via npx with Node.js 20+ and npm. Requires MS_CLIENT_ID (Microsoft Entra application client ID) and MS_CONFIG_DIR (per-user config directory holding credentials and accounts.json). It does not perform OAuth itself: a host application must sign in and write token files, typically through the companion Microsoft mail server's authenticate_microsoft_account tool. Optional: MS_ACCOUNT_EMAIL, MS_MCP_PACKAGE_ID, MICROSOFT_REQUEST_TIMEOUT_MS.
Before you install
It reads token files from MS_CONFIG_DIR, so that directory holds sensitive Microsoft credentials and should be protected. Sending, replying and creating chats post real messages to colleagues, and set_presence changes your visible status. Several tools need Graph permissions that may require tenant admin approval, and some calls fail with reconnect guidance when a permission is missing. Message content and directory lookups go to Microsoft Graph.

Installation

In SourceWeft

  1. Open Microsoft 365 Teams in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

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.

Source: connectors/microsoft-teams/README.md at commit 5510a4b

Tools

17

list_chats

List recent Teams chats (1:1, group, and meeting chats).

Parameterstop

get_chat

Get details about a specific chat.

ParameterschatIdrequired

list_chat_messages

Get recent messages from a chat.

ParameterstopchatIdrequired

compose_chat_message

Open an inline editable message compose form before sending to a Teams chat. Use this when the user wants to write or send a Teams message so they can review and edit it first. Does NOT send directly — the form posts the message (via send_chat_message) when the user clicks Send. PARAMETERS: target (the chat ID to send to), text (message content).

Parameterstextrequiredtargetrequired

send_chat_message

Send a message to a chat.

ParameterschatIdrequiredcontentrequired

reply_to_message

Reply to a specific message in a chat, creating a threaded reply.

ParameterschatIdrequiredcontentrequiredmessageIdrequired

search_messages

Search Teams chat and channel messages by keyword across conversations you can access.

Parameterstopqueryrequired

find_user

Look up people in the organization by display name or email address. Use this to resolve a colleague to a user ID or email before creating a chat. Requires the User.ReadBasic.All Graph permission.

Parametersqueryrequired

create_chat

Create a new 1:1 or group chat with one or more colleagues (by email address or user ID) and return the new chat ID, which can then be used with send_chat_message.

Parameterstopicmembersrequired

list_teams

List Teams you are a member of.

Takes no parameters.

list_channels

List channels in a Team.

ParametersteamIdrequired

list_channel_messages

List recent messages in a Teams channel. Requires the ChannelMessage.Read.All Graph permission, which may need tenant admin approval.

ParameterstopteamIdrequiredchannelIdrequired

send_channel_message

Post a new message to a Teams channel. Requires the ChannelMessage.Send Graph permission, which may need tenant admin approval.

ParametersteamIdrequiredcontentrequiredchannelIdrequired

reply_to_channel_message

Reply to an existing message in a Teams channel. Requires the ChannelMessage.Send Graph permission, which may need tenant admin approval.

ParametersteamIdrequiredcontentrequiredchannelIdrequiredmessageIdrequired

get_presence

Get your current presence status (available, busy, away, etc.).

Takes no parameters.

get_user_presence

Get a colleague's current presence status (available, busy, in a meeting, etc.). Requires the Presence.Read.All Graph permission, which may need tenant admin approval.

ParametersuserIdrequired

set_presence

Set your own presence status (e.g. Busy, DoNotDisturb, Away), optionally for a limited duration. Requires the Presence.ReadWrite Graph permission.

ParametersavailabilityrequireddurationMinutes

Version history

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

Score

80% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other Microsoft integrations