Step-by-Step Guide to Building Custom MCP Server o... - Databricks Community - 132995の翻訳です。
本書は著者が手動で翻訳したものであり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
イントロダクション
LLMにおける最大の課題の一つは、静的な知識と現実世界のアクションの間のギャップを埋めることです。MCPは、モデルに外部ツールやデータソースに接続する標準的な手段を提供することでこれを解決します。
Model Context Protocol (MCP)は、構造化された方法で大規模言語モデル(LLM)が外部ツール、データソース、APIに接続できるようにするためのオープン標準です。モデルが知っていることに依存するのではなく、MCPはLLMにリアルタイムの情報やカスタムの能力に対して制御されたアクセスを提供します。
本記事では、カスタムMCPサーバーをを構築し、Databricksアプリとしてデプロイするステップバイステップガイドをウォークスルーします。デプロイしたら、LLMモデルにツールとしてアタッチすることでDatabricksのPlaygroundでこのMCPサーバーをテストします。
デモンストレーションとして、シンプルなツールを構築します - NSE株式市場データを取得するものと、エージェントがDatabricksとどのように連携(テーブルの作成やSQLクエリーの実行など)するのかを示すものです。同様に、ワークフロー作成などのツールのように、複数の他のツールをシームレスにDatabrikcsに連携するように開発することができます。
注意
ここで提供する株式市場データに関連するツールやリソースは教育目的のためだけのものであり、金融や投資のアドバイスとして解釈しないでください。
以下のステップをカバーします:
- ローカルマシンでのMCPサーバーの構築
- Databricks AppとしてのMCPサーバーのデプロイ
- Databricks playgroundでのMCPサーバーのテスト
前提条件
- プレビュー設定で「Managed MCP Server (Beta)」機能が有効化されているDatabricksワークスペース。(これはGA/Public Previewになるとデフォルトでオンになります)
- ローカルにインストールされたDatabricks CLI
- パーソナルアクセストークン(PAT)
ローカルでのMCPサーバー構築
-
MCPサーバー構築の定義済みテンプレートを提供するDatabricks Labs MCP repoをクローンします。
git clone https://github.com/databrickslabs/mcp.git -
Pythonファイル
mcp/examples/custom-server/src/custom_server/app.pyにはMCPサーバーのコードが含まれています。サーバーを実行するためにFastMCPを使用しています。ツールを追加するには、シンプルにPython関数を定義し@mcp.toolでデコレーションします。このテンプレートにはすでに追加するための基本的な例が含まれています。 -
いくつかのツールを追加することで拡張しましょう:
-
ツール1: get_stock_info
指定されたNSEシンボルに対するライブ株式詳細を取得するためにyfinanceパッケージを使用します。 -
ツール2: run_query
DatabricksウェアハウスでSQLクエリーを実行するためにdatabricks-sql-connectorを使用します。
これらのツールやDatabricksリソースは、エージェントのコードで直接APIやSDK経由で呼び出すことができますが、Databricks AppとしてMCPサーバーでこれらをラッピングすることで、追加のメリットを得ることができます。MCPはインタフェースを標準化し、下流のエージェントフレームワークで自動的にツールを発見できるようにし、一貫性のあるレスポンスを確実なものとし、それぞれのチームが個別のコードを記述、メンテナンスする必要性を排除します。
注意 MCPに加えて、DatabricksではUnity Catalog関数のツールやエージェントコードのツールを用いたツールを作成するオプションも提供しています。詳細はツールアプローチを選択するをご覧ください。
それぞれのツールのコードスニペットを追加します。
import yfinance as yf import requests import pandas as pd from io import StringIO import databricks.sql import os from databricks.sdk.core import Config from mcp.server.fastmcp import FastMCP # create MCP server mcp = FastMCP("custom MCP server on databricks apps") # Tool 1 @mcp.tool( name = "get_stock_info", description = "Fetch the stock information of the given symbol" ) def get_stock_info(symbol: str) -> str | None: """Fetch market cap, current price, and 52-week range for NSE stock.""" try: info = yf.Ticker(f"{symbol}.NS").fast_info return ( f"\nDetails for {symbol}.NS:\n" f"market_cap = {info['marketCap']}\n" f"current_price = {info['last_price']} INR\n" f"year_low = {info['year_low']} INR\n" f"year_high = {info['year_high']} INR\n" ) except Exception as e: print(f"Error fetching {symbol}: {e}") return None # Tool 2 @mcp.tool( name="run_query_on_databricks", description="Gets the SQL query and execute the query on databricks SQL warehouse" ) def run_query_on_databricks(sql_query: str): """ Executes a SQL query on a Databricks SQL Warehouse and returns the results as a pandas DataFrame. """ cfg = Config() warehouse_id = os.getenv("WAREHOUSE_ID") host = cfg.host http_path = f"/sql/1.0/warehouses/{warehouse_id}" if not all([host, http_path]): raise ValueError("Missing required Databricks connection environment variables.") with databricks.sql.connect(server_hostname=host, http_path=http_path, credentials_provider=lambda: cfg.authenticate) as conn, conn.cursor() as cur: cur.execute(sql_query) rows = cur.fetchall() return pd.DataFrame(rows, columns=[c[0] for c in cur.description]) -
ツール1: get_stock_info
-
app.yamlで環境変数を更新しますcommand: ["uv", "run", "custom-server"] env: - name: 'WAREHOUSE_ID' value: '<warehouse-id>' -
requirements.txtに必要なPythonライブラリを追加しますuv yfinance pandas databricks-sql-connector python-dotenv
上のステップを通じて、ローカルIDEでMCPサーバーをセットアップすることができました。それでは、デプロイメントに進みましょう。
Databricks AppとしてMCPサーバーをデプロイ
Databricks appとしてMCPサーバーをデプロイするのは、ほんの数ステップです:
-
ローカルマシンにDatabricks CLIをインストールし、OAuthを用いてワークスペースの認証を行います。Databricks CLIインストールガイドを参照し、必要な認証ステップを完了します。
databricks configure # you will be asked to enter host url and the PAT token databricks auth login --host <workspace-url> -
Databricks appを作成します。アプリ名のプレフィックスは
mcp-である必要があります。databricks apps create mcp-<app_name> -
Databricksワークスペースにソースコードをアップロードしてアプリをデプロイします。
DATABRICKS_USERNAME=$(databricks current-user me | jq -r .userName) databricks sync . "/Users/$DATABRICKS_USERNAME/mcp-custom-server" databricks apps deploy mcp-<app_name> --source-code-path "/Workspace/Users/$DATABRICKS_USERNAME/mcp-custom-server/" -
サービスプリンシパルの権限
クエリーを実行するのに必要な権限がサービスプリンシパルにあることを確認します。デプロイしたDatabricks Appsのページの許可セクションでサービスプリンシパルを確認し、必要なUnity Catalogのアクセスを許可することができます。
GRANT ALL ON CATALOG <catalog_name> TO <service_principal>
Databricks PlaygroundでのMCPサーバーの使用
-
カスタムMCPサーバーをデプロイすると、Databricks Playgroundでテストを行うことができます。LLMモデルを選択し、以下のようにMCPサーバーを選択することでツールを追加します。
LLMとMCPツールの追加 -
NSEにリストされている企業の株の詳細を取得するようにエージェントに依頼します。LLMは内部でMCPサーバーで定義されたツールget_stock_infoを呼び出します。
-
時価総額でトップ5の企業をキャプチャし、Unity CatalogのDeltaテーブルに保存するようにエージェントに依頼します。LLMは内部で以下のアクションを行います:
このカスタムMCPサーバーはLangGraphや任意のエージェントフローから、ローカルやDatabricksノートブックで呼び出すことができます。langgraph-mcp-tool-calling-agent - Databricksをご覧ください。
まとめ
このウォークスルーを通じて、アプリとしてデプロイメントからPlaygroundでのテストまで、カスタムのMCPサーバーでDatabricksを拡張することがどれだけ簡単なのかを見てきました。
Databricksは、一つの箇所でAIエージェントと現実のデータをまとめ上げることをシンプルにします。複数のシステムを両立するのではなく、外部の洞察の取得、レイクハウスでのSQLの実行、セキュアに企業データを操作するためにLLMを強化、これら全てをDatabricksプラットフォームで行うことができます。
リファレンス