WSL環境でdbt-mcpを動かす。

## 3行まとめ
- WSLからはデフォルトで.envを読み込んでくれないので、exportかsetしておく必要がある。
- Claude Code Ubuntu 24.04.1 LTS → 動く(ただし日本語NGぽい)
- Claude Desktop → 2025/06/16 現在jsonエラーで動かない

## 事前準備
- dbtのアカウント(今回はdbtCloud)
- dbtのモデルを作成しておく
- WSLへClaude Codeはインストールしておく
- WSLへtaskはインストールしておく

## WSL環境へdbt-mcp をインストールする
https://github.com/dbt-labs/dbt-mcp
- リポジトリをクローンする
```bash
git clone https://github.com/dbt-labs/dbt-mcp.git
cd dbt-mcp
```
- install uv
    - https://docs.astral.sh/uv/getting-started/installation/
- task install
- .envの設定
    - 試行錯誤の末、以下の値を設定しました。
```.env
    DBT_HOST="cloud.getdbt.com"
    DBT_PROD_ENV_ID="999999"	# Environments PRODのID  Orchestration/Environments/Development のURLから取ってこれます。/environments/(この部分の数字)/settings
    DBT_DEV_ENV_ID="999999"	# Environments DEVのID   Orchestration/Environments/Development のURLから取ってこれます。/environments/(この部分の数字)/settings
    DBT_USER_ID="999999"	# Create Service token したときに忘れずにメモる。
    DBT_TOKEN="dbtu_hogehoge"	# Settings/Users から自分を選択したときのURLから取ってこれます。/users/(この部分の数字)
    DBT_PROJECT_DIR="/home/[username]/path/to/nishimura_semantic_layer_test"	# dbt-mcpのパスにProject名をつける（パスは実在していなくてOK）
    DISABLE_REMOTE="false"
    DISABLE_DBT_CLI="true"

```
### dbt-mcp 起動方法その1
- 環境変数の設定してから、dbt-mcp を起動する。
```bash
export DBT_HOST="cloud.getdbt.com"
export DBT_PROD_ENV_ID="999999"
export DBT_DEV_ENV_ID="999999"
export DBT_USER_ID="999999"
export DBT_TOKEN="dbtu_hogehoge"
export DBT_PROJECT_DIR="/home/[username]/path/to/nishimura_semantic_layer_test"
export DISABLE_DBT_CLI="true"
dbt-mcp
```

### dbt-mcp 起動方法その2
- set コマンドで読み込ませる
```bash
set -a && source .env && set +a && dbt-mcp
```

起動確認できればOK
```
$ set -a && source .env && set +a && dbt-mcp
[06/17/25 23:51:01] INFO     Registering semantic layer tools                                               server.py:94
                    INFO     Registering remote tools                                                      server.py:106
[06/17/25 23:51:02] INFO     HTTP Request: GET https://cloud.getdbt.com/api/ai/mcp/tools/list "HTTP/1.1  _client.py:1026
                             200 OK"
                    INFO     Loaded remote tools: text_to_sql, execute_sql                                   tools.py:87
                    INFO     Starting MCP server                                                            server.py:30
```

## WSL Claude Code で起動する
```
## export してから
$ bash -ic claude dbt-mcp
```

こんな感じにでてくればOK
（プロンプトが日本語だとエラーになるけど）
```log
$ bash -ic claude dbt-mcp
╭───────────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code!                         │
│                                                   │
│   /help for help, /status for your current setup  │
│                                                   │
│   cwd: /mnt/c/kaori/dbt-mcp                       │
╰───────────────────────────────────────────────────╯


 ※ Tip: Use /memory to view and manage Claude memory

> Get a list of dbt models

● I'll help you get a list of dbt models. Let me first examine the codebase to understand how to retrieve this
  information.

● Search(pattern: "models", include: "*.py")…
  ⎿  Found 5 files (ctrl+r to expand)

● Read(get_models.py)…
  ⎿  Read 31 lines (ctrl+r to expand)

● Read(src/dbt_mcp/discovery/tools.py)…
  ⎿  Read 48 lines (ctrl+r to expand)

● Perfect! I can see there's already a script get_models.py that demonstrates how to get dbt models. You can run it
   directly:

● Bash(cd /mnt/c/kaori/dbt-mcp && python get_models.py)…
  ⎿  Found 6 models:
     - dim_customers (model.my_new_project.dim_customers)
     - fct_orders (model.my_new_project.fct_orders)
     - metricflow_time_spine (model.my_new_project.metricflow_time_spine)
     - stg_customers (model.my_new_project.stg_customers)
     - stg_orders (model.my_new_project.stg_orders)
     - stg_payments (model.my_new_project.stg_payments)

● Found 6 dbt models:
  - dim_customers (model.my_new_project.dim_customers)
  - fct_orders (model.my_new_project.fct_orders)
  - metricflow_time_spine (model.my_new_project.metricflow_time_spine)
  - stg_customers (model.my_new_project.stg_customers)
  - stg_orders (model.my_new_project.stg_orders)
  - stg_payments (model.my_new_project.stg_payments)

```