DatabricksアプリでMCPサーバーをホストする
エージェントが独自のツールを呼び出せるように、Databricks Apps上でMCPサーバーを構築します。Databricks Appsは、サーバーをランするためのコンピュートと、エージェントがサーバーに接続するためのHTTPS URLを提供します。
カテゴリを選択
Databricks AppsでMCPサーバーをホストするには、次の3つの方法のいずれかを選択します。
- スターター Templateからサーバーを構築し、独自の Python ツールを記述します。
- すでに HTTP API をお持ちの場合は、REST API を MCP ツールとして公開してください。
- サーバーコードが既にある場合は、既存のMCPサーバーをデプロイします。
スターター Template からサーバーを構築します。
MCP Server (Starter) Templateには、独自のPythonコードを追加する前に呼び出すことができる2つのツールが含まれています。healthはサーバーが実行されていることをチェックし、get_current_userは呼び出しユーザーのIDを返します。get_current_userは、アプリにユーザー認証範囲がある場合にのみ機能します。
Templateを検索してデプロイします
Databricks Apps の要件を満たすワークスペースを使用します。
- Databricks UI
- Databricks CLI
- ワークスペースで、 Unity Gateway を開き、 MCPs を選択します。
- + MCP をクリックし、 新しいMCPサーバーを構築 を選択します。Databricks Appsの作成ページが開きます。
- 「Template からインストール」 を見つけます。この Template ギャラリーで 「Agents」 tabを選択し、 「MCP Server (Starter)」 を選択します。
- リソース、コンピュート、および承認の設定を確認します。セットアップを進めるには、 [次へ] をクリックします。
- アプリに
mcp-my-serverという名前を付け、 [アプリの作成] をクリックします。その名前が使用されている場合は、mcp-で始まる別の名前を使用してください。このプレフィックスにより、AI PlaygroundがMCPサーバーを認識できるようになります。
-
Databricks CLI を使用してワークスペースにサインインします。
-
databricks/app-templates/mcp-server-hello-worldからTemplateソースをクローンします:Bashgit clone https://github.com/databricks/app-templates.gitcd app-templates/mcp-server-hello-world -
アプリを作成します。
mcp-my-serverが使用されている場合は、mcp-で始まる別の名前を使用してください。このプレフィックスは、AI Playground が MCP サーバーを認識するために使用されます。Bashdatabricks apps create mcp-my-server -
Templateコードをワークスペースにuploadします。
<your-email>をワークスペースのユーザー名に置き換えます。Bashdatabricks sync . /Workspace/Users/<your-email>/mcp-my-server -
uploadしたフォルダーからアプリをデプロイします:
Bashdatabricks apps deploy mcp-my-server --source-code-path /Workspace/Users/<your-email>/mcp-my-server -
出力の
urlフィールドからアプリのURLを取得します:Bashdatabricks apps get mcp-my-server
UIでは、Templateからアプリを作成すると、Templateコードもデプロイされます。CLIで、databricks apps createはコードをデプロイせずにアプリを作成します。そのため、以下に示すように--source-code-pathを指定してdatabricks apps deployを実行します。デプロイメントが完了するまでお待ちください。アプリの 概要 ページには、URLとデプロイメントのステータスが表示されます。
最初のツールの呼び出し
概要 ページからアプリの URL をコピーし、/mcp を追加します。
https://<app-hostname>/mcp
この URL を使用してエージェントを接続します。
エージェントに「健康ツールを呼び出す」と尋ねます。ツールが "status": "healthy" を返していることを確認します。エージェントなしでサーバーをチェックするには、Pythonからツールを呼び出すを参照してください。
エージェントがget_current_userを呼び出したときに失敗する場合は、トラブルシューティングを参照してください。
独自のツールを追加
テキストを大文字に変換するツールを追加する:
-
ソースコードを取得します。CLIを使用してデプロイした場合は、Templateのクローンを使用します。それ以外の場合は、アプリの「 概要 」ページで「 IDEで編集 」をクリックしてソースコードをコンピュータにコピーし、編集内容をワークスペースに同期します。
-
server/tools.pyを開きます。既存のツールと共に、この関数をload_tools(mcp_server)内に追加します。Python@mcp_server.tooldef uppercase(text: str) -> str:"""Convert a string to uppercase."""return text.upper() -
変更を同期し、アプリを再デプロイします。CLIを使用して、Templateフォルダーから次をランします。
Bashdatabricks sync . /Workspace/Users/<your-email>/mcp-my-server && databricks apps deploy mcp-my-server --source-code-path /Workspace/Users/<your-email>/mcp-my-server -
エージェントを再接続して、更新されたツールを読み込みます。
uppercaseを呼び出してhelloを渡し、結果がHELLOであることを確認するように依頼します。
完全なサーバーについては、Starter Templateソースを参照してください。
REST API を MCP ツールとして公開する
HTTP API(顧客検索 API など)がすでに存在し、エージェントにそれを呼び出させたい場合は、このオプションを使用します。 MCP Server (OpenAPI) Template は、API の Endpoint を検出し、呼び出すためのツールを提供します。
APIの準備
Template には次の 2 つが必要です。
- APIの説明: APIのOpenAPI 3.x仕様を
spec.jsonとして保存し、ボリュームにuploadします。サブフォルダの外側のボリュームのルートに配置します。仕様例を参照してください。 - HTTP接続: APIの認証資格情報を保存する接続を作成するか、既存の接続を使用します。バックエンドトークンまたはOAuthクライアントの認証情報をこの接続に保存します。接続名をコピーします。作成するには
CREATE CONNECTIONが必要です。
APIが受け取るIDの接続の認証方法を選択します。
- 各ユーザーのプロバイダーアカウント: 「 OAuthユーザー・ツー・マシン(ユーザー単位) 」を選択し、プロバイダーのOAuth設定を構成します。
- 共有アカウント: APIがサポートするものに応じて、 ベアラートークン 、 OAuth Machine-to-Machine 、または OAuth User-to-Machine Shared を選択します。
サポートされているオプションについてはHTTP接続認証方法を、必要な資格情報とOAuth Endpointについては接続プロパティを参照してください。
アプリを作成
- Unity Gateway で MCPs を選択し、 + MCP をクリックして、 新しいMCPサーバーを構築 を選択します。
- [Apps] の作成ページの [ Install from a template ] で [ Agents ] を選択し、[ MCP Server (OpenAPI) ] を選択します。
- uc-volume リソースの場合は、
spec.jsonを含むボリュームを選択します。これにより、アプリがAPIの説明にアクセスできるようになります。 - コンピュートおよび承認の設定に進みます。アプリに
mcp-my-apiという名前を付け、 [Create app] をクリックします。
認証と接続の設定
Templateは、呼び出し元のDatabricksトークンを使用してHTTP接続にアクセスします。接続は外部APIの認証情報を提供します。これは、すべての呼び出し元が共有バックエンドアカウントを使用している場合でも適用されます。
-
ユーザー認証で、アプリが Template で宣言された範囲
catalog.connectionsを要求していることを確認します。 -
各呼び出し元にアプリでの使用可能権限と、HTTP接続での
USE CONNECTIONを付与します。接続アクセス権を付与するには、 カタログ > 接続 を開き、接続を選択して、 権限 tabを使用します。 -
アプリの Overview ページで、 Edit in your IDE に従ってソースコードをご利用のコンピュータにコピーし、ワークスペースへの同期を設定します。
-
In the section, find and set its value to your connection's name:
app.yaml``envセクションでUC_CONNECTION_NAMEを見つけ、その値を接続名に設定します。YAML- name: UC_CONNECTION_NAMEvalue: my_api_connectionmy_api_connection接続の名前に置き換えます。他のTemplate設定は変更しないでください。 -
更新されたファイルを同期してから、アプリをデプロイし直します。 概要 でデプロイが完了するまでお待ちください。
最初の呼び出しを行う
アプリのユーザー認証スコープを含むDatabricks OAuthトークンで接続します。アプリ呼び出しのOAuthスコープを参照してください。ユーザーごとの接続の場合、各呼び出し元はHTTP接続のOAuthサインインフローを使用してプロバイダーアカウントを承認する必要もあります。
- 概要 からアプリのURLをコピーし、
/mcpを追加して、エージェントを接続します。 - エージェントに
list_api_endpointsを呼び出すよう依頼してください。結果に指定のEndpointが含まれていることを確認します。 - エージェントに読み取り専用のEndpointを呼び出すよう依頼し、APIからデータが返されることを確認します。
このTemplateは、x-forwarded-access-tokenからユーザートークンを読み取り、接続名を使用してserving_endpoints.http_requestを呼び出します。認証ヘルパーとAPI要求ハンドラーを参照してください。
このTemplateの外部でAPIを呼び出す新しいコードについては、DatabricksはHTTP接続プロキシを推奨しています。
OpenAPI仕様の例
この仕様では GET /widgets について説明します。URL と操作を API の値に置き換えます。
{
"openapi": "3.1.0",
"info": { "title": "Example API", "version": "1.0.0" },
"servers": [{ "url": "https://api.example.com" }],
"paths": {
"/widgets": {
"get": {
"summary": "List widgets",
"responses": { "200": { "description": "A list of widgets" } }
}
}
}
}
既存の MCP サーバーをデプロイする
既存の MCP サーバーを Databricks Apps でホストします。
サーバーの準備
ソースフォルダに必要な要素:
-
HTTPサーバー: ストリーミング可能な HTTP を構成します。
0.0.0.0およびDATABRICKS_APP_PORT内のポートでリッスンします (defaultは8000)。/mcpなどの MCP パスをメモしておきます。 -
Dependencies: Pythonの場合は
requirements.txt、Node.jsの場合はpackage.jsonなど、適切な dependency file を含めます。 -
起動コマンド: サーバーを起動するコマンドとともに、
app.yamlを追加します。名前がserver.pyのPythonエントリポイントの場合は、次を使用します:YAMLcommand: ['python', 'server.py']
デプロイと接続
- Unity Gateway で MCPs を選択し、 + MCP をクリックして、 新しいMCPサーバーを構築 を選択します。
- アプリの作成ページで、 [カスタムアプリを作成] を選択します。
mcp-プレフィックスを指定して名前を付け、アプリの設定を完了します。 - アプリの [概要] ページで [IDE で編集] に従って、ソース フォルダーをワークスペースに同期します。
- [Deploy] をクリックし、ワークスペースフォルダーを選択してから、 [選択] と [Deploy] をクリックします。デプロイが完了するまでお待ちください。デプロイの手順を参照してください。
- アプリのURLをコピーし、MCPパスを追加します。そのURLを使用してエージェントを接続し、サーバーのツールのいずれかを呼び出して接続を確認します。
エージェントを接続する
選択したパスの MCP URL を使用します。スターターおよび OpenAPI Template の場合は、アプリの URL に /mcp を追加します。既存のサーバーの場合は、サーバーで構成されている MCP パスを使用します。
エージェントのセットアップガイドを選択します:
- コーディング エージェント:
ug、Unity Gateway CLIを使用します。インストールして設定した後、ug mcp add --names "app:mcp-my-server"を使用してアプリを追加し、mcp-my-serverをアプリ名に置き換えてください。ugは接続をコーディング エージェントの構成に書き込むため、エージェント自身の CLI をインストールして構成し、PATHに配置する必要があります。対応しているエージェントには、Claude Code、Codex、Cursorがあります。対応しているコーディングエージェントと作業エージェントをご覧ください。 - Python エージェント: アプリのMCP URLを使用して 「MCP ツールを使用する」に従ってください。
- 他のクライアント: クライアントのリダイレクトURLとアプリのユーザー認可スコープを使用して OAuthクライアントを登録します 。アプリのMCP URLを使用してクライアントを構成します。
呼び出し元は、アプリに対する CAN USE 権限とOAuthトークンを持っている必要があります。個人用アクセストークンはサポートされていません。アプリのアクセス権限およびアプリのトークン認証を参照してください。
Pythonからツールを呼び出す
エージェントを使わずにサーバーをテストするには、MCP Python SDKのバージョン2を使用してhealthを呼び出します:
pip install --upgrade "mcp>=2"
databricks auth token でOAuthトークンを取得し、その access_token 値をコピーします。Databricks CLIからのトークンには all-apis スコープが含まれており、これは任意のアプリのユーザー認証範囲をカバーします。アプリのトークン認証を参照してください。次に、アプリのMCP URLに対してセッションを開き、ツールを呼び出します。
import asyncio
import httpx2
from mcp import ClientSession
from mcp.client.streamable_http import streamable_http_client
MCP_URL = "https://<app-hostname>/mcp"
async def main(databricks_token):
http_client = httpx2.AsyncClient(headers={"Authorization": f"Bearer {databricks_token}"})
async with http_client, streamable_http_client(MCP_URL, http_client=http_client) as (read, write):
async with ClientSession(read, write) as session:
await session.initialize()
result = await session.list_tools()
print([tool.name for tool in result.tools])
result = await session.call_tool("health", arguments={})
print(result)
asyncio.run(main("<oauth-token>"))
health の結果には "status": "healthy" が含まれます。
トラブルシューティング
get_current_userはAuthentication token not found in request headers (x-forwarded-access-token)を返します。 アプリにユーザー認証範囲がありません。アプリに範囲を追加してから、それらを含むOAuthトークンで接続してください。アプリのトークン認証を参照してください。
価格とモニタリング
アプリでは Databricks Apps の価格が適用されます。デプロイおよびリクエストのLogsについては、Databricks Apps のLogsとモニタリングを参照してください。