独自のMCPサーバーを持ち込む

BYO (Bring Your Own) MCP サーバー機能を使用すると、組織は独自のリモート モデル コンテキスト プロトコル (MCP) サーバーを Microsoft Agent 365 に登録して、一元的なガバナンスと監視可能性を実現できます。

Important

  • この機能はプレビュー中です。
  • プレビュー機能は、運用上の用途のためのものではなく、機能が制限されている場合があります。 これらの機能は追加使用条件の対象であり、公式リリース前にアクセス可能です。これにより、お客様は早期に利用し、フィードバックを提供することができます。

多くの場合、大企業は内部 MCP サーバーを構築して運用し、さまざまなビジネス ワークフローにわたってエージェントを動かすために利用します。 通常、これらのサーバーは組織のガバナンスの境界の外で実行され、公開されているツールに対する管理者の可視性はなく、ツールの呼び出し方法に関するポリシーの適用も、セキュリティ/コンプライアンス チーム向けの使用状況テレメトリもありません。 BYO MCP サーバーは、登録済みサーバーを Agent 365 Tooling Gateway 経由でルーティングすることでこの問題に対処し、IT 管理者が Microsoft 365 管理センターを通じて制御できるようにするとともに、セキュリティ チームが必要な可観測性データを取得できるようにします。

Note

プレビュー期間中にサポートされているクライアント サーフェイスは、Copilot Studio、Visual Studio Code、Claude Code、GitHub Copilot CLI です。 Azure AI Foundry と Microsoft 365 宣言型エージェントはサポートされていません。

BYO MCP サーバーのしくみ

BYO MCPサーバーは、エージェントがそれらにアクセスできるようになる前にリモートMCPサーバーが確認および管理されるように、この開発者から管理者へのフローに従います。

  1. 開発者は、Agent 365 CLI を介してサーバーを登録し、サーバー URL、認証タイプ、および公開するツールを提供します。 詳細については、「 リモート MCP サーバーの登録」を参照してください。

  2. IT 管理者は、Microsoft 365 管理センターで要求を確認し、承認または拒否します。 承認後、管理者はサーバーに必要な Microsoft Entra アクセス許可を付与します。 詳細については、「 MCP 要求の確認と承認」を参照してください。

  3. サポートされているクライアントは、承認されたサーバーを使用し、Copilot Studio や Visual Studio Code などで、実際のツール呼び出しを使用してエージェントをビルドおよびテストします。 詳細については、「 承認された MCP サーバーを使用する」を参照してください。

  4. セキュリティ チームはアクティビティとツールの呼び出しを、コンプライアンスと異常検出のために Microsoft Defender の高度なハンティングを通じて監視します。 詳細については、「MCP サーバー アクティビティの監視と観察」を参照してください。

Important

このプロセスでは、外部 MCP 統合をエンド ユーザーが利用できるようにする前に、ガバナンスとコンプライアンスのレビューが必要です。

Note

プレビュー中は、リモート MCP サーバーの新しいバージョンを再公開することはできません。

リモート MCP サーバーを登録する

Tip

管理者は、これらの手順を使用して登録プロセスを理解したり、開発者に提供したりできます。

ユーザーまたは開発者は、CLI を使用してリモート MCP サーバーを Agent 365 に登録できます。 登録後、IT 管理者は、エージェント作成画面で使用するサーバーを確認し、承認できます。

次のタスクを実行します。

開発者の前提条件

リモート MCP サーバーを登録する前に、以下を確認してください。

  • Agent 365 CLI バージョン 1.1.165-preview 以降をインストールしています。

  • Agent 365 サービス プリンシパルはテナントにプロビジョニングされています。 アプリ ID ea9ffc3e-8a23-4a7d-836d-234d7c7565c1に関連付けられているサービス プリンシパルが見つからない場合は、次のリソースを使用してプロビジョニングしてください。

  • MCP サーバーには、パブリックにアクセス可能なエンドポイントがあります。

  • サーバーでは、サポートされている次のいずれかの認証タイプを使用します。

    • NoAuth。
    • APIKey ヘッダーまたはクエリ パラメーター付き
    • ExternalOAuth。
    • EntraOAuth。

Agent 365 CLI をインストールする

Agent 365 CLIをインストールするには、「Agent 365 CLIのインストール」の手順に従います。

MCP サーバーを登録する

次のいずれかの方法を選択して、MCP サーバーを Agent 365 に登録します。

  • CLIによる手動登録:CLIから a365 develop-mcp register-external-mcp-server コマンドを実行し、サーバーの詳細、認証タイプ、およびMCPサーバーが公開するツールを手動で指定します。
  • JSON ファイルによる登録: a365 develop-mcp register-external-mcp-server -f <path-to-file.json> を使用して、コマンド ラインで個別に指定するのではなく、すべてのサーバー詳細、認証タイプ、ツール定義を含む 1 つの JSON ファイルを提供することで、MCP サーバーを登録します。

Important

このセクションの例では、zava.com を架空のドメインとして使用し、一般的なサーバー名とツール名を例示のために使用します。 これらの値を実際のサーバー URL、名前、ツール識別子に置き換えてください。

次の例は、異なる認証タイプで Agent 365 CLI を使用して MCP サーバーを登録する方法を示しています。

NoAuth

認証を必要としない MCP サーバーの場合:

a365 develop-mcp register-external-mcp-server \
--server-name "ZavaServer" \
--server-url "https://mcp.zava.com/mcp" \
--publisher "Contoso" \
--description "My external MCP server for document search" \
--auth-type "NoAuth" \
--tools "tool1,tool2"
{
  "serverName": "ext_DocsSearch",
  "serverUrl": "https://docs.contoso.com/api/mcp",
  "authType": "NoAuth",
  "description": "Documentation search MCP Server for Contoso developer docs.",
  "publisherName": "Contoso",
  "tools": [
    {
      "name": "search_docs",
      "description": "Search Contoso developer documentation and code samples."
    }
  ],
  "remoteScopes": null,
  "externalOAuth": null,
  "apiKey": null
}

APIKey (クエリ パラメータ)

クエリ パラメーターとして API キーを渡すサーバーの場合:

a365 develop-mcp register-external-mcp-server \
--server-name "ZavaServer" \
--server-url "https://mcp.zava.com/mcp" \
--publisher "Contoso" \
--description "My external MCP server for document search" \
--auth-type APIKey \
--api-key-location Query \
--api-key-name apiKey \
--tools "tool1,tool2"
{
  "serverName": "ext_MarketData",
  "serverUrl": "https://api.contoso.com/market/mcp",
  "authType": "APIKey",
  "description": "Real-time stock market data and search from Contoso Market Services.",
  "publisherName": "Contoso",
  "tools": [
    {
      "name": "stock-market-data",
      "description": "Get real-time stock market data and financial information."
    },
    {
      "name": "real-time-search",
      "description": "Search the web for real-time information and news."
    }
  ],
  "remoteScopes": null,
  "externalOAuth": null,
  "apiKey": {
    "location": "Query",
    "name": "apiKey"
  }
}

APIKey (ヘッダー)

要求ヘッダーで API キーを渡すサーバーの場合:

a365 develop-mcp register-external-mcp-server \
--server-name "ZavaServer" \
--server-url "https://mcp.zava.com/mcp" \
--publisher "Contoso" \
--description "My external MCP server for document search" \
--auth-type APIKey \
--api-key-location Header \
--api-key-name token \
--tools "tool1,tool2"
{
  "serverName": "ext_InternalTools",
  "serverUrl": "https://tools.contoso.com/mcp",
  "authType": "APIKey",
  "description": "Contoso internal tools MCP Server with API key authentication.",
  "publisherName": "Contoso",
  "tools": [
    {
      "name": "tool1",
      "description": "First tool exposed by the server."
    },
    {
      "name": "tool2",
      "description": "Second tool exposed by the server."
    }
  ],
  "remoteScopes": null,
  "externalOAuth": null,
  "apiKey": {
    "location": "Header",
    "name": "X-API-Key"
  }
}

ExternalOAuth

外部 OAuth プロバイダーを介して認証するサーバーの場合:

a365 develop-mcp register-external-mcp-server \
--server-name "ZavaServer" \
--server-url "https://zava.com/mcp" \
--publisher "Contoso" \
--description "My external MCP server for document search" \
--auth-type ExternalOAuth \
--idp-authorization-url "https://idp.zava.com/o/oauth2/v2/auth" \
--idp-token-url "https://idp.zava.com/oauth2/token" \
--idp-scopes "https://api.zava.com/read" \
--idp-client-id "<your-client-id>" \
--idp-client-secret "<your-client-secret>" \
--remote-scopes "https://api.zava.com/read" \
--tools "tool1,tool2"

{
  "serverName": "ext_Analytics",
  "serverUrl": "https://analytics.contoso.com/mcp",
  "authType": "ExternalOAuth",
  "description": "Contoso Analytics MCP Server for dataset and query operations.",
  "publisherName": "Contoso",
  "tools": [
    {
      "name": "list_datasets",
      "description": "List all available analytics datasets."
    }
  ],
  "remoteScopes": "https://analytics.contoso.com/.default",
  "externalOAuth": {
    "authorizationUrl": "https://auth.contoso.com/oauth2/authorize",
    "tokenUrl": "https://auth.contoso.com/oauth2/token",
    "scopes": "https://analytics.contoso.com/.default",
    "clientId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "clientSecret": "<your-client-secret>"
  },
  "apiKey": null
}

EntraOAuth

Microsoft Entra ID 経由で認証するサーバーの場合:

a365 develop-mcp register-external-mcp-server \
--server-name "ZavaServer" \
--server-url "https://mcp.zava.com/mcp" \
--publisher "Contoso" \
--description "My external MCP server for document search" \
--auth-type EntraOAuth \
--remote-scopes "https://api.zava.com/.default" \
--tools "tool1,tool2"
{
  "serverName": "ext_OrgDirectory",
  "serverUrl": "https://directory.contoso.com/mcp",
  "authType": "EntraOAuth",
  "description": "Contoso organization directory MCP Server secured with Entra OAuth.",
  "publisherName": "Contoso",
  "tools": [
    {
      "name": "list_users",
      "description": "List users in the organization directory."
    },
    {
      "name": "get_user_profile",
      "description": "Get the profile of a specific user by ID or UPN."
    }
  ],
  "remoteScopes": "api://contoso-directory/.default",
  "externalOAuth": null,
  "apiKey": null
}

登録が成功したら、Microsoft 365 管理センターで管理者レビューのために MCP サーバーを送信してください。

MCP サーバーの評価

a365 develop-mcp evaluate コマンドを使用して、MCP ツール定義の品質を評価できます。 このコマンドは、サーバーのツール スキーマを検査し、ツール名、説明、およびパラメーター スキーマを改善するための実行可能なガイダンスを含むレポートを生成します。

セマンティック チェックは、マシン上でローカルに実行されるコーディング エージェント CLI (GitHub Copilot CLI または Claude Code) によって、お客様自身のアカウントと AI サブスクリプションを使用してスコアリングされます。 このコマンドは、ツール スキーマ データを Microsoft に送信しません。

Important

信頼できる MCP サーバーに対してのみ evaluate を実行してください。 サーバーのツール名、説明、およびパラメーター スキーマは、標準の MCP tools/list 呼び出しを通じて読み取られ、スコアリングのためにあなたのマシン上で実行されているコーディング エージェントに渡されます。 このトラスト通知は、エージェントを使用する実行ごとの開始時に 1 回印刷されます。 すべてをローカルに保持する--eval-engine noneには適用されません。

評価を実行するのに管理者ロールは必要ありません。 指定した MCP サーバー URL に対してローカルで実行され、Azure や Microsoft Graph は呼び出されません。

Prerequisites

  • Agent 365 CLIをインストールします。
  • セマンティック (AI) スコアリングの場合、ローカルにインストールされた 1 つのコーディング エージェント CLI:
    • GitHub Copilot CLI: npm install -g @github/copilot でインストールします (Node.js 18 以降)。 これはスタンドアロンの copilot バイナリであり、 gh copilot GitHub CLI 拡張機能ではありません。
    • Claude コード: npm install -g @anthropic-ai/claude-code を使用してインストールするか、「Claude コードのインストール」に従ってインストールします。
  • どちらのエージェントもインストールされていない場合でも、コマンドは決定的チェックを実行してチェックリストを書き込み、その後停止するため、独自の LLM(bring-your-own-LLM)でセマンティック チェックをスコアリングできます。 --eval-engine noneを渡してエージェントのプローブを完全にスキップします。

評価のしくみ

このコマンドは 5 つの手順からなるパイプラインを実行し、次の表に示すように進行状況をログに記録します。

Step それが何をするか
1. ツールを見つける MCP サーバーに接続し、 tools/list を呼び出して、各ツールのスキーマをキャプチャします。
2. チェックリストを生成する 出力ディレクトリに <server-name>_checklist.json 書き込みます。
3. セマンティック評価を実行する スコアリングのために、選択したコーディングエージェントにチェックリストを渡します。 --eval-engine noneまたはエージェントが使用できない場合はスキップされます。
4. 分析 ツールごとおよび全体的なスコアを集計し、成熟度レベルを決定します。
5. レポートを作成する <server-name>_eval_report.htmlと<server-name>_eval_report.jsonを生成します。

各チェックは、次の 2 種類のいずれかです。

  • 決定論的: CLI でのルールベースのロジック。合否判定は明確であり、AI は必要ありません (たとえば、"ツール名は空ではありません")。
  • セマンティック: コーディング エージェントによって採点され、判定を説明する reason 文字列が付されます。

実行はべき等です。 同じコマンドを再実行すると、既存の <server-name>_checklist.json が再利用され、サーバー検出がスキップされます。これが、bring-your-own-LLM の往復処理の仕組みです。自分でチェックリストを採点し、その後、再開するには再実行します。 ツール スキーマを変更した後、新しい検出を強制するには、チェックリスト ファイルを削除します。

Examples

自動エンジン選択を使用してローカル サーバーを評価する:

a365 develop-mcp evaluate --server-url "http://localhost:5000/mcp"

環境変数を通じて指定されたトークンとサブフォルダーに書き込まれたアーティファクトを使用して、認証されたサーバーに対して評価を実行します。

$env:A365_MCP_AUTH_TOKEN = "<bearer-token>"
a365 develop-mcp evaluate --server-url "https://my-mcp-server.contoso.com/mcp" --output-dir "./eval"

チェックリストのみを生成し、その後独自のLLMでスコア付けしてください。

a365 develop-mcp evaluate --server-url "https://my-mcp-server.contoso.com/mcp" --eval-engine none

特定のスコアリング エンジンを強制的に使用する:

a365 develop-mcp evaluate --server-url "http://localhost:5000/mcp" --eval-engine claude-code

レポートを読む

出力ディレクトリにある <server-name>_eval_report.html をブラウザで開きます。 レポートには次の情報が表示されます。

  • 全体のスコア (0~100; 高いほど良い)。
  • カテゴリの内訳を含む ツールごとのスコア : ツール名、ツールの説明、パラメーター名、パラメーターの説明、スキーマ構造。
  • 次の成熟度レベルに到達するための具体的な要件を含む、影響順に並べられた優先アクション 項目のリスト。

全体的な品質スコア、成熟度レベル、キー数、ディメンションごとのカテゴリ スコアを示す develop-mcp evaluate HTML レポートのスクリーンショット。

データ処理と AI の透明性

  • このコマンドは、MCP サーバーのtools/list (名前、説明、およびパラメーター スキーマ) のみを から処理します。 それはランタイム ペイロード、エンドユーザー データ、または個人データを処理しません。
  • コーディング エージェント CLI は、お使いのマシン上で、ご自身の AI サブスクリプションの下で実行されます。 モデル API 呼び出しは、その CLI によってお客様の利用規約および請求に基づいて AI プロバイダーに直接行われます。 a365 CLI はモデルを指定しますが、呼び出しを仲介しません。
  • --auth-token値はメモリに保持され、HTTP Authorization ヘッダーとしてお客様のサーバーにのみ送信され、ディスクに書き込まれたり、コーディング エージェントに渡されたりすることはありません。
  • 出力ファイル (_checklist.json、 _eval_report.html、 _eval_report.json) は、--output-dir にのみ書き込まれ、お使いのマシン内にのみ保存されます。

Troubleshooting

次のトラブルシューティング ガイドを使用して、一般的なエラーを診断し、推奨される修正方法を適用します。

症状: 考えられる原因 修正
Unauthorized から tools/list ベアラー トークンが正しくないか、有効期限が切れています トークンを再取得し、A365_MCP_AUTH_TOKENを介して渡します。
Unknown eval engine 無効な --eval-engine 値 auto、github-copilot、claude-code、noneのいずれかを使用します。
パイプラインが[2/5]の後で停止する PATH でコーディング エージェントは利用できません GitHub Copilot CLI または Claude Code をインストールするか、チェックリストを自分でスコア付けして再実行します。
--output-dir cannot be empty or whitespace 空の値が --output-dir に渡されました 有効なディレクトリ パスを渡すか、現在のディレクトリを使用するにはオプションを省略する。
Failed to read existing checklist チェックリスト ファイルがロックされているか、形式が正しくありません チェックリスト ファイルを削除して、次回の実行時に新たに検出させます。

BYO MCP サーバー要求を確認して承認する

開発者が BYO MCP サーバーを登録すると、管理者は他のツール要求と同じ方法でレビューして承認します。 完全なレビューと承認の手順については、MCP 要求をレビューして承認するを参照してください。

主要なガバナンス コントロール

次の表は、主要なガバナンス制御をまとめたものです。

状態 Description
承認または却下 管理者は、使用する前に、各 BYO MCP サーバーを承認または拒否します。
サーバーレベルのブロック 管理者は、承認済みのサーバーをいつでもブロックできます。 ランタイム エンフォースメントにより、エージェントがブロックされたサーバーを呼び出すのを防ぎます。
ツールレベルのブロック 管理者は、サーバー全体ではなく BYO サーバー内の個々のツールを許可またはブロックできます。 この機能は、Agent 365 に登録されているサポートされている MCP サーバー向けにロールアウトされています。 BYO MCP サーバーのサポートは、今後のリリースで提供される予定です。 詳細については、「 MCP サーバー内の個々のツールの管理」を参照してください。
ツールの一覧 管理者は、各 MCP サーバーで宣言されたツールを表示できます。
実行時の強制 ブロックされた MCP サーバーは、どのクライアント サーフェイスでも実行時に呼び出すことはできません。
Delete 管理者は、不要になった登録済みの BYO MCP サーバーを削除できます。 詳細については、「 BYO MCP サーバーの削除」を参照してください。

承認済みの MCP サーバーを使用する

MCP サーバーが承認され、Microsoft Entra によって同意が付与されると、サポートされているエージェント構築サーフェス全体で MCP サーバーを使用できるようになります。 プレビュー期間中、次のクライアント画面では、承認された BYO MCP サーバーがサポートされます。

Client Status
Copilot Studio Supported
Visual Studio Code Supported
クロード符号 Supported
GitHub Copilot CLI(コマンドラインインターフェース) Supported

Copilot Studio で、次の手順に従って、承認された BYO MCP サーバーを呼び出します。

  1. お使いの環境で Copilot Studio に移動してください。

  2. 新しいカスタム エージェントを作成します (または既存のものを開きます)。

  3. ツール セクションに移動し、MCP サーバー を選択します。

  4. レジストリから MCP サーバーを選択します。

  5. MCP サーバーを呼び出すプロンプトを入力して、エージェントをテストします。

Note

サーバーを初めて呼び出すときに、1 回限りの接続セットアップを完了するように求めるメッセージが表示される場合があります。 提供された URL にアクセスして、APIKey ベースのサーバーの API キーを入力するなど、必要な接続を作成してください。 完了したら、エージェントに戻り、プロンプトを再試行してください。 呼び出しが成功すると、MCP サーバーはツール出力を返します。

「Work IQ MCP の概要」の「コーディング エージェント用の Work IQ MCP サーバーの設定」セクションで、Claude Code、VS Code、および GitHub Copilot CLI から承認された BYO MCP サーバーを呼び出す方法について説明します。

Note

Work IQ MCPは、管理者がエージェントがMicrosoft 365リソースにアクセスし、どのように行動するかを管理するのに役立つテナントレベルのポリシーコントロールを提供します。 これらのコントロールの設定方法については、Work IQ MCP のポリシー ガバナンスをご覧ください。

MCP サーバーのアクティビティを監視および観察

Microsoft Defender 高度なハンティングを使用して、MCP サーバー呼び出しを追跡および分析します。 このプロセスでは、どのエージェントがどの MCP サーバーを呼び出すか、呼び出しがいつ発生したか、および異常または不正な使用を検出するのに役立つその他のメタデータが表示されます。

次の KQL クエリは、Defender の高度なハンティングのサンプルを提供します。

CloudAppEvents
| where ActionType in ( "ExecuteToolByGateway")
| where RawEventData contains "tool name"

このクエリは、エージェント名、MCP サーバー名、呼び出しメタデータなどの詳細を返します。

BYO MCP サーバーを削除する

登録済みの BYO MCP サーバーは、不要になったときに Microsoft 365 管理センターから削除できます。 サーバーを削除すると、そのサーバーはレジストリから削除され、エージェントはそのサーバーを呼び出せなくなります。

BYO MCP サーバーを削除するには、次の手順を実行します。

  1. Microsoft 365管理センターにサインインします。
  2. [ エージェント>ツール] を選択し、[ レジストリ ] タブを選択します。
  3. 削除したい BYO MCP サーバーを選択して、その概要ウィンドウを開きます。
  4. を選択して、を削除します。
  5. 削除 を選択して削除を確定します。