Skip to main content
Glama
cocaxcode

@cocaxcode/database-mcp

by cocaxcode

概要

データベースのための最も完全なMCPサーバー。3つのエンジン(PostgreSQL、MySQL、SQLite)に対応した33ツールを備え、接続グループ、名前付き接続管理、自動ロールバック、ダンプ/リストア、MCPリソースによるスキーマ自動検出、完全なクエリ履歴をすべて自然言語で実現します。

これは単なるクエリ実行ツールではありません。完全なデータベースワークベンチです。プロジェクトディレクトリにスコープされたグループへの接続整理、セッション間で永続化されるデフォルト設定、3段階の詳細度でのスキーマ調査、すべての書き込み操作前のスナップショット取得、逆SQLによるミスの取り消し、データベース全体のダンプとリストア、そして実行したすべてのクエリの追跡を、プロジェクト単位・接続単位で行えます。

すべての接続はグループに属します。グループにはスコープ(ディレクトリ)、デフォルト接続、アクティブ接続があります。スコープされたディレクトリ内で作業するとき、表示されるのはそのグループの接続だけです。雑音も混乱もありません。

必要なことを説明するだけです。AIがスキーマを読み、SQLを書き、安全に実行します。自動LIMIT注入、変更前スナップショット、破壊的操作前の確認付きです。クラウドアカウントもORMも設定ファイルも不要。認証情報がマシンの外に出ることはありません。すべてローカルで実行されます。

Claude CodeClaude DesktopCursorWindsurfVS CodeCodex CLIGemini CLI、およびMCP互換のあらゆるクライアントで動作します。


Related MCP server: Database MCP Server

話しかけるだけ

ツール名やSQL構文を覚える必要はありません。必要なことを言うだけです。

> "Connect to my local PostgreSQL on port 5432, database myapp, user admin"

> "Create a group called backend and add this directory"

> "Connect to my PostgreSQL on localhost, put it in the backend group"

> "Set local-pg as the default connection"

> "Show me all tables"

> "What columns does the users table have?"

> "Show me the last 10 orders with the customer name"
  -> AI reads FKs from schema, builds the JOIN, applies LIMIT 10

> "Insert a test user called Alice"
  -> Snapshot captured for rollback

> "Oops, undo that"
  -> Rows restored via reverse SQL

> "Switch to the production database for this session"
  -> Instant context change, all queries now go to prod

> "Delete all inactive users"
  -> "This will affect N rows. Call again with confirm=true to proceed."

> "What did I run today?"
  -> Full query history with timestamps and execution times

> "Dump the database — structure and data"
  -> SQL file generated, ready for restore

AIはMCPリソースを通じてスキーマをすでに把握しています。db://schema を読んでテーブルを発見し、db://tables/{name}/schema でカラム、外部キー、インデックスを確認します。複数テーブルにまたがるデータを要求すると、正しいJOINを自動的に構築します。


接続グループ

すべての接続はグループに属します。グループはデータベース接続を整理する単位であり、スコープを保ち、クリーンで、自動化された状態を維持します。

グループには3つの重要な概念があります:

  • スコープ: グループの接続を共有するディレクトリ。スコープされたディレクトリ内で作業するとき、表示されるのはそのグループの接続だけです。グローバルな雑音はありません。

  • デフォルト: スコープされたディレクトリに入ったときに自動的にアクティブになる接続。セッション間で永続化されます。

  • アクティブ: 現在使用中の接続。セッションのみ有効で、再起動するとデフォルトに戻ります。

実際のワークフローは次のとおりです:

"Create a group called backend"
"Add this directory as scope"
"Create a PostgreSQL connection called local-dev in the backend group"   <- auto-default (first connection)
"Create another called production in backend"
"List connections"                                                       <- shows local-dev (active, default)
"Switch to production"                                                   <- session only
"Set production as default"                                              <- persists between sessions

グループに最初に追加された接続が自動的にデフォルトになります。接続を切り替えても、現在のセッションのアクティブ接続が変わるだけです。再起動するとデフォルトに戻ります。変更を永続化したい場合は、新しいデフォルトを明示的に設定してください。

つまり、本番環境に切り替えて簡単なクエリを実行しても、次にプロジェクトを開いたときには開発データベースに戻っていることが保証されます。


インストール

Claude Code

claude mcp add --scope user database -- npx -y @cocaxcode/database-mcp@latest

Claude Desktop

設定ファイルに追加します(macOSでは ~/Library/Application Support/Claude/claude_desktop_config.json、Windowsでは %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}

プロジェクトルートの .cursor/mcp.json または .windsurf/mcp.json に追加します:

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}

.vscode/mcp.json に追加します:

{
  "servers": {
    "database": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}
codex mcp add database -- npx -y @cocaxcode/database-mcp@latest

または ~/.codex/config.toml に追加します:

[mcp_servers.database]
command = "npx"
args = ["-y", "@cocaxcode/database-mcp@latest"]

~/.gemini/settings.json に追加します:

{
  "mcpServers": {
    "database": {
      "command": "npx",
      "args": ["-y", "@cocaxcode/database-mcp@latest"]
    }
  }
}

ドライバーのインストール

必要なドライバーのみをインストールします。実行時に動的に読み込まれます:

npm install -g postgres       # PostgreSQL (postgres.js)
npm install -g mysql2         # MySQL
npm install -g sql.js         # SQLite (runs in-process, no native bindings)

注: npx を使用する場合、ドライバーはグローバルにインストールする必要があります。サーバーをグローバルにインストールした場合(npm install -g @cocaxcode/database-mcp)、ドライバーはローカルでもグローバルでも構いません。


機能

マルチデータベース、単一インターフェース

ほとんどのデータベースMCPサーバーでは、セッションごとに認証情報を再設定する必要があります。このサーバーは違います。名前付き接続はグループ内に永続化されます。一度作成すれば、ずっと使えます。

名前付き接続はgitブランチのように機能します。 グループ内に devstagingprod を一度作成すれば、常にそこにあります。切り替えは即座に完了します。コマンド1つ、再設定ゼロ:

"Create a group called my-project and add this directory as scope"
"Create a connection called dev with host localhost, database myapp, user admin in my-project"
"Create a read-only connection called analytics pointing to ./data/metrics.db in my-project"
"Switch to dev"               -> queries go to PostgreSQL
"Switch to analytics"         -> queries go to SQLite
"Duplicate dev as dev-readonly with read-only mode"

グループスコープの接続により、異なるプロジェクトが自動的に異なるデータベースを参照します。プロジェクトAで作業していますか?プロジェクトAのグループと接続が表示されます。プロジェクトBのディレクトリに切り替えると、独自のデフォルトを持つプロジェクトBのグループが選択されます。手動での切り替えも、プロジェクト間の干渉もありません:

"Create a group called frontend with scope /home/user/frontend"
"Create a group called backend with scope /home/user/backend"

これで各ディレクトリに独立した接続セットができます。

100%ローカルな認証情報。 すべての接続は ~/.database-mcp/connections/ にJSONファイルとして保存されます。パスワードがマシンの外に出ることはありません。クラウドに送信されるものはありません。gitにコミットされるものもありません。認証情報はあなたのものです。

ライブ管理。 会話の途中で接続の作成、複製、名前変更、テスト、エクスポート、切り替えが可能です。再起動不要、設定ファイルの編集不要、コンテキストの喪失もありません。

組み込みの安全性

保護機能

仕組み

読み取り専用モード

接続レベルで強制 — すべての変更操作をブロック

確認必須

破壊的操作には明示的な confirm: true が必要

自動LIMIT

読み取りクエリにデフォルトで LIMIT 100 を適用(既存のLIMITは尊重)

パスワードマスキング

conn_get の出力で認証情報が *** として表示

変更前スナップショット

すべてのINSERT/UPDATE/DELETEでロールバック用に行状態をキャプチャ

自動gitignore

初回書き込み時に .database-mcp/.gitignore に追加

ロールバックスナップショット

すべての変更操作は変更前のスナップショットをキャプチャします。何でも取り消せます。

"Show me available rollbacks"
"Rollback the last delete"
  -> "This will INSERT 47 rows back into orders. Confirm?"
  -> Rows restored via reverse SQL

元の操作

ロールバックで生成されるもの

DELETE WHERE id = 5

INSERT INTO ... VALUES (...)

UPDATE SET name = 'Bob'

UPDATE SET name = 'Alice'(更新前の値)

INSERT INTO ...

DELETE WHERE id = {new_id}

DDL(CREATE、ALTER、DROP)

ログに記録されるが元に戻せない

スキーマ調査

パターンフィルタリング付きの3段階の詳細度:

"List all tables"                         -> names only (fast)
"Show me the users table with columns"    -> columns + types + nullable
"Full schema for orders including FKs"    -> columns + foreign keys + indexes
"Tables starting with user"              -> pattern: 'user%'

MCPリソース(db://schemadb://tables/{name}/schema)により、AIエージェントはスキーマに自動的にアクセスできます。複数テーブルのクエリに手動SQLは不要です。

EXPLAIN付きクエリ実行

"Show me all users"
  -> SELECT * FROM users LIMIT 100         <- auto LIMIT

"Show the execution plan for this query"
  -> EXPLAIN ANALYZE with dialect-specific syntax (PostgreSQL/MySQL/SQLite)

圧縮モード(v0.3+)

SQLの結果には、行あたり数キロバイトにもなるTEXT / JSON / HTMLカラムが含まれることがよくあります。AIエージェントはコンテキストウィンドウに到達するすべてのバイトに対してコストを支払います。execute_queryexecute_mutationexplain_query は、行と構造を維持しながらこれらのトークンを60〜95%削減する4つのオプションパラメータを受け付けます。

パラメータ

機能

verbosity

'minimal' / 'normal'(デフォルト) / 'full'

詳細レベルを制御

only_columns

['id', 'title']

これらのカラムのみを返す(クライアント側プロジェクション)

max_cell_bytes

数値(デフォルト 500

'normal' のセルあたりのバイト上限

max_rows_in_response

数値

SQLのLIMITを超える行数の上限

モード:

  • minimalrowCountexecutionTimeMsaffectedRows、および最初の行のプレビューのみ。INSERT/UPDATE/DELETEの確認、COUNTクエリ、ポーリングに最適。トークンを約90〜95%削減。

  • normal (デフォルト) — 完全な行を返すが、各セルは max_cell_bytes に切り詰められ、…(+NB) マーカーが付きます。テーブル構造を維持します。幅の広い行で約60〜80%削減。

  • full — 結果全体をそのまま返します。すべてのセルの完全な値が必要な場合に使用します。

SELECT * FROM blog_posts LIMIT 100 での典型的な削減効果content が行あたり約2KBのHTML、合計約200KBの場合):

モード

消費トークン

削減率

full

~50,000

0%(基準)

normal(500Bセル)

~12,500

~75%

only_columns: ['id','title','slug']

~2,500

~95%

minimal

~300

~99%

生の psql との実測値による直接比較については、ネイティブ代替手段 を参照してください。

完全な結果の復元: すべての圧縮レスポンスには call_id が含まれます。後で完全なセルが必要になった場合は、inspect_last_query({ call_id }) を呼び出します。SQLを再実行せずに、DB負荷と副作用を抑えたまま結果を取得できます。結果は20スロットのリングバッファに保持され、1時間のTTLで ~/.database-mcp/last-queries/ に永続化されます。

// Example: normal (default) response
{
  "call_id": "k3m9a2xp",
  "columns": ["id", "title", "content"],
  "rows": [
    { "id": 1, "title": "Hello", "content": "<h1>Long HTML…(+1847B)" }
  ],
  "rowCount": 1,
  "executionTimeMs": 12,
  "cells_truncated": 1,
  "hint": "1 cell(s) truncated to 500 bytes. Use inspect_last_query({ call_id: \"k3m9a2xp\" }) for full values.",
  "tokens_saved_estimate": 462
}

ネイティブ代替手段:実際のトークンコスト

database が利用できない場合にClaude Codeが持つネイティブオプション(Bash + psqlsqlite3mysql CLIなど)と、このMCPを比較します。

要約:生の psql と比較して、execute_query はモードに応じてコンテキストトークンを**78%〜96%**削減し、デバッグ情報の損失はありません。PostgreSQLの content カラム(行あたり約1KBのHTML)を持つテーブルに対する実際の SELECT * FROM blog_posts LIMIT 5 呼び出しで測定:

エージェントの呼び出し方

MCPを使用?

消費トークン

psqlとの差分

Bash + psql -c "..."(生の表形式出力)

❌ ネイティブ

~1,800

ベースライン

Bash + psql + 手動のawk/columnフィルター

❌ ネイティブ

不安定、エージェント組み立て

測定困難

execute_query verbosity=full

✅ MCP

~1,500

−17%(フォーマットのオーバーヘッド削減)

execute_query verbosity=normal (デフォルト、セルは500 Bで上限)

✅ MCP

~400

−78%

execute_query verbosity=minimal

✅ MCP

~80

−96%

execute_queryonly_columns: ["id","title","slug"] を使用

✅ MCP

~130

−93%

この表の数値が上記の「圧縮モード」セクションと異なる理由: これらは5行の実クエリに基づくもので、前の表はより重いコンテンツを含む100行の結果に外挿したものです。傾向と桁数は同じです。

注記:

  • 生のpsql出力は行が増えるほど悪化します — JSONBや長いTEXT列にはネイティブのフィルターがありません。MCPのセル切り詰めは、重いセルを…(+NB)マーカーで折りたたみながら、構造(行数+列リスト)を保持します。

  • inspect_last_querySQLを再実行せずに完全な結果を復元します。psqlでは再実行が必要で、DBのCPUを再度消費し、RETURNING句で副作用が再トリガーされるリスクがあります。

  • MCPには直接のネイティブ相当機能がない機能も追加されています: プロジェクトディレクトリにスコープされた接続グループ、ミューテーション時の自動ロールバックスナップショット、クエリ履歴、MCP Resourcesによるスキーマイントロスペクション、ダンプ/リストア。

  • スキーマコンテキストは、関連する場合にレスポンスの最後に追加されます(normal/fullのデフォルトはtrue)。エージェントがすでにスキーマを把握している場合は、include_schema_context: falseで無効にします。

  • 登録された各MCPは、セッションごとに固定オーバーヘッド約300〜600トークンを追加します(命令ブロック+ツール名)。典型的な損益分岐点: セッションあたり1回の実クエリ。

ダンプとリストア

SQL形式での完全なデータベースバックアップ — 構造のみ、または構造+データ。

"Dump the database"
  -> Choose: structure only or full
  -> Choose: all tables or specific ones
  -> SQL file saved to .database-mcp/dumps/

"Restore from the last dump"
  -> Lists available dumps, asks for confirmation, executes

生成されたSQLはDROP TABLE IF EXISTS、FKの無効化/有効化、および方言対応のDDLを処理します。

クエリ履歴

すべてのクエリがプロジェクトごとに、タイムスタンプ、接続、実行時間、結果タイプとともに記録されます。

"What queries did I run today?"
"Show me only mutations"
"History for the prod connection"

接続のエクスポートとインポート

"Export all connections"                    -> JSON with masked passwords
"Export with secrets included"             -> JSON with real credentials
"Import these connections: { ... }"        -> creates missing connections

ツールリファレンス

8カテゴリに33のツール、さらに2つのMCP Resources:

カテゴリ

ツール

接続

conn_create conn_list conn_get conn_set conn_switch conn_rename conn_delete conn_duplicate conn_test conn_export conn_import

11

グループ

conn_group_create conn_group_list conn_group_delete conn_group_add_scope conn_group_remove_scope conn_set_default conn_set_group

7

スキーマ

search_schema

1

クエリ

execute_query execute_mutation explain_query

3

ダンプ

db_dump db_restore db_dump_list

3

ロールバック

rollback_list rollback_apply

2

履歴

history_list history_clear

2

設定

config_get config_set

2

リソース: db://schema · db://tables/{tableName}/schema

ヒント: これらのツールを直接呼び出す必要はありません。やりたいことを説明するだけで、AIが適切なツールを選択します。


ストレージ

ストレージは設計上、2つの場所に分割されています。この分離は意図的であり、実際の問題を解決します: 認証情報はあなたのもの、プロジェクト履歴はプロジェクトのものです。

グローバル: ~/.database-mcp/ — グループ、接続、認証情報、設定。ホームディレクトリに配置されます。プロジェクト内には決して置かれません。gitにも含まれません。明示的にエクスポートしない限り、誰とも共有されません。

プロジェクトごと: {project}/.database-mcp/ — クエリ履歴、ロールバックスナップショット、データベースダンプ。プロジェクトディレクトリ内に配置され、初回書き込み時に自動的に.gitignoreに追加されます。

~/.database-mcp/                          # Global (configurable via DATABASE_MCP_DIR)
├── groups/                               # Connection groups with scopes and defaults
├── connections/                          # Connection configs (credentials, chmod 600)
├── project-conns.json                    # Session-only active connections (cleared on restart)
└── config.json                           # Server config (limits)

{your-project}/.database-mcp/            # Per-project (auto-gitignored)
├── history.json                          # Query history (max 5000)
├── rollbacks.json                        # Pre-mutation snapshots (max 1000)
└── dumps/
    └── {conn}-{timestamp}-{mode}.sql     # Database dumps

結果: プロジェクトリポジトリを自由に共有できます — 共同作業者は履歴とロールバック構造を取得しますが、認証情報はゼロです。彼らはローカルで独自の接続とグループを作成します。

設定

会話から、または環境変数を介して設定可能:

変数

説明

デフォルト

DATABASE_MCP_DIR

グローバルストレージディレクトリ

~/.database-mcp/

DATABASE_MCP_MAX_ROLLBACKS

プロジェクトごとの最大ロールバックスナップショット

1000

DATABASE_MCP_MAX_HISTORY

プロジェクトごとの最大履歴エントリ

5000

"Set max rollbacks to 2000"
"Set max history to 10000"

優先順位: 環境変数 > 保存済み設定 > デフォルト

警告: DATABASE_MCP_DIRをgitリポジトリ内のパスに上書きする場合は、認証情報のプッシュを避けるために.database-mcp/.gitignoreに追加してください。


アーキテクチャ

src/
├── index.ts              # Entry point (StdioServerTransport)
├── server.ts             # createServer() factory
├── tools/                # 33 tool handlers (one file per category)
├── resources/            # MCP Resources (schema auto-discovery)
├── services/             # Business logic
│   ├── connection-manager    # Lazy connect, driver caching
│   ├── schema-introspector   # Multi-dialect introspection (3 detail levels)
│   ├── query-executor        # Read/mutation/explain with safety
│   ├── rollback-manager      # Snapshot capture + reverse SQL
│   ├── history-logger        # Per-project query log
│   └── dump-manager          # Dump/restore (SQL generation)
├── drivers/              # Database adapters (postgres, mysql, sqlite)
├── lib/                  # Types, storage, sanitization
└── utils/                # SQL classifier, parser, formatter
  • ランタイム依存関係ゼロ@modelcontextprotocol/sdkzod以外

  • 厳格なTypeScriptanyなし

  • 動的ドライバー読み込み — 実行時にimport('postgres') / import('mysql2/promise') / import('sql.js')

  • tsupでバンドルして< 60KB

  • ファクトリーパターン — 分離されたテストインスタンス用のcreateServer(storageDir?, projectDir?)


MIT · cocaxcodeによる制作

Install Server
A
license - permissive license
B
quality
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A modular MCP server that enables interaction with multiple database types including PostgreSQL, MySQL, SQLite, Redis, MongoDB, and LDAP. It provides tools for executing queries, managing SQL commands, and exploring database schemas with configurable read-only security.
    29
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An extensible MCP server for database operations that supports PostgreSQL for managing schemas, tables, data, and user permissions. It features automatic migration recording for DDL changes and integrates with various AI-powered editors like Cursor, Zed, and Claude Code.
    22
    2
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A secure multi-database MCP server supporting MySQL, PostgreSQL, and SQLite with read-only enforcement, SQL injection prevention, and tools for schema analysis, performance optimization, and visualization.
    4
  • A
    license
    A
    quality
    D
    maintenance
    A multi-database MCP server supporting MySQL, PostgreSQL, MongoDB, and SQLite with read-only and read-write query capabilities, schema inspection, and SSH tunneling, all without Docker.
    5
    2
    MIT

View all related MCP servers

Related MCP Connectors

  • GibsonAI MCP server: manage your databases with natural language

  • MCP server for managing Prisma Postgres.

  • Butterbase MCP server — manage your backend: schemas, auth, functions, storage, RAG, deploys.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cocaxcode/database-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server