Microsoft 365 のエージェント は、アプリ マニフェストで宣言されている エージェント コネクタ を介して外部システムに接続できます。 この記事では、リモート モデル コンテキスト プロトコル (MCP) サーバーを Microsoft 365 アプリ マニフェストに登録し、Microsoft 365 エージェントがサーバーで公開されている MCP ツールを安全に検出、選択、呼び出す方法について説明します。
Microsoft 365 エージェントは、エージェント コネクタを使用して外部システムと通信します。 MCP サーバーの場合、コネクタは次を提供します。
- MCP サーバーのネットワーク エンドポイント
- 認証と承認の構成
- ツール定義
- エージェントがユーザー操作中に適切なツールを調整するのに役立つオプションのメタデータ
登録されると、MCP サーバーは、MCP を使用できる Microsoft 365 エージェントで使用できるようになります。
前提条件
開始する前に、次のことを確認してください。
エージェント コネクタをマニフェストに追加する
まず、アプリ マニフェストのルート レベルで agentConnectors 配列で MCP サーバーを宣言します。
Microsoft 365 アプリ マニフェスト (
manifest.json) ファイルを開きます。ルート レベルの
agentConnectors配列を見つけるか、作成します。一意の
id、displayName、descriptionを持つ新しいコネクタ オブジェクトを追加します。
{
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.27/MicrosoftTeams.schema.json",
"manifestVersion": "1.27",
...
"agentConnectors": [
{
"id": "my-mcp-server",
"displayName": "My Automation Server",
"description": "Provides workflow automation and task management tools.",
"toolSource": {
"remoteMcpServer": {
"mcpServerUrl": "https://mcp.example.com"
}
}
}
]
}
各コネクタには、マニフェスト内の他のコネクタと区別する一意の id が必要です。
リモート MCP サーバー エンドポイントを構成する
remoteMcpServer オブジェクトを使用して、Microsoft 365 が MCP サーバーに接続する方法を定義します。
コネクタの toolSource 内で、
remoteMcpServerエンドポイントを指定します。"toolSource": { "remoteMcpServer": { "mcpServerUrl": "https://mcp.example.com" } }エンドポイントで HTTPS (HTTP 接続用) または WSS (WebSocket 接続用) が使用されていることを確認します。
エンドポイントはパブリックにアクセスでき、MCP プロトコル ハンドシェイク メッセージに応答する必要があります。 Microsoft 365 エージェントは、このエンドポイントへの有効期間の長い接続を確立します。
認証を構成する
MCP サーバーを呼び出すときに Microsoft 365 が資格情報を取得する方法を指定します。 現在、MCP サーバー認証では、次の値がサポートされています。
- なし: 認証は必要ありません
- OAuthPluginVault: Microsoft のセキュリティで保護されたコンテナー内に格納されている OAuth 2.0 トークン
- ApiKeyPluginVault: コンテナーに格納され、ID によって参照される API キー
- DynamicClientRegistration: 動的 OAuth クライアント登録
- AzureKeyVault: 独自のAzure Key Vault インスタンスに格納されているシークレット
OAuth 認証を使用する
Microsoft のセキュリティで保護されたコンテナーに格納されている OAuth 2.0 トークンの場合は、構成で承認の種類 OAuthPluginVault を指定します。
"remoteMcpServer": {
"mcpServerUrl": "https://mcp.example.com",
"authorization": {
"type": "OAuthPluginVault",
"referenceId": "my-oauth-config"
}
}
referenceIdは、開発者ポータルに登録するセキュリティで保護された OAuth 構成を指します。 詳細については、「 開発者ポータルでの OAuth の構成」を参照してください。
サードパーティの認証プロバイダーを使用して OAuth アプリを設定する場合は、許可されているリダイレクト エンドポイントの一覧に https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect を追加してください。
API キー認証を使用する
コンテナーに格納されている API キーの場合は、承認の種類を ApiKeyPluginVaultとして構成します。
"authorization": {
"type": "ApiKeyPluginVault",
"referenceId": "my-apikey"
}
referenceIdは、開発者ポータルで登録する API キーを指します。 詳細については、「 API キー認証」を参照してください。
動的クライアント登録を使用する
動的クライアント登録を使用すると、Microsoft 365 は RFC 7591 プロトコルを使用して、実行時に MCP サーバーに OAuth クライアントとして登録できます。 この方法は、サーバーが動的 OAuth フローをサポートしていて、クライアント資格情報を事前登録したくない場合に便利です。
referenceIdで承認の種類をDynamicClientRegistrationとして構成します。
"authorization": {
"type": "DynamicClientRegistration",
"referenceId": "my-dcr-config"
}
referenceIdは、開発者ポータルで登録する動的クライアント登録構成を指します。 この構成は、クライアント資格情報を MCP サーバーの OAuth 登録エンドポイントとネゴシエートするときに Microsoft 365 が使用する必要な承認値を提供します。
サーバーでは、次の手順を実行する必要があります。
- RFC 7591 準拠のクライアント登録エンドポイントを公開します。
- Microsoft 365 がアクセス トークンを取得するために使用できる
client_idとclient_secretを返します。 - 有効期間の長いセッションのトークン更新をサポートします。
Azure Key Vault認証を使用する
Azure Key Vault認証を使用すると、MCP サーバーの資格情報を独自のAzure Key Vault インスタンスに格納して管理できます。 これにより、ローテーション、アクセス ポリシー、監査ログなど、シークレット ライフサイクル管理を完全に制御できます。
承認の種類を AzureKeyVaultとして構成します。
"authorization": {
"type": "AzureKeyVault",
"referenceId": "my-keyvault-secret"
}
referenceIdは、開発者ポータルに登録されているシークレット識別子を指し示し、Azure Key Vault シークレットにマップします。
Azure Key Vault認証を設定するには:
- MCP サーバーの資格情報 (API キーまたはクライアント シークレット) をシークレットとしてAzure Key Vaultに格納します。
- アクセス ポリシーを構成するか、コンテナーの RBAC ロールをAzureすることで、Microsoft 365 サービス プリンシパルにシークレットを読み取るアクセス権を付与します。
- 開発者ポータルでシークレット参照を登録し、登録 ID をメモします。
- マニフェストの
referenceIdとして登録 ID を使用します。
認証を使用しない
サーバーで認証が必要ない場合 (運用環境では推奨されません)、承認の種類を None に設定するか、 authorization オブジェクトを完全に省略します。
エンタープライズ シナリオでは、セキュリティのベスト プラクティスと管理者の期待に合わせて、API キーよりも OAuth を優先します。
ツール検出を定義する
MCP サーバーが提供するツールを Microsoft 365 エージェントが検出する方法を構成します。 ツールセットが安定している場合は静的インライン ツール定義を使用するか、ツールセットが頻繁に変更されたときに動的ツール検出を有効にします。
静的ツール定義を使用する
頻繁に変更されない静的ツールセットの場合は、ツール定義で mcpToolDescription オブジェクトを追加します。
"remoteMcpServer": {
"mcpServerUrl": "https://mcp.example.com",
"authorization": {
"type": "ApiKeyPluginVault",
"referenceId": "my-apikey"
},
"mcpToolDescription": {
"description": {
"file": "toolDescription.json"
}
}
}
description オブジェクトは、MCP サーバーのtools/list応答によって返されるスキーマと一致する必要があります。
動的ツール検出を使用する
動的ツール検出を使用すると、Microsoft 365 エージェントは、サーバーの tools/list メソッドを呼び出すことによって、実行時にツール リストをフェッチできます。 ツールセットが頻繁に変更される場合は、ツールが追加、更新、または削除されるたびにアプリを再発行する必要がなくなるため、この方法をお勧めします。
動的ツール検出を有効にするには、remoteMcpServer 構成から mcpToolDescription を省略します。
"remoteMcpServer": {
"mcpServerUrl": "https://mcp.example.com",
"authorization": {
"type": "OAuthPluginVault",
"referenceId": "my-oauth-config"
}
}
mcpToolDescription省略すると、Microsoft 365 エージェントは次のようになります。
- MCP サーバー エンドポイントに接続します。
-
tools/listメソッドを呼び出して、実行時に使用可能なツールを取得します。 - マニフェストの再発行を必要とせずに、使用可能なツールの一覧を更新します。
MCP サーバーは、各ツールの名前、説明、入力スキーマを含む有効な tools/list 応答を返す必要があります。
構成を検証する
エージェントまたはアプリをデプロイする前に、マニフェストと MCP サーバーが正しく構成されていることを確認します。
開発者ポータルの Microsoft 365 アプリ パッケージ検証ツールを使用して、マニフェストでエラーをチェックします。
接続を手動でテストして、MCP サーバーがハンドシェイク メッセージに正しく応答するかどうかを確認します。
tools/listエンドポイントがスキーマ準拠のツール定義を返していることを確認します。- 各ツールには一意の名前と説明があります
- 入力スキーマは有効な JSON スキーマです
- 必須パラメーターと省略可能なパラメーターが明確に定義されている
承認構成をテストします。
-
referenceIdが有効なシークレットをポイントすることを確認する - トークンまたはキーが正しく取得されていることを確認する
- OAuth を使用している場合にトークンの更新をテストする
-
エンドポイントで TLS 1.2 以降がサポートされていることを確認します。
エラー メッセージを確認し、失敗したツール呼び出しのセマンティクスを再試行します。
Microsoft 365 エージェントでテストする
実際の Microsoft 365 エージェントとテストして、統合を検証します。
エージェントまたはアプリをテスト環境にデプロイします。
MCP をサポートする Microsoft 365 エージェントを開きます。
ツールをトリガーする自然言語コマンドをテストします。
- "プロジェクト管理システムでタスクを作成する"
- "チケット番号 123 の状態を更新する"
- "自分に割り当てられている未解決の問題を検索する"
次のことを確認します。
- エージェントの使用可能なアクションにツールが表示される
- 必要に応じてユーザーの同意プロンプトが表示される
- ツール呼び出しが正常に実行される
- 応答が正しく処理される
- エラー条件は正常に処理されます
シナリオでマルチテナントのサポートが必要な場合は、複数のテナント間でテストします。
一般的な問題のトラブルシューティング
MCP サーバーが期待どおりに動作しない場合は、次の一般的な問題をチェックします。
エージェントがサーバーに接続できない
- エンドポイントがパブリックにアクセスできることを確認する
- エンドポイントで HTTPS または WSS が使用されていることを確認する
- ファイアウォールとネットワークのセキュリティ設定を確認する
- サーバーが MCP ハンドシェイク メッセージに応答していることを確認する
エージェントにツールが表示されない
-
tools/listが有効なツール定義を返すかどうかを確認する - ツールの説明が明確で完全であることを確認する
- 静的定義の場合は、インライン ツール定義の JSON スキーマを検証します
- 動的検出の場合は、
mcpToolDescriptionが省略され、サーバーが実行時にtools/listに正しく応答することを確認します
認証エラー
-
referenceIdが格納されているシークレット構成と一致するかどうかを確認する - OAuth トークンが有効であり、有効期限が切れていないことをテストする
- API キーに必要なアクセス許可があることを確認する
- 送信要求の承認ヘッダー形式を確認する
ツールの呼び出しが失敗またはタイムアウトする
- サーバー ログでエラーを確認する
- 入力パラメーターの検証が正しく動作していることを確認する
- 応答が MCP プロトコル形式に従っていることを確認する
- サーバーが同時要求を処理することを確認する
次の手順
準備ができたら、 パートナー認定と公開のためにアプリを送信します。
Platform Docs