Databricks アプリを使用してカスタム MCP サーバーをホストする
ベータ版
この機能は ベータ版です。
独自のカスタム MCP サーバーまたはサードパーティの MCP サーバーを Databricks アプリとしてホストします。カスタム MCP サーバーは、展開する MCP サーバーが既にある場合、またはサードパーティの MCP サーバーをツールのソースとして実行する場合に便利です。
必要条件
- Databricks アプリとしてホストされている MCP サーバーは、 ストリーミング可能な HTTP トランスポートなどの HTTP 互換トランスポートを実装する必要があります。
MCP サーバーを Databricks アプリとしてホストする
独自の MCP サーバーを作成し、Databricks アプリとしてデプロイする例については、 カスタム MCP サーバー リポジトリ を参照してください。
既存の Python MCP サーバーを Databricks アプリとしてホストするには、次の手順に従います。
環境を設定する
-
OAuth を使用してワークスペースに対して認証します。ローカルターミナルで以下を実行します。
Bashdatabricks auth login --host https://<your-workspace-hostname>
MCP サーバーをセットアップする
-
サーバーのルートディレクトリに
requirements.txt
を追加し、サーバーの Python 依存関係を指定します。Python MCP サーバは多くの場合、パッケージ管理に uv を使用します。
uv
を使用する場合は、uv
を追加すると、追加の依存関係のインストールが処理されます。 -
サーバーを実行するための CLI コマンドを指定する
app.yaml
を追加します。デフォルトでは、 Databricks アプリはポート 8000 でリッスンします。 サーバーが別のポートでリッスンする場合は、
app.yaml
ファイルで環境変数のオーバーライドを使用して設定します。app.yaml
例:YAMLcommand: [
'uv',
'run',
'your-server-name',
..., # optionally include additional parameters here
]
MCP サーバーを Databricks アプリとしてアップロードする
-
MCP サーバーをホストする Databricks アプリを作成します。
Bashdatabricks apps create mcp-my-custom-server
-
ソース コードを Databricks にアップロードし、
app.yaml
ファイルを含むディレクトリから次のコマンドを実行してアプリをデプロイします。BashDATABRICKS_USERNAME=$(databricks current-user me | jq -r .userName)
databricks sync . "/Users/$DATABRICKS_USERNAME/mcp-my-custom-server"
databricks apps deploy mcp-my-custom-server --source-code-path "/Workspace/Users/$DATABRICKS_USERNAME/mcp-my-custom-server"
カスタム MCP サーバーに接続する
タブをクリックすると、さまざまな環境から MCP サーバーに接続する方法が表示されます。
- Local environment
- Notebook: service principal
- Agent code: on-behalf of user
- Agent code: service principal
OAuth を使用してワークスペースに対して認証します。ローカルターミナルで以下を実行します。
databricks auth login --host https://<your-workspace-hostname>
前の手順で認証されたプロファイルを使用して、ホストされている Databricks アプリにアクセスします。
from databricks_mcp import DatabricksOAuthClientProvider
from databricks.sdk import WorkspaceClient
from mcp.client.session import ClientSession
from mcp.client.streamable_http import streamablehttp_client
databricks_cli_profile = "DEFAULT"
workspace_client = WorkspaceClient(profile=databricks_cli_profile)
# Replace with your actual custom MCP server URL
mcp_server_url = "https://<workspace-hostname>/serving-endpoints/mcp-my-custom-server/invocations"
async def test_connection_to_server():
async with streamablehttp_client(
f"{mcp_server_url}", auth=DatabricksOAuthClientProvider(workspace_client)
) as (read_stream, write_stream, _), ClientSession(
read_stream, write_stream
) as session:
# List available tools
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
サービスプリンシパルを使用して、DatabricksノートブックでホストされたDatabricksアプリにアクセスします。
import json
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksOAuthClientProvider
from databricks.sdk.credentials_provider import ModelServingUserCredentials
from mcp.client.streamable_http import streamablehttp_client as connect
from mcp import ClientSession
async def main():
app_url = "https://mcp-server.databricksapps.com/mcp"
client = WorkspaceClient(
host="https://workspace_url",
client_id="client_id",
client_secret="client_secret"
)
async with connect(app_url, auth=DatabricksOAuthClientProvider(client)) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await main()
ユーザー承認の代理として設定します。「 ユーザー代理認証」を参照してください。
エージェントからホストされている Databricks アプリにアクセスするために、 ModelServingUserCredentials
を使用してアクセスの代理を有効にします。
import json
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksOAuthClientProvider
from databricks.sdk.credentials_provider import ModelServingUserCredentials
from mcp.client.streamable_http import streamablehttp_client as connect
from mcp import ClientSession
async def main():
app_url = "https://mcp-server.databricksapps.com/mcp"
client = WorkspaceClient(credentials_strategy = ModelServingUserCredentials())
async with connect(app_url, auth=DatabricksOAuthClientProvider(client)) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await main()
apps.apps
スコープを使用してエージェントモデルをログに記録します。「 ユーザー代理認証」を参照してください。
サービスプリンシパルを使用してシステム認証を有効にして、エージェントからホストされた Databricks アプリにアクセスします。
import json
from databricks.sdk import WorkspaceClient
from databricks_mcp import DatabricksOAuthClientProvider
from mcp.client.streamable_http import streamablehttp_client as connect
from mcp import ClientSession
async def main():
app_url = "https://mcp-server.databricksapps.com/mcp"
client = WorkspaceClient()
async with connect(app_url, auth=DatabricksOAuthClientProvider(client)) as (
read_stream,
write_stream,
_,
):
async with ClientSession(read_stream, write_stream) as session:
await session.initialize()
tools = await session.list_tools()
print(f"Available tools: {[tool.name for tool in tools.tools]}")
await main()
DatabricksApps
をリソースとして使用してエージェントモデルをログに記録します。自動認証パススルーを参照してください。
エージェントをデプロイする
次のノートブックは、MCP ツールを呼び出す LangGraph エージェントと OpenAI エージェントを作成する方法を示しています。
LangGraph MCPツール呼び出しエージェント
OpenAI MCP ツール呼び出しエージェント
Additional リソース
アプリのクックブックには、MCP サーバーをさまざまなフレームワークと統合するためのエンドツーエンドのコード例が記載されています。
完全なソース コードと追加の例については、 Databricks Apps クックブック リポジトリを参照してください。