/ ディレクトリ / プレイグラウンド / DBHub
● 公式 bytebase 🔑 自分のキーが必要

DBHub

作者 bytebase · bytebase/dbhub

1つのMCPで複数のデータベースに対応 — Postgres、MySQL、SQL Server、SQLite、Oracle — デフォルトで読み取り専用のクエリインターフェースを提供します。

BytebaseのDBHubは、依存関係ゼロのMCPサーバーで、単一のnpx @bytebase/dbhubバイナリを通じて複数のリレーショナルデータベースと通信します。お使いのデータベースに合わせたDSNを渡すだけで、スキーマの閲覧、テーブルのサンプリング、SQLの実行が可能です。デフォルトで読み取り専用モードで動作するため、本番環境での探索的なセッションも安全に行えます。

なぜ使うのか

主な機能

ライブデモ

実際の動作

dbhub.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "dbhub": {
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "dbhub",
      "command": "npx",
      "args": [
        "-y",
        "@bytebase/dbhub"
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "dbhub": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@bytebase/dbhub"
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add dbhub -- npx -y @bytebase/dbhub

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: DBHub

1回のセッションで3つの異なるデータベースにクエリを実行する

👤 複数のリレーショナルDBを扱うエンジニア ⏱ ~20 min intermediate

使うタイミング: メインデータにPostgres、レガシーサービスにMySQL、レポート用コピーにSQL Serverを使用しており、すべてのDBを1つのAIアシスタントで操作したい場合。

前提条件
  • 各DBの読み取り専用認証情報を含むDSN — postgres://、mysql://、sqlserver://、sqlite://、oracle:// 形式
フロー
  1. 複数のDSNを設定する
    Show me which DB I'm currently pointed at. If needed, switch to the MySQL DSN.✓ コピーしました
    → 現在のアクティブDB表示が明確であること
  2. スキーマを確認する
    List tables in the current DB with approximate row counts.✓ コピーしました
    → テーブルカタログ
  3. DB間でデータを照合する
    Query Postgres for user emails, then query MySQL legacy_users for the same emails, tell me who's in one but not the other.✓ コピーしました
    → 照合レポート

結果: 異種DBを横断する単一のワークフローを、複数のMCPサーバーを使い分けることなく実現できます。

注意点
  • SQLの方言の違いでClaudeが混乱する(例: LIMIT vs TOP) — 現在のクエリがどのDB向けかをClaudeに明示するか、DB別にターンを分ける
組み合わせ: filesystem

受け取ったSQLiteファイルを分析する

👤 不明な.dbファイルを渡されたエンジニア/アナリスト ⏱ ~10 min beginner

使うタイミング: 顧客からSQLiteダンプが送られてきて、内容を確認してほしいと依頼された場合。

フロー
  1. DBHubをファイルに向ける
    Use DSN sqlite:///path/to/data.db. List tables + row counts.✓ コピーしました
    → テーブル一覧
  2. 各テーブルをサンプリングする
    For each non-trivial table, show 5 sample rows and infer the purpose.✓ コピーしました
    → テーブルごとの概要
  3. 顧客の質問に回答する
    Customer asks: <question>. Write SQL, run, return answer.✓ コピーしました
    → クエリと結果

結果: 他のツールにエクスポートすることなく、未知のSQLiteファイルを素早く探索できます。

注意点
  • 大きなSQLiteテーブルにインデックスがなく、フルスキャンでファイルがロックされる — 読み取り専用で開き、100万行超のテーブルに対する集計は1クエリで行わない
組み合わせ: filesystem

リードレプリカに対して安全にレポートクエリを実行する

👤 BI/アナリティクス担当 ⏱ ~15 min beginner

使うタイミング: 分析用のレプリカがあり、プライマリを露出させずにAI駆動のアドホックレポートを作成したい場合。

前提条件
  • レプリカ向けの読み取り専用DSN — レプリカ専用の認証情報。DSNにstatement_timeoutを設定済みであること
フロー
  1. レプリカ接続であることを確認する
    Confirm the current connection is read-only and points at the replica host.✓ コピーしました
    → ホスト文字列と読み取り専用フラグの確認完了
  2. レポートを実行する
    [paste business question]. Translate to SQL, run, return results.✓ コピーしました
    → 結果セット
  3. 再利用のために保存する
    Save this SQL to /reports/<name>.sql with a comment explaining the question.✓ コピーしました
    → SQLファイルの保存完了

結果: 本番プライマリへのリスクなしにアドホックBIを実行できます。

注意点
  • 重いクエリがレプリカを遅延させ、レプリケーションラグが発生する — statement_timeoutを設定し、大きなクエリはオフピーク時に実行する
組み合わせ: filesystem · antv-chart

マイグレーションに向けてSQL Serverのストアドプロシージャを監査する

👤 SQL Serverからの移行を進めるチーム ⏱ ~30 min advanced

使うタイミング: すべてのストアドプロシージャの一覧、コード行数、最終更新日が必要な場合。

フロー
  1. プロシージャを一覧表示する
    Query sys.procedures + sys.sql_modules to list all procs with name, schema, lines, and last modified date.✓ コピーしました
    → プロシージャ一覧
  2. 複雑度を分類する
    Bucket procs by line count: trivial (<50), medium (50-300), complex (>300). Count each bucket.✓ コピーしました
    → 複雑度のヒストグラム
  3. MSSQL固有の機能を洗い出す
    For complex procs, flag usage of MSSQL-specific constructs (CROSS APPLY, CTE recursion, TOP, GETDATE) — these are the hard migration items.✓ コピーしました
    → マイグレーションリスク一覧

結果: 実際の件数に基づいたストアドプロシージャのマイグレーション計画を策定できます。

注意点
  • 一部のプロシージャに動的SQLが含まれており、分類が困難 — EXEC sp_executesqlを含むプロシージャは手動レビュー対象としてフラグを立てる
組み合わせ: filesystem

組み合わせ

他のMCPと組み合わせて10倍の力を

dbhub + antv-chart

SQLを実行し、結果を直接グラフ化する

Query weekly revenue from the Postgres replica via DBHub, then render as an AntV line chart.✓ コピーしました
dbhub + filesystem

再現性のためにクエリと結果を保存する

Run the weekly KPI query, save SQL to /sql/weekly.sql and result CSV to /data/weekly-<date>.csv.✓ コピーしました
dbhub + notion

SQLベースのレポートをNotionに投稿する

Run the top-customers query, create a Notion page with the result as a table.✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_databases 探索の最初のステップ free
list_tables database? クエリ実行前のカタログ確認 free
describe_table table, schema? クエリ実行前のスキーマ確認 free
execute_sql sql, params? 読み取りまたは書き込みSQLの実行(書き込みにはフラグが必要) depends on query
execute_read_sql sql, params? 明示的な読み取り専用での実行 depends

コストと制限

運用コスト

APIクォータ
お使いのDB接続数の上限に依存します
呼び出しあたりのトークン
結果サイズに依存。LIMITで上限を設定してください
金額
無料 — コストはDBホスティング費用のみです
ヒント
DSNにstatement_timeoutを設定してください。AIが生成するクエリはフルスキャンを積極的に行う傾向があります。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: SELECT on target tables
認証情報の保管: 環境変数内のDSN(DSNまたはDB種別ごとの環境変数)
データ送信先: DBへ直接接続。サードパーティのプロキシは介在しません
絶対に付与しない: CREATE/DROP/ALTER in the connection role unless needed for the session

トラブルシューティング

よくあるエラーと対処法

Authentication failed / access denied

DSNの認証情報が間違っているか、SELECT権限が不足しています。各DB種別のDSN形式を再確認してください。

確認: Connect with the DB's native client using the same DSN
Unsupported SQL feature / syntax error

DB方言の不一致です。ClaudeにどのDB方言がアクティブかを伝えるか、DSNプレフィックスを再確認してください。

Connection pool exhausted

同時接続数を下げるか、プールサイズを増やしてください。長時間実行クエリが真の原因であることが多いです。

Writes rejected (read-only)

DBHubはデフォルトで読み取り専用です。このセッションでは--readonly=falseで再起動してください。

代替案

DBHub 他との比較

代替案代わりに使う場面トレードオフ
Postgres MCPPostgresのみを使用しており、Postgres固有の高度な機能が必要な場合単一DB対応のみ
MongoDB MCPリレーショナルDBと並行してMongoDBも必要な場合データモデルが異なる
Supabase MCPSupabaseを利用しており、プロジェクトとDB管理を一元化したい場合Supabaseに依存

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る