← Back to directory
M

MCP Teams Server

Community
Read, post, and reply to Microsoft Teams messages via MCP.
GitHub source repository ↗
★ 394 Stars Category · Collaboration Very popular Source revision a61db7677b7e
59FMRS · C
Reliability
9/20
Security and permissions
12/20
Maintenance
15/20
Documentation
13/20
Setup experience
10/20

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.

Read the FMRS scoring method →

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.

Tools

The tool list has not been reviewed yet.

Setup

  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.

Fit and risk

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

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

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

Supported clients

Supported clients have not been confirmed yet.