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

DatabricksアプリでMCPサーバーをホストする

エージェントが独自のツールを呼び出せるように、Databricks Apps上でMCPサーバーを構築します。Databricks Appsは、サーバーをランするためのコンピュートと、エージェントがサーバーに接続するためのHTTPS URLを提供します。

カテゴリを選択​

Databricks AppsでMCPサーバーをホストするには、次の3つの方法のいずれかを選択します。

スターター Template からサーバーを構築します。​

MCP Server (Starter) Templateには、独自のPythonコードを追加する前に呼び出すことができる2つのツールが含まれています。healthはサーバーが実行されていることをチェックし、get_current_userは呼び出しユーザーのIDを返します。get_current_userは、アプリにユーザー認証範囲がある場合にのみ機能します。

Templateを検索してデプロイします​

Databricks Apps の要件を満たすワークスペースを使用します。

  1. ワークスペースで、 Unity Gateway を開き、 MCPs を選択します。
  2. + MCP をクリックし、 新しいMCPサーバーを構築 を選択します。Databricks Appsの作成ページが開きます。
  3. 「Template からインストール」 を見つけます。この Template ギャラリーで 「Agents」 tabを選択し、 「MCP Server (Starter)」 を選択します。
  4. リソース、コンピュート、および承認の設定を確認します。セットアップを進めるには、 [次へ] をクリックします。
  5. アプリにmcp-my-serverという名前を付け、 [アプリの作成] をクリックします。その名前が使用されている場合は、mcp-で始まる別の名前を使用してください。このプレフィックスにより、AI PlaygroundがMCPサーバーを認識できるようになります。

UIでは、Templateからアプリを作成すると、Templateコードもデプロイされます。CLIで、databricks apps createはコードをデプロイせずにアプリを作成します。そのため、以下に示すように--source-code-pathを指定してdatabricks apps deployを実行します。デプロイメントが完了するまでお待ちください。アプリの 概要 ページには、URLとデプロイメントのステータスが表示されます。

最初のツールの呼び出し​

概要 ページからアプリの URL をコピーし、/mcp を追加します。

Text
https://<app-hostname>/mcp

この URL を使用してエージェントを接続します。

エージェントに「健康ツールを呼び出す」と尋ねます。ツールが "status": "healthy" を返していることを確認します。エージェントなしでサーバーをチェックするには、Pythonからツールを呼び出すを参照してください。

エージェントがget_current_userを呼び出したときに失敗する場合は、トラブルシューティングを参照してください。

独自のツールを追加​

テキストを大文字に変換するツールを追加する:

  1. ソースコードを取得します。CLIを使用してデプロイした場合は、Templateのクローンを使用します。それ以外の場合は、アプリの「 概要 」ページで「 IDEで編集 」をクリックしてソースコードをコンピュータにコピーし、編集内容をワークスペースに同期します。

  2. server/tools.pyを開きます。既存のツールと共に、この関数を load_tools(mcp_server) 内に追加します。

    Python
    @mcp_server.tool
    def uppercase(text: str) -> str:
    """Convert a string to uppercase."""
    return text.upper()
  3. 変更を同期し、アプリを再デプロイします。CLIを使用して、Templateフォルダーから次をランします。

    Bash
    databricks sync . /Workspace/Users/<your-email>/mcp-my-server && databricks apps deploy mcp-my-server --source-code-path /Workspace/Users/<your-email>/mcp-my-server
  4. エージェントを再接続して、更新されたツールを読み込みます。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については接続プロパティを参照してください。

アプリを作成​

  1. Unity Gateway で MCPs を選択し、 + MCP をクリックして、 新しいMCPサーバーを構築 を選択します。
  2. [Apps] の作成ページの [ Install from a template ] で [ Agents ] を選択し、[ MCP Server (OpenAPI) ] を選択します。
  3. uc-volume リソースの場合は、spec.json を含むボリュームを選択します。これにより、アプリがAPIの説明にアクセスできるようになります。
  4. コンピュートおよび承認の設定に進みます。アプリに mcp-my-api という名前を付け、 [Create app] をクリックします。

認証と接続の設定​

Templateは、呼び出し元のDatabricksトークンを使用してHTTP接続にアクセスします。接続は外部APIの認証情報を提供します。これは、すべての呼び出し元が共有バックエンドアカウントを使用している場合でも適用されます。

  1. ユーザー認証で、アプリが Template で宣言された範囲 catalog.connections を要求していることを確認します。

  2. 各呼び出し元にアプリでの使用可能権限と、HTTP接続でのUSE CONNECTIONを付与します。接続アクセス権を付与するには、 カタログ > 接続 を開き、接続を選択して、 権限 tabを使用します。

  3. アプリの Overview ページで、 Edit in your IDE に従ってソースコードをご利用のコンピュータにコピーし、ワークスペースへの同期を設定します。

  4. In the section, find and set its value to your connection's name:app.yaml``envセクションでUC_CONNECTION_NAMEを見つけ、その値を接続名に設定します。

    YAML
    - name: UC_CONNECTION_NAME
    value: my_api_connection

    my_api_connection接続の名前に置き換えます。他のTemplate設定は変更しないでください。

  5. 更新されたファイルを同期してから、アプリをデプロイし直します。 概要 でデプロイが完了するまでお待ちください。

最初の呼び出しを行う​

アプリのユーザー認証スコープを含むDatabricks OAuthトークンで接続します。アプリ呼び出しのOAuthスコープを参照してください。ユーザーごとの接続の場合、各呼び出し元はHTTP接続のOAuthサインインフローを使用してプロバイダーアカウントを承認する必要もあります。

  1. 概要 からアプリのURLをコピーし、/mcpを追加して、エージェントを接続します。
  2. エージェントにlist_api_endpointsを呼び出すよう依頼してください。結果に指定のEndpointが含まれていることを確認します。
  3. エージェントに読み取り専用のEndpointを呼び出すよう依頼し、APIからデータが返されることを確認します。

このTemplateは、x-forwarded-access-tokenからユーザートークンを読み取り、接続名を使用してserving_endpoints.http_requestを呼び出します。認証ヘルパーとAPI要求ハンドラーを参照してください。

このTemplateの外部でAPIを呼び出す新しいコードについては、DatabricksはHTTP接続プロキシを推奨しています。

OpenAPI仕様の例​

この仕様では GET /widgets について説明します。URL と操作を API の値に置き換えます。

JSON
{
"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エントリポイントの場合は、次を使用します:

    YAML
    command: ['python', 'server.py']

デプロイと接続​

  1. Unity Gateway で MCPs を選択し、 + MCP をクリックして、 新しいMCPサーバーを構築 を選択します。
  2. アプリの作成ページで、 [カスタムアプリを作成] を選択します。mcp- プレフィックスを指定して名前を付け、アプリの設定を完了します。
  3. アプリの [概要] ページで [IDE で編集] に従って、ソース フォルダーをワークスペースに同期します。
  4. [Deploy] をクリックし、ワークスペースフォルダーを選択してから、 [選択] と [Deploy] をクリックします。デプロイが完了するまでお待ちください。デプロイの手順を参照してください。
  5. アプリのURLをコピーし、MCPパスを追加します。そのURLを使用してエージェントを接続し、サーバーのツールのいずれかを呼び出して接続を確認します。

エージェントを接続する​

選択したパスの MCP URL を使用します。スターターおよび OpenAPI Template の場合は、アプリの URL に /mcp を追加します。既存のサーバーの場合は、サーバーで構成されている MCP パスを使用します。

エージェントのセットアップガイドを選択します:

呼び出し元は、アプリに対する CAN USE 権限とOAuthトークンを持っている必要があります。個人用アクセストークンはサポートされていません。アプリのアクセス権限およびアプリのトークン認証を参照してください。

Pythonからツールを呼び出す​

エージェントを使わずにサーバーをテストするには、MCP Python SDKのバージョン2を使用してhealthを呼び出します:

Bash
pip install --upgrade "mcp>=2"

databricks auth token でOAuthトークンを取得し、その access_token 値をコピーします。Databricks CLIからのトークンには all-apis スコープが含まれており、これは任意のアプリのユーザー認証範囲をカバーします。アプリのトークン認証を参照してください。次に、アプリのMCP URLに対してセッションを開き、ツールを呼び出します。

Python
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とモニタリングを参照してください。