Teams Mcp について
Teams MCP は、Microsoft Graph API を通じて AI アシスタントから Microsoft Teams のチャネル、チャット、ファイル、ユーザー、組織データにアクセスできる MCP サーバーです。読み取り専用モードを備え、独自の Azure AD アプリ登録による認証にも対応しています。
主な機能
- 01チャネルとチャットメッセージの読み取り、送信、編集、ソフト削除
- 02Markdown によるメッセージ整形と HTML サニタイズ
- 03Teams メッセージの HTML から Markdown への変換
- 04大容量ファイルを含むファイルアップロードと添付ファイルのダウンロード
- 05KQL によるメッセージ検索とメンション取得
- 06読み取り権限のみを要求する読み取り専用モード
活用シーン
- 01AI アシスタントによるチームチャネルやグループチャットの直近メッセージの要約
- 02AI アシスタントを通じたチャネルへの整形済みお知らせやスレッド返信の投稿
- 03読み取り専用モードでの Teams メッセージの取得と分析・アーカイブ
MCP 対応
本プロジェクトは MCP サーバーであり、Teams のユーザー、チーム、チャネル、チャット、検索、ファイル操作を MCP クライアントに向けてツールとして公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
31掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Teams MCP
Microsoft Graph API とシームレスに連携する Model Context Protocol(MCP)サーバーです。AI アシスタントが Microsoft Teams、ユーザー、チャット、ファイル、組織データを操作できるようにします。
📦 インストール
Cursor/Claude/VS Code でこの MCP サーバーを使用するには、次の設定を追加します。
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"]
}
}
}
🚀 機能
🔐 認証
- Microsoft Graph の OAuth 2.0 デバイスコード認証フロー
- セキュアなトークン管理、キャッシュの永続化、リフレッシュトークンの更新
- 認証状態の確認とログアウトに対応
- スコープを限定した読み取り専用モード
- 発行済みの Microsoft Graph アクセストークンを指定できる
AUTH_TOKENに対応
👥 ユーザー管理
- 現在のユーザー情報を取得
- 名前またはメールアドレスでユーザーを検索
- 詳細なユーザープロフィールを取得
- 組織のディレクトリデータにアクセス
🏢 Microsoft Teams 連携
-
チーム管理
- ユーザーが参加しているチームを一覧表示
- チームの詳細とメタデータにアクセス
-
チャネル操作
- チーム内のチャネルを一覧表示
- チャネルのメッセージと返信を取得
- チームのチャネルにメッセージを送信
- 既存のチャネルスレッドに返信
- チャネルのメッセージと返信を編集し、論理削除
- メッセージの重要度(
normal、high、urgent)に対応 - URL または base64 データによるインライン画像の添付に対応
-
チームメンバー
- チームメンバーとその役割を一覧表示
- メンバー情報にアクセス
@mentionsの対象ユーザーを検索
💬 チャットとメッセージ
- 1 対 1 およびグループチャット
- ユーザーのチャットを一覧表示
- 新しい 1 対 1 またはグループの会話を作成
- フィルタリング、並べ替え、ページネーションでチャットのメッセージ履歴を取得
@odata.nextLinkによるページネーションですべてのメッセージを取得- 既存のチャットにメッセージを送信
- 送信済みチャットメッセージを編集
- チャットメッセージを論理削除
✏️ メッセージ管理
- 編集と削除
- チャットとチャネルで送信済みメッセージを更新(編集)
- チャットとチャネルのメッセージを論理削除(完全に削除せず、削除済みとしてマーク)
- メッセージを更新/削除できるのは送信者本人のみ
- 編集時の Markdown 形式、メンション、重要度に対応
📎 メディアと添付ファイル
-
ホストされたコンテンツ
- チャットやチャネルのメッセージからホストされたコンテンツ(画像、ファイル)をダウンロード
- 会話で共有されたインライン画像や添付ファイルにアクセス
- ホストされたコンテンツをディスクに直接保存するオプション
-
ファイルのアップロード
- あらゆる種類のファイル(PDF、DOCX、XLSX、ZIP、画像など)をチャネルやチャットにアップロードして送信
- 再開可能なアップロードセッションによる大容量ファイル(>4 MB)への対応
- チャネルへのアップロード先は SharePoint、チャットへのアップロード先は OneDrive
- メッセージテキスト、カスタムファイル名、書式設定、重要度を指定可能
🔍 高度な検索と検出
- メッセージ検索
- Microsoft Search API を使用して、すべての Teams チャネルとチャットを検索
- KQL(Keyword Query Language)構文に対応
- 送信者、メンション、添付ファイル、既読状態、日付範囲でフィルタリング
- 高度なフィルタリングオプションで最近のメッセージを取得
- 現在のユーザーにメンションしているメッセージを検索
リッチメッセージの書式設定サポート
次のツールは、Teams のチャネルやチャットでリッチメッセージの書式設定をサポートしています。
send_channel_messagesend_chat_messagereply_to_channel_messageupdate_channel_messageupdate_chat_messagesend_file_to_channelsend_file_to_chat
書式設定オプション
メッセージの書式設定を制御するには、format パラメーターを指定できます。
text(デフォルト):プレーンテキストmarkdown:Markdown の書式設定(太字、斜体、リスト、リンク、コードなど)をサニタイズ済み HTML に変換します
format を markdown に設定すると、メッセージの内容は安全な Markdown パーサーを使用して HTML に変換され、Teams に送信する前に危険性のあるコンテンツが取り除かれるようサニタイズされます。
format を指定しない場合、メッセージはプレーンテキストとして送信されます。
使用例
{
"teamId": "...",
"channelId": "...",
"message": "**Bold text** and _italic text_\n\n- List item 1\n- List item 2\n\n[Link](https://example.com)",
"format": "markdown",
"importance": "high"
}
{
"chatId": "...",
"message": "Simple plain text message",
"format": "text"
}
セキュリティ機能
- HTML のサニタイズ:すべての Markdown コンテンツは HTML に変換され、危険性のある要素(スクリプト、イベントハンドラーなど)が取り除かれるようサニタイズされます
- 許可されるタグ:安全な HTML タグ(p、strong、em、a、ul、ol、li、h1-h6、code、pre など)のみが許可されます
- 安全な属性:安全な属性のみが許可されます
- XSS の防止:クロスサイトスクリプティング攻撃を防ぐため、コンテンツは自動的にサニタイズされます
サポートされる Markdown 機能
- テキストの書式設定:太字(
**text**)、斜体(_text_)、取り消し線(~~text~~) - リンク:
[text](url) - リスト:箇条書き(
- item)と番号付きリスト(1. item) - コード:インラインの
`code`とフェンス付きコードブロック - 見出し:
# H1から###### H6まで - 引用:
> quoted text - 表:GitHub Flavored Markdown の表
LLM に適したコンテンツ形式
Microsoft Graph API から取得したメッセージは、Teams 固有のタグを含む生の HTML として返されます。このコンテンツを AI アシスタントがより扱いやすくするため、次のツールは HTML から Markdown への自動変換をサポートしています。
get_chat_messagesget_channel_messagesget_channel_message_repliessearch_messagesget_my_mentions
コンテンツ形式のオプション
メッセージコンテンツの返却形式を制御するには、contentFormat パラメーターを使用します。
markdown(デフォルト):LLM での利用に最適化された、読みやすい Markdown に Teams の HTML を変換しますraw:Microsoft Graph API からの元の HTML を返します
変換される内容
| HTML 要素 | Markdown の出力 |
|---|---|
<at id="0">Name</at>(Teams のメンション) | @Name(複数語の名前はメンションのメタデータを使用して結合されます) |
<strong>text</strong> | **text** |
<em>text</em> | *text* |
<code>text</code> | `text` |
<a href="url">text</a> | [text](url) |
<ul><li>item</li></ul> | - item |
<table>...</table> | GFM Markdown の表 |
<attachment id="..."> | {attachment:id} |
<systemEventMessage/> | (削除されます) |
<hr> | --- |
、& など | プレーン文字にデコードされます |
添付ファイルのメタデータ
ファイル添付やインライン画像を含むメッセージのレスポンスには、各添付ファイルのメタデータ(id、name、contentType、contentUrl、thumbnailUrl)を含む attachments 配列があります。Markdown コンテンツ内のインライン {attachment:id} マーカーは、この配列のエントリに対応しており、コンシューマーは download_message_hosted_content または download_chat_hosted_content を使って添付ファイルを特定し、ダウンロードできます。
使用例
{
"chatId": "19:meeting_...",
"limit": 10,
"contentFormat": "markdown"
}
元の HTML を取得するには:
{
"chatId": "19:meeting_...",
"limit": 10,
"contentFormat": "raw"
}
📦 インストール
# Install dependencies
npm install
# Build the project
npm run build
# Set up authentication
npm run auth
🔧 設定
前提条件
- Node.js 18+
- 適切な権限を持つ Microsoft 365 アカウント
- 以下のスコープに対する Microsoft Graph の委任されたアクセス許可
必要な Microsoft Graph のアクセス許可
フルモード(デフォルト):
User.Read- ユーザープロファイルを読み取るUser.ReadBasic.All- ユーザーの基本情報を読み取るTeam.ReadBasic.All- チーム情報を読み取るChannel.ReadBasic.All- チャネル情報を読み取るChannelMessage.Read.All- チャネルのメッセージを読み取るChannelMessage.Send- チャネルのメッセージや返信を送信するChannelMessage.ReadWrite- チャネルのメッセージを編集、削除するChat.Read- チャットメッセージを読み取る(読み取り専用スコープを通じて含まれます)Chat.ReadWrite- チャットを作成、管理し、チャットメッセージを送信、編集、削除する(Chat.Readに優先します)TeamMember.Read.All- チームメンバーを読み取るFiles.ReadWrite.All- チャネルおよびチャットへのファイルアップロードに必要です
読み取り専用モード(TEAMS_MCP_READ_ONLY=true)— 以下のスコープのみが要求されます:
User.ReadUser.ReadBasic.AllTeam.ReadBasic.AllChannel.ReadBasic.AllChannelMessage.Read.AllTeamMember.Read.AllChat.Read
認証モード
フルアクセス:
npx @floriscornel/teams-mcp@latest authenticate
読み取り専用アクセス:
npx @floriscornel/teams-mcp@latest authenticate --read-only
既存の Microsoft Graph JWT を使ったトークンの直接注入:
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"],
"env": {
"AUTH_TOKEN": "<jwt-for-https://graph.microsoft.com>"
}
}
}
}
トークンの保存
- 認証メタデータはローカルの
~/.msgraph-mcp-auth.jsonに保存されます - トークンキャッシュはローカルの
~/.teams-mcp-token-cache.jsonに保存されます
🛠️ 使用方法
サーバーの起動
# Development mode with hot reload
npm run dev
# Production mode
npm run build && node dist/index.js
# Start in read-only mode (disables all write tools)
TEAMS_MCP_READ_ONLY=true node dist/index.js
CLI コマンド
npx @floriscornel/teams-mcp@latest authenticate # Authenticate with full scopes
npx @floriscornel/teams-mcp@latest authenticate --read-only # Authenticate with read-only scopes
npx @floriscornel/teams-mcp@latest check # Check authentication status
npx @floriscornel/teams-mcp@latest logout # Clear authentication
npx @floriscornel/teams-mcp@latest auth # Alias for authenticate
npx @floriscornel/teams-mcp@latest # Start MCP server (default)
環境変数
TEAMS_MCP_READ_ONLY=true- MCP サーバーを読み取り専用モードで起動しますAUTH_TOKEN=<jwt>- MSAL ログインの代わりに、既存の Microsoft Graph アクセストークンを使用しますTEAMS_MCP_CLIENT_ID=<guid>- デフォルトの Microsoft Graph CLI アプリではなく、独自の Azure AD アプリ登録で認証しますTEAMS_MCP_TENANT_ID=<guid-or-domain>- 特定のテナントに認証機関を固定します(例:contoso.onmicrosoft.com)。シングルテナントのアプリ登録で必要ですTEAMS_MCP_SCOPES="User.Read Chat.ReadWrite"- 認証時に要求するアクセス許可スコープを上書きします(カンマまたはスペース区切り)
独自の Azure AD アプリ登録を使用する
デフォルトでは、サーバーは Microsoft のパブリック Graph CLI アプリを通じて認証します。独自のアプリ登録を使用するには(たとえば、テナントでそれが必要な場合):
- App registrations で、Authentication → Allow public client flows を Yes に設定します
- 必要な Microsoft Graph の Delegated アクセス許可を追加します(上記のリストを参照)
- テナントを指定してアプリで認証します:
TEAMS_MCP_CLIENT_ID=<your-app-id> \
TEAMS_MCP_TENANT_ID=<your-tenant-id> \
npx @floriscornel/teams-mcp@latest authenticate
同じ環境変数を MCP サーバープロセスにも設定し、同じアプリ ID でトークンを更新できるようにします。
管理者の同意に関するトラブルシューティング
多くの Teams のアクセス許可(Team.ReadBasic.All、ChannelMessage.*、Chat.ReadWrite、Files.ReadWrite.All)には管理者の同意が必要です。サインイン時に "Need admin approval" と表示される場合は、管理者が一度アプリに同意を付与する必要があります。Enterprise applications → Permissions → Grant admin consent から行うか、以下を開いてください:
https://login.microsoftonline.com/<tenant-id>/v2.0/adminconsent?client_id=<app-id>&scope=<space-separated scopes>&redirect_uri=<registered-redirect-uri>
管理者の同意が付与されると、authenticate はプロンプトなしで完了します。アプリ登録に構成されていないスコープを要求すると、常に管理者の承認を求められます。アプリの API permissions リストに、要求するすべてのスコープが含まれていることを確認してください。
読み取り専用モード
サーバーは読み取り専用モードに対応しており、すべての書き込み操作(メッセージの送信、チャットの作成、ファイルのアップロード、メッセージの編集・削除)が無効になり、Microsoft Graph からは読み取り権限のスコープのみが要求されます。
読み取り専用モードを有効にするには、次のいずれかを使用します。
- 環境変数:
TEAMS_MCP_READ_ONLY=true - CLI フラグ:
--read-only
縮小されたスコープで認証します:
npx @floriscornel/teams-mcp@latest authenticate --read-only
MCP サーバーの設定(読み取り専用):
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"],
"env": {
"TEAMS_MCP_READ_ONLY": "true"
}
}
}
}
モードの切り替え: 読み取り専用モードからフルモードに切り替えると、サーバーはスコープの不一致を検出し、再認証するよう警告します。
npx @floriscornel/teams-mcp@latest authenticate
読み取り専用ツール(16 個):
auth_status、get_current_user、search_users、get_user、list_teams、list_channels、get_channel_messages、get_channel_message_replies、list_team_members、search_users_for_mentions、download_message_hosted_content、list_chats、get_chat_messages、download_chat_hosted_content、search_messages、get_my_mentions
読み取り専用モードで無効になる書き込みツール(15 個):
send_channel_message、reply_to_channel_message、update_channel_message、delete_channel_message、send_file_to_channel、send_chat_message、create_chat、add_chat_member、update_chat_message、delete_chat_message、send_file_to_chat、set_channel_message_reaction、set_chat_message_reaction、unset_channel_message_reaction、unset_chat_message_reaction
利用可能な MCP ツール
認証
auth_status- 現在の認証状態を確認します
ユーザー操作
get_current_user- 認証済みユーザーの情報を取得しますsearch_users- 名前またはメールアドレスでユーザーを検索しますget_user- ID またはメールアドレスでユーザーの詳細情報を取得します
Teams 操作
list_teams- ユーザーが参加しているチームを一覧表示しますlist_channels- 指定したチームのチャネルを一覧表示しますget_channel_messages- 添付ファイルの概要とコンテンツ形式の選択を含め、チームチャネルのメッセージを取得しますget_channel_message_replies- 特定のチャネルメッセージへの返信を取得しますsend_channel_message- メンション、重要度、画像添付を指定して、チームチャネルにメッセージを送信しますreply_to_channel_message- 既存のチャネルメッセージに返信しますupdate_channel_message- 以前に送信したチャネルメッセージまたは返信を編集しますdelete_channel_message- チャネルメッセージまたは返信を論理削除しますset_channel_message_reaction- チャネルメッセージにリアクションを追加しますunset_channel_message_reaction- チャネルメッセージからリアクションを削除しますlist_team_members- 指定したチームのメンバーを一覧表示しますsearch_users_for_mentions- メッセージ内で @メンションするチームメンバーを検索しますsend_file_to_channel- ローカルファイルをアップロードし、チャネルへのメッセージとして送信します
チャット操作
list_chats- ユーザーのチャット(1 対 1 およびグループ)を一覧表示しますget_chat_messages- ページネーション、フィルター、並べ替え、fetchAllを指定して、特定のチャットのメッセージを取得しますsend_chat_message- チャットにメッセージを送信しますcreate_chat- 1 対 1 またはグループチャットを新規作成しますadd_chat_member- 既存のグループチャットに 1 人以上のメンバーを追加しますupdate_chat_message- 以前に送信したチャットメッセージを編集しますdelete_chat_message- チャットメッセージを論理削除しますset_chat_message_reaction- チャットメッセージにリアクションを追加しますunset_chat_message_reaction- チャットメッセージからリアクションを削除しますsend_file_to_chat- ローカルファイルをアップロードし、チャットへのメッセージとして送信します
メディア操作
download_message_hosted_content- チャネルメッセージからホストされたコンテンツ(画像、ファイル)をダウンロードしますdownload_chat_hosted_content- チャットメッセージからホストされたコンテンツ(画像、ファイル)をダウンロードします
検索操作
search_messages- KQL 構文を使用して、すべての Teams メッセージを検索しますget_my_mentions- 現在のユーザーにメンションしている最近のメッセージを検索します
📋 例
認証
まず、Microsoft Graph で認証します。
# Full access (default)
npx @floriscornel/teams-mcp@latest authenticate
# Read-only (reduced permission scopes)
npx @floriscornel/teams-mcp@latest authenticate --read-only
認証状態を確認します。
npx @floriscornel/teams-mcp@latest check
必要に応じてログアウトします。
npx @floriscornel/teams-mcp@latest logout
チャットのページネーションの例
{
"chatId": "19:meeting_...",
"limit": 100,
"fetchAll": true,
"orderBy": "createdDateTime",
"descending": true,
"contentFormat": "markdown"
}
メンションと画像を含むチャネルメッセージ
{
"teamId": "team-id",
"channelId": "channel-id",
"message": "Please review **today's update**",
"format": "markdown",
"importance": "high",
"mentions": [
{
"mention": "alex.chen",
"userId": "00000000-0000-0000-0000-000000000000"
}
],
"imageUrl": "https://example.com/status.png"
}
ファイルアップロードの例
{
"chatId": "19:meeting_...",
"filePath": "/absolute/path/to/report.pdf",
"message": "Please review the attached report",
"format": "markdown"
}
Cursor/Claude との連携
この MCP サーバーは、Model Context Protocol を通じて Claude/Cursor/VS Code などの AI アシスタントと連携するように設計されています。
{
"mcpServers": {
"teams-mcp": {
"command": "npx",
"args": ["-y", "@floriscornel/teams-mcp@latest"]
}
}
}
🔒 セキュリティ
- すべての認証は、Microsoft の OAuth 2.0 フローまたは呼び出し元から提供された Microsoft Graph トークンを通じて処理されます
- リフレッシュトークンのサポート:キャッシュされたリフレッシュトークンを使用してアクセストークンが自動的に更新されるため、1 時間ごとに再認証する必要はありません
- トークンキャッシュはローカルの
~/.teams-mcp-token-cache.jsonに保存されます - 認証メタデータはローカルの
~/.msgraph-mcp-auth.jsonに保存されます - Teams に HTML を送信する前に、Markdown コンテンツをサニタイズします
AUTH_TOKENがhttps://graph.microsoft.comを対象としていることを検証します- 機密データがログに記録されたり、公開されたりすることはありません
- Microsoft Graph API のセキュリティに関するベストプラクティスに準拠しています
📝 ライセンス
MIT License の詳細については、LICENSE ファイルを参照してください
🤝 コントリビューション
- リポジトリをフォークします
- 機能ブランチを作成します
- 変更を加えます
- ビルド、リント、テストを実行します
- プルリクエストを送信します
📞 サポート
問題や質問については、以下をご確認ください。
- 既存の GitHub イシューを確認します
- Microsoft Graph API のドキュメントを確認します
- 認証と権限が適切に設定されていることを確認します
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。