dbt MCPは、dbt Labsが公式に公開しているMCP(Model Context Protocol)サーバーです。Claude CodeやCursorなどのAIエージェントから、dbtプロジェクトのモデル一覧・リネージ・テスト結果・Semantic Layerの指標を引けるようにします。本記事では、2026年11月時点の最新版dbt-mcp 2.10.1を前提に、dbt Coreだけで動かすセルフホスト版の登録手順と、dbt platformのリモート版へ接続する設定をコード付きでまとめました。後半では、AIエージェントにdbt runを任せないためのツール制限と、導入を見送る場面も書いています。
まとめ:dbt MCPはdbt Coreならセルフホスト版、指標参照はリモート版
dbt Coreのプロジェクトを手元で開発しているなら、uvx dbt-mcpで起動するセルフホスト版を選びます。必要な設定はDBT_PROJECT_DIRとDBT_PATHの2つだけで、dbt platformのアカウントは要りません。dbt platformを契約していて、指標の問い合わせやメタデータの参照が主目的なら、インストール不要のリモート版が向いています。
どちらの場合も、最初に決めるのは「AIに何をさせないか」です。dbtコマンド系のツールは、ウェアハウス上のテーブルを作り替えます。許可リストで読み取り系のツールだけを有効にし、接続先を開発用のtargetに固定してから使い始めてください。
dbt MCPサーバーの全体像:ツールセット構成とセルフホスト版・リモート版の違い
設定に入る前に、dbt MCPが何を提供していて、2つの提供形態で何が違うのかを押さえます。ここを読み違えると、設定したのにツールが出てこない状態になります。
dbt-labs公式のdbt-mcp 2.10系が提供する主なツールセットと用途
dbt MCPのソースはGitHubのdbt-labs/dbt-mcpで、Apache-2.0ライセンスのOSSとして公開されています。PyPIのdbt-mcpでは、2026年11月11日時点の最新が2.10.1(11月3日公開)で、対応するPythonは3.12以上3.15未満です。READMEのツール一覧を用途別にまとめると次のとおりです。
| ツールセット | 主な役割 | 必要なもの |
|---|---|---|
| dbt CLI | dbtコマンドの実行 | ローカルのdbt |
| Discovery | モデル・リネージの参照 | dbt platform |
| Semantic Layer | 定義済み指標の問い合わせ | dbt platform |
| SQL | SQLの実行と自然言語変換 | dbt platform |
| Admin API | ジョブの一覧と起動 | dbt platform |
| Codegen | YAML・SQLの雛形生成 | dbt-codegen |
| dbt LSP | 列単位のリネージ | dbt v2系の環境 |
dbt CLIツールの中身はbuild・run・test・compile・list・showなどで、Discoveryにはget_all_models・get_lineage・get_model_health、Semantic Layerにはlist_metrics・query_metricsが並びます。
dbt Coreだけの環境で使えるのは、表の1行目のdbt CLIツールと、ローカルのmanifest.jsonから依存関係を読むget_lineage_dev・get_node_details_devです。get_model_parentsやget_model_detailsは非推奨になり、get_lineageとget_node_detailsへの移行が案内されています。古いブログ記事のツール名をプロンプトに書いても、2.10系では通らない場合があるため注意が必要です。dbt v2系のエンジンについてはdbt Fusionとはで整理しています。
セルフホスト版とリモート版の違いを実行場所・dbtコマンド・API制限で比較
公式のAbout dbt MCP serverは、2つの形態を次のように分けています。
| 項目 | セルフホスト版 | リモート版 |
|---|---|---|
| 動く場所 | 自分のPC(uvxで起動) | dbt platform(HTTP接続) |
| dbt run・build | 使える | 使えない |
| Codegen | 使える | 使えない |
| Semantic Layer・Discovery | platform契約があれば使える | 使える |
| API制限 | 公開APIごとの制限 | IPあたり毎分5,000リクエスト |
モデルを書いて動かす開発用途はセルフホスト版、出来上がったデータ基盤をAIから問い合わせる利用者向けはリモート版、という分担です。リモート版は全プランで提供されていますが、裏側のDiscovery APIやSemantic Layer APIはプランによって使えるものが変わる点に注意が要ります。
dbt Core環境でClaude Codeからdbt MCPを動かすセルフホスト設定手順
ここから手を動かします。dbt Coreのインストールとprofiles.ymlの作成はdbt Coreの使い方で済ませ、dbt debugが通る状態を前提にします。
uv導入済み環境でのDBT_PROJECT_DIR・DBT_PATHの絶対パス確認
dbt MCPはuvxで取得と起動をまとめて行うため、リポジトリのクローンは不要です。先にuvを入れ、2つの絶対パスを控えます。手順はRun the self-hosted dbt MCP serverに沿っています。
# macOS / Linux
which dbt # 例: /opt/homebrew/bin/dbt
cd my_dbt_project && pwd
# Windows(コマンドプロンプト)
where dbt # 例: C:\Python312\Scripts\dbt.exe
cd my_dbt_project && cd
DBT_PROJECT_DIRはdbt_project.ymlがあるフォルダ、DBT_PATHはdbt実行ファイルそのものを指します。WindowsではC:/Python312/Scripts/dbt.exeのようにスラッシュで書くのが公式の指定です。仮想環境にdbtを入れている場合は、その環境の中でwhere dbtを実行してください。
Claude Codeでのdbt MCP登録:コマンドと.mcp.jsonの設定
登録にはclaude mcp addを使い、設定ファイルとして.mcp.jsonを確認します。
Claude Codeでは、コマンド1行で登録できます。
claude mcp add dbt \
-e DBT_PROJECT_DIR=/Users/yourname/projects/my_dbt_project \
-e DBT_PATH=/opt/homebrew/bin/dbt \
-- uvx dbt-mcp
チームで同じ設定を使うなら、リポジトリのルートに.mcp.jsonを置いてコミットする方法を公式のClaude連携ガイドが勧めています。パスは人によって違うので、値は各自の.envに逃がします。
{
"mcpServers": {
"dbt": {
"command": "uvx",
"args": ["--env-file", "/absolute/path/to/my_dbt_project/.env", "dbt-mcp"]
}
}
}
--env-fileに渡すパスは絶対パスで書きます。相対パスでは、クライアントの起動場所によって読み込めないことがあります。
Claude Desktopの設定ファイルとspawn uvx ENOENTの対処
Claude Desktopでは、Settings → Developer → Edit Configでclaude_desktop_config.jsonを開き、次を追記して再起動します。
{
"mcpServers": {
"dbt": {
"command": "uvx",
"args": ["dbt-mcp"],
"env": {
"DBT_PROJECT_DIR": "C:/Users/yourname/projects/my_dbt_project",
"DBT_PATH": "C:/Python312/Scripts/dbt.exe"
}
}
}
}
つまずきやすいのは2点です。1つはspawn uvx ENOENTで、DesktopアプリがシェルのPATHを引き継がずにuvxを見つけられない状態を指します。where uvx(macOSはwhich uvx)で得たフルパスをcommandに書けば解消します。もう1つは"type": "http"の書き方で、これはClaude Code用の形式です。Desktopの設定ファイルに書くとサーバーごと読み飛ばされます。ログはWindowsなら%APPDATA%\Claude\logsにあります。
uvx dbt-mcpの単体起動とモデル一覧・リネージを尋ねる確認の手順
クライアントに登録する前に、ターミナルでuvx dbt-mcpを実行し、エラーが出ずに待機状態になるかを見ます。止めるときはCtrl+Cです。そのうえで、AIに次のように頼みます。
- 「このdbtプロジェクトのモデルを一覧にして」と頼み、
listが呼ばれるか確かめる - 「fct_ordersの上流モデルを教えて」と頼み、リネージが返るか確かめる
- 「stg_customersをcompileして生成SQLを見せて」と頼み、コンパイル結果を確かめる
ツールが1つも出てこない場合は、DBT_MCP_LOG_LEVEL=DEBUGを一時的に設定してログを見ます。必須の変数が欠けたツールセットはエラーにならず、黙って無効になる仕様だからです。compileはプロジェクト全体を処理するため、モデルが数百本ある場合は既定60秒のDBT_CLI_TIMEOUTを延ばしてください。
dbt platformのリモートMCPにOAuthとトークンで接続する設定
dbt platform(旧dbt Cloud)を使っているなら、ローカルにdbtを入れずにリモート版へつなげます。開発者以外のメンバーがAIから指標やリネージを調べる用途に向いています。
/api/ai/v1/mcp/のエンドポイントとOAuth接続に必要なプランと条件
エンドポイントはhttps://<ホスト名>/api/ai/v1/mcp/で、Account settings → Access URLsの「MCP Endpoint URL」からコピーできます。末尾のスラッシュは省けません。Claude Codeなら次の1行で登録し、初回接続時にブラウザでサインインと同意を済ませます。
claude mcp add --transport http dbt https://abc123.us1.dbt.com/api/ai/v1/mcp/
Connect to the remote dbt MCP serverによると、リモート版のOAuthはパブリックベータで、Starter・Enterprise・Enterprise+の各プランが対象です。abc123.us1.dbt.comのような静的サブドメインを持つアカウントでなければOAuthは使えません。クライアント側がHTTP接続のMCPサーバーに対するOAuthに対応している必要もあります。
トークン方式のヘッダー設定とexecute_sqlに個人用トークンが要る理由
OAuthが使えないクライアントやプランでは、トークンをヘッダーで渡します。Claude Codeの.mcp.jsonの例です。
{
"mcpServers": {
"dbt": {
"type": "http",
"url": "https://abc123.us1.dbt.com/api/ai/v1/mcp/",
"headers": {
"Authorization": "Token ${DBT_TOKEN}",
"x-dbt-prod-environment-id": "54321"
}
}
}
}
必須はAuthorizationとx-dbt-prod-environment-idの2つです。IDにはブラウザのURLではなく数値だけを入れます。execute_sqlを使う場合はx-dbt-dev-environment-idとx-dbt-user-idも加え、トークンは個人用アクセストークン(PAT)にします。サービストークンではexecute_sqlが動きません。このツールはユーザーIDと開発環境IDを指定して実行する作りで、特定のユーザーに紐づくPATが前提になっています。PATを発行したくない場合は、OAuthで接続すればexecute_sqlも使えます。
Semantic Layerの指標取得条件とCopilot枠を消費するツールの区別
リモート版の価値が最も出るのは、list_metricsとquery_metricsで定義済みの指標を引く使い方です。AIがSQLを毎回自作する代わりに、MetricFlowで定義した「売上」「解約率」をそのまま問い合わせるので、人によって集計がずれることが起きにくくなります。指標の定義方法はdbt Semantic Layerの使い方にまとめています。
費用面で押さえるのは1点です。dbt Copilotのアクション枠を消費するのは、自然言語からSQLを作るtext_to_sqlだけで、ほかのツールは消費しません。枠を使い切っても止まるのはtext_to_sqlだけで、指標の問い合わせやリネージ参照は動き続けます。
AIエージェントにdbt runを任せる前に絞るツールと接続先の設計
ここからは、競合記事がほとんど触れていない安全側の設定です。dbt MCPは既定で全ツールセットが有効になり、READMEも「dbt CLIツールはデータモデルやウェアハウスのオブジェクトを変更しうる」と注意しています。
DBT_MCP_ENABLE_TOOLSで読み取り系のdbtツールだけを許可する設定
環境変数リファレンスには、無効にするものを並べるDISABLE_*と、許可するものだけを並べるDBT_MCP_ENABLE_*の2方式があります。新しいツールが版上げで増えても勝手に有効にならないので、AIに渡すなら許可リスト方式を選びます。
# /absolute/path/to/my_dbt_project/.env
DBT_PROJECT_DIR=/absolute/path/to/my_dbt_project
DBT_PATH=/opt/homebrew/bin/dbt
DBT_PROFILES_DIR=/absolute/path/to/mcp_profiles
DBT_MCP_ENABLE_TOOLS=list,parse,compile,get_lineage_dev,get_node_details_dev
DBT_CLI_TIMEOUT=180
この設定なら、AIはモデルの一覧・依存関係・生成SQLまでは調べられますが、runやbuildでテーブルを作り替えることはできません。優先順位はDBT_MCP_ENABLE_TOOLSが最上位で、DISABLE_TOOLS、ツールセット単位の指定の順に続きます。同じツールセットで2方式を混ぜると挙動が読めなくなると公式が書いているので、どちらか一方に揃えます。DBT_MCP_ENABLE_DBT_CLI=のように値が空の行も、ほかのツールセットを全部無効にしてしまうため残さないでください。
DBT_PROFILES_DIRでのMCP専用設定と本番資格情報の分離
許可リストにshowやtestを足すと、ウェアハウスへ実際にクエリが飛びます。DBT_PROFILES_DIRはMCPから使うprofiles.ymlの置き場所を変える変数で、既定は~/.dbt/です。MCP専用のディレクトリを作り、そのprofiles.ymlには開発用のtargetだけを書きます。接続ユーザーは開発スキーマの読み取りと自分用スキーマへの書き込みに権限を絞ったものにします。
普段使いの~/.dbt/profiles.ymlに本番のtargetが同居していると、AIが--target prodを付けたコマンドを組み立てたときに止める仕組みがありません。資格情報を渡さなければ、間違ったコマンドが生成されても本番には届きません。dbt platformのトークンも同じ考え方で、envに直書きするとクライアントの設定ファイルに平文で残るため、--env-fileで分けた.envを.gitignoreに入れて管理します。
dbt MCPを導入して効果が出るプロジェクトと見送る場面の判断基準
設定が済んでも、効果が出るかはプロジェクトの状態で決まります。ここでは導入の条件を言い切ります。
モデルの説明文とテストが揃っているほどAIの回答が正確になる理由
Discovery系のget_all_modelsが返すのは、モデルの名前と説明文です。説明文が空なら、AIはstg_ord_v2のような名前だけから中身を推測するしかありません。dbt MCPが返す情報の質は、YAMLに書いたdescriptionとテストの量にそのまま比例します。
導入の目安は、主要なmartsモデルの大半に説明文が付き、主キーにuniqueとnot_nullのテストがある状態です。満たしていないなら、先にdbt docsでドキュメントとリネージを整える作業と、dbt testの整備から始めるほうが、AI連携の効果は早く出ます。
dbt MCPを入れない場面:本番直結のprofilesと指標未定義の段階
次の3つのどれかに当てはまるなら、今は入れません。1つ目は、開発用と本番用のprofilesを分けられず、本番の資格情報しか手元に無い場合です。前の章の分離ができないうちにdbt CLIツールを渡すと、本番の資格情報を使う過剰なリスクを抱えてしまいます。2つ目は、利用者の目的が数字の問い合わせなのに、Semantic Layerで指標を定義していない場合です。text_to_sql任せの集計は、人によって定義がずれる問題をAIに持ち込むだけになります。
3つ目は、Python 3.12以上を入れられない社内PCで動かしたい場合です。uvがPythonを用意するとはいえ、ソフトウェアの導入制限が厳しい環境ではリモート版に寄せるほうが現実的です。dbtのデータ基盤そのものの整備や、AIエージェントとの連携設計から相談したい場合はデータ分析基盤構築・MLOps構築支援で受け付けています。
dbt MCPの導入時によくある質問と料金・対応クライアント・データの扱い
dbt MCPの導入を検討するときに出やすい質問に答えます。
dbt MCPは無料で使えますか?
セルフホスト版のdbt-mcpはApache-2.0ライセンスのOSSで、dbt Coreと組み合わせる限り費用はかかりません。リモート版はdbt platformの全プランで提供されています。ただし、Discovery APIやSemantic Layer APIを使えるかはプランによって変わるため、呼べるツールの範囲もプラン次第です。dbt Copilotのアクション枠を消費するのはtext_to_sqlだけです。プランごとの費用感はdbtとはの記事でCoreとplatformの選び方と合わせて触れています。
dbt Coreしか使っていなくてもdbt MCPは使えますか?
使えます。DBT_PROJECT_DIRとDBT_PATHを設定すれば、run・build・test・compile・list・showなどのdbt CLIツールと、ローカルのmanifest.jsonからリネージを読むツールが使えます。Semantic LayerやDiscovery API、ジョブを操作するAdmin APIはdbt platformのアカウントが前提なので、Core単体では出てきません。
dbt MCPに対応しているAIクライアントはどれですか?
公式ドキュメントには、Claude Code・Claude Desktop・Cursor・VS Codeの接続手順があり、Snowflake CortexやDatabricksとの連携ページもあります。VS Codeのmcp.jsonは"mcpServers"ではなく"servers"キーを使うなど、クライアントごとに書式が少しずつ異なるため、接続先の設定形式に合わせた記述が必要です。Claude Desktopには、設定ファイルを書かずに入れられるdbt-mcp.mcpbのバンドルも実験的に配布されています。
dbt MCPは本番データを保存したり外部に送ったりしますか?
公式は、dbt MCPサーバーが本番データやジョブの実行結果を保存しないと説明しています。ツールが呼ばれた時点で、その都度データを読みに行く仕組みです。ただし、読み取った結果はAIクライアントに渡り、利用しているAIサービスの規約に沿って処理されます。showやquery_metricsで顧客データを返させる場合は、AIサービス側のデータ取り扱い条件も確認してから許可してください。
自社でMCPサーバーを作る場合とdbt MCPはどう使い分けますか?
dbtのモデル・指標・リネージを引くだけなら、公式のdbt MCPで足ります。dbtの外にある業務システムのAPIや、社内独自の承認フローをAIから呼びたい場合は、自作のMCPサーバーを並べて登録する構成が必要です。MCPの仕組みはMCP(Model Context Protocol)とは、自作の手順はMCPサーバーの作り方で解説しています。
関連記事
- dbtとは?ELTのTを担う仕組みとdbt Core・Cloudの選び方【2026年版】:dbtの仕組みと採用判断
- dbt Coreの使い方:インストールからprofiles.yml・dbt build・CIまでの手順【1.12対応】:dbt MCPを動かす前の環境構築
- dbt Semantic Layerの使い方:設定からJDBC・GraphQL・Python SDKで指標を引くまで【2026年版】:query_metricsで引く指標の定義
- dbt docsの使い方:generate・serveでリネージを作り社内に公開する手順【v2対応】:AIに渡す説明文とリネージの整備
- MCP(Model Context Protocol)とは?仕組み・APIとの違い・MCPサーバーの作り方:MCPそのものの仕組み