MCP サービスを使用してエージェントをツールに接続する
MCPサービスは、Databricksホスト型のツールを提供するか、外部のMCPサーバーを登録し、エージェントによるその使用方法を管理するUnity Catalogの保護対象です。3レベルの名前であるcatalog.schema.mcp_serviceで指定し、AIトラフィックを管理するためのコントロールプレーンであるUnity Gatewayを介して呼び出します。
MCPサーバーをUnity Catalogのセキュリティ保護可能なオブジェクトとして登録することは、他のUnity Catalogリソースを保護するのと同じプリミティブで管理することを意味します。これには、誰が呼び出せるかを制御する権限、公開するツールを制限するツール選択、個々のツール呼び出しを許可または拒否するサービスポリシー、およびすべての呼び出しを追跡するための監査および使用状況Logが含まれます。
MCPサービスは、エージェントを外部MCPおよびツールに接続するためのいくつかの方法の1つであり、サービスがMCPサーバーを公開している場合に推奨される方法です。管理対象のOAuth、Unity Catalog接続プロキシ、REST APIの直接呼び出しなど、すべてのオプションについては、その概要を参照してください。
MCPサービスを使用するには、主に2つの方法があります。
アプローチ | 使用する場合 |
|---|---|
セットアップ不要で、組み込みのワークスペースツールや、Slack、GitHub、Google Drive などの一般的な SaaS ツールを使用したい場合。ホストするサーバーや作成する接続はありません。 | |
Unity Catalogのセキュリティ保護可能なオブジェクトとして管理するセルフホスト型またはサードパーティ製MCPサーバーがあります。 |
要件
-
Unity Catalog が有効なワークスペース。
-
Model Serving がサポートされているリージョンのワークスペース。モデルサービング機能の可用性を参照してください。
仕組み
エージェントはUnity Gateway URLを使用してMCPサービスを呼び出し、すべての呼び出しは同じガバナンスパスを経由します:
- 呼び出し :エージェントは、サービスのUnity Gateway URLにMCPリクエストを送信し、呼び出し元のDatabricks IDで認証されます。
- 承認と管理 :ゲートウェイは、呼び出し元がUnity CatalogのMCPサービスに対して
EXECUTEを持っていることを確認します。このサービスは、選択したツールのみを公開し、アタッチされているサービスポリシーを評価します。これにより、呼び出しを許可、拒否、または承認を要求できます。 - ツールの実行 :Databricks が提供するサービスの場合、Databricks は呼び出し元の ID またはマネージド資格情報を使用してツールを実行します。登録済みの外部サーバーの場合、Databricks はその HTTP 接続を通じてリクエストを転送し、サーバー資格情報を管理します。
- Logの使用状況、監査、トレース :すべての呼び出しはシステムテーブルに記録されるため、使用状況を監視し、時間の経過とともにアクティビティを監査できます。
Databricks が提供する MCP サービス
Databricksは、ワークスペースツールおよび一般的なSaaSアプリケーション向けに、すぐに使用可能なMCPサービスを提供しています。利用可能なサービス、セットアップ、および制限事項については、「Databricks提供のMCPサービス」を参照してください。
サービスのツールの発見と結果の読み取り
各 MCP サービスは異なるツールセットを公開するため、名前をハードコーディングするのではなく、ランタイム時にそれらを発見してください。tools/list (または DatabricksMCPClient.list_tools()) を呼び出して、各ツールの名前、説明、および入力スキーマを取得します。カスタムエージェントでの MCP サーバーの使用を参照してください。
resultフィールドからツール呼び出しの結果を読み取ります。その形状は、ツールが構造化された出力を定義するかどうかによって異なります:
- 型指定された出力。 ツールは
outputSchemaをアドバタイズし、structuredContentで型指定されたJSONオブジェクトを返すことができます。structuredContentが存在する場合は、それを直接使用してください。解析は不要です。Genieツールなど、一部のDatabricksツールはこのように動作します。 - テキスト出力。
structuredContentがない場合は、代わりにテキストブロックを読み取ってください。最初のブロックには JSON ドキュメントが含まれているため、result.content[0].textを JSON として解析してください。 - どちらでもありません。 MCPは出力スキーマを必要としません。ツールで何も定義されていない場合は、サンプル応答を調べて出力フィールドを確認してください。
例えば、system.ai.google_calendarはcalendar_event_listのような読み取りツールを公開しており、そのJSON結果にはitemsのイベント配列が含まれています(それぞれにid、summary、start、end、status、location、およびLinkが含まれます)。別のサービスのツールと結果の形状は完全に異なるため、必ずtools/listとサンプル呼び出しで確認してください。
組み込みサービスは、独自のOAuthスコープを管理します。組み込みのサービスポリシーによって書き込みがブロックされている場合、サービスはdefaultでそのツールの読み取りサブセットのみを公開する可能性があります。
外部 MCP サーバーを登録する
マネージドOAuthまたはDatabricks提供のMCPサービスの対象外である外部MCPサーバーについては、Unity Catalogの保護対象として管理するために、MCPサービスとして登録してください。「外部MCPサーバーを登録する」を参照してください。
認証とセキュリティ
Databricksは、マネージドMCPプロキシとUnity Catalog HTTP接続を使用して、外部MCPサーバーへの認証を安全に処理します。
- Shared principal authentication :外部サービスにアクセスする際、すべてのユーザーが同じ資格情報を共有します。これには、ベアラー トークン、OAuthマシン間 (M2M)、およびOAuthユーザー間共有認証が含まれます。これは、外部サービスがユーザー固有のアクセスを必要としない場合、または単一のサービスアカウントで十分な場合に使用します。
- ユーザーごとの認証 (OAuth U2M Per User) : 各ユーザーは独自の資格情報で認証します。外部サービスは個々のユーザーに代わってリクエストを受信し、ユーザー固有のアクセス制御、監査、および説明責任を可能にします。ユーザーのGitHubリポジトリ、Slackメッセージ、カレンダーなどのユーザー固有のリソースにアクセスする場合に使用します。
DatabricksがOAuthフローとトークンの更新を処理するため、エンドユーザーがトークンを確認することはありません。Unity Gatewayから、外部MCP接続をLLM Endpointと並べて表示および管理できます。各認証方法の詳細な構成手順については、HTTP接続を参照してください。
ユーザーごとのアクセス(ユーザー代理アクセス)を有効にする
一部のサービスは、カレンダーやEメールなど、特定のユーザーに属するデータを読み取ります。これらのサービスでは、共有IDではなく、呼び出しを行ったユーザーとして各呼び出しが実行されるように、ユーザーごとのOAuthを使用してください。これは、system.ai.google_calendar、system.ai.gmail、system.ai.microsoft_365のような組み込みのsystem.ai.*サービス、およびユーザーごとの認証で登録する外部サービスに適用されます。
エージェントからユーザー代理アクセスを設定するには:
-
呼び出し元のユーザーがサービスを呼び出せることを確認してください。 MCPサービスを呼び出すには、次の2つのことが必要です。
EXECUTEサービス上で。USE CATALOGおよび親カタログとスキーマに対するUSE SCHEMA。EXECUTEだけでは不十分です。Unity Catalogは親チェーンもチェックするためです(チームメイトへのアクセス権の付与を参照)。
これらを付与する方法はサービスによって異なります:
- 組み込みの
system.ai.*サービス: アカウントユーザーはdefaultでsystemおよびsystem.aiに対するこれらの権限をすでに保持しているため、通常は何も付与する必要はありません。 - 独自のカタログおよびスキーマ内のカスタムサービス: カタログエクスプローラーの各保護対象の [ 権限 ] tabから、またはREST APIを使用して、呼び出し元のユーザーまたはグループに適切な権限を付与します(アプリのDatabricks Service Principalだけでなく、ユーザーまたはグループにも付与してください)。MCPサービスではSQL DDLは利用できません。
REST APIを使用して付与するには、独自の
<catalog>.<schema>.<service>を代入します:Bashdatabricks api patch "/api/2.1/unity-catalog/permissions/mcp_service/<catalog>.<schema>.<service>" \
--json '{ "changes": [ { "principal": "data-team", "add": ["EXECUTE"] } ] }'
databricks api patch "/api/2.1/unity-catalog/permissions/catalog/<catalog>" \
--json '{ "changes": [ { "principal": "data-team", "add": ["USE_CATALOG"] } ] }'
databricks api patch "/api/2.1/unity-catalog/permissions/schema/<catalog>.<schema>" \
--json '{ "changes": [ { "principal": "data-team", "add": ["USE_SCHEMA"] } ] }' -
転送されたユーザートークンがサービスに到達できるように、
ai-gatewayユーザーAPIスコープをアプリに追加します 。アプリリソースに対してuser_api_scopes: [ai-gateway]を宣言し、ユーザーごとのクライアント(get_user_workspace_client())を使用してサービスを呼び出します。MCPサービスへの認証およびエージェントを作成してDatabricks Appsにデプロイするを参照してください。 -
各ユーザーの同意は1回のみです。 ユーザーが初めてサービスを呼び出す際に、1回限りのOAuthログインを完了する必要があります。アプリはユーザーに表示するためのログイン Link を受け取ります。または、ユーザーがカタログエクスプローラーでサービスを開き、 ログイン をクリックすることもできます。
バンドルを通じてこのEXECUTEのアクセス権を付与することはできません。Declarative Automation Bundlesのuc_securableリソースは、VOLUME、TABLE、FUNCTION、CONNECTIONの保護対象のみをサポートしており、MCPサービスはサポートしていません。そのため、UIまたは上記のREST APIを使用して、EXECUTEを個別に付与する必要があります。注意: databricks bundle validateは権限付与の欠落をフラグ付けしないため、エージェントは正常にデプロイできても、サービスを最初に呼び出すときに失敗する可能性があります。
ネットワーキング
エージェントがMCPサーバーに直接接続することはありません。Unity Gatewayは、サービスのUnity Catalog接続を解決し、管理された資格情報を付与して、アウトバウンドリクエストを実行します。Because MCP **サービス** **Run** on **Unity Catalog** HTTP connections, that request routes through your **ワークスペース**'s **Serverless** **コンピュート** plane like any other HTTP connection, and the same network controls apply.
ネットワークポリシーでMCPサーバーを許可
ワークスペースで 制限付きアクセス のServerless egress control を使用している場合は、MCPサーバーの完全修飾ドメイン名 (FQDN) をポリシーの 許可されたドメインリストに追加してください。See Serverless egress制御のためのネットワークポリシーの管理。
これは、Databricksが提供するsystem.ai.*サービスだけでなく、ユーザー自身が登録するサーバーにも適用されます。Databricksが提供する各サービスは独自の宛先に到達するため、使用するサービスの宛先を許可してください。
ポリシーを構成する際は、次の点に注意してください。
- 接続先を見つけて、Logs で確認します。 FQDN は通常、サービスの Unity Catalog 接続上の MCP サーバー URL のホストですが、サービスは追加のホストに到達できる場合があります。拒否されたアウトバウンド接続は
system.access.outbound_networkシステムテーブルに記録されます。これは、追加が必要なホストを見つけるための最も迅速な方法です。ネットワークアクセスイベント システムテーブル リファレンスを参照してください。 - ブロックされた宛先は常に適用されます。 ポリシーのブロックされた宛先にあるホストは、 フルアクセス であっても拒否されます。インターネットの宛先をブロックするを参照してください。
- ドライランモードは、[すべての製品]の下でのみMCPトラフィックをカバーします。 Databricks SQL または AIモデルサービング のドライランオプションを選択しても、MCPサービストラフィックはドライラン状態になりません。ポリシーの適用を参照してください。
ポリシーによって呼び出しが拒否されると、リクエストは失敗し、Access to <fqdn> is denied because of serverless network policyのようにブロックされたホスト名を含む権限エラーが返されます。
MCPサーバーにプライベートに接続する
MCPトラフィックはServerless コンピュート プレーンを経由してルーティングされるため、他のHTTP接続と同様の方法でアウトバウンドパスを保護できます。
独自のクラウドネットワーク内でサーバーをホストしている場合は、インターネットに公開するのではなく Private Link を介してプライベートにアクセスするか、ファイアウォールで Databricks Serverless の送信 IP を許可リストに登録してください。「外部サービスへのネットワーク接続を保護する」を参照してください。
Private Link エントリとして追加されたドメインはネットワークポリシーで暗黙的に許可されるため、プライベートにルーティングされる MCP サーバーは 許可されたドメイン にエントリを追加する必要はありません。
制限事項
MCPサービスには、次の制限が適用されます:
-
MCPサービス用のSQL DDL(たとえば、
CREATE MCP SERVICE)は利用できません。UIまたはREST APIを使用してMCPサービスを作成および管理します。 -
独自の MCP サービスとして登録できるのは、外部 MCP サーバーのみです。Genie、Apps、または Unity Catalog エンティティソースを MCP サービスとして登録することは、現在サポートされていません。
-
Databricksは、ワークスペースおよびSaaSツール向けの組み込みMCPサービスも提供しています。
-
ツールの選択は、プレフィックス (
get_*) および完全一致パターンをサポートしています。除外パターン(例えば、!delete_*)はサポートされていません。 -
Unity Catalogグローバル検索ではMCPサービスは表示されません。
-
外部MCPサーバーは、Model Servingがサポートされているリージョンでのみ利用可能です。これには、AI Playground、Genie Code、Genieでのチャットでの使用が含まれます。モデルサービング機能の可用性を参照してください。
次のステップ
- すぐに使用可能なワークスペースおよび SaaS ツール向けの Databricks 提供の MCP サービス。
- 外部 MCP サーバーを登録および呼び出すには、外部 MCP サーバーを登録する。
- MCP サービスを管理することで、ツールを制限し、サービス ポリシーを適用します。
- 「カスタムエージェントで MCP サーバーを使用する」を参照して、エージェントコードからプログラムで MCP サービスを呼び出します。これには OpenAI Agents SDK、LangGraph、および Model Serving の例が含まれます。
- MCPをAIアシスタントおよびコーディングエージェントに接続することで、コーディングエージェントとAIアシスタントを接続します。
- 統合トレーステーブルを使用したすべてのAIアクティビティの監視を行い、すべてのMCPアクティビティを一元的に監視、デバッグ、監査します。
- Unity Gateway による AI ガバナンスを使用して、MCP サーバーと LLM Endpoint を一元管理します。