MCP Microsoft Teams Server
[](https://sonarcloud.io/summary/new_code?id=InditexTech_mcp-teams-server)
[](https://sonarcloud.io/summary/new_code?id=InditexTech_mcp-teams-server)
[](https://sonarcloud.io/summary/new_code?id=InditexTech_mcp-teams-server)


[](https://scorecard.dev/viewer/?uri=github.com/InditexTech/mcp-teams-server)
<!-- [](https://www.bestpractices.dev/projects/10400) -->
# MCP Teams Server
An MCP ([Model Context Protocol](https://modelcontextprotocol.io/introduction)) server implementation for
[Microsoft Teams](https://www.microsoft.com/en-us/microsoft-teams/group-chat-software/) integration, providing capabilities to
read messages, create messages, reply to messages, mention members.
## Features
https://github.com/user-attachments/assets/548a9768-1119-4a2d-bd5c-6b41069fc522
- Start thread in channel with title and contents, mentioning users
- Update existing threads with message replies, mentioning users
- Read thread replies
- List channel team members
- Read channel messages
## Prerequisites
- [uv](https://github.com/astral-sh/uv) package manager
- [Python 3.12](https://www.python.org/)
- Microsoft Teams account with [proper set-up](./doc/MS-Teams-setup.md)
## Installation
1. Clone the repository:
```bash
git clone https://github.com/InditexTech/mcp-teams-server
cd mcp-teams-server
```
2. Create a virtual environment and install dependencies:
```bash
uv venv
uv sync --frozen --all-extras --dev
```
## Teams configuration
Please read [this document](./doc/MS-Teams-setup.md) to help you to configure Microsoft Teams and required
Azure resources. It is not a step-by-step guide but can help you figure out what you will need.
## Usage
Set up the following environment variables in your shell or in an .env file. You can use [sample file](./sample.env)
as a template:
| Key | Description |
|-------------------------|--------------------------------------------|
| **TEAMS_APP_ID** | UUID for your MS Entra ID application ID |
| **TEAMS_APP_PASSWORD** | Client secret |
| **TEAMS_APP_TENANT_ID** | Tenant uuid in case of SingleTenant |
| **TEAM_ID** | MS Teams Group Id or Team Id |
| **TEAMS_CHANNEL_ID** | MS Teams Channel ID with url escaped chars |
Start the server:
```bash
uv run mcp-teams-server
```
The default MCP transport is `stdio`. You can also use `streamable-http` for HTTP deployments:
```bash
uv run mcp-teams-server --transport streamable-http
```
The legacy `sse` transport is still available for older clients.
## Development
Integration tests require the set-up the following environment variables:
| Key | Description |
|------------------------|--------------------------------|
| **TEST_THREAD_ID** | timestamp of the thread id |
| **TEST_MESSAGE_ID** | timestamp of the message id |
| **TEST_USER_NAME** | test user name |
```bash
uv run pytest -m integration
```
### Pre-built docker image
There is a [pre-built image](https://github.com/InditexTech/mcp-teams-server/pkgs/container/mcp-teams-server) hosted in ghcr.io.
You can install this image by running the following command
```commandline
docker pull ghcr.io/inditextech/mcp-teams-server:latest
```
### Build docker image
A docker image is available to run MCP server. You can build it with the following command:
```bash
docker build . -t inditextech/mcp-teams-server
```
### Run docker image
Basic run configuration:
```bash
docker run -it inditextech/mcp-teams-server
```
Run with environment variables from .env file:
```bash
docker run --env-file .env -it inditextech/mcp-teams-server
```
Run with Streamable HTTP transport:
```bash
docker run --env-file .env -p 8000:8000 -it inditextech/mcp-teams-server --transport streamable-http
```
### Setup LLM to use MCP Teams Server
Please follow instructions on the [following document](./llms-install.md)
## Changelog
See [CHANGELOG.md](CHANGELOG.md) for a list of changes and version history.
## Contributing
Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull
requests.
## Security
For security concerns, please see our [Security Policy](SECURITY.md).
## License
This project is licensed under the [Apache-2.0](LICENSE.txt) file for details.
© 2025 INDUSTRIA DE DISEÑO TEXTIL S.A. (INDITEX S.A.)
TDQS
Scored across 6 tools
Each tool targets a distinct resource-action pair: thread lifecycle (start/update/read/list) and member lookup (get by name/list). There is no meaningful overlap, and the descriptions make the boundary between read_thread and list_threads clear.
All tools follow a consistent snake_case verb_noun pattern such as start_, update_, read_, list_, and get_. The verb choices are predictable and match the operation being performed.
Six tools is well-scoped for a Teams server covering thread management and member lookup. There are no redundant tools, and the set feels appropriately sized for its stated domain.
Threads have start, read, update, and list coverage, while members have get and list coverage. Missing thread deletion and explicit reply/send-message operations are minor gaps, but the core workflows agents would likely need are covered.