
Mcp Teams
io.github.dockndevaiPublished by GitHub account dockndevaiv0.2.0Updated Oct 24, 2026
Read Microsoft Teams teams, channels, chats and messages, and post/reply/send, safe by default.
Overview
A safe-by-default local MCP server that lets an assistant read Microsoft Teams teams, channels, chats and messages, and optionally post, reply or soft-delete.
- What you can do
- Confirm the signed-in account and list joined teams, channels and team members, with recent channel messages, single messages and threaded replies read-only by default. List the user's 1:1 and group chats and read their messages. In read-write mode with sending enabled, post to channels, reply in threads and send chat messages. In admin mode with deletes enabled, soft-delete the user's own messages.
- When to use it
- Use it when an assistant should answer questions from Teams conversations or summarize channels and chats, or when you want it to post or reply in Teams under explicit, gated permissions. It suits users who want read access first and writes only after deliberately raising the mode.
- Requirements
- Runs locally via npx, so Node.js is needed. Requires an Entra (Azure AD) app registration: TEAMS_CLIENT_ID, plus TEAMS_TENANT_ID (default common), with delegated Graph scopes such as Team.ReadBasic.All, Channel.ReadBasic.All and ChannelMessage.Read.All, and send/chat scopes to post. Interactive browser sign-in is the default and caches a token on disk; alternatively TEAMS_CLIENT_SECRET for app-only auth or TEAMS_TOKEN for a pre-obtained Graph token. Network access to Microsoft Graph.
Installation
In SourceWeft
- Open Mcp Teams in the dashboard and add it to a workspace.
- 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
mcp-teams
A safe-by-default Model Context Protocol server for Microsoft Teams, over Microsoft Graph. It lets an agent read and operate Teams — list joined teams, channels and members, read channel messages and threaded replies, read 1:1/group chats and their messages, and (in higher modes) post to channels, reply in threads, send chat messages, and soft-delete a message.
Browser sign-in: on first run it opens your browser to the Microsoft sign-in page, then caches the token and refreshes it silently — the server never sees your password.
Part of the dockndevai MCP server suite — one governance model across all of them.
What it gives an agent
The server starts read-only (see Safe by default); higher-capability tools are only registered when you raise the mode.
Install
You need an Entra (Azure AD) app registration. For the default browser sign-in, register a public client and add the redirect URI http://localhost (platform: Mobile and desktop applications), then use its Application (client) ID as TEAMS_CLIENT_ID. Grant delegated Team.ReadBasic.All, Channel.ReadBasic.All, ChannelMessage.Read.All (and ChannelMessage.Send / Chat.ReadWrite to post). No client secret is needed for interactive use.
Configure
On first use the server opens your browser to sign in and caches the token at ~/.mcp-teams/token.json (0600); later runs refresh silently.
See docs/CLIENTS.md for Claude Code / Cursor / Codex / VS Code / Windsurf snippets, and .env.example for every supported variable.
Authentication
Auth mode is chosen automatically (override with TEAMS_AUTH):
- interactive (default) — only
TEAMS_CLIENT_IDset. Authorization-code + PKCE with a loopback redirect: the browser opens, you approve once, and the access + refresh token are cached on disk. Most Teams messaging APIs are delegated-only, so this is the primary mode. The server never handles your password. - client-credentials (app-only) —
TEAMS_CLIENT_SECRETpresent; the server fetches an app token itself. Note that several Teams message APIs are not available to app-only tokens without protected-API approval from Microsoft. - token —
TEAMS_TOKENset to a pre-obtained Graph bearer token. You manage its lifetime.
Safe by default
The access model is enforced by src/security.ts — defence in depth on top of the Graph token's own scopes/roles:
TEAMS_MODE—read-only(default) →read-write→admin. A tool is registered only if the mode allows its capability. Read-only exposes the 9 read tools; posting needsread-write; deletes needadmin.TEAMS_ALLOW_SEND— posting a message is visible to others and can't be silently un-posted, so on top ofread-writeit also requires this flag.TEAMS_ALLOW_DELETE— deletes require this flag on top ofadminmode. Deletes are soft-deletes (recoverable), and only your own messages.TEAMS_TEAM_ALLOWLIST/TEAMS_PROTECTED_TEAMS— confine which teams can be posted to / moderated; mark teams that may be read but never posted to.- Interactive confirmation — when the client supports MCP elicitation, posting and deleting pause and ask the human to approve the exact target before running; clients that can't elicit fall back to the
TEAMS_ALLOW_SEND/TEAMS_ALLOW_DELETEgates. TEAMS_DRY_RUN— validate and log writes without executing them.TEAMS_AUDIT_LOG— a JSON audit line per guarded operation, on stderr (default on).
See SECURITY.md.
Developing
Licence
MIT
Source: README.md at commit 684d1de
Tools
0Version history
2- v0.2.0LatestSep 29, 2026
- v0.1.0Sep 16, 2026
Score
50% 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
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- 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 listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts