every Tech Blog

株式会社エブリーのTech Blogです。

Databricks Managed MCP ServerとUnity Catalog Functionでテーブルスキーマを取得する

はじめに

こんにちは。
開発本部 開発1部 デリッシュリサーチチームでデータエンジニアをしている吉田です。

本記事では、DatabricksのManaged MCP Serverを活用し、CursorからUnity Catalog Functionsをツールとして呼び出して、任意のUnity Catalogテーブルのスキーマ情報を取得するまでをまとめます。

背景

CursorでDatabricks上のコードを書く際、特定テーブルのスキーマ情報をCursor側(エージェント)に渡したい場面がありました。

どのようにして簡単にこの情報を取得して渡すか検討していたところ、Databricks Managed MCP Serverがベータリリースされていることを知り、早速使ってみることにしました。

Databricks Managed MCP Serverとは

Databricks Managed MCP Serverとは、Databricks上でホストされているMCP Serverです。

Use Databricks managed MCP servers

インフラはDatabricks側で管理されるため、すぐに利用できます。
現時点でベータ版として以下の機能が提供されています。

  • 提供MCPサーバー
    • Vector search: Vector Search Indexにクエリして関連ドキュメントを検索する
    • Genie space: Genie Spaceにクエリを実行し、自然言語を用いてクエリを実行する
    • Unity Catalog functions: Unity Catalog Functionを利用して、定義済みのSQLを実行する
    • DBSQL: AI生成のSQLを実行する

この記事ではUnity Catalog FunctionsのMCP Serverを扱います。

Unity Catalog Functionの実装

MCP Serverから呼び出すためのUnity Catalog Functionを作成します。
Unity Catalogのテーブルパスを受け取り、カラム名やデータ型をJSON文字列で返す関数を作成します。

Unity Catalogテーブルのスキーマを取得する方法はいくつかありますが、SQLだけで簡単に完結させたかったため、system.information_schema.columnsテーブルを参照する方法を採用しました。
system.information_schema.columnsテーブルには、管理下の全テーブルのカラム情報が含まれているため、これを利用します。

以下のSQLでmcp.unity_catalog配下にget_schema_infoという名前のUnity Catalog Functionを作成します。

CREATE OR REPLACE FUNCTION mcp.unity_catalog.get_schema_info(
  uc_full_path STRING COMMENT 'Unity Catalogテーブルのフルパス(例: catalog.schema.table)'
)
RETURNS STRING
LANGUAGE SQL
COMMENT "指定したUnity Catalogテーブルのカラム情報(カラム名、NULL許容、データ型、パーティションインデックス、コメント)をJSON形式で返す関数です。"
RETURN
SELECT
  to_json(collect_list(struct(
    column_name,
    is_nullable,
    full_data_type,
    partition_index,
    comment
  ))) AS s
FROM
  system.information_schema.columns
WHERE
  table_catalog = split(uc_full_path, '\\.')[0]
  AND table_schema = split(uc_full_path, '\\.')[1]
  AND table_name = split(uc_full_path, '\\.')[2];

Managed MCP Server(Unity Catalog Functions)として公開

Managed MCP ServerのFunctionsサーバーは https://<workspace-hostname>/api/2.0/mcp/functions/{catalog}/{schema} のURLパターンで提供されます。
今回の関数は mcp.unity_catalog.get_schema_info なので、クライアントから接続するサーバーURLは以下になります。

https://<workspace-hostname>/api/2.0/mcp/functions/mcp/unity_catalog

Cursor からの接続と実行

Cursorは、Cursor Settings -> Tools & MCPの項目から接続を設定できます。

Connect Cursor with PAT

mcp.jsonファイルを以下のように設定することで接続できます。
URLで指定した <catalog>.<schema> 配下の Unity Catalog Function が自動的にツールとして登録されます。

設定イメージ(例)

{
  "mcpServers": {
    "uc-function-mcp": {
      "type": "streamable-http",
      "url": "https://<workspace-hostname>/api/2.0/mcp/functions/<catalog_name>/<schema_name>",
      "headers": {
        "Authorization": "Bearer <YOUR_PAT>"
      },
      "note": "Databricks UC Functions"
    }
  }
}

Cursorから呼び出し

Databricksのサンプルデータを対象に実行してみます。

uc-function-mcpを利用して、samples.bakehouse.media_customer_reviewsのスキーマ情報を教えて下さい

Unity Catalog Functionの mcp.unity_catalog.get_schema_info が呼ばれ、以下のような JSON が返ります。

{
  "is_truncated": false,
  "columns": [
    "output"
  ],
  "rows": [
    [
      [
        {
          "column_name": "review",
          "is_nullable": "YES",
          "full_data_type": "string"
        },
        {
          "column_name": "franchiseID",
          "is_nullable": "YES",
          "full_data_type": "bigint"
        },
        {
          "column_name": "review_date",
          "is_nullable": "YES",
          "full_data_type": "timestamp"
        },
        {
          "column_name": "new_id",
          "is_nullable": "YES",
          "full_data_type": "int"
        }
      ]
    ]
  ]
}

最終的に、以下のように解釈した結果を出力してくれました。

まとめ

Managed MCP Serverを利用して、Unity Catalog Functionを呼び出すことで、Cursorから安全にテーブルスキーマを取得できるようになりました。