mcpField
D
Database

Database

ローカル
database.haymon.aiデータベース332 日前に更新

Database について

Databaseは、SQLデータベースに接続する単一バイナリのMCPサーバーです。MySQL、MariaDB、PostgreSQL、SQLiteに対応し、スキーマの確認やクエリ、データベース操作のツールをstdioとHTTPで提供します。SSHトンネルも利用できます。

主な機能

  1. 014種類のSQLデータベースに対応
  2. 02スキーマ確認、クエリ、DDLのツール
  3. 03読み取り専用モードで書き込みツールを非表示
  4. 04stdioとHTTPのトランスポート
  5. 05SSHトンネルと自動再接続

活用シーン

  1. 01AIアシスタントからデータベースのスキーマを確認
  2. 02データの読み書きやクエリの説明
  3. 03SSH踏み台経由でリモートデータベースに接続
  4. 04HTTP経由で複数のMCPクライアントを接続

MCP 対応

このプロジェクトはMCPサーバーで、stdioまたはHTTPを通じて、スキーマ確認、データアクセス、DDL、クエリ説明のツールをMCPクライアントに公開します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"database": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"HTTP_HOST",
"-e",
"HTTP_PORT",
"-e",
"HTTP_ALLOWED_ORIGINS",
"-e",
"HTTP_ALLOWED_HOSTS",
"ghcr.io/haymon-ai/database:0.7.0"
],
"env": {
"HTTP_HOST": "<HTTP_HOST>",
"HTTP_PORT": "<HTTP_PORT>",
"HTTP_ALLOWED_ORIGINS": "<HTTP_ALLOWED_ORIGINS>",
"HTTP_ALLOWED_HOSTS": "<HTTP_ALLOWED_HOSTS>"
}
}
}
}
起動コマンドdocker run -i --rm -e HTTP_HOST -e HTTP_PORT -e HTTP_ALLOWED_ORIGINS -e HTTP_ALLOWED_HOSTS ghcr.io/haymon-ai/database:0.7.0
設定が必要な環境変数
HTTP_HOSTHTTP bind host
HTTP_PORTHTTP bind port
HTTP_ALLOWED_ORIGINSAllowed CORS origins (comma-separated)
HTTP_ALLOWED_HOSTSAllowed host names (comma-separated)

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

パッケージ
ocighcr.io/haymon-ai/database:0.7.0

ツール

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

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

詳細

Database MCP

CI Release License: MIT Docs

SQL データベース向けの単一バイナリの MCP サーバーです。実行時の依存関係なしで、AI アシスタントを MySQL/MariaDB、PostgreSQL、または SQLite に接続できます。

ウェブサイト · ドキュメント · リリース

デモ

機能 ✨

  • マルチデータベース — 1 つのバイナリで MySQL/MariaDB、PostgreSQL、SQLite に対応
  • MCP ツール — スキーマの検出(listDatabases、listTables、listViews、listTriggers、listFunctions、listProcedures、listMaterializedViews)、データアクセス(readQuery、writeQuery)、DDL(createDatabase、dropDatabase、dropTable)、および explainQuery。読み取り専用モードでは書き込みツール(writeQuery、createDatabase、dropDatabase、dropTable)が非表示になります。バックエンドごとの対応状況については、MCP ツールを参照してください。
  • 単一バイナリ — 約 7 MB、Python/Node/Docker は不要
  • 複数のトランスポート — stdio(Claude Desktop、Cursor 用)および HTTP(リモート/複数クライアント用)
  • 2 層の設定 — CLI フラグ > 環境変数。バックエンドごとに適切なデフォルト値を設定
  • SSH トンネル — 組み込みクライアントを使用し、SSH 踏み台サーバー経由で MySQL/MariaDB/PostgreSQL に接続できます。パスワードまたは鍵による認証、known_hosts による検証、自動再接続に対応

インストール 📦

macOS、Linux、WSL:

curl -fsSL https://dbmcp.haymon.ai/install.sh | bash

Windows PowerShell:

irm https://dbmcp.haymon.ai/install.ps1 | iex

Windows CMD:

curl -fsSL https://dbmcp.haymon.ai/install.cmd -o install.cmd && install.cmd && del install.cmd

Docker、Cargo、その他の方法については、インストールのドキュメントを参照してください。

クイックスタート 🚀

.mcp.json を使用する(推奨)

プロジェクトのルートに .mcp.json ファイルを追加します。MCP クライアントがこのファイルを読み取り、サーバーを自動的に設定します。

stdio トランスポート — クライアントがサーバープロセスを起動して管理します:

{
  "mcpServers": {
    "dbmcp": {
      "command": "dbmcp",
      "args": ["stdio"],
      "env": {
        "DB_BACKEND": "mysql",
        "DB_HOST": "127.0.0.1",
        "DB_PORT": "3306",
        "DB_USER": "root",
        "DB_PASSWORD": "secret",
        "DB_NAME": "mydb"
      }
    }
  }
}

HTTP トランスポート — 自分でサーバーを起動し、クライアントが接続します:

# Start the server first
dbmcp http --db-backend mysql --db-user root --db-name mydb --port 9001
{
  "mcpServers": {
    "dbmcp": {
      "type": "http",
      "url": "http://127.0.0.1:9001/mcp"
    }
  }
}

注: HTTP トランスポートには "type": "http" フィールドが必須です。これがない場合、Claude Code などのクライアントは設定を拒否します。

ベアラートークンを必須にするには、サーバーを HTTP_AUTH_TOKEN 付きで起動し、クライアントからトークンを送信します:

HTTP_AUTH_TOKEN="$(openssl rand -hex 32)" dbmcp http --db-backend mysql --db-user root --db-name mydb
{
  "mcpServers": {
    "dbmcp": {
      "type": "http",
      "url": "http://127.0.0.1:9001/mcp",
      "headers": { "Authorization": "Bearer ${DBMCP_TOKEN}" }
    }
  }
}
CLI フラグを使用する
# MySQL/MariaDB
dbmcp stdio --db-backend mysql --db-host localhost --db-user root --db-name mydb

# PostgreSQL
dbmcp stdio --db-backend postgres --db-host localhost --db-user postgres --db-name mydb

# SQLite
dbmcp stdio --db-backend sqlite --db-name ./data.db

# PostgreSQL through an SSH bastion (DB host is resolved by the bastion)
dbmcp stdio --db-backend postgres --db-host db.internal --db-user postgres --db-name mydb \
  --ssh-host bastion.example.com --ssh-user deploy --ssh-key ~/.ssh/id_ed25519

# HTTP transport (loopback only, no token required)
dbmcp http --db-backend mysql --db-user root --db-name mydb --port 9001

# HTTP transport on all interfaces — a bearer token is REQUIRED
HTTP_AUTH_TOKEN=change-me dbmcp http --db-backend mysql --db-user root --db-name mydb --host 0.0.0.0 --port 9001

警告: ループバック以外のアドレス(例:--host 0.0.0.0)にバインドすると、そのポートに接続できるすべてのユーザーにデータベースが公開されます。その場合、HTTP_AUTH_TOKEN が設定されていない限り、dbmcp は起動を拒否します。Host/Origin の許可リストはブラウザーの DNS リバインディング攻撃から保護するためのものであり、認証ではありません。

環境変数を使用する
DB_BACKEND=mysql DB_USER=root DB_NAME=mydb dbmcp stdio

設定 ⚙️

設定は明確な優先順位で読み込まれます:

CLI フラグ > 環境変数 > デフォルト値

環境変数は通常、MCP クライアントによって(サーバー設定の env または envFile を通じて)設定されます。

サブコマンド
サブコマンド説明
stdiostdio モードで実行
httpHTTP/SSE モードで実行
versionバージョン情報を表示して終了

サブコマンドは必須です。サブコマンドを指定せずに dbmcp を実行すると、使い方のヘルプが表示され、ゼロ以外のステータスで終了します。

データベースオプション(すべてのサブコマンドで共通)
フラグ環境変数デフォルト説明
--db-backendDB_BACKEND(必須)mysql、mariadb、postgres、または sqlite
--db-hostDB_HOSTlocalhostデータベースのホスト(トンネリング時は SSH サーバーから見たホスト)
--db-portDB_PORTバックエンドのデフォルト3306(MySQL/MariaDB)、5432(PostgreSQL)
--db-userDB_USERバックエンドのデフォルトroot(MySQL/MariaDB)、postgres(PostgreSQL)
--db-passwordDB_PASSWORD(空)データベースのパスワード
--db-nameDB_NAME(空)データベース名または SQLite のファイルパス
--db-charsetDB_CHARSET文字セット(MySQL/MariaDB のみ)
SSL/TLS オプション
フラグ環境変数デフォルト説明
--db-sslDB_SSLfalseSSL を有効にする
--db-ssl-caDB_SSL_CACA 証明書のパス
--db-ssl-certDB_SSL_CERTクライアント証明書のパス
--db-ssl-keyDB_SSL_KEYクライアントキーのパス
--db-ssl-verify-certDB_SSL_VERIFY_CERTtrueサーバー証明書を検証する
SSH トンネルオプション
フラグ環境変数デフォルト説明
--ssh-hostSSH_HOSTSSH サーバーのホスト。設定するとトンネルが有効になります
--ssh-portSSH_PORT22SSH サーバーのポート
--ssh-userSSH_USERSSH ユーザー
--ssh-passwordSSH_PASSWORDSSH パスワード
--ssh-keySSH_KEYSSH 秘密鍵のパス(OpenSSH、PKCS#1、PKCS#8、SEC1)
--ssh-key-passphraseSSH_KEY_PASSPHRASESSH 秘密鍵のパスフレーズ
--ssh-known-hostsSSH_KNOWN_HOSTS~/.ssh/known_hostsknown_hosts ファイルのパス(デフォルト:~/.ssh/known_hosts)
--ssh-strict-host-key-checkingSSH_STRICT_HOST_KEY_CHECKINGyesホストキーのポリシー:yes は不明なホストを拒否し、accept-new は初回接続時に信頼し、no は検証を無効にします(安全ではありません)
--ssh-keepalive-intervalSSH_KEEPALIVE_INTERVAL30SSH キープアライブの間隔(秒、0 で無効)
--ssh-local-portSSH_LOCAL_PORT一時ポートローカルトンネルのポート(デフォルト:一時ポート)

トンネルは MySQL/MariaDB/PostgreSQL のみで利用でき、組み込みの SSH クライアントを使用します(ssh バイナリは不要です)。--db-host/--db-port は SSH サーバーによって解決されます。キーとパスワードの両方が設定されている場合は、まずキーが試されます。ホストキーのポリシー、制限事項、トラブルシューティングについては、SSH トンネルを参照してください。

サーバーオプション
フラグ環境変数デフォルト説明
--db-read-onlyDB_READ_ONLYtrue書き込みクエリをブロックする
--db-max-pool-sizeDB_MAX_POOL_SIZE5接続プールの最大サイズ(最小:1)
--db-connection-timeoutDB_CONNECTION_TIMEOUT(未設定)接続タイムアウト(秒、最小:1)
--db-query-timeoutDB_QUERY_TIMEOUT30クエリ実行のタイムアウト(秒)
--db-page-sizeDB_PAGE_SIZE100ページ分割されたツールレスポンスあたりの最大項目数(範囲:1~500)
ロギングオプション
フラグ環境変数デフォルト説明
--log-levelLOG_LEVELinfoログレベル(trace/debug/info/warn/error)
HTTP 専用オプション(http サブコマンドでのみ使用可能)
フラグデフォルト説明
--host127.0.0.1バインドするホスト
--port9001バインドするポート
--allowed-originslocalhost の各種表記、任意のポート許可するブラウザーのオリジン(カンマ区切り、:* は任意のポートに一致します)。CORS プリフライトとサーバー側の Origin 拒否の両方に適用されます。
--allowed-hostslocalhost,127.0.0.1,::1信頼する Host ヘッダー(カンマ区切り)。サーバー側で適用され、HTTP/2 の :authority も考慮されます。
--auth-token(未設定)すべてのリクエストで必要となる Bearer トークン(Authorization: Bearer <token>)。CLI 引数は ps で表示されるため、HTTP_AUTH_TOKEN 環境変数を使用してください。ループバック以外にバインドする場合は必須です。
--dangerously-allow-unauthenticatedfalseトークンなしでループバック以外にバインドすることを許可します(HTTP_DANGEROUSLY_ALLOW_UNAUTHENTICATED)。呼び出し元を認証するリバースプロキシの背後でのみ使用してください。

セキュリティに関する注意:デフォルトの --allowed-origins では、localhost/127.0.0.1/[::1] 上の任意のポートから配信されるブラウザーページが許可されるため、ローカルの Web アプリであればどれでもサーバーを呼び出せます。共有マシンや開発用マシンでは、HTTP_AUTH_TOKEN を設定するか、--allowed-origins を信頼するオリジン(例:http://localhost:5173)に限定してください。

MCP ツール 🧩

listDatabases

アクセス可能なデータベースの一覧を、cursor/nextCursor を使ってページ分割して返します。反復処理の詳細はカーソルページネーションを参照してください。SQLite では使用できません。

listTables

データベース内のテーブル一覧を、cursor/nextCursor を使ってページ分割して返します。反復処理の詳細はカーソルページネーションを参照してください。

パラメーター:database(アクティブなデータベースがデフォルトです。SQLite には database パラメーターがありません)、cursor、search、detailed。

search は省略可能な大文字・小文字を区別しない LIKE/ILIKE パターンで、ワイルドカードとして %(任意の文字列)と _(任意の1文字)を使用できます。名前が users で始まるテーブルには users%、部分一致には %order% を指定します。ワイルドカードを含まない単語を指定すると、テーブル名の完全一致のみが対象になります。

detailed(デフォルトは false)によって、レスポンスの形式が切り替わります。

  • 簡易(デフォルト) — tables は、テーブル名のみを格納したソート済み JSON 配列です。
  • 詳細(detailed: true) — tables はテーブル名をキーとする JSON オブジェクトです。各値には、テーブルの schema、kind、owner、comment、columns[]、constraints[]、indexes[]、triggers[] が含まれます。1回の呼び出しでテーブル一覧とテーブルごとのメタデータの両方が返されます。
listViews

データベース内のビュー一覧を、cursor/nextCursor を使ってページ分割して返します。MySQL/MariaDB、PostgreSQL(public スキーマ)、SQLite で使用できます。パラメーター:database(アクティブなデータベースがデフォルトです。SQLite には database パラメーターがありません)、cursor、search、detailed。SQLite では簡易形式のみが返され、search と detailed は受け付けられません。

search は省略可能な大文字・小文字を区別しない LIKE/ILIKE パターンで、ワイルドカードとして %(任意の文字列)と _(任意の1文字)を使用できます。カーソルの連続性を保つため、ページ分割された呼び出しでは search の値を同一に保つ必要があります。

detailed(デフォルトは false)によって、レスポンスの形式が切り替わります。

  • 簡易(デフォルト) — views は、ビュー名のみを格納したソート済み JSON 配列です。ビュー名はスキーマごとに一意のため、重複はありません。
  • 詳細(detailed: true) — views はビュー名のみをキーとする JSON オブジェクトです。各値には、バックエンドごとのメタデータが含まれます。PostgreSQL では schema、owner、description、definition が公開されます。MySQL/MariaDB では schema、definer、security、checkOption、updatable、characterSetClient、collationConnection、definition が公開されます。バックエンドごとの取得元列、列挙値の一覧、意図的に省略されている項目については、listViews リファレンスを参照してください。

反復処理の詳細はカーソルページネーションを参照してください。

listTriggers

テーブル上のユーザー定義トリガーを、cursor / nextCursor を使用してページネーションしながら一覧表示します。内部制約トリガーと外部キー制約トリガーは除外されます。MySQL/MariaDB、PostgreSQL(public スキーマ)、SQLite で利用できます。パラメーター:database(アクティブなデータベースがデフォルト。SQLite では database パラメーターはありません)、cursor、search、detailed。

search は任意の大文字小文字を区別しない LIKE / ILIKE パターンで、ワイルドカードとして %(任意の文字列)と _(1 文字)を使用できます。カーソルの連続性を保つため、ページネーションを伴う呼び出しでは search の値を同一にする必要があります。

detailed(デフォルトは false)を指定すると、レスポンスの形式が切り替わります。

  • 概要(デフォルト) — triggers は、トリガー名のみを含むソート済みの JSON 配列です。
  • 詳細(detailed: true) — triggers はトリガー名をキーとする JSON オブジェクトです。各値には、バックエンドごとのメタデータ(タイミング、イベント、定義、PostgreSQL の status / functionName や MySQL/MariaDB のセッションコンテキストフィールドなど、バックエンド固有の追加情報)が含まれます。バックエンドごとのフィールド一覧は、listTriggers のリファレンスを参照してください。

反復処理の詳細については、カーソルページネーションを参照してください。

listFunctions

ユーザー定義の SQL 関数を、cursor / nextCursor を使用してページネーションしながら一覧表示します。PostgreSQL では、集約関数、ウィンドウ関数、プロシージャは除外されます。MySQL/MariaDB では、ロード可能な UDF(mysql.func)は除外されます。MySQL/MariaDB および PostgreSQL(public スキーマ)で利用できます。SQLite では利用できません。パラメーター:database(アクティブなデータベースがデフォルト)、cursor、search、detailed。

search は任意の大文字小文字を区別しない LIKE / ILIKE パターンで、ワイルドカードとして %(任意の文字列)と _(1 文字)を使用できます。カーソルの連続性を保つため、ページネーションを伴う呼び出しでは search の値を同一にする必要があります。

detailed(デフォルトは false)を指定すると、レスポンスの形式が切り替わります。

  • 概要(デフォルト) — functions は、関数名のみを含むソート済みの JSON 配列です。PostgreSQL ではオーバーロードごとに 1 回ずつ表示されるため、関数名が重複することがあります。
  • 詳細(detailed: true) — functions は関数シグネチャをキーとする JSON オブジェクトです。各値には、バックエンドごとのメタデータ(言語、引数、戻り値の型、定義、PostgreSQL の volatility / strict / parallelSafety や MySQL/MariaDB のセッションコンテキストフィールドなど、バックエンド固有の追加情報)が含まれます。PostgreSQL のキーは name(arguments)(オーバーロードを区別)で、MySQL/MariaDB のキーは関数名のみ(オーバーロードなし)です。バックエンドごとのフィールド一覧は、listFunctions のリファレンスを参照してください。

反復処理の詳細については、カーソルページネーションを参照してください。

listProcedures

ユーザー定義のストアドプロシージャを一覧表示します。cursor / nextCursor によるページネーションに対応しています。MySQL/MariaDB および PostgreSQL(public スキーマ、PostgreSQL 11+)で利用できます。SQLite では利用できません。パラメーター:database(アクティブなデータベースがデフォルト)、cursor、search、detailed。

search は、大文字と小文字を区別しない任意の LIKE / ILIKE パターンです。ワイルドカードとして %(任意の文字列)と _(1文字)を使用できます。カーソルを継続して使用するには、ページネーションを行う呼び出し間で search の値を同一に保つ必要があります。

detailed(デフォルトは false)でレスポンスの形式を切り替えます。

  • Brief(デフォルト) — procedures は、プロシージャ名のみを格納したソート済みの JSON 配列です。PostgreSQL のオーバーロードはオーバーロードごとに1回表示されます(同じ名前の文字列が重複することがあります)。
  • Detailed(detailed: true) — procedures はプロシージャのシグネチャをキーとする JSON オブジェクトです。各値には、バックエンドごとのメタデータ(言語、引数、セキュリティ、定義、PostgreSQL の owner や MySQL/MariaDB の deterministic / sqlDataAccess / セッションコンテキストのフィールドなど、バックエンド固有の追加情報)が含まれます。PostgreSQL のキーは name(arguments) です(オーバーロードは区別され、引数が0個のプロシージャは name() がキーになります)。MySQL/MariaDB のキーは名前のみです(オーバーロードはありません)。バックエンドごとのフィールド一覧については、listProcedures のリファレンスを参照してください。

反復処理の詳細については、カーソルページネーションを参照してください。

listMaterializedViews

public スキーマのマテリアライズドビューを一覧表示します。cursor / nextCursor によるページネーションに対応しています。PostgreSQL 専用で、MySQL/MariaDB または SQLite では利用できません。パラメーター:database(アクティブなデータベースがデフォルト)、cursor、search、detailed。

search は、大文字と小文字を区別しない任意の ILIKE パターンです。ワイルドカードとして %(任意の文字列)と _(1文字)を使用できます。SQL のメタ文字('、;、--)はパラメーター値としてバインドされ、クエリに直接埋め込まれることはありません。カーソルを継続して使用するには、ページネーションを行う呼び出し間で search の値を同一に保つ必要があります。

detailed(デフォルトは false)でレスポンスの形式を切り替えます。

  • Brief(デフォルト) — materializedViews は、マテリアライズドビュー名のみを格納したソート済みの JSON 配列です。マテリアライズドビュー名はスキーマ内で一意のため、重複はありません。
  • Detailed(detailed: true) — materializedViews はマテリアライズドビュー名のみをキーとする JSON オブジェクトです。各値には、schema、owner、description(COMMENT ON MATERIALIZED VIEW がない場合は null)、definition(pg_matviews.definition から取得した SELECT 本文をそのまま格納)、populated(WITH NO DATA で作成され、一度もリフレッシュされていないマテリアライズドビューでは false)、indexed(インデックスが1つ以上存在する場合は true)が含まれます。REFRESH MATERIALIZED VIEW CONCURRENTLY には、一意インデックスも必要です。詳細モードでは、意図的に列メタデータ、tablespace、ストレージパラメーター、一意インデックスの検出を省略します。これらの情報は definition、listTables(detailed=true)、または pg_indexes に対する readQuery で取得できます。ソース列と運用上の仕様については、listMaterializedViews のリファレンスを参照してください。

反復処理の詳細については、カーソルページネーションを参照してください。

readQuery

読み取り専用の SQL クエリ(SELECT、SHOW、DESCRIBE、USE、EXPLAIN)を実行します。多層防御として、常に SQL 検証を適用します。パラメーター:query、database、cursor。SELECT の結果は cursor / nextCursor によるページネーションに対応しています。SHOW、DESCRIBE、USE、EXPLAIN は1ページのみを返し、cursor を無視します。反復処理の詳細については、カーソルページネーションを参照してください。

writeQuery

書き込みを行う SQL クエリ(INSERT、UPDATE、DELETE、CREATE、ALTER、DROP)を実行します。読み取り専用モードが無効の場合にのみ利用できます。パラメーター:query、database。

createDatabase

データベースが存在しない場合に作成します。読み取り専用モードが無効の場合にのみ利用できます。SQLite では利用できません。パラメーター:database。

dropDatabase

既存のデータベースを削除します。現在接続中のデータベースは削除できません。読み取り専用モードが無効の場合にのみ利用できます。SQLite では利用できません。パラメーター:database。

dropTable

データベースからテーブルを削除します。テーブルに外部キー依存先がある場合、データベースのエラーがユーザーに表示されます。PostgreSQL では、cascade パラメーターを指定すると CASCADE で強制的に削除できます。読み取り専用モードが無効の場合にのみ利用できます。パラメーター:database、table、cascade(PostgreSQL のみ)。

explainQuery

SQL クエリの実行計画を返します。実際の実行統計を取得するためのオプションの analyze パラメーターをサポートしています(PostgreSQL および MySQL/MariaDB)。読み取り専用モードでは、クエリを実際に実行するため、EXPLAIN ANALYZE は読み取り専用ステートメントに対してのみ許可されます。SQLite では EXPLAIN QUERY PLAN が使用されます(ANALYZE はサポートされません)。読み取り専用モードにかかわらず、常に利用できます。パラメーター:query、database、analyze(PostgreSQL/MySQL のみ)。

セキュリティ 🔒

  • 読み取り専用モード(デフォルト) — 書き込みツールは AI アシスタントに表示されません。readQuery では AST ベースの SQL 検証が適用されます
  • 単一ステートメントの強制 — 複数ステートメントのインジェクションを解析時にブロックします
  • 危険な関数のブロック — LOAD_FILE()、INTO OUTFILE、INTO DUMPFILE を AST で検出します
  • 識別子の検証 — データベース名とテーブル名について、制御文字と空文字列を検証します
  • HTTP ベアラー認証 — HTTP_AUTH_TOKEN により Authorization: Bearer <token> を強制します(定数時間比較を使用し、認証失敗時は 401 を返します)。ループバック以外のアドレスにバインドする場合、トークンがなければ起動を拒否します
  • Origin と Host の許可リスト — サーバー側での拒否(403)に加え、CORS プリフライトを適用します。HTTP トランスポートで設定可能です。ブラウザーを利用した DNS リバインディング攻撃を防ぎますが、認証の代わりにはなりません
  • SSL/TLS — 個別の DB_SSL_* 変数で設定します
  • SSH ホストキー検証 — SSH トンネルはサーバーキーを known_hosts と照合します(デフォルトは yes)。SSH パスワードとパスフレーズがログに記録されることはありません
  • PII のマスキング(オプトイン、デフォルトではオフ) — 有効にすると、クエリツールの出力は正規表現ベースのマスカーを通過し、検出された PII の範囲を、7 つのカテゴリにわたる46 種類の組み込みエンティティタイプ(個人情報(メールアドレス)、金融情報(カード、IBAN、英国の銀行口座、ソートコード、米国 ABA ルーティングコード、CVV)、政府発行 ID(SSN、ITIN、EIN、英国/米国のパスポート、NHS、NINO、SIN、VAT)、連絡先(電話番号)、ネットワーク(IP、URL、MAC)、デジタル ID(API キー、JWT、PEM 秘密鍵、パスワードハッシュ)、暗号資産ウォレット)を対象に書き換えます。切り替え:--pii / PII_ENABLE。演算子:--pii-operator / PII_OPERATOR — replace(デフォルト。<EMAIL_ADDRESS> のようなエンティティ対応のプレースホルダー)、mask(長さを維持した *)、redact(削除)、hash(SHA-256 の 16 進数表記)のいずれかです。--pii-categories / PII_CATEGORIES で対象を任意のサブセットに限定できます(カンマ区切り。例:financial,government)。未設定の場合は、すべての組み込みタイプが有効になります。対象範囲:クエリツールの出力ペイロードのみです。詳細については、PII の設定を参照してください。
  • ML/NER によるマスキング(実行時のオプトイン、デフォルトではオフ) — 正規表現では検出できない PERSON、LOCATION、ORGANIZATION、NATIONALITY_RELIGION_POLITICS、FACILITY を追加で検出します。有効にするには、--pii-ner / PII_NER_ENABLE の切り替えに加えて、ユーザーが用意したモデルディレクトリが必要です。検出されるエンティティはモデルのラベルに応じて異なります(CoNLL モデルでは人物/場所/組織が検出され、OntoNotes クラスのモデルでは NRP と施設も追加されます)。推論には ONNX Runtime を使用します(モデルディレクトリには config.json、tokenizer.json、model.onnx が必要です。推奨モデル:MIT ライセンスの dslim/bert-base-NER を ONNX にエクスポートし、高速化のため int8 量子化したもの)。フェイルクローズ方式です。読み込めないモデルがあると起動を中止し、推論エラーが発生するとリクエストを失敗させます。黙ってフォールバックすることはありません。--pii-categories の設定が適用されます。v1 では英語に対応しています。
  • 認証情報のマスキング — データベースのパスワードがログやデバッグ出力に表示されることはありません

テスト 🧪

# Unit tests
cargo test --workspace --lib --bins

# Integration tests (requires Docker)
./tests/run.sh

# Filter by engine
./tests/run.sh --filter mariadb
./tests/run.sh --filter mysql
./tests/run.sh --filter postgres
./tests/run.sh --filter sqlite

# With MCP Inspector
npx @modelcontextprotocol/inspector ./target/release/dbmcp stdio

# HTTP mode testing
curl -X POST http://localhost:9001/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"0.1"}}}'

プロジェクト構成 🗂️

これは、次のクレートで構成される Cargo ワークスペースです。

クレートパス説明
dbmcp. (ルート)バイナリのシム
dbmcp-clicrates/cli/CLI の解析、トランスポート、サーバーの起動
dbmcp-sqlcrates/sql/共通のエラー型、検証、識別子ユーティリティ
dbmcp-configcrates/config/設定用構造体と検証
dbmcp-servercrates/server/共通の MCP ツール実装とサーバー情報
dbmcp-mysqlcrates/mysql/MySQL/MariaDB バックエンドのハンドラーと操作
dbmcp-postgrescrates/postgres/PostgreSQL バックエンドのハンドラーと操作
dbmcp-sqlitecrates/sqlite/SQLite バックエンドのハンドラーと操作
dbmcp-piicrates/pii/クエリ出力における PII の検出と匿名化
dbmcp-sql-lineagecrates/sql-lineage/列レベルの SQL リネージ抽出
dbmcp-sshcrates/ssh/データベース接続用 SSH トンネル
sqlx-jsoncrates/sqlx-json/sqlx 向けの型安全な行から JSON への変換(RowExt トレイト)

開発 🧰

cargo build              # Development build
cargo build --release    # Release build (~7 MB)
cargo test               # Run tests
cargo clippy --workspace --tests -- -D warnings  # Lint
cargo fmt                # Format
cargo doc --no-deps      # Build documentation

ライセンス 📄

このプロジェクトは MIT ライセンスの下でライセンスされています。詳細は LICENSE ファイルをご覧ください。

コメント

MCP は初めてですか?

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

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