← Back to directory
M

MCP Teams Server

Community
Read, post, and reply to Microsoft Teams messages via MCP.
Category
Collaboration #12 of 55
Stars
★ 447 Very popular
Transport
stdio (local process)
Runtime
Python 3.10 · Docker · Prebuilt binary
Credentials
API key / credential required
License
Apache-2.0
Last commit
59FMRS · C

Maintained by Inditex (InditexTech), not an official Microsoft project, and licensed under Apache-2.0. It carries SonarCloud quality badges, an OpenSSF Scorecard badge, and has a formal CHANGELOG, contributing guide, and security policy, plus an official pre-built Docker image — reflecting solid engineering practices, though it does require the user to complete Azure/Teams setup beforehand.

Strongest · Maintenance 15/20 Weakest · Reliability 9/20

Reliability
9/20
Security and permissions
12/20
Maintenance
15/20
Documentation
13/20
Setup experience
10/20
Why each score
Reliability 9/20
The README references integration tests (uv run pytest -m integration), but no CI workflow files or verifiable test-coverage evidence are present in the supplied material, and no server manifest was cached, so declared tools (read/create/reply messages, list members) cannot be confirmed against actual behavior. Per the static calibration rule, reliability is capped at 12 without verifiable execution evidence (real CI plus committed tests covering key paths); given the missing manifest and untested tool contract, this scores 9.
Security and permissions 12/20
Credentials are passed via environment variables (TEAMS_APP_ID, TEAMS_APP_PASSWORD, etc.) with no hardcoded secrets or real tokens in examples — the sample.env is a template only, which is reasonable practice. However, the README does not describe least-privilege scoping, confirmation flows for message-posting/reply side effects that are externally visible, or the data flow to the Microsoft Graph/Teams API and any rate-limit handling. No red-line issue is present, but permission boundaries and confirmation are incompletely disclosed, so this scores 12.
Maintenance 15/20
The project carries an Apache-2.0 license, includes CHANGELOG.md, CONTRIBUTING.md, and SECURITY.md, and integrates SonarCloud and OpenSSF Scorecard badges, indicating active governance. With 390 stars, only 9 open issues, and no archival status, ownership appears active. Direct evidence of release cadence or dependency-update automation is not shown, so it falls short of full marks, scoring 15.
Documentation 13/20
The README provides clear install steps, an environment variable table, Docker build/run instructions, and links to supplementary docs (MS-Teams-setup.md, llms-install.md). However, it lacks a detailed tool-parameter reference (no manifest), a troubleshooting section, and disclosure of rate limits or cost — layered but incomplete coverage, scoring 13.
Setup experience 10/20
Setup requires uv, Python 3.10, and registering an app in Microsoft Entra ID/Azure plus Teams channel configuration; the linked MS-Teams-setup.md is explicitly described as not a step-by-step guide, making the path manual and dependent on external Azure resource provisioning. Per the static calibration rule, setup is capped at 15 without verifiable execution evidence; given this complexity, it scores 10.

Static review · not runListed 2026-08-26

Read the FMRS scoring method →

Fit and risk

What it can accessUses the networkChanges third-party account data

Best for

  • Teams or organizations that have already completed Microsoft Teams and Azure/Entra ID app registration
  • Scenarios where an AI agent needs to post and reply to messages directly in Teams channels
  • Developers on the uv/Python stack who are comfortable self-hosting or using the official Docker image

Not for

  • Individuals without a Microsoft 365/Teams account or unable to register an Entra ID app
  • Use cases needing 1:1 chat, meetings, or calls — not described as supported features
  • Users who want zero-configuration setup without handling OAuth client secrets and other sensitive credentials

Required permissions

  • Microsoft Entra ID application ID and client secret (TEAMS_APP_ID / TEAMS_APP_PASSWORD)
  • Tenant configuration (TEAMS_APP_TYPE, and TEAMS_APP_TENANT_ID for SingleTenant setups)
  • Target MS Teams Team ID and Channel ID (TEAM_ID / TEAMS_CHANNEL_ID)
  • The registered app needs permission to read and post/reply to messages in the target channel

Risks and side effects

  • TEAMS_APP_PASSWORD is a client secret; if leaked it could let an attacker impersonate the app and access Teams data, so environment variables and .env files must be protected
  • The server can read the full message history of a channel, potentially exposing sensitive channel content to the connected LLM or agent
  • The server can actively post or reply in the channel on the app's behalf, so misconfiguration or a bad prompt could send unintended messages to real users

Setup

Before you start

Runtime:Python 3.10 · Docker · Prebuilt binary

TEAMS_APP_ID required UUID of your MS Entra ID application, from the Azure app registration.
TEAMS_APP_PASSWORD requiredsecret Client secret, generated in the Azure app registration.
TEAMS_APP_TYPE required App tenant type: SingleTenant or MultiTenant.
TEAM_ID required MS Teams Group Id or Team Id.
TEAMS_CHANNEL_ID required MS Teams Channel ID with url-escaped characters.
Other optional settings (4)
TEAMS_APP_TENANT_ID optional Tenant UUID, needed only for SingleTenant.
TEST_THREAD_ID optional For integration tests: timestamp of the thread id.
TEST_MESSAGE_ID optional For integration tests: timestamp of the message id.
TEST_USER_NAME optional For integration tests: test user name.
  1. Clone the repository and enter its directory
  2. Follow doc/MS-Teams-setup.md to configure Microsoft Teams and the required Azure (Entra ID app) resources
  3. Create a virtual environment with uv venv and install dependencies with uv sync --frozen --all-extras --dev
  4. Set the required environment variables (TEAMS_APP_ID, TEAMS_APP_PASSWORD, TEAMS_APP_TYPE, TEAMS_APP_TENANT_ID, TEAM_ID, TEAMS_CHANNEL_ID), using sample.env as a template
  5. Run uv run mcp-teams-server to start the server; alternatively pull the pre-built image with docker pull ghcr.io/inditextech/mcp-teams-server:latest or build/run your own Docker image.

Check that it works

Start with uv run mcp-teams-server or the pulled docker image; when the client connects, tools for reading/creating/replying to messages and mentioning members should appear in the tool list, and asking to list channel team members proves the connection.

Troubleshooting

  1. Confirm the Teams and Azure setup steps in doc/MS-Teams-setup.md have been completed
  2. Verify TEAMS_APP_ID, TEAMS_APP_PASSWORD, TEAMS_APP_TYPE, and TEAMS_APP_TENANT_ID are set correctly (see sample.env)
  3. Make sure TEAMS_CHANNEL_ID has its special characters URL-escaped as required
  4. Check that TEAMS_APP_TYPE (SingleTenant or MultiTenant) matches the actual Entra ID app configuration
  5. When running via Docker, confirm variables are passed correctly with --env-file
  6. For integration tests, additionally set TEST_THREAD_ID, TEST_MESSAGE_ID, and TEST_USER_NAME

Things to try

Once connected, you can ask your AI assistant things like:

  • Start a new thread in the Teams channel titled Project Update with this week's progress and mention the relevant members
  • List the team members of the channel
  • Read the replies in a specific thread
  • Reply to an existing thread message and mention a member

Use cases

Have an AI assistant start a new thread in a Teams channel and mention relevant members
Have an AI assistant reply to an existing Teams thread on the user's behalf
Retrieve and summarize all replies within a specific thread
Read channel message history for analysis or summarization
List channel team members so they can be mentioned correctly in messages

Overview

MCP Teams Server is a Model Context Protocol server implementation that integrates with Microsoft Teams. It lets an MCP client start a new thread in a channel with a title and content while mentioning users, reply to existing threads with mentions, read thread replies, list channel team members, and read channel messages. It is a Python project run with uv, configured through Microsoft Entra ID app credentials (app ID, client secret, tenant info) plus a target Team ID and Channel ID. It is published by Inditex (InditexTech) under the Apache-2.0 license.

Similar servers

Source revision b0f3251377f7 Data synced 2026-10-19 Read the FMRS scoring method