mcpField
D
dbt

dbt

ローカル
github.com/us-allデータ・分析016 週間前に更新

dbt について

@us-all/dbt-mcpは、dbtプロジェクトとデータ品質結果を調べるLLMクライアント向けの読み取り専用MCPサーバーです。プロジェクトファイルを解析し、実行履歴や鮮度を分析し、BigQueryまたはPostgresの品質テーブルを照会できます。

主な機能

  1. 01dbtマニフェストと実行ファイルの解析
  2. 02モデル、テスト、ソース、リネージュの確認
  3. 03実行履歴とソース鮮度の分析
  4. 04BigQueryまたはPostgresの品質結果照会
  5. 05トリアージ用プロンプトと集約ツール

活用シーン

  1. 01失敗したdbtテストの調査
  2. 02ソース鮮度とモデルカバレッジの確認
  3. 03品質トレンドとティアSLAの履歴確認

MCP 対応

MCP stdio経由でdbt調査・品質ツールと4つのトリアージ用プロンプトを提供します。設定によりStreamable HTTPも利用できます。読み取り専用で、dbt実行は起動しません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"us-all-dbt": {
"command": "npx",
"args": [
"-y",
"@us-all/dbt-mcp"
],
"env": {
"DBT_PROJECT_DIR": "<DBT_PROJECT_DIR>",
"DBT_TARGET_DIR": "<DBT_TARGET_DIR>",
"DBT_RUN_HISTORY_DIR": "<DBT_RUN_HISTORY_DIR>",
"DQ_BACKEND": "<DQ_BACKEND>",
"DQ_RESULTS_TABLE": "<DQ_RESULTS_TABLE>",
"DQ_SCORE_TABLE": "<DQ_SCORE_TABLE>",
"GOOGLE_APPLICATION_CREDENTIALS": "<GOOGLE_APPLICATION_CREDENTIALS>",
"BQ_PROJECT_ID": "<BQ_PROJECT_ID>",
"PG_CONNECTION_STRING": "<PG_CONNECTION_STRING>",
"DBT_ALLOW_WRITE": "<DBT_ALLOW_WRITE>",
"DQ_SCHEMA": "<DQ_SCHEMA>",
"DQ_COL_RUN_AT": "<DQ_COL_RUN_AT>",
"DQ_COL_CHECK_TYPE": "<DQ_COL_CHECK_TYPE>",
"DQ_COL_STATUS": "<DQ_COL_STATUS>",
"DQ_COL_DATASET": "<DQ_COL_DATASET>",
"DQ_COL_TABLE_NAME": "<DQ_COL_TABLE_NAME>",
"DQ_COL_SEVERITY": "<DQ_COL_SEVERITY>",
"DQ_COL_FAILURE_COUNT": "<DQ_COL_FAILURE_COUNT>",
"DQ_COL_MESSAGE": "<DQ_COL_MESSAGE>",
"DQ_COL_CHECK_NAME": "<DQ_COL_CHECK_NAME>",
"DQ_COL_SCORE_DATE": "<DQ_COL_SCORE_DATE>",
"DQ_COL_SCOPE": "<DQ_COL_SCOPE>",
"DQ_COL_TIER": "<DQ_COL_TIER>",
"DQ_TIER1_TARGET_PCT": "<DQ_TIER1_TARGET_PCT>",
"DBT_SLA_CONFIG_PATH": "<DBT_SLA_CONFIG_PATH>",
"DBT_TOOLS": "<DBT_TOOLS>",
"DBT_DISABLE": "<DBT_DISABLE>"
}
}
}
}
起動コマンドnpx -y @us-all/dbt-mcp
設定が必要な環境変数
DBT_PROJECT_DIRPath to dbt project root (where dbt_project.yml lives).
DBT_TARGET_DIRdbt target dir for manifest.json/run_results.json (default: $DBT_PROJECT_DIR/target).
DBT_RUN_HISTORY_DIROptional dir for archived run_results.json history (glob-scanned).
DQ_BACKENDDQ result table backend: 'bigquery' (default) or 'postgres'.
DQ_RESULTS_TABLEFully qualified DQ checks table, e.g. 'project.data_ops.quality_checks'.
DQ_SCORE_TABLEFully qualified DQ score-daily table, e.g. 'project.data_ops.quality_score_daily'.
GOOGLE_APPLICATION_CREDENTIALSシークレットService account key path for BigQuery (ADC fallback supported).
BQ_PROJECT_IDExplicit BigQuery project ID for DQ queries.
PG_CONNECTION_STRINGシークレットPostgres connection string when DQ_BACKEND=postgres.
DBT_ALLOW_WRITEReserved for future write tools. Default read-only.
DQ_SCHEMADQ result-table schema preset: 'generic' (default) or 'us-all'. Use DQ_COL_* env vars to override individual columns on top of the preset.
DQ_COL_RUN_ATOverride for the timestamp/date column on the DQ checks table. Default depends on DQ_SCHEMA preset.
DQ_COL_CHECK_TYPEOverride for the check-type column on the DQ checks table. Default 'check_type'.
DQ_COL_STATUSOverride for the status column on the DQ checks table. Default 'status'.
DQ_COL_DATASETOverride for the dataset/source column on the DQ checks table. Default depends on preset.
DQ_COL_TABLE_NAMEOverride for the table/target-name column on the DQ checks table. Default depends on preset.
DQ_COL_SEVERITYOverride for the severity/dimension column on the DQ checks table. Default depends on preset.
DQ_COL_FAILURE_COUNTOverride for the numeric failure-count column on the DQ checks table. Default depends on preset.
DQ_COL_MESSAGEOverride for the message column on the DQ checks table. Default depends on preset.
DQ_COL_CHECK_NAMEOverride for the check_name column on the DQ checks table. Set to 'none'/'null'/'-' to synthesize check_name from check_type and table_name.
DQ_COL_SCORE_DATEOverride for the date column on the DQ score-daily table. Default depends on preset.
DQ_COL_SCOPEOverride for the scope column on the DQ score-daily table. Set to 'none'/'null'/'-' if the table has no per-scope rollup.
DQ_COL_TIEROverride for the tier column on the DQ score-daily table. Set to 'none'/'null'/'-' if the table has no tier dimension.
DQ_TIER1_TARGET_PCTWhen no tier column is configured (us-all preset or DQ_COL_TIER=none), the overall_score threshold dq-tier-status compares against (default 99.5). Superseded by DBT_SLA_CONFIG_PATH tier_sla.1 if both are set.
DBT_SLA_CONFIG_PATHOptional path to a YAML file that defines tier_sla (per-tier overall_score targets) and dbt_sla (test/freshness pass rates). When set, dq-tier-status and dq-tier-by-source read tier targets from this file, and dbt-sla-status compares run_results / sources pass rates against dbt_sla.test_pass_pct / freshness_pass_pct. Mtime cached.
DBT_TOOLSComma-separated category allowlist (dbt,quality,meta).
DBT_DISABLEComma-separated category disablelist.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@us-all/dbt-mcp1.0.7

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

@us-all/dbt-mcp

dbt MCP サーバー — manifest.json、run_results.json、sources.json、catalog.jsonに加え、DQ 結果テーブル(BigQuery/Postgres)を、1 つの stdio MCP 経由で利用できます。@us-all/mcp-toolkitを基盤としています。

LLM クライアント向けに、dbt プロジェクトを読み取り専用で参照できます。dbt runの実行は行わず、詳細なインサイトの取得、実行履歴の分析、ソースの鮮度確認、列ごとのテストカバレッジ、リネージのたどり、さらにカスタム DQ 結果テーブルがある場合は、過去のチェック傾向と Tier SLA ステータスの確認ができます。

DAG のトリガー、実行履歴、ログの末尾を確認するには、コンパニオンの**@us-all/airflow-mcp**もあわせてインストールしてください。

  • 3 つのカテゴリ(dbt、quality、meta)にまたがる 27 個のツール — プリミティブツール 21 個、集約ツール 5 個、メタツール 1 個
  • トリアージのワークフロー向け MCP プロンプト 4 個
  • 「list / get / list」の 3〜5 回のラウンドトリップを置き換える集約ツール 5 個
  • 大量データの読み取りに対応したextractFieldsレスポンスプロジェクション
  • デフォルトで読み取り専用
  • ハイブリッドバックエンド:BigQuery(デフォルト)、または DQ 結果テーブル用の Postgres — どちらもピア依存関係として遅延インポートされます

インストール

# 1. add the MCP server
pnpm add -D @us-all/dbt-mcp
# 2. add the DQ backend you actually use (only if you query custom DQ tables):
pnpm add -D @google-cloud/bigquery   # OR
pnpm add -D pg

実行

DBT_PROJECT_DIR=/path/to/dbt-project \
DQ_RESULTS_TABLE=my-project.data_ops.quality_checks \
npx @us-all/dbt-mcp

サーバーは MCP stdio で通信します。Claude Desktop、Cursor、その他の MCP クライアントに接続してください。Streamable HTTP トランスポート(Bearer 認証、/healthエンドポイント)を使用するには、MCP_TRANSPORT=httpを設定します。

カテゴリ

カテゴリツール用途
dbt15 + 集約ツール 3 個manifest.json/run_results.json/sources.json/catalog.jsonを解析
quality6 + 集約ツール 2 個quality_checksとquality_score_dailyをクエリ(BQ または PG)。dq-tier-by-sourceで Tier ごとに集計
meta1(常時有効)自然言語でツールを見つけるためのsearch-tools

DBT_TOOLS=dbt(許可リスト)またはDBT_DISABLE=quality(拒否リスト)で切り替えます。

ツールの概要

dbt(15 + 3)

dbt-list-models、dbt-get-model、dbt-list-tests、dbt-get-test、dbt-list-sources、dbt-get-source、dbt-list-exposures、dbt-list-macros、dbt-get-macro、dbt-list-runs、dbt-get-run-results、dbt-failed-tests、dbt-slow-models、dbt-coverage、dbt-graph、freshness-status、incident-context、dbt-sla-status

quality(6 + 2)

dq-list-checks、dq-get-check-history、dq-failed-checks-by-dataset、dq-score-trend、dq-tier-status、dq-tier-by-source、failed-tests-summary、dq-score-snapshot

プロンプト
プロンプト使用する場面
investigate-failed-tests「過去 24 時間に何が壊れていますか?」
freshness-degradation-triage「鮮度が低下しているソースはありますか?」(任意で Tier 1 に注目)
dq-trend-report「関係者向けにわかりやすい DQ 傾向レポートを作成してください」
incident-triage「<model | source>をトリアージ」— すべてのシグナルをまとめます

環境変数

環境変数必須備考
DBT_PROJECT_DIRはいdbt プロジェクトのルート(dbt_project.yml がある場所)
DBT_TARGET_DIRいいえデフォルトは $DBT_PROJECT_DIR/target です
DBT_RUN_HISTORY_DIRいいえアーカイブされた run_results.json の履歴を保存する任意のディレクトリです
DQ_BACKENDいいえbigquery(デフォルト)または postgres
DQ_RESULTS_TABLEいいえチェックテーブルの FQN。チェックベースの品質ツールでのみ必須です
DQ_SCORE_TABLEいいえ日次スコアテーブルの FQN。スコア専用ツールで必須です
GOOGLE_APPLICATION_CREDENTIALSいいえBigQuery バックエンド用(ADC へのフォールバックに対応)
BQ_PROJECT_IDいいえ明示的な BQ プロジェクト(指定しない場合は ADC から推定されます)
PG_CONNECTION_STRINGいいえDQ_BACKEND=postgres の場合に使用します(シークレット)
DQ_SCHEMAいいえgeneric(デフォルト)または us-all — quality カテゴリの基本スキーマプリセットです
DQ_COL_*いいえDQ_SCHEMA に対する列ごとの上書き設定(以下を参照)。上書き値には単純な SQL 識別子を指定する必要があります。
DQ_TIER1_TARGET_PCTいいえtier 列が設定されていない場合の dq-tier-status の Tier 1 SLA 閾値(デフォルトは 99.5)。両方が設定されている場合は、DBT_SLA_CONFIG_PATH の tier_sla.1 が優先されます。
DBT_SLA_CONFIG_PATHいいえtier_sla ブロックと dbt_sla ブロックを含む任意の YAML パスです。dq-tier-status の閾値と、dq-tier-by-source のティアごとの目標値を設定します。更新時刻をキャッシュします。
DBT_ALLOW_WRITEいいえ将来の書き込みツール用に予約されています(現在はありません)
DBT_TOOLS / DBT_DISABLEいいえカテゴリの切り替え

DQ 結果テーブルのスキーマ形式

quality カテゴリは、DQ_SCHEMA によって 2 つのスキーマプリセットをサポートします。

DQ_SCHEMA=generic(デフォルト)

DQ_RESULTS_TABLE にあると想定される列:run_at、check_name、check_type、dataset、table_name、status、severity、failure_count、message。

DQ_SCORE_TABLE にあると想定される列:score_date、scope、tier、completeness_pct、freshness_pct、validity_pct、anomaly_free_pct、overall_score。

dq-tier-status は、scope ごとの行に基づいて Tier 1/2/3 を集計します。

DQ_SCHEMA=us-all

us-all で使用されている実際のスキーマ(Postgres の data_ops データベース):

quality_checks:run_date、check_type、dimension、source、target_name、status、metric_value、threshold、details (JSONB)。

quality_score_daily:run_date、completeness_pct、freshness_pct、validity_pct、anomaly_free_pct、overall_score、total_checks、failed_checks。

この形式では、quality_score_daily は 1 日につき 1 行です(scope ごとの集計はなく、tier 列もありません)。dq-tier-status は、当日の overall_score を DQ_TIER1_TARGET_PCT(デフォルトは 99.5)と比較する方式にフォールバックします。

dq-get-check-history では、us-all にネイティブの check_name 列がないため、checkName を '<check_type>:<target_name>' の形式で指定する必要があります。

列ごとの上書き — DQ_COL_*

DQ テーブルがどちらのプリセットにも一致しない場合は、DQ_SCHEMA に列ごとの上書きを追加してください。DQ_COL_* 環境変数が設定されている場合、その列だけプリセット値を置き換えます。未設定の変数には、プリセットのデフォルト値が使われます。

環境変数を通じて生の SQL が挿入されるのを防ぐため、上書き値は単純な SQL 識別子として検証されます。DQ_RESULTS_TABLE/DQ_SCORE_TABLE のテーブル名も、設定されたバックエンドに合わせて検証され、引用符で囲まれます。

環境変数論理的な概念汎用プリセットus-all プリセット
DQ_COL_RUN_ATチェックテーブル上のタイムスタンプ/日付run_atrun_date
DQ_COL_CHECK_TYPEチェック種別/ディメンション群check_typecheck_type
DQ_COL_STATUS成功/失敗/警告/エラーstatusstatus
DQ_COL_DATASETデータセット/ソース/スキーマdatasetsource
DQ_COL_TABLE_NAMEテーブル名または対象名table_nametarget_name
DQ_COL_SEVERITY重大度/ディメンションseveritydimension
DQ_COL_FAILURE_COUNT数値の失敗件数/メトリクスfailure_countmetric_value
DQ_COL_MESSAGEフリーテキストまたは JSON メッセージmessagedetails::text
DQ_COL_CHECK_NAMEチェックの自然識別子check_name(なし)
DQ_COL_SCORE_DATEスコアテーブルの日付列score_daterun_date
DQ_COL_SCOPEスコアテーブルのスコープ/テナント列scope(なし)
DQ_COL_TIERスコアテーブルのティア列tier(なし)

NULL を許容する 3 つの列(DQ_COL_CHECK_NAME、DQ_COL_SCOPE、DQ_COL_TIER)については、値に none/null/- を設定すると、「ネイティブ列なし」と宣言できます。

  • check_name がない場合 → ツールは check_type || ':' || table_name から値を合成します。その場合、dq-get-check-history は checkName が '<check_type>:<table_name>' の形式であることを想定します。
  • scope がない場合 → dq-score-trend の scope フィルターは無視され(ただし注意点があります)、dq-tier-status は DQ_TIER1_TARGET_PCT と比較する単一の overall_score パスに切り替わります。
  • tier がない場合 → 同じ単一の overall_score フォールバックが適用されます。

例 — 列名が異なる Postgres スキーマで汎用プリセットを使用する場合:

DQ_SCHEMA=generic
DQ_COL_RUN_AT=checked_at
DQ_COL_DATASET=schema_name
DQ_COL_TABLE_NAME=tbl
DQ_COL_FAILURE_COUNT=fail_n
DQ_COL_CHECK_NAME=none      # synthesize from check_type+tbl
DQ_COL_SCOPE=none           # no per-team rollup
DQ_COL_TIER=none            # use DQ_TIER1_TARGET_PCT instead

SLA 設定(オプション) — DBT_SLA_CONFIG_PATH

DBT_SLA_CONFIG_PATH に YAML ファイルを設定すると、プロジェクトで定義されたティア目標と DBT SLA を品質ツールで参照できます。スキーマ(追加のキーは無視されます):

dbt_sla:
  test_pass_pct: 99.0          # consumed by dbt-sla-status (test pass rate threshold)
  freshness_pass_pct: 99.5     # consumed by dbt-sla-status (source freshness pass rate threshold)

tier_sla:
  1: 99.5                      # tier-1 overall_score / per-source pass-rate target
  2: 99.0
  3: 95.0

設定すると、tier_sla マップは次のように機能します。

  • dq-tier-status — ティアごとの集計で、各行の overall_score を対応する目標と比較します。このファイルがない場合は、ハードコードされた {1: 99.5, 2: 99.0, 3: 95.0} が使われます。
  • dq-tier-by-source — ソースごとの合格率を、そのソースのティアの目標と比較します(dbt の sources.yml にある meta.tier から解決されます)。
  • dq-tier-status のティア列なしのパス(us-all プリセット/DQ_COL_TIER=none) — 単一の目標として tier_sla.1 を使います。SLA ファイルが設定されていない場合は、DQ_TIER1_TARGET_PCT 環境変数が引き続きフォールバックとして機能します。

dbt_sla ブロックは次のように機能します。

  • dbt-sla-status — 最新の run_results.json からテスト合格率を計算し、sources.json から鮮度合格率を計算したうえで、各指標を dbt_sla.test_pass_pct/dbt_sla.freshness_pass_pct と比較します。各指標について passPct、target、meeting を返し、フィールドやアーティファクトが不足している場合は注意事項も返します。

ファイルの変更時刻(mtime)はキャッシュされます。ツール呼び出しの間に編集すると、その変更は自動的に反映されます。

quality_checks からのティア別集計 — dq-tier-by-source

quality_score_daily に 1 日あたり 1 行しかなく(スコープ/ティア別の内訳がない)スキーマでは、dq-tier-by-source が生の quality_checks 行からティア別の状況を再構築します。モードは 2 つあります。

mode: "source"(デフォルト)— source/dataset 列でグループ化

quality_checks の各行が ソースグループ に対するチェックを表し、dataset/source 列に dbt のソースグループ名が直接含まれている場合に使用します。

  1. dbt マニフェストの sources.<source>.<table>.meta.tier から source_name -> tier のマップを作成します(各ソースグループで最初のテーブルの tier を使用します)。
  2. dataset/source 列で quality_checks の行をグループ化し、日付または sinceHours の期間内におけるソースごとの合格率を計算します。
  3. 各ソースの tier と目標値(SLA 設定またはデフォルト値)を参照し、tier ごとに達成状況/不足状況を報告します。
mode: "table" — table_name 列でグループ化

dataset/source 列がカテゴリ(bq/dbt/airflow)で、実際の dbt ソーステーブル識別子が <source_group>.<table> 形式で table_name/target_name 列に含まれている場合に使用します。異なるバックエンドのシグナルを統合するチェックテーブルでよく使われます。

  1. マニフェストから、各ソースエントリーの source_name + name + meta.tier を使って <source_group>.<table> -> tier のマップを作成します。これにより、テーブルレベル の tier 上書きも自動的に取得できます。
  2. table_name 列で quality_checks の行をグループ化します。解析可能なターゲット名を生成するカテゴリが一部のみの場合は、sourceFilter(例:sourceFilter: "bq")で事前にフィルタリングします。
  3. 各集計キーを <source_group>.<table> として解析します。. を含まない行、またはキーがマニフェストにない行は caveats[] に含まれます。

tier が設定されていない行(マニフェストに meta.tier がない行)と解析できない行は、tier を設定するか、ギャップを許容できるよう、常に caveats[] に表示されます。

対応スキーマ

  • dbt マニフェストスキーマ v11/v12 — 現在の最新バージョンです。dbt 1.7 は v11 を出力し、dbt 1.8 から 1.12 はすべて v12 を出力します(スキーマはその場で後方互換性を保ちながら拡張されます)。より新しいバージョンや未知のバージョンも解析されますが、caveats の行でその旨が通知されます。

関連サーバー

Airflow DAG の操作(一覧表示、実行、タスクインスタンス、ログ末尾の取得、トリガー、クリア)を行うには、このサーバーとともに @us-all/airflow-mcp をインストールしてください。

ビルド

pnpm install
pnpm run build      # tsc → dist/
pnpm test           # vitest
pnpm run smoke      # spawns dist/index.js, calls initialize + tools/list (set env first)

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。