mcpField
P
Postgres MCP

Postgres MCP

ローカル
github.com/edelciomolinaデータベース520 週間前に更新

Postgres MCP について

Postgres MCPは、LLMクライアント向けに、設定可能なツールを通じてPostgreSQLの調査、クエリ、分析を提供するサーバーです。既定では読み取り専用で、書き込みツールには明示的な選択と環境変数の設定が必要です。

主な機能

  1. 01既定で読み取り専用ツールを有効化
  2. 02スキーマと関係のナレッジグラフ
  3. 03実行前のクエリリスク分類
  4. 04実行時の.envファイルから認証情報を割り当て
  5. 05公開ツールの明示的な選択
  6. 06任意の書き込みとスキーマ操作

活用シーン

  1. 01クエリ前にスキーマと関連テーブルを調査
  2. 02データベースの性能と接続を分析
  3. 03SQL実行前にクエリリスクを確認

MCP 対応

このネイティブMCPサーバーは、PostgreSQLのクエリ、調査、監視、分析、および任意の書き込みツールをMCPクライアントに公開します。`tool=`引数でツールを選択し、書き込みには`POSTGRES_MCP_ALLOW_WRITE=true`の設定が必要です。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"edelciomolina-postgres": {
"command": "npx",
"args": [
"-y",
"@edelciomolina/postgres-mcp"
],
"env": {
"MCP_KEY_HOST": "<MCP_KEY_HOST>",
"MCP_KEY_PORT": "<MCP_KEY_PORT>",
"MCP_KEY_NAME": "<MCP_KEY_NAME>",
"MCP_KEY_USER": "<MCP_KEY_USER>",
"MCP_KEY_PASS": "<MCP_KEY_PASS>",
"MCP_KEY_SSLMODE": "<MCP_KEY_SSLMODE>"
}
}
}
}
起動コマンドnpx -y @edelciomolina/postgres-mcp
設定が必要な環境変数
MCP_KEY_HOSTシークレットName of the .env variable that holds the database host
MCP_KEY_PORTシークレットName of the .env variable that holds the database port
MCP_KEY_NAMEシークレットName of the .env variable that holds the database name
MCP_KEY_USERシークレットName of the .env variable that holds the database user
MCP_KEY_PASSシークレットName of the .env variable that holds the database password
MCP_KEY_SSLMODEシークレットName of the .env variable that holds the SSL mode (e.g. require)

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

パッケージ
npm@edelciomolina/postgres-mcp1.7.0

ツール

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

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

詳細

English | 🌐 Português

Postgres MCP アイコン

Postgres MCP

🔌 PostgreSQL 用のネイティブ MCP サーバーです。実行時に .env から認証情報を読み込み、柔軟なキーのマッピング、設定可能なツール選択、そしてデフォルトで読み取り専用モードを提供します。

npm バージョン ライセンス CI

✨ 機能

ほとんどの LLM は、テーブル名を推測したり、カラム名をでっち上げたり、失敗したり機密データを漏えいさせたりする可能性のあるクエリを作成したりして、データベースとやり取りします。Postgres MCP は、データベースにアクセスする前に実際の構造を把握できるよう、構造化された安全なインターフェースを LLM に提供します。

@modelcontextprotocol/sdk と pg で構築されており、次の機能を提供します。

  • 🧠 セマンティックナレッジグラフ - 実際のスキーマから構築された、スキーマ、テーブル、カラム、外部キー、推定されるリレーション、リスクレベル、業務ドメインの完全なマップを LLM が利用できます。推測で作られたものではありません
  • 🛡️ デフォルトで読み取り専用 - 明示的に有効にしない限り、書き込み、DDL、任意の SQL は実行されません。pg_classify_query_risk を使うと、クエリを実行する前に安全性を確認できます
  • 🔐 実行時の認証情報解決 - 起動時に .env から認証情報を読み込みます。機密情報を mcp.json に保存する必要はありません
  • 🎯 明示的なツール選択 - tool=<name> 引数を使って各ツールを個別に有効化するため、LLM には公開するものだけが表示されます

📋 必要条件

  • ⚙️ Node.js >= 18
  • 📄 データベース認証情報を記載した .env ファイル(プロジェクトツリー内の任意の場所。詳しくは .env ファイルの検出を参照)

🚀 インストール

このパッケージの利用方法は 2 通りあります。ワークフローに最適な方法を選んでください。

オプション 1 - インストール不要(npx を使用。クイックスタートにおすすめ)

インストールは不要です。npx が必要に応じてパッケージをダウンロードして実行します。確認プロンプトをスキップするには、最初の引数に -y を追加してください。

{
  "servers": {
    "Postgres Tools": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@edelciomolina/postgres-mcp"
      ],
      "env": {
        "MCP_KEY_HOST":    "DB_HOST",
        "MCP_KEY_PORT":    "DB_PORT",
        "MCP_KEY_NAME":    "DB_NAME",
        "MCP_KEY_SSLMODE": "DB_SSLMODE",
        "MCP_KEY_USER":    "DB_USER",
        "MCP_KEY_PASS":    "DB_PASS"
      }
    }
  }
}

これにより、デフォルトの読み取り専用ツールセットでサーバーが起動します。tool= 引数は不要です。書き込み可能なツールを有効にする方法については、書き込み可能なツールを参照してください。

💡 Supabase、Neon、Railway など、接続文字列のみを提供するプラットフォームを使用していますか? MCP_KEY_URL を DATABASE_URL(またはプラットフォームで使用されている変数名)に指定してください。サーバーは URL を優先し、個別の変数は無視します。詳しくはURL を使った接続を参照してください。


オプション 2 - VS Code からインストール(MCP 拡張機能マーケットプレイス)

VS Code では、ターミナルを使わずに、エディターから MCP サーバーを直接検索してインストールできます。

  1. コマンドパレットを開きます(Mac では Cmd+Shift+P、Windows/Linux では Ctrl+Shift+P)。
  2. MCP: Add Server を実行します。
  3. 「Browse MCP Servers」(または、VS Code のバージョンによっては 「From registry」)を選択します。
  4. postgres-mcp または edelciomolina を検索します。
  5. Postgres MCP を選択し、手順に従います。VS Code によって mcp.json にエントリが自動的に追加されます。

💡 MCP サーバーのパネルは、Copilot のチャットアイコン → MCP サーバーの管理から開くこともできます。いつでもサーバーを検索、有効化、無効化できます。

インストール後、生成された .vscode/mcp.json のエントリを編集し、以下の使用方法セクションに示すように、tool= 引数と env キーのマッピングを追加してください。


🚀 VS Code での使用方法(mcp.json)

読み取り専用(デフォルト - tool= 引数は不要です):

{
  "servers": {
    "Postgres Tools": {
      "type": "stdio",
      "command": "npx",
      "args": ["@edelciomolina/postgres-mcp"],
      "env": {
        "MCP_KEY_HOST":    "DB_HOST",
        "MCP_KEY_PORT":    "DB_PORT",
        "MCP_KEY_NAME":    "DB_NAME",
        "MCP_KEY_SSLMODE": "DB_SSLMODE",
        "MCP_KEY_USER":    "DB_USER",
        "MCP_KEY_PASS":    "DB_PASS"
      }
    }
  }
}

書き込みツールを使用する場合(明示的なオプトインが必要です):

{
  "servers": {
    "Postgres Tools": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "@edelciomolina/postgres-mcp",
        "tool=pg_manage_schema",
        "tool=pg_manage_indexes"
      ],
      "env": {
        "POSTGRES_MCP_ALLOW_WRITE": "true",
        "MCP_KEY_HOST":    "DB_HOST",
        "MCP_KEY_PORT":    "DB_PORT",
        "MCP_KEY_NAME":    "DB_NAME",
        "MCP_KEY_SSLMODE": "DB_SSLMODE",
        "MCP_KEY_USER":    "DB_USER",
        "MCP_KEY_PASS":    "DB_PASS"
      }
    }
  }
}

⚠️ 書き込み可能なツールを使用するには、env に POSTGRES_MCP_ALLOW_WRITE=true が必要です。設定されていない場合、サーバーは起動時に終了します。

プロジェクトのルートにある対応する .env ファイル:

DB_HOST=db.your-project.supabase.co
DB_PORT=5432
DB_NAME=postgres
DB_SSLMODE=require
DB_USER=readonly_user
DB_PASS=your_password

⚙️ mcp.json の設定方法

🗝️ env - 認証情報キーのマッピング

env ブロックには、実際の認証情報は含まれません。各 MCP_KEY_* を、.env ファイル内の変数名に対応付けます。

env のキー対応する .env の変数値の例
MCP_KEY_URLDATABASE_URLpostgresql://user:pass@host:5432/db?sslmode=require
MCP_KEY_HOSTDB_HOSTdb.example.supabase.co
MCP_KEY_PORTDB_PORT5432
MCP_KEY_NAMEDB_NAMEpostgres
MCP_KEY_SSLMODEDB_SSLMODErequire
MCP_KEY_USERDB_USERreadonly_user
MCP_KEY_PASSDB_PASSsecret

優先順位: MCP_KEY_URL(または DATABASE_URL)が設定されている場合、サーバーは URL を直接使用し、個別の認証情報キーを無視します。

この間接的なマッピングにより、.env では任意の変数名を使用できます。命名規則の異なる複数のサービス間で .env を共有する場合に便利です。

🔧 args - tool= プレフィックスによるツールの選択

有効にする MCP ツールはそれぞれ、tool=<name> の形式で個別の引数として宣言します。

"args": [
  "-y",
  "@edelciomolina/postgres-mcp",
  "tool=pg_manage_schema",
  "tool=pg_manage_indexes"
]

これにより、ツールの一覧を mcp.json で直接明示的に記述し、監査可能にできます。隠れた設定ファイルはありません。🔍


🔗 URL による接続(DATABASE_URL)

個別の認証情報に加えて、Supabase、Neon、Railway などのプラットフォームで標準的な形式の完全な接続文字列を指定できます。

.env:

DATABASE_URL=postgresql://user:password@host:5432/database?sslmode=require

mcp.json:

{
  "servers": {
    "Postgres Tools": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@edelciomolina/postgres-mcp"],
      "env": {
        "MCP_KEY_URL": "DATABASE_URL"
      }
    }
  }
}

MCP_KEY_URL でマッピングされた変数は、他のキー(MCP_KEY_HOST、MCP_KEY_PORT など)よりも優先されます。URL が設定されている場合、他の変数は無視されます。

プラットフォームで異なる名前(例:DB_URL)が使われている場合は、マッピングを変更してください。

"MCP_KEY_URL": "DB_URL"

🛡️ 読み取り専用がデフォルトの理由

すべての tool= 引数を省略すると、サーバーは厳選された読み取り専用セットで起動します。データを取得、分析、説明できるツールのみが含まれ、データを変更するツールは含まれません。

✅ デフォルトで含まれるツール(読み取り専用):

pg_execute_query       pg_manage_query        pg_inspect_schema
pg_get_setup_instructions                     pg_analyze_database
pg_monitor_database                           pg_debug_database
pg_inspect_database_graph                     pg_describe_table_semantics
pg_find_related_tables                        pg_classify_query_risk

💡 pg_execute_query は、データベースに問い合わせる前に、INSERT、UPDATE、DELETE、DDL、ANALYZE、VACUUM、EXPLAIN ANALYZE、その他の書き込み/メンテナンスコマンドを拒否します。

💡 pg_inspect_schema は、読み取り専用のスキーマ調査(get_info、get_enums)を提供します。DDL 操作には、明示的にオプトインして pg_manage_schema を使用してください。

⚠️ デフォルトでは除外されます。使用するには tool= 引数と POSTGRES_MCP_ALLOW_WRITE=true の両方が必要です:

ツール操作
pg_manage_schemaCREATE TABLE、ALTER TABLE、CREATE TYPE
pg_manage_indexesCREATE INDEX、DROP INDEX、REINDEX
pg_manage_constraintsADD CONSTRAINT、DROP CONSTRAINT
pg_manage_functionsCREATE FUNCTION、DROP FUNCTION
pg_manage_triggersCREATE TRIGGER、DROP TRIGGER、有効化/無効化
pg_manage_rlsRLS の有効化/無効化、CREATE/ALTER/DROP POLICY
pg_manage_usersCREATE/DROP/ALTER USER、GRANT、REVOKE
pg_execute_mutationINSERT / UPDATE / DELETE / UPSERT
pg_execute_sqlトランザクションをサポートする任意の SQL

📍 .env ファイルの検出

サーバーは次の順序で .env ファイルを解決します。

  1. env-file=<path> 引数 - cwd からの相対パス。何よりも優先されます
  2. 上位ディレクトリの検索 - cwd から始めて、.env が見つかるかファイルシステムのルートに達するまで、各親ディレクトリを検索します

.env が見つからない場合、サーバーは明確なエラーメッセージを表示して終了します。

モノレポとサブフォルダー

VS Code が MCP プロセスを起動するとき、cwd は通常、ワークスペースのルートです。.env がサブフォルダー(例:functions/.env)にある場合は、env-file= を使って明示的に指定してください:

{
  "servers": {
    "Postgres Tools": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@edelciomolina/postgres-mcp",
        "env-file=functions/.env"
      ],
      "env": {
        "MCP_KEY_HOST":    "DB_HOST",
        "MCP_KEY_PORT":    "DB_PORT",
        "MCP_KEY_NAME":    "DB_NAME",
        "MCP_KEY_SSLMODE": "DB_SSLMODE",
        "MCP_KEY_USER":    "DB_USER",
        "MCP_KEY_PASS":    "DB_PASS"
      }
    }
  }
}

💡 上位ディレクトリの検索により、一般的なケースは自動的に処理されます。明示的に制御する必要がある場合(CI、モノレポ、Docker のバインドマウント)は、env-file= を使用してください。


🧰 利用可能なツール

読み取り専用(デフォルトで有効)
ツール説明
pg_execute_query書き込みおよび複数ステートメントのガード付き SELECT / COUNT / EXISTS
pg_manage_queryEXPLAIN プラン、遅いクエリの分析、pg_stat_statements
pg_inspect_schemaスキーマ情報と ENUM 型(読み取り専用の調査)
pg_get_setup_instructionsプラットフォームごとのセットアップ手順
pg_analyze_databaseパフォーマンス、設定、ストレージの分析
pg_monitor_database接続、クエリ、ロック、レプリケーションのリアルタイム監視
pg_debug_database接続、ロック、パフォーマンス、レプリケーションの診断
pg_inspect_database_graphデータベースの完全なナレッジグラフを構築します。スキーマ、テーブル、列、FK、インデックス、推定された関連、ビジネスドメインが含まれます
pg_describe_table_semantics意味的なコンテキストを含めてテーブルを説明します。リスクレベル、列の役割、機密列、関連テーブルが含まれます
pg_find_related_tables明示的な FK と推定された命名パターンを使って、指定したテーブルに関連するテーブルを検索し、経路を説明します
pg_classify_query_riskクエリを実行せずにリスク(safe / warning / review / blocked)を分類します
書き込み可能(tool= 引数と POSTGRES_MCP_ALLOW_WRITE=true によるオプトイン)
ツール説明
pg_manage_schemaスキーマ情報、テーブルの作成・変更、ENUM の管理
pg_manage_indexesインデックスの一覧表示、作成、削除、再インデックス、使用状況の分析
pg_manage_constraints制約と外部キーの一覧表示、作成、削除
pg_manage_functions関数とプロシージャの一覧表示、作成、削除
pg_manage_triggersトリガーの一覧表示、作成、削除、有効化・無効化
pg_manage_rls行レベルセキュリティポリシー
pg_manage_usersユーザー権限、ユーザーの作成・削除・変更、権限の付与・取り消し
pg_execute_mutationパラメーター化クエリによる INSERT / UPDATE / DELETE / UPSERT
pg_execute_sql任意の SQL 実行(トランザクションのサポートは任意)

🧠 セマンティックレイヤー

4 つの pg_*_graph / pg_*_semantics / pg_*_risk ツールは、実行時にデータベースのインメモリナレッジグラフを構築します。これにより、LLM はスキーマ、テーブル、列、外部キー、推論された関連性、リスクレベル、ビジネスドメインを含む構造化されたマップを利用できます。データに対するクエリは一切実行されません。

推論されたフィールド(列の意味的な役割、テーブルの推定型、推論された関連性)にはすべて明確なタグが付けられるため、LLM はスキーマ上の事実ではなく、ヒントとして扱うことができます。

オプション設定(mcp-config.json)

セマンティックレイヤーとセキュリティ制限を調整するには、.env の隣に mcp-config.json ファイルを配置します。すべてのフィールドは任意です。ファイルを省略すると、安全なデフォルト設定が適用されます。

{
  "security": {
    "defaultLimit": 100,
    "maxLimit": 1000,
    "blockedSchemas": ["pg_catalog", "information_schema"],
    "blockedTables": [],
    "requireLimit": true
  },
  "semanticLayer": {
    "enabled": true,
    "inferRelationsWithoutForeignKeys": true,
    "inferBusinessEntities": true,
    "sensitiveKeywords": ["password", "secret", "token", "api_key", "ssn", "hash"]
  }
}

🏗️ アーキテクチャ

MCP クライアント、プロキシ、PostgreSQL 間の通信フローを詳しく確認するには、完全なシーケンス図を含む ARCHITECT.md を参照してください。


📄 ライセンス

MIT © Edelcio Molina

コメント

MCP は初めてですか?

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

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