# Microsoft Teams

> Read channel messages, post replies, and trigger meetings from MS Teams.

[Canonical HTML page](https://top-mcps.com/mcp/microsoft-teams) · [server.json](https://top-mcps.com/mcp/microsoft-teams.json) · [methodology](https://top-mcps.com/about/methodology)

## Install

### Claude Desktop — `claude_desktop_config.json`

Paste under mcpServers. Fully quit and reopen Claude after editing.

```json
{
  "mcpServers": {
    "microsoft-teams": {
      "command": "npx",
      "args": [
        "-y",
        "teams-mcp-server"
      ],
      "env": {
        "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
        "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
      }
    }
  }
}
```

### Claude Code — `CLI or .mcp.json`

Run from your repo. Commit .mcp.json to share with your team.

```shell
# export AZURE_CLIENT_ID=app-registration-id
# export AZURE_TENANT_ID=tenant-id
claude mcp add microsoft-teams -- npx -y teams-mcp-server
```

### Cursor — `.cursor/mcp.json`

Global path: ~/.cursor/mcp.json. Reload window after editing.

```json
{
  "mcpServers": {
    "microsoft-teams": {
      "command": "npx",
      "args": [
        "-y",
        "teams-mcp-server"
      ],
      "env": {
        "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
        "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
      }
    }
  }
}
```

### VS Code — `.vscode/mcp.json`

VS Code uses the "servers" key (not "mcpServers").

```jsonc
{
  "servers": {
    "microsoft-teams": {
      "command": "npx",
      "args": [
        "-y",
        "teams-mcp-server"
      ],
      "env": {
        "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
        "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
      }
    }
  }
}
```

### Windsurf — `~/.codeium/windsurf/mcp_config.json`

Open via Cascade → hammer icon → Configure.

```json
{
  "mcpServers": {
    "microsoft-teams": {
      "command": "npx",
      "args": [
        "-y",
        "teams-mcp-server"
      ],
      "env": {
        "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
        "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
      }
    }
  }
}
```

### Cline — `cline_mcp_settings.json`

Open via the Cline sidebar → MCP Servers → Edit.

```json
{
  "mcpServers": {
    "microsoft-teams": {
      "command": "npx",
      "args": [
        "-y",
        "teams-mcp-server"
      ],
      "env": {
        "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
        "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
      }
    }
  }
}
```

### Continue — `~/.continue/config.json`

Continue uses modelContextProtocolServers with a transport block.

```json
{
  "experimental": {
    "modelContextProtocolServers": [
      {
        "transport": {
          "type": "stdio",
          "command": "npx",
          "args": [
            "-y",
            "teams-mcp-server"
          ],
          "env": {
            "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
            "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
          }
        }
      }
    ]
  }
}
```

### Codex CLI — `~/.codex/config.toml`

Codex uses TOML. Each server is a [mcp_servers.<name>] subtable.

```shell
# ~/.codex/config.toml
[mcp_servers.microsoft-teams]
command = "npx"
args = [
  "-y",
  "teams-mcp-server",
]
env = { AZURE_CLIENT_ID = "${AZURE_CLIENT_ID}", AZURE_TENANT_ID = "${AZURE_TENANT_ID}" }
```

### Zed — `~/.config/zed/settings.json`

Zed calls them "context_servers". Settings live-reload on save.

```jsonc
{
  "context_servers": {
    "microsoft-teams": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "teams-mcp-server"
        ]
      },
      "env": {
        "AZURE_CLIENT_ID": "${AZURE_CLIENT_ID}",
        "AZURE_TENANT_ID": "${AZURE_TENANT_ID}"
      }
    }
  }
}
```

### ChatGPT — `ChatGPT → Apps directory`

Microsoft Teams doesn't ship a hosted HTTPS endpoint today. ChatGPT supports remote MCP servers only — to use this server in ChatGPT you'll need to deploy it to a public HTTPS URL first (e.g. via Cloudflare Workers or Vercel) or wait for an official remote build.

```none

```

## At a glance

- **Maintainer:** Community (teams-mcp-server)
- **Transport:** Streamable HTTP, stdio
- **Auth model:** OAuth 2.1
- **Required secrets:** AZURE_CLIENT_ID, AZURE_TENANT_ID
- **Supported clients:** Claude, Cursor, VS Code, Windsurf, Any MCP-compatible client, Microsoft 365 tenant
- **License:** MIT
- **Language:** TypeScript
- **Latest version:** latest
- **Last verified:** 2026-05-31
- **GitHub stars:** 3,212 (fetched 2026-06-02T11:55:52.415Z)
- **Score:** 87/100 (rubric 2026-04 — see https://top-mcps.com/about/methodology)
- **Source:** https://github.com/microsoft/mcp

## Security & scope

- **Access scope:** network
- **Sandbox:** Entra ID OAuth 2.1. App registration owns the scope set; user grants per-session. Audit trail lives in Entra + Teams admin logs.
- **Gotchas:**
  - Over-broad scope grants are sticky — review the app registration's permissions before consenting org-wide.
  - Posted messages cannot be undone past retention windows.
  - Service principals (app-only auth) are tempting for headless agents but bypass user attribution — prefer delegated auth where you can.

## Quick answer

**What it does.** Connects via Microsoft Graph to a Microsoft Teams tenant, exposes channel/chat enumeration, message posting and reading, and basic meeting/calendar interactions.

**Best for:**
- Posting agent status to channels
- Summarising channel activity
- Meeting prep from calendar context
- Cross-tool notifications inside Teams

**Not for:**
- Tenants without admin consent for Graph scopes
- Heavy media (video, large file) workflows

## Description

The official Microsoft Teams MCP (via Microsoft Graph) lets an AI agent read channel messages, post to channels and chats, list teams and channels, and interact with calendar events. Auth flows through Microsoft Entra (formerly Azure AD) OAuth — the same identity stack the rest of M365 uses.

## Why it matters

MS Teams is the default workplace chat for the majority of large enterprises. An MCP unlocks the same agent-driven workflows Slack-shop teams already have.

## Key features

- Microsoft Graph integration
- Entra ID OAuth 2.1
- Channel + chat messaging
- Calendar / meeting access
- Per-tenant scoping

## FAQ

### Does this need admin consent?

Yes for most Graph scopes — admins must approve the app registration in Entra. Plan for the consent dance during onboarding.

### Personal Microsoft accounts?

Tenant-bound only. The MCP targets organisational Teams tenants; personal-account chats are out of scope.

### Can the agent send 1:1 messages?

Yes — chats are supported alongside channels. The user must already have a chat thread for the agent to post into (Graph cannot initiate new 1:1s freely).

### Meetings — full Teams meeting control?

Basic create/list/cancel via Graph. Full meeting orchestration (lobbies, breakouts) needs richer Teams APIs not in scope here.

## Changelog

- **2026-05-31** — Refreshed install snippets and fact sheet; verified for 2026.
- **2025-04-18** — Initial directory listing.
