MCP サーバーを Microsoft 365 のエージェント コネクタとして登録する

Microsoft 365 のエージェント は、アプリ マニフェストで宣言されている エージェント コネクタ を介して外部システムに接続できます。 この記事では、リモート モデル コンテキスト プロトコル (MCP) サーバーを Microsoft 365 アプリ マニフェストに登録し、Microsoft 365 エージェントがサーバーで公開されている MCP ツールを安全に検出、選択、呼び出す方法について説明します。

Microsoft 365 エージェントは、エージェント コネクタを使用して外部システムと通信します。 MCP サーバーの場合、コネクタは次を提供します。

  • MCP サーバーのネットワーク エンドポイント
  • 認証と承認の構成
  • ツール定義
  • エージェントがユーザー操作中に適切なツールを調整するのに役立つオプションのメタデータ

登録されると、MCP サーバーは、MCP を使用できる Microsoft 365 エージェントで使用できるようになります。

前提条件

開始する前に、次のことを確認してください。

  • MCP 統合を検証するためのテスト テナント
  • セキュリティで保護されたパブリック エンドポイントを備えた動作中の MCP サーバー
  • 認証資格情報 (OAuth 構成 または API キー)

エージェント コネクタをマニフェストに追加する

まず、アプリ マニフェストのルート レベルで agentConnectors 配列で MCP サーバーを宣言します。

  1. Microsoft 365 アプリ マニフェスト (manifest.json) ファイルを開きます。

  2. ルート レベルの agentConnectors 配列を見つけるか、作成します。

  3. 一意の iddisplayNamedescriptionを持つ新しいコネクタ オブジェクトを追加します。

{
  "$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 サーバーに接続する方法を定義します。

  1. コネクタの toolSource 内で、 remoteMcpServer エンドポイントを指定します。

    "toolSource": {
      "remoteMcpServer": {
        "mcpServerUrl": "https://mcp.example.com"
      }
    }
    
  2. エンドポイントで 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_idclient_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認証を設定するには:

  1. MCP サーバーの資格情報 (API キーまたはクライアント シークレット) をシークレットとしてAzure Key Vaultに格納します。
  2. アクセス ポリシーを構成するか、コンテナーの RBAC ロールをAzureすることで、Microsoft 365 サービス プリンシパルにシークレットを読み取るアクセス権を付与します。
  3. 開発者ポータルでシークレット参照を登録し、登録 ID をメモします。
  4. マニフェストの 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 サーバーが正しく構成されていることを確認します。

  1. 開発者ポータルの Microsoft 365 アプリ パッケージ検証ツールを使用して、マニフェストでエラーをチェックします。

  2. 接続を手動でテストして、MCP サーバーがハンドシェイク メッセージに正しく応答するかどうかを確認します。

  3. tools/list エンドポイントがスキーマ準拠のツール定義を返していることを確認します。

    • 各ツールには一意の名前と説明があります
    • 入力スキーマは有効な JSON スキーマです
    • 必須パラメーターと省略可能なパラメーターが明確に定義されている
  4. 承認構成をテストします。

    • referenceIdが有効なシークレットをポイントすることを確認する
    • トークンまたはキーが正しく取得されていることを確認する
    • OAuth を使用している場合にトークンの更新をテストする
  5. エンドポイントで TLS 1.2 以降がサポートされていることを確認します。

  6. エラー メッセージを確認し、失敗したツール呼び出しのセマンティクスを再試行します。

Microsoft 365 エージェントでテストする

実際の Microsoft 365 エージェントとテストして、統合を検証します。

  1. エージェントまたはアプリをテスト環境にデプロイします。

  2. MCP をサポートする Microsoft 365 エージェントを開きます。

  3. ツールをトリガーする自然言語コマンドをテストします。

    • "プロジェクト管理システムでタスクを作成する"
    • "チケット番号 123 の状態を更新する"
    • "自分に割り当てられている未解決の問題を検索する"
  4. 次のことを確認します。

    • エージェントの使用可能なアクションにツールが表示される
    • 必要に応じてユーザーの同意プロンプトが表示される
    • ツール呼び出しが正常に実行される
    • 応答が正しく処理される
    • エラー条件は正常に処理されます
  5. シナリオでマルチテナントのサポートが必要な場合は、複数のテナント間でテストします。

一般的な問題のトラブルシューティング

MCP サーバーが期待どおりに動作しない場合は、次の一般的な問題をチェックします。

エージェントがサーバーに接続できない

  • エンドポイントがパブリックにアクセスできることを確認する
  • エンドポイントで HTTPS または WSS が使用されていることを確認する
  • ファイアウォールとネットワークのセキュリティ設定を確認する
  • サーバーが MCP ハンドシェイク メッセージに応答していることを確認する

エージェントにツールが表示されない

  • tools/listが有効なツール定義を返すかどうかを確認する
  • ツールの説明が明確で完全であることを確認する
  • 静的定義の場合は、インライン ツール定義の JSON スキーマを検証します
  • 動的検出の場合は、 mcpToolDescription が省略され、サーバーが実行時に tools/list に正しく応答することを確認します

認証エラー

  • referenceIdが格納されているシークレット構成と一致するかどうかを確認する
  • OAuth トークンが有効であり、有効期限が切れていないことをテストする
  • API キーに必要なアクセス許可があることを確認する
  • 送信要求の承認ヘッダー形式を確認する

ツールの呼び出しが失敗またはタイムアウトする

  • サーバー ログでエラーを確認する
  • 入力パラメーターの検証が正しく動作していることを確認する
  • 応答が MCP プロトコル形式に従っていることを確認する
  • サーバーが同時要求を処理することを確認する

次の手順

準備ができたら、 パートナー認定と公開のためにアプリを送信します。