/ ディレクトリ / プレイグラウンド / Microsoft Teams
● コミュニティ InditexTech 🔑 自分のキーが必要

Microsoft Teams

作者 InditexTech · InditexTech/mcp-teams-server

Teamsチャンネルの閲覧、メッセージの投稿、エンジニアへの@メンションを自然言語で実行できます。Microsoft Teamsを日常的に利用するチーム向けのチャットオプスブリッジです。

Inditexが開発したMicrosoft Teams向けコミュニティMCPサーバーは、Graph APIをラップし、エージェントがチャンネルメッセージの閲覧、メッセージや返信の投稿、ユーザーへの@メンション、チームやチャンネルの一覧取得を行えるようにします。Azure ADアプリ登録と適切なGraphスコープの設定が必要です。インシデント対応の連絡やスタンドアップの自動化に最適です。

なぜ使うのか

主な機能

ライブデモ

実際の動作

ms-teams.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "ms-teams": {
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "ms-teams",
      "command": "uvx",
      "args": [
        "mcp-teams-server"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "ms-teams": {
      "command": {
        "path": "uvx",
        "args": [
          "mcp-teams-server"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add ms-teams -- uvx mcp-teams-server

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Microsoft Teams

インシデントのSlack風スレッドをTeamsチャンネルにミラーリングする

👤 Microsoft環境の組織における運用担当 / オンコール担当 ⏱ ~30 min advanced

使うタイミング: Sentryでクリティカルな問題が発生した際、要約とオンコール担当者への@メンションを#incidents Teamsチャンネルに投稿したい場合。

前提条件
  • Graphスコープ ChannelMessage.Send、Channel.ReadBasic.All、User.Read.All を持つAzure ADアプリ登録 — entra.microsoft.com → アプリの登録 → 新規登録 → 管理者の同意を付与
  • 対象チャンネルのチームIDとチャンネルID — チャンネルを右クリック → チャンネルへのリンクを取得。URLにIDが埋め込まれています
フロー
  1. アラート内容を作成する
    Sentryの課題 [貼り付け] から、3行のインシデントサマリーを作成してください:何が壊れたか、ユーザーへの影響、疑われるリリース。✓ コピーしました
    → 簡潔なサマリー
  2. @メンション対象者を特定する
    現在のオンコール担当は誰ですか?メールアドレス [email] からTeamsのユーザーIDを解決し、メンションオブジェクトを返してください。✓ コピーしました
    → ユーザーとAAD IDが解決済み
  3. チャンネルに投稿する
    サマリーをチャンネル <id> に投稿し、オンコールエンジニアを@メンションしてください。また、Sentry課題へのリンクをフォローアップ返信として投稿してください。✓ コピーしました
    → messageIdが返され、Teamsで確認可能

結果: すべてのインシデントが、適切な担当者をタグ付けした構造化メッセージとしてTeamsに投稿されます。

注意点
  • @メンションにはAAD IDを含むmentionオブジェクトが必要です。単なる@nameテキストでは通知されません — まずGraph経由でユーザーのAAD IDを解決し、メッセージペイロードのmentions配列に渡してください
  • 管理者の同意が必要です。組織全体で同意が付与されるまでアプリは動作しません — AAD管理者にアプリのスコープに対する管理者の同意を付与してもらってください
組み合わせ: sentry

エンジニアリングの日次スタンドアップダイジェストをチームチャンネルに投稿する

👤 Microsoft Teamsを利用する組織のテックリード ⏱ ~20 min intermediate

使うタイミング: 毎朝、「昨日マージされたPR + 本日のオンコール + 未解決のP1」を#eng-standupに投稿する。

フロー
  1. 上流でダイジェストを組み立てる
    リポジトリの昨日マージされたGitHub PR + 現在のオンコール担当 + 未解決のP1チケットを取得し、8つの箇条書きに要約してください。✓ コピーしました
    → ダイジェスト内容
  2. フォーマット付きで投稿する
    チャンネル <id> にマークダウン見出し付きで投稿してください(Teamsはメッセージ内の基本的なフォーマットをサポートしています)。✓ コピーしました
    → メッセージが表示される
  3. スレッドをピン留めする
    必要に応じて、昨日のスタンドアップスレッドに返信し、古くなった旨をマークしてください。✓ コピーしました
    → 返信が投稿される

結果: Teamsで毎日定時にスタンドアップが実施され、手動で運営する必要がなくなります。

注意点
  • Teamsのマークダウンレンダリングには制限があり、一部のGitHubマークダウンが崩れます — プレーンテキスト + 太字 + リストのみを使用してください。テーブルやネストされたコードブロックは避けてください
組み合わせ: github · linear

不在中に盛り上がったチャンネルの内容を要約する

👤 休暇や長時間の会議から戻った方 ⏱ ~10 min beginner

使うタイミング: #platformの200件のメッセージを見逃したので、要点を把握したい場合。

フロー
  1. 最新メッセージを取得する
    チャンネル <id> の直近200件のメッセージを取得してください。テキスト + 投稿者 + タイムスタンプを返してください。✓ コピーしました
    → メッセージストリーム
  2. トピックごとにクラスタリングする
    メッセージを3〜5つのトピカルスレッドにグループ化してください。各トピックに名前を付け、主要なポイントをリストアップしてください。✓ コピーしました
    → トピックサマリー
  3. 自分宛のものをフラグ付けする
    自分(メール <email>)を@メンションしているメッセージ、または自分の過去のメッセージへの返信をハイライトしてください。それらは必読です。✓ コピーしました
    → 個人アクションリスト

結果: 賑やかなチャンネルの内容を30秒でキャッチアップできます。

注意点
  • 長いスレッドを取得するとメッセージサイズの上限に達します — 50件ずつバッチで取得し、バッチごとに要約してから最終的にまとめてください

顧客からの質問を@メンションで適切なチームにルーティングする

👤 カスタマーサクセス運用担当 ⏱ ~20 min intermediate

使うタイミング: パートナーが共有チャンネルで技術的な質問をした際、ドメインエキスパートにルーティングしたい場合。

フロー
  1. 質問を分類する
    このメッセージ [貼り付け] を読んでください。どの社内チームが担当ですか(請求、インテグレーション、データ)?✓ コピーしました
    → 単一のチームラベル
  2. 適切なエンジニアを特定する
    オンコールローテーション [貼り付けまたは検索] から、本日そのチームのオンコール担当者は誰ですか?AAD IDを返してください。✓ コピーしました
    → 担当者 + AAD ID
  3. メンション付きで返信する
    同じスレッドで、その担当者を@メンションして確認を依頼する返信を投稿してください。✓ コピーしました
    → 有効なメンション付きの返信が投稿される

結果: 共有チャンネルで質問が放置されることがなくなります。

注意点
  • 休暇中の人にルーティングすると、ルーティングしないより悪い結果になります — カレンダーや不在設定と照合し、主担当が不在の場合はバックアップにエスカレーションしてください

組み合わせ

他のMCPと組み合わせて10倍の力を

ms-teams + sentry

Sentryアラートをオンコール担当者への@メンション付きでTeamsに投稿する

Sentry課題 <id> について要約し、Teamsチャンネル <id> に投稿してください。オンコールエンジニア <email> をメンションしてください。✓ コピーしました
ms-teams + github

GitHubのPRレビューリクエストをTeamsに投稿する

'needs-platform-review'タグ付きのPRが作成されたら、#platformにリンク付きのTeamsメッセージを投稿し、レビュアーローテーションの担当者を@メンションしてください。✓ コピーしました
ms-teams + monday

monday.comのステータス更新をTeamsのプロジェクトチャンネルに投稿する

毎週金曜日に、mondayボード <id> の今週移動したアイテムを要約し、Teams #proj-atlasに投稿してください。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_teams ボットが参加しているチームを検出する 1 Graph call
list_channels team_id チーム内のチャンネルを一覧表示する 1 Graph call
list_messages team_id, channel_id, top? チャンネルの最新メッセージを読み取る 1 Graph call
send_message team_id, channel_id, content, mentions? チャンネルに投稿する 1 Graph call
send_reply team_id, channel_id, message_id, content, mentions? 既存のスレッド内で返信する 1 Graph call
resolve_user email|user_principal_name メンションオブジェクトを構築する前に使用する 1 Graph call

コストと制限

運用コスト

APIクォータ
Microsoft Graphスロットリング:テナントあたりアプリごとに10分間で約10,000リクエスト
呼び出しあたりのトークン
チャンネルメッセージ取得:1ページあたり200〜1,500トークン
金額
Teamsライセンスを持つM365組織であれば無料です。
ヒント
チーム/チャンネルIDはほとんど変わらないのでキャッシュしてください。ユーザーのAAD IDはメールアドレスごとに一度解決し、再利用してください。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: ChannelMessage.Send Channel.ReadBasic.All User.Read.All
認証情報の保管: Azure ADのクライアントID、クライアントシークレット、テナントIDを環境変数として保存
データ送信先: すべての呼び出しはgraph.microsoft.com宛て(テナント内)
絶対に付与しない: Group.ReadWrite.All Directory.ReadWrite.All

トラブルシューティング

よくあるエラーと対処法

AADSTS70011: Invalid scope

スコープ名が誤っているか、付与されていません。Graphアプリスコープには管理者の同意が必要です。

確認: アプリの登録 → APIのアクセス許可 → 状態列が「付与済み」と表示されていることを確認してください
403 Forbidden on sendMessage

アプリにChannelMessage.Send権限がないか、ユーザーがそのチームのメンバーではありません。

@-mentionがユーザーに通知されない

AAD IDを含むmentions配列ではなく、プレーンテキストの@nameを使用しています。まずユーザーを解決してから、メンションオブジェクトを含めてください。

429 throttled

Graph呼び出しが多すぎます。指数バックオフで待機し、可能な場合はバッチ処理を行い、IDをキャッシュしてください。

代替案

Microsoft Teams 他との比較

代替案代わりに使う場面トレードオフ
Slack MCPチームがSlackを使用している場合プラットフォームが異なります。Slack MCPの方が認証が簡単です
Power Automate / FlowM365内でノーコード自動化を行いたい場合AIエージェント駆動のワークフローには柔軟性が劣ります

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る