💨

とりあえずdbt MCP Serverを試してみたい方へ

に公開

この記事はとりあえずdbt MCP Serverを試したい方、どんなことが出来るのか実際に触ってみたい方に向けて書いてます。
そのため、色々と制約がありますが、dbt MCP Serverの可能性を確認することは十分可能だと思います。

dbt MCP Serverとは

dbt MCP Server(Model Context Protocol Server)は、dbt Labsが提供する新しいツールで、AIシステムがdbtプロジェクトの構造化データやメタデータにアクセスできるようにするものです。
これは、Anthropicが開発したオープンプロトコルであるModel Context Protocol(MCP)を活用し、AIとデータの統合を標準化することを目的としています。

dbt MCP Serverの主な機能

  1. データの発見(Data Discovery):
    dbtプロジェクト内のデータ資産(モデル、メトリクス、ドキュメントなど)をAIが理解できるようにします。
  2. データのクエリ実行(Data Querying):
    dbtのセマンティックレイヤーを利用して、信頼性の高いメトリクスを取得します。
    SQLクエリを実行して、柔軟なデータ探索や開発を可能にします。
  3. dbtコマンドの実行(dbt Command Execution):
    AIがdbt CLIを通じてプロジェクトの実行や他の操作を行えるようにします。

利用方法と注意点

  • dbt MCP Serverは、dbt Cloudおよびdbt Coreのユーザーが利用できます。
  • AIシステムがdbtプロジェクトにアクセスする際は、適切な権限設定を行い、特に本番環境へのアクセスには注意が必要です。
  • 初期段階では、サンドボックス環境でのテストや読み取り専用の権限設定が推奨されます。

構成

今回dbt MCP Serverを利用してみる構成は次のようなイメージです。

dbt MCP Serverのセットアップ

uvのインストール

Rust製の高速なPythonパッケージマネージャであるuvをmacOSにインストールします。

curl -LsSf https://astral.sh/uv/install.sh | sh

Pythonがmacにインストールされていない場合は次のコマンドでインストールします。

uv python install

dbt MCP Serverの設定

mac端末上にdbt MCP Serverを立てます。
任意のディレクトリにdbt MCP Serverのリポジトリをcloneします。

git clone https://github.com/dbt-labs/dbt-mcp.git
cd dbt-mcp

taskコマンドを実行し、依存関係をインストールします。

task install

もしtaskコマンドがインストールされていない場合、以下コマンドでインストールしてください。

brew install go-task/tap/go-task

次に、dbt MCP Serverに設定する環境変数を設定します。
dbt MCP Serverリポジトリに.env.exampleファイルがあるので、リネームコピーします。

cp .env.example .env

.envファイルを以下のように設定します。

DBT_HOST=""
DBT_PROD_ENV_ID=""
DBT_DEV_ENV_ID=""
DBT_USER_ID=""
DBT_TOKEN=""
DBT_PROJECT_DIR=""
DBT_PATH=""
MULTICELL_ACCOUNT_PREFIX=""
DISABLE_SEMANTIC_LAYER=true
DISABLE_DISCOVERY=true
DISABLE_REMOTE_TOOLS=true

今回の環境変数はdbt coreの利用を想定しているため、設定が必要な項目は次の5つです。

パラメータ名 説明 dbt coreに必要 設定値
DBT_PROJECT_DIR dbtプロジェクトのリポジトリがローカルにホストされている場所へのパス
これは/Users/firstnamelastname/reponameのようなものです
/Users/myuser/dbt-project/dbt
DBT_PATH dbt Coreまたはdbt Cloud CLIの実行ファイルへのパスです
dbtの実行ファイルは、whichコマンドを実行することで見つけることができます
/Users/myuser/.venv/bin/dbt
DISABLE_SEMANTIC_LAYER 「セマンティックレイヤーを無効化する」ためのフラグ
dbt cloudを使わない場合はtrueを設定します。dbt-coreのみ利用する場合は必須です
true
DISABLE_DISCOVERY dbt Discovery API MCP オブジェクトを無効にするには、true を設定します
dbt-coreのみ使う場合はtrueを明示的に設定する方が安全です
true
DISABLE_REMOTE_TOOLS リモートMCPオブジェクト(dbt cloud)を有効にするには、これをfalseに設定します。
dbt cloudを使わない場合はtrueにします
true

環境変数の各パラメータについては公式リポジトリを参照ください。

Clineのセットアップ

VSCodeの拡張機能なので、Clineのインストール方法は割愛します。
他の拡張機能とインストール方法は同じなので、躓くことはないと思います。

cline_mcp_settings.jsonの設定

cline_mcp_settings.jsonに用意したdbt MCP Serverのパラメータを設定します。

{
  "mcpServers": {
    "dbt-mcp": {
      "disabled": false,
      "timeout": 60,
      "command": "uvx",
      "args": [
        "--env-file",
        "/Users/.../dbt-mcp/.env", # dbt MCP Serverの環境変数のパスを指定します
        "dbt-mcp"
      ],
      "transportType": "stdio"
    }
  }
}

dbt MCP Serverを利用してみる

ここまででdbt MCP Serverを利用する準備が整いましたので、ここからは実際に使っていきます!

dbtプロジェクトはjaffle shopを利用します

※すでにjaffle shopのモデルはduckdbにリリース済みです。
やってみたこととしては次のとおりです。

  1. dbtプロジェクトの解析
  2. モデルの詳細な解析
  3. 簡単なモデルの作成と保存
  4. モデルの実行

dbtプロジェクトの解析

/Users/.../jaffle_shop_duckdbにあるdbtプロジェクトのjaffle_shopにどのようなモデルがあるか教えてください。

モデルの詳細な解析

プロンプトその2
customersモデルはどのようなロジックで作られていますか?
また、どのような意味を持つモデルですか?

簡単なモデルの作成と保存

customersモデルから、月別の売り上げ実績のモデルを作成してください。

モデルの実行

monthly_salesモデルをdbt runを実行してリリースしてください。

### 結果の確認(手動と目視)
D SELECT * FROM monthly_sales LIMIT 5;
┌────────────┬─────────────┐
│ year_month │ total_sales │
│  varchardouble    │
├────────────┼─────────────┤
│ 2018-01496.0 │
│ 2018-02415.0 │
│ 2018-03622.0 │
│ 2018-04139.0 │
└────────────┴─────────────┘

まとめ

いかがでしたでしょうか。dbt MCP Serverを利用することで、どのようなことが出来るか少しでも伝われば幸いです。
もちろん、まだまだ本番導入するためには解決しなければならない課題はあると思いますが、データ分析をAI駆動開発で行う重要性はご理解いただけたと思います。
データ分析やツールの知識がなくとおも、自然言語による命令である程度の開発ができる点は魅力的だと思います。
これからもdbt MCP Serverの成長に期待したいです。

参考資料

Discussion