PostgreSQL MCP サーバ(ローカル DB)

@modelcontextprotocol/server-postgres 経由で Claude や Cursor をローカル PostgreSQL に接続し、スキーマの読み取りと SELECT クエリを可能にします。

Presets

詳細な説明

PostgreSQL サーバ:読み取り専用 SQL

postgres サーバはモデルにスキーマ調査(pg_catalog.pg_tables)と SELECT クエリを許可します。設計上、INSERT / UPDATE / DELETE / DDL は 許可されません。慣例として読み取り専用ロールを指す形で設定します。

設定

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://readonly:secret@localhost:5432/myapp"
      ]
    }
  }
}

読み取り専用ロールの作成

接続文字列は URI に資格情報を含むので、superuser を再利用せず専用ロールを作ります。psql で:

CREATE ROLE mcp_readonly WITH LOGIN PASSWORD 'secret';
GRANT CONNECT ON DATABASE myapp TO mcp_readonly;
GRANT USAGE ON SCHEMA public TO mcp_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_readonly;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO mcp_readonly;

最後の行は、後から追加するテーブルにも自動で SELECT 権限を付与する設定です。これがないと新規テーブルがモデルのスキーマダンプに表示されません。

接続文字列の構造

postgresql://USER:PASSWORD@HOST:PORT/DATABASE — URI スキームです。postgres サーバはこれをそのまま libpq に渡すため、?sslmode=require?application_name=claude-mcp といった標準オプションをクエリ文字列として追加できます。

安全上の注意

接続文字列はシークレットです。ジェネレーターはこれを検知してシークレット警告バナーを表示します。claude_desktop_config.json を git にコミットしないでください。資格情報のローテーションについては PostgreSQL 読み取り専用セットアップ を参照してください。

ユースケース

ローカル開発中に「今週のサインアップ数は?」「orders テーブルのスキーマを見せて」を実 DB に対して答えさせ、しかも誤ってテーブルを drop されないようにする用途です。

試してみる — MCP Server Config Generator

フルツールを開く