Drizzle MCP について
Drizzle MCPは、プロジェクトで使うDrizzleスキーマを通じてデータベースを確認できる、コーディングエージェント向けのMCPサーバーです。既定では読み取り専用で、TypeScript名やリレーション、マイグレーション状況も扱います。
主な機能
- 01テーブル、列、キー、インデックス、リレーションの確認
- 02条件指定による行の参照と集計
- 03制限付きの読み取り専用SQL実行
- 04クエリプランとスキーマ差分の確認
- 05マイグレーション状況と適用後の編集検出
- 06オプション指定時のみ書き込み
活用シーン
- 01プロジェクトのスキーマに沿ったDrizzleクエリの作成
- 02実データと分布の確認
- 03スキーマと稼働中DBの差異の特定
- 04クエリプランでのインデックス利用確認
MCP 対応
MCPクライアントに、スキーマ確認、データ参照、集計、クエリ、プラン分析、差分確認のツールを提供します。既定では読み取り専用で、`--allow-writes` を指定した場合のみ書き込みツールを有効にできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
drizzle-mcp
エージェント向けの Drizzle Studio です。MCP サーバーで、Claude Code、Cursor などのコーディングエージェントが、Drizzle スキーマを通じてデータベースを確認できます。
一般的なデータベース MCP で確認できるのは、テーブルとカラムです。このサーバーは、コードで使われているスキーマを読み取ります。TypeScript の名前と SQL の名前、リレーション、列挙型、デフォルト値を確認できます。エージェントはこれをもとに、「データベースには実際に何が入っているのか?」に回答し、それに合った Drizzle コードを作成できます。
エージェントが posts テーブルについて尋ねると、次のような内容が返されます。
## posts
SQL table `posts`, exported as `posts` from `src/db/schema.ts`.
| column (TS key, SQL name) | type | nullable | default | notes |
| ------------------------- | ------------------------ | -------- | ------- | ------------------------------ |
| id | serial | no | | primary key |
| authorId (author_id) | integer | no | | → users.id, on delete cascade |
| published | boolean | no | false | |
| createdAt (created_at) | timestamp with time zone | no | now() | |
Relations (for `browse` with `with`, or `db.query` in code):
- author: one users on posts.authorId = users.id
- comments: many comments on posts.id = comments.postId
セットアップ
drizzle.config.ts があるフォルダーから実行してください。
Claude Code
claude mcp add drizzle -- npx -y drizzle-mcp
Cursor(.cursor/mcp.json)と VS Code(.vscode/mcp.json。"mcpServers" の代わりに "servers" を使用します):
{
"mcpServers": {
"drizzle": { "command": "npx", "args": ["-y", "drizzle-mcp"] }
}
}
Claude Desktop のように、プロジェクトフォルダーでサーバーを起動しないクライアントでは、args に "--config", "/path/to/drizzle.config.ts" を追加してください。
drizzle-mcp は drizzle-kit と同じ方法で設定を読み込み、.env も含めて読み込みます。プロジェクトにすでにインストールされているデータベースドライバーと drizzle-orm のバージョンを使って接続します。
ツール
| ツール | 説明 |
|---|---|
schema | テーブルの一覧を表示します。テーブル名を指定すると、カラム(TypeScript のキーと SQL の名前、型、NULL 許容性、デフォルト値)、キー、インデックス、チェック制約、リレーションを表示します。 |
browse | Drizzle Studio と同じ方法で行を読み込みます。カラムの選択、フィルター、並べ替え、ページ分割ができ、relations() を通じて関連する行も含められます。行のキーは、db.query が返すときと同じく TypeScript のプロパティです。 |
count | 行数を全体、または groupBy で値ごとに数え、データの分布を確認します。 |
query | SQL 文を 1 つ読み取り専用で実行し、最大 100 行を返します。 |
explain | クエリプランを表示し、インデックスが使われているか確認します。Postgres では、analyze を指定すると実際にクエリを実行し、実行時間を計測します。 |
drift | スキーマと稼働中のデータベースを比較します。不足または余分なテーブルやカラム、変更された型や NULL 許容性を確認できます。 |
migrations | drizzle-kit のマイグレーションを適用済みまたは未適用として一覧表示します。適用後に編集されたマイグレーションも通知します。 |
execute | データを変更します。サーバーを --allow-writes を指定して起動した場合にのみ利用できます。 |
フィルターは JSON 形式なので、値は必ずパラメーターとしてバインドされ、SQL に直接埋め込まれることはありません。
{ "published": true, "createdAt": { "gte": "2026-01-01" }, "or": [{ "title": { "ilike": "%drizzle%" } }, { "rating": { "gte": 4.5 } }] }
スキーマを編集すると、サーバーは次の呼び出し時に変更を反映します。再起動は不要です。
デフォルトで安全
エージェントが誤って、あるいは読み取った内容に従って、データベースを壊してしまうことがあってはなりません。
- 読み取り専用です。 すべての文は読み取り専用トランザクションで実行されます。SQLite の読み取りには読み取り専用接続を使用します。
- 一度に実行する文は 1 つです。
select 1; commit; drop table usersはデータベースに届く前に拒否されます。Postgres のドライバーとbetter-sqlite3も独自に拒否しますが、libsql は最初の文以降をすべて黙って破棄します。 - 実行には制限があります。 文は 15 秒後にタイムアウトします。結果は最大 100 行に制限され、カーソル経由で取得されるため、大きなテーブルがメモリに読み込まれることはありません。長い値は途中で切り詰められます。
- シークレットは非表示になります。
password、token、secret、apiKeyのような名前のカラムの値は[redacted]と表示されます。 - 書き込みはオプトインです。
--allow-writesを指定するとexecuteツールが追加されます。queryはいずれの場合も読み取り専用です。
要件
| データベース | ドライバー |
|---|---|
| PostgreSQL | pg、postgres(postgres.js)、PGlite |
| SQLite | better-sqlite3、@libsql/client(Turso を含む) |
MySQL はまだサポートされていません。
drizzle-mcp には Node.js 22 以降が必要です。現行の安定版である drizzle-orm 0.45 でテストされています。ベータ版の Drizzle 1.0 ではリレーションの定義方法が異なるため、まだサポートされていません。
オプション
--config <path> The Drizzle config (default: drizzle.config.ts in the current folder)
--url <url> Connect here instead of the config's dbCredentials
--driver <name> pg, postgres, pglite, better-sqlite3 or libsql (default: the one installed)
--allow-writes Add the execute tool
--max-rows <n> The most rows a tool returns (default: 100)
--timeout <ms> Statement time limit (default: 15000)
--max-text <n> Cut strings longer than this (default: 500)
--redact <regex> Hide columns whose names match (default: password, secret, token…)
--show-secrets Don't hide any columns
仕組み
drizzle.config.tsと.envを読み込み、設定ファイルで指定されたスキーマファイル(単一ファイル、フォルダー、または glob)をインポートします。インポートには jiti を使用するため、ビルド手順なしで TypeScript を利用できます。- drizzle-orm 独自のメタデータから、テーブル、カラム、リレーションを読み取ります。これは
drizzle-kitやリレーショナルクエリで使用されるものと同じ情報で、TypeScript の名前やリレーションもここから取得します。 - プロジェクトのドライバーで接続します。
browseとcountはスキーマオブジェクトを使ってリレーショナルクエリを構築します。queryは前述の安全対策を通じてプレーンな SQL を実行します。
開発
pnpm install
pnpm check # types, lint and 145 tests
テストでは、すべてのツールをすべてのドライバーに対して実行します。Postgres は PGlite として動作します。これは WebAssembly にコンパイルされた、本物の Postgres です。pg と postgres.js は Postgres ワイヤープロトコル経由で接続するため、Docker は不要です。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。