メインコンテンツまでスキップ

カスタムエージェントでMCPサーバーを使用する

備考

プレビュー

この機能は パブリック プレビュー段階です。

エージェントコードをDatabricks上の任意のMCPサーバーに接続します:DatabricksマネージドサーバーMCPサービスとして登録された外部MCPサーバー、およびDatabricksアプリとしてホストされるカスタムサーバー。それらはすべて同じMCPインターフェースを公開しているため、エージェントコードは同一です。異なるのは、 サーバーURL認証 方法です。

databricks-mcp Python ライブラリは Databricks MCP サーバーへの認証を処理するため、同じクライアント コードが 3 つのサーバー タイプすべてで機能します。

サーバーURLを取得する

最初にMCPサーバーをセットアップし、以下の例でそのURLを使用してください:

サーバータイプ

URL パターン

セットアップ

マネージド

https://<workspace-hostname>/api/2.0/mcp/<service>/<path>

利用可能なマネージドサーバー

外部(MCPサービス)

https://<workspace-hostname>/ai-gateway/mcp-services/<catalog>.<schema>.<mcp-service>

MCPサービスを使用してエージェントをツールに接続する

カスタム

https://<app-url>/mcp

独自の MCP サーバーをホストする

サーバータイプ

URL パターン

セットアップ

マネージド

https://<workspace-hostname>/api/2.0/mcp/<service>/<path>

利用可能なマネージドサーバー

外部(MCPサービス)

https://<workspace-hostname>/ai-gateway/mcp-services/<catalog>.<schema>.<mcp-service>

MCPサービスを使用してエージェントをツールに接続する

カスタム

https://<app-url>/mcp

独自の MCP サーバーをホストする

利用可能なMCPサーバーとツールを検索する

エージェントコードを作成する前に、使用可能なサーバーとツールを確認してください。サーバー名、ツール名、または引数の形状を記憶からハードコーディングしないでください。ワークスペースから確認してください。

  • ワークスペース内のサーバーを参照します。 利用可能なMCPサーバーを確認するには、 AI Gateway > MCPs に移動します。Databricksは、すぐに使用できる組み込みサーバーを提供しています。独自のUnity Catalogデータおよび関数(Genie spaces、ベクトル検索インデックス、Unity Catalog関数)用のマネージドMCPサーバーと、Slack、GitHub、Google Drive、Google Calendar、Gmail、Microsoft 365などのサードパーティSaaSツール用の組み込みsystem.ai MCPサービスです。

  • MCP サービスをプログラムで一覧表示します。 Unity Catalog REST API を使用して、任意のカタログおよびスキーマ内の MCP サービスを一覧表示します。たとえば、組み込みサービスは次のとおりです。

    Bash
    databricks api get "/api/2.1/unity-catalog/mcp-services?parent=schemas/system.ai&page_size=100"

    登録したサービスを見つけるには、system.ai を独自の <catalog>.<schema> に置き換えます。page_size は最大 100 に制限されており、さらにサービスが存在する場合は応答に next_page_token が含まれます。スキーマ内のすべてのサービスを列挙するには、応答にトークンが返されなくなるまで page_token=<next_page_token> を指定してリクエストを繰り返します。

    Bash
    token=""
    while :; do
    page=$(databricks api get "/api/2.1/unity-catalog/mcp-services?parent=schemas/system.ai&page_size=100&page_token=$token")
    echo "$page"
    token=$(echo "$page" | jq -r '.next_page_token // empty')
    [ -z "$token" ] && break
    done
  • コードからサーバーのツールをリスト化します。 DatabricksMCPClient を任意のサーバー URL に向け、list_tools() を呼び出すことで、ツールの接続とリスト化で示されているように、実行時に各ツールの名前、説明、入力スキーマを取得できます。これが、サーバーの正確なツールと引数を把握するための確実な方法です。

環境をセットアップする

  1. OAuth を使用してワークスペースを認証します:

    Bash
    databricks auth login --host https://<workspace-hostname>
  2. プロンプトが表示されたら、プロファイル名を入力し、後で使用するためにメモしておきます。defaultのプロファイル名は DEFAULT です。

  3. Python 3.12 以降のローカル環境があることを確認してから、依存関係をインストールします:

    Bash
    pip install -U "mcp>=1.9" "databricks-sdk[openai]" "mlflow>=3.1.0" "databricks-agents>=1.0.0" "databricks-mcp"

    以下のエージェントフレームワークの例には、独自のSDKが必要です。OpenAI Agents SDKにはopenai-agents databricks-openaiを、LangGraphにはdatabricks-langchain langgraphを追加します。

ツールの接続と一覧表示

サーバーURLを使用して DatabricksMCPClient を作成し、そのツールをリストします。同じクライアントが、管理対象、外部 (MCP サービス)、およびカスタムサーバーURLで機能します:

Python
from databricks_mcp import DatabricksMCPClient
from databricks.sdk import WorkspaceClient

workspace_client = WorkspaceClient(profile="DEFAULT")
host = workspace_client.config.host

# Use a managed, MCP Service, or custom server URL:
mcp_server_url = f"{host}/api/2.0/mcp/functions/system/ai"

mcp_client = DatabricksMCPClient(server_url=mcp_server_url, workspace_client=workspace_client)
tools = mcp_client.list_tools()
print(f"Available tools: {[t.name for t in tools]}")

ツールを直接呼び出すには:

Python
result = mcp_client.call_tool("system__ai__python_exec", {"code": "print('Hello, world!')"})
print(result.content)
注記

管理対象の system.ai ツールをランするには、ワークスペースで Serverless コンピュートが有効になっている必要があります。

認証

エージェントのランする場所と一致する認証方法を選択します。外部MCPサービスの場合、呼び出し元はサービスに対する EXECUTE も持っている必要があります。AI Gateway は、すべての呼び出しに対してこの権限を適用します。

OAuthを使用してワークスペースに認証し(「環境のセットアップ」を参照)、プロファイルをクライアントに渡します:

Python
workspace_client = WorkspaceClient(profile="DEFAULT")
mcp_client = DatabricksMCPClient(server_url=mcp_server_url, workspace_client=workspace_client)

エージェントの構築

エージェントフレームワークを使用して、MCPサーバーのツールをエージェントに変換します。フレームワークをサーバーURLに向け、認証済みのWorkspaceClientを渡します。

Python
import asyncio
from agents import Agent, Runner
from databricks.sdk import WorkspaceClient
from databricks_openai.agents import McpServer


async def main():
workspace_client = WorkspaceClient()
host = workspace_client.config.host

async with McpServer(
url=f"{host}/ai-gateway/mcp-services/main.default.github_mcp",
name="github-mcp",
workspace_client=workspace_client,
) as mcp_server:
agent = Agent(
name="Local agent",
instructions="You are a helpful assistant with access to external services.",
model="databricks-claude-sonnet-4-5",
mcp_servers=[mcp_server],
)
result = await Runner.run(agent, "List my open GitHub pull requests.")
print(result.final_output)


asyncio.run(main())

ノートブックの例

以下のノートブックでは、マネージド、外部、およびカスタムの MCP サーバー間で MCP ツールを呼び出す LangGraph および OpenAI エージェントを構築する方法を紹介します:

LangGraph MCPツール呼び出しエージェント

OpenAI MCP ツール呼び出しエージェント

エージェント SDK MCP ツール呼び出しエージェント

エージェントをデプロイ

Databricks では、エージェントを Databricks Apps にデプロイすることを推奨しています。これにより、エージェントコード、サーバー構成、および Git ベースのバージョン管理をフルマネージドで管理できます。または、Model Serving にデプロイします。

いずれを選択する場合でも、その MCP サーバーが依存するすべてのリソースへのアクセス権をエージェントに付与してください。例えば、Genie Agent 上の CAN_RUN や、AI Search インデックス上の SELECT などがあります。

エージェントが使用する各リソース(すべての MCP サーバーの背後にあるリソースを含む)を databricks.yml 内の resources.apps.<app>.resources で宣言し、バンドルをデプロイしてアプリの Databricks Service Principal にアクセス権を付与します。たとえば、マネージド Genie サーバーと AI Search サーバーを使用するエージェントの場合:

YAML
resources:
apps:
my_agent_app:
name: 'my-agent-app'
source_code_path: ./
resources:
- name: 'llm'
serving_endpoint:
name: 'databricks-claude-sonnet-4-5'
permission: 'CAN_QUERY'
- name: 'genie_space'
genie_space:
space_id: '<genie-space-id>'
permission: 'CAN_RUN'
- name: 'vector_index'
uc_securable:
securable_full_name: '<catalog>.<schema>.<index-name>'
securable_type: 'TABLE'
permission: 'SELECT'
Bash
databricks bundle deploy
databricks bundle run my_agent_app

完全なオーサリングおよびデプロイのワークフローについては、AIエージェントを作成してDatabricks Appsにデプロイするを参照してください。すべてのリソースタイプと権限値については、エージェントの認証を参照してください。

注記

エージェントTemplateから開始します。これには、MLflow AgentServer エントリーポイント(uv run start-app で実行)、get_user_workspace_client() ユーザー代理ヘルパー、および databricks.yml が用意されています。requires-python = ">=3.12,<3.13" でインタープリターをピン留めし、uv.lock をcommitすることで、Databricks Appsのビルドイメージが、一部のエージェント依存関係の事前構築済みwheelを欠く新しいPython(例:3.14)を解決しないようにします。MCPサービスの場合、呼び出し元に帯域外アクセス権も付与してください(ユーザーごとのアクセス(ユーザー代理アクセス)の有効化を参照)。これがないと bundle validate は通過しません。

次のステップ