0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DatabricksにおけるカスタムMCPサーバー構築のステップバイステップガイド

Last updated at Posted at 2025-11-06

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サーバーのテスト

前提条件

  1. プレビュー設定で「Managed MCP Server (Beta)」機能が有効化されているDatabricksワークスペース。(これはGA/Public Previewになるとデフォルトでオンになります)
  2. ローカルにインストールされたDatabricks CLI
  3. パーソナルアクセストークン(PAT)

ローカルでのMCPサーバー構築

  1. MCPサーバー構築の定義済みテンプレートを提供するDatabricks Labs MCP repoをクローンします。

    git clone https://github.com/databrickslabs/mcp.git
    
  2. Pythonファイルmcp/examples/custom-server/src/custom_server/app.pyにはMCPサーバーのコードが含まれています。サーバーを実行するためにFastMCPを使用しています。ツールを追加するには、シンプルにPython関数を定義し@mcp.toolでデコレーションします。このテンプレートにはすでに追加するための基本的な例が含まれています。

  3. いくつかのツールを追加することで拡張しましょう:

    • ツール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])
    
  4. app.yamlで環境変数を更新します

    command: ["uv", "run", "custom-server"]
    env:
      - name: 'WAREHOUSE_ID'
        value: '<warehouse-id>'
    
  5. requirements.txtに必要なPythonライブラリを追加します

    uv
    yfinance
    pandas
    databricks-sql-connector
    python-dotenv
    

上のステップを通じて、ローカルIDEでMCPサーバーをセットアップすることができました。それでは、デプロイメントに進みましょう。

Databricks AppとしてMCPサーバーをデプロイ

Databricks appとしてMCPサーバーをデプロイするのは、ほんの数ステップです:

  1. ローカルマシンに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>
    
  2. Databricks appを作成します。アプリ名のプレフィックスはmcp-である必要があります。

    databricks apps create mcp-<app_name>
    
  3. 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/"
    


    mcpのデプロイ

  4. サービスプリンシパルの権限

    クエリーを実行するのに必要な権限がサービスプリンシパルにあることを確認します。デプロイしたDatabricks Appsのページの許可セクションでサービスプリンシパルを確認し、必要なUnity Catalogのアクセスを許可することができます。

    GRANT ALL ON CATALOG <catalog_name> TO <service_principal>
    


    アプリのサービスプリンシパル

Databricks PlaygroundでのMCPサーバーの使用

  1. カスタムMCPサーバーをデプロイすると、Databricks Playgroundでテストを行うことができます。LLMモデルを選択し、以下のようにMCPサーバーを選択することでツールを追加します。

    LLMとMCPツールの追加

  2. タスクを実行するエージェントをガイドするためにシステムプロンプトを追加します。

    システムプロンプト

  3. NSEにリストされている企業の株の詳細を取得するようにエージェントに依頼します。LLMは内部でMCPサーバーで定義されたツールget_stock_infoを呼び出します。

  4. 時価総額でトップ5の企業をキャプチャし、Unity CatalogのDeltaテーブルに保存するようにエージェントに依頼します。LLMは内部で以下のアクションを行います:

    • 自身の知識を用いてトップ5の企業を取得
    • それぞれの企業に対して、get_stock_infoツールを呼び出すことで時価総額のような株価情報を計算
    • ツールrun_query_on_databricksを用いて、Deltaテーブルを作成しトップ5企業の詳細をインサート

      LLMのレスポンス
  5. 結果を確認するためにDatabricks SQLエディタでこのテーブルをクエリーします。

    結果のDeltaテーブル

このカスタムMCPサーバーはLangGraphや任意のエージェントフローから、ローカルやDatabricksノートブックで呼び出すことができます。langgraph-mcp-tool-calling-agent - Databricksをご覧ください。

まとめ

このウォークスルーを通じて、アプリとしてデプロイメントからPlaygroundでのテストまで、カスタムのMCPサーバーでDatabricksを拡張することがどれだけ簡単なのかを見てきました。

Databricksは、一つの箇所でAIエージェントと現実のデータをまとめ上げることをシンプルにします。複数のシステムを両立するのではなく、外部の洞察の取得、レイクハウスでのSQLの実行、セキュアに企業データを操作するためにLLMを強化、これら全てをDatabricksプラットフォームで行うことができます。

リファレンス

はじめてのDatabricks

はじめてのDatabricks

Databricks無料トライアル

Databricks無料トライアル

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?