PythonエージェントでMCPツールを使用する
MCPサーバーに接続し、そのツールを検出して、それらを使用するPythonエージェントを実行します。Databricks提供のMCP、登録済みのMCP、またはDatabricks Apps上のサーバーのURLを使用します。
Claude Code、Codex、またはその他のコーディングエージェントからMCPを使用するには、サポートされているコーディングエージェントでクライアントを選択します。その他のアシスタントおよび MCP クライアントについては、その他の MCP クライアントを参照してください。
Agent Bricks CLI プロジェクトの場合は、CLI を使用して MCP ツールを追加します。以下の例は、独自の Python コードから接続する方法を示しています。
前提条件
- お使いのコンピュータ上の Python 3.12。
- お使いのサーバーのMCP URL。誰かがMCPを共有した場合は、アクセス権を付与してもらう必要があります。ユーザーごとのOAuthを使用している場合は、プロバイダーのログインを完了します。Databricks Apps上のサーバーの場合、アプリに対する CAN USE 権限が必要です。
- ツール呼び出しをサポートする Databricks モデルEndpointへのアクセス。この例では
databricks-claude-sonnet-4-5を使用します。ワークスペースで使用可能なEndpointに置き換えます。
system.ai.dbsql、system.ai.sandbox、または system.ai.web_search を使用するには、アカウント管理者がアカウントコンソールの [ プレビュー ] ページから [ Unity Gateway ] ベータ版を有効にする必要があります。アカウントプレビューの管理を参照してください。
IDの選択と接続要件については、認証とネットワークアクセスを参照してください。
ステップ 1:インストールとサインイン
-
Databricks CLIをインストールしていない場合は、macOSまたはLinuxで次のコマンドを実行します。
Bashcurl -fsSL https://raw.githubusercontent.com/databricks/setup-cli/main/install.sh | shWindows またはその他のインストール方法については、「Install the Databricks CLI」を参照してください。
-
ワークスペースにサインインします。
Bashdatabricks auth login --host https://<workspace-hostname> --profile DEFAULT -
Python ライブラリをインストールします。
Bashpip install --upgrade databricks-mcp databricks-sdk "mcp>=1.24,<2"
この例では、以下のエージェント フレームワークと互換性のあるMCP Python 1.xを使用しています。
ステップ 2: サーバーへの接続
次のコードを mcp_agent.py として保存します。<mcp-server-url> をサーバーの URL に置き換えます。
- Databricks提供または登録済みMCP:
https://<workspace-hostname>/ai-gateway/mcp-services/<catalog>.<schema>.<service>。 - Databricks Apps上のサーバー: 概要ページからアプリのURLをコピーし、
/mcpを追加します。
from databricks_mcp import DatabricksMCPClient
from databricks.sdk import WorkspaceClient
workspace_client = WorkspaceClient()
server_url = "<mcp-server-url>"
mcp_client = DatabricksMCPClient(
server_url=server_url,
workspace_client=workspace_client,
)
tools = mcp_client.list_tools()
for tool in tools:
print(tool.name, tool.description, tool.inputSchema, sep="\n")
スクリプトをランします。
python mcp_agent.py
説明と入力スキーマとともに、サーバーのツールが表示されます。次のステップでこれらのツールのいずれかがサポートする読み取り専用のタスクを選択します。リストが空である場合や接続に失敗する場合は、MCPの認証とネットワークを参照してください。
別のサーバーを使用する
- 組み込みの MCP (built-in MCP) については、MCP URL 内に
system.ai.githubなどの完全な名前を使用します。 - レガシーワークスペースMCPサーバーとの既存の統合の場合は、
server_urlをそのレガシーEndpoint URLに置き換えます。
カタログとスキーマでアクセスできるMCPを検索するには、次を実行します。
databricks ai-gateway list-mcp-services --parent schemas/system.ai
登録済みのMCPの一覧を表示するには、 system.ai を <catalog>.<schema> に置き換えます。CLI がページネーションを処理します。
ステップ3:これらのツールを使用してエージェントをランする
フレームワークを選択し、そのパッケージをインストールし、Pythonの例を mcp_agent.py に追加します。各例では、同じ server_url とステップ 2 のワークスペースへのサインインを使用します。
- LangGraph
- OpenAI Agents SDK
- OpenAI client
この例では、MCP コンテンツ ブロックを convert_to_openai_messages を使用してモデルのチャット メッセージ形式に変換します。
pip install --upgrade databricks-langchain langgraph
import asyncio
from databricks_langchain import (
ChatDatabricks,
DatabricksMCPServer,
DatabricksMultiServerMCPClient,
)
from langchain_core.messages import convert_to_openai_messages
from langgraph.prebuilt import create_react_agent
async def main():
client = DatabricksMultiServerMCPClient([
DatabricksMCPServer(
name="my-mcp-server",
url=server_url,
workspace_client=workspace_client,
),
])
agent = create_react_agent(
ChatDatabricks(endpoint="databricks-claude-sonnet-4-5"),
tools=await client.get_tools(),
prompt=lambda state: convert_to_openai_messages(state["messages"]),
)
task = input("Ask the agent to use a tool: ")
result = await agent.ainvoke({
"messages": [{"role": "user", "content": task}],
})
for message in result["messages"]:
print(message)
asyncio.run(main())
デプロイメント ノートブック (オプション)
Model Serving のデプロイメントでは、このノートブックを適宜変更してサーバー URL を使用します。
LangGraph MCP tool-calling agent
pip install --upgrade databricks-openai openai-agents
import asyncio
from agents import Agent, Runner, set_default_openai_api, set_default_openai_client
from agents.mcp import MCPServerStreamableHttpParams
from agents.tracing import set_trace_processors
from databricks_openai import AsyncDatabricksOpenAI
from databricks_openai.agents.mcp_server import McpServer
set_default_openai_client(AsyncDatabricksOpenAI())
set_default_openai_api("chat_completions")
set_trace_processors([])
async def main():
async with McpServer(
name="my-mcp-server",
params=MCPServerStreamableHttpParams(url=server_url),
workspace_client=workspace_client,
) as server:
agent = Agent(
name="Tool-using agent",
instructions="Use the available tools to answer the user's question.",
model="databricks-claude-sonnet-4-5",
mcp_servers=[server],
)
task = input("Ask the agent to use a tool: ")
result = await Runner.run(agent, task)
for item in result.new_items:
print(item.to_input_item())
asyncio.run(main())
デプロイメント ノートブック (オプション)
Model Serving のデプロイメントでは、このノートブックを適宜変更してサーバー URL を使用します。
Agents SDK MCP tool-calling agent
pip install --upgrade databricks-openai
この例では、OpenAI互換クライアントを使用してツール呼び出しループを明示的に実行します。
import json
from databricks_openai import DatabricksOpenAI, McpServerToolkit
toolkit = McpServerToolkit(url=server_url, workspace_client=workspace_client)
tools_by_name = {tool.name: tool for tool in toolkit.get_tools()}
model_client = DatabricksOpenAI()
messages = [{"role": "user", "content": input("Ask the agent to use a tool: ")}]
for _ in range(10):
response = model_client.chat.completions.create(
model="databricks-claude-sonnet-4-5",
messages=messages,
tools=[tool.spec for tool in tools_by_name.values()],
)
message = response.choices[0].message
messages.append(message.model_dump(exclude_none=True))
if not message.tool_calls:
print(message.content)
break
for call in message.tool_calls:
try:
tool = tools_by_name.get(call.function.name)
if tool is None:
raise ValueError(f"Unknown tool: {call.function.name}")
arguments = json.loads(call.function.arguments or "{}")
if not isinstance(arguments, dict):
raise ValueError("Tool arguments must be a JSON object.")
output = tool.execute(**arguments)
except Exception as error:
output = json.dumps({"error": str(error)})
print(call.function.name, output)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": str(output),
})
else:
raise RuntimeError("The agent reached the tool-calling limit.")
デプロイメント ノートブック (オプション)
Model Serving のデプロイメントでは、このノートブックを適宜変更してサーバー URL を使用します。
OpenAI MCP tool-calling agent
python mcp_agent.pyをもう一度ランします。プロンプトが表示されたら、必要な入力を含めて、選択した読み取り専用タスクを要求します。たとえば、サーバーにチケット検索ツールがある場合は、特定のプロジェクトでオープンなチケットを検索するように依頼します。
出力された会話から、ツール呼び出し、その結果、およびエージェントの回答を確認してください。ツール呼び出しを伴わない回答では、MCP サーバーが使用されたことは確認されません。
トラブルシューティングのためにツールを直接呼び出す
ステップ 2 で出力されたツール名と入力スキーマを使用します。この例では、サーバーのツールで動作するように名前と引数の入力を求めます。ステップ 2 の接続コードの後にランします。
import json
tool_name = input("Read-only tool name: ")
arguments = json.loads(input("Tool arguments as a JSON object: "))
result = mcp_client.call_tool(tool_name, arguments)
print(result)
結果にツールエラーがなく、期待したデータが含まれていることを確認します。
ツールを呼び出す前に、list_tools()を使用してツール名と入力スキーマを見つけてください。結果のフォーマットはツールによって異なります:
structuredContentが存在する場合は、その構造化結果を直接使用してください。ツールは、outputSchemaを使用してその形状を記述できます。- それ以外の場合は、
contentブロックを検査します。ツールが JSON を返す場合にのみ、テキスト ブロックを JSON として解析します。MCP は、プレーン テキストやその他のコンテンツ タイプもサポートしています。 - 特定の出力フィールドに依存する前に、
isErrorを確認し、応答のサンプルを検査してください。
準備ができたらデプロイして共有する
ローカルの例はユーザーとして実行されます。Databricks Apps でエージェントをデプロイする際、使用するアイデンティティを選択します。共有アクセスの場合はアプリの Service Principal、ユーザーごとのアクセスの場合は呼び出し元のユーザーを選択します。
Databricks提供または登録済みのMCPの場合:
- 呼び出し元にアクセス権を付与し、MCP とその親カタログおよびスキーマへのアクセスを許可します。
- エージェントがユーザーの代理として動作する場合は、ユーザーごとのアクセスを設定します。
- MCPをガバナンス管理して、ツールの制限、ポリシーの適用、レート制限の設定、および呼び出しの監視を行います。
レガシーワークスペースサーバーまたはDatabricks Appsでホストされているサーバーの場合は、基盤となるリソースまたはアプリへのアクセス権を付与します。エージェント認証を参照してください。