mcpField
P
PostgreSQL MCP Server (Enhanced)

PostgreSQL MCP Server (Enhanced)

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

PostgreSQL MCP Server (Enhanced) について

AI アプリケーションから PostgreSQL を調査・変更するためのサーバーです。読み取り専用クエリに加え、トランザクションによるデータ変更やテーブル、関数、トリガー、インデックスの管理に対応します。

主な機能

  1. 01読み取り専用 SQL クエリの実行
  2. 02トランザクションでの挿入・更新・削除
  3. 03テーブル・関数・トリガーの作成
  4. 04インデックス作成とテーブル変更
  5. 05テーブルスキーマリソースの参照

活用シーン

  1. 01スキーマの確認とレコードの検索
  2. 02トランザクションによるレコード変更
  3. 03テーブル作成やデータベース構造の調整

MCP 対応

MCP サーバーは、PostgreSQL のクエリ・変更ツールと、自動検出されたテーブルスキーマリソースをクライアントに提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"enhanced-postgres": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"build"
]
}
}
}
起動コマンドdocker run -i --rm build

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

パッケージ
ocibuild

ツール

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

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

詳細

PostgreSQL MCP サーバー(拡張版)

PostgreSQL データベースへの読み取りと書き込みの両方のアクセスを提供する、Model Context Protocol サーバーです。このサーバーにより、LLM はデータベーススキーマを調査し、クエリを実行し、データを変更し、データベースのスキーマオブジェクトを作成・変更できます。

注: これは、Anthropic による元の PostgreSQL MCP サーバー の拡張版です。元のサーバーは読み取り専用アクセスを提供しますが、この拡張版では書き込み機能とスキーマ管理機能が追加されています。

コンポーネント

ツール
データクエリ
  • query
    • 接続されたデータベースに対して読み取り専用 SQL クエリを実行します
    • 入力:sql(string):実行する SQL クエリ
    • すべてのクエリは READ ONLY トランザクション内で実行されます
データ変更
  • execute

    • データを変更する SQL 文(INSERT、UPDATE、DELETE)を実行します
    • 入力:sql(string):実行する SQL 文
    • 適切な COMMIT/ROLLBACK 処理を行うトランザクション内で実行されます
  • insert

    • テーブルに新しいレコードを挿入します
    • 入力:
      • table(string):テーブル名
      • data(object):キーが列名、値が挿入するデータであるキーと値のペア
  • update

    • テーブル内のレコードを更新します
    • 入力:
      • table(string):テーブル名
      • data(object):更新するフィールドのキーと値のペア
      • where(string):更新するレコードを特定する WHERE 条件
  • delete

    • テーブルからレコードを削除します
    • 入力:
      • table(string):テーブル名
      • where(string):削除するレコードを特定する WHERE 条件
スキーマ管理
  • createTable

    • 指定された列と制約を含む新しいテーブルを作成します
    • 入力:
      • tableName(string):テーブル名
      • columns(array):名前、型、任意の制約を含む列定義の配列
      • constraints(array):任意のテーブルレベル制約の配列
  • createFunction

    • PostgreSQL の関数/プロシージャを作成します
    • 入力:
      • name(string):関数名
      • parameters(string):関数のパラメーター
      • returnType(string):戻り値の型
      • language(string):言語(plpgsql、sql など)
      • body(string):関数の本体
      • options(string):任意の追加関数オプション
  • createTrigger

    • テーブルにトリガーを作成します
    • 入力:
      • name(string):トリガー名
      • tableName(string):トリガーを適用するテーブル
      • functionName(string):呼び出す関数
      • when(string):BEFORE、AFTER、または INSTEAD OF
      • events(array):イベントの配列(INSERT、UPDATE、DELETE)
      • forEach(string):ROW または STATEMENT
      • condition(string):任意の WHEN 条件
  • createIndex

    • テーブルにインデックスを作成します
    • 入力:
      • tableName(string):テーブル名
      • indexName(string):インデックス名
      • columns(array):インデックスを作成する列
      • unique(boolean):インデックスが一意かどうか
      • type(string):任意のインデックス型(BTREE、HASH、GIN、GIST など)
      • where(string):任意の条件
  • alterTable

    • テーブル構造を変更します
    • 入力:
      • tableName(string):テーブル名
      • operation(string):操作(ADD COLUMN、DROP COLUMN など)
      • details(string):操作の詳細
リソース

サーバーは、データベース内の各テーブルのスキーマ情報を提供します。

  • テーブルスキーマ(postgres://<host>/<table>/schema)
    • 各テーブルの JSON スキーマ情報
    • 列名とデータ型を含みます
    • データベースのメタデータから自動的に検出されます

Claude Desktop での使用方法

このサーバーを Claude Desktop アプリで使用するには、次の設定を claude_desktop_config.json の「mcpServers」セクションに追加します。

Docker
  • macOS で Docker を実行する場合、サーバーがホストネットワーク(例:localhost)で実行されているときは、host.docker.internal を使用してください
  • postgresql URL に postgresql://user:password@host:port/db-name を指定すると、ユーザー名とパスワードを追加できます
  • SSL 証明書の検証を回避する必要がある場合は、?sslmode=no-verify を追加してください
{
  "mcpServers": {
    "postgres": {
      "command": "docker",
      "args": [
        "run", 
        "-i", 
        "--rm", 
        "mcp/postgres", 
        "postgresql://host.docker.internal:5432/mydb"]
    }
  }
}
NPX
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://localhost/mydb"
      ]
    }
  }
}

/mydb をデータベース名に置き換えてください。

使用例

データのクエリ
/query SELECT * FROM users LIMIT 5
データの挿入
/insert table="users", data={"name": "John Doe", "email": "[email protected]"}
データの更新
/update table="users", data={"status": "inactive"}, where="id='123'"
テーブルの作成
/createTable tableName="tasks", columns=[
  {"name": "id", "type": "SERIAL", "constraints": "PRIMARY KEY"}, 
  {"name": "title", "type": "VARCHAR(100)", "constraints": "NOT NULL"},
  {"name": "created_at", "type": "TIMESTAMP", "constraints": "DEFAULT CURRENT_TIMESTAMP"}
]
関数とトリガーの作成
/createFunction name="update_timestamp", parameters="", returnType="TRIGGER", language="plpgsql", body="BEGIN NEW.updated_at = NOW(); RETURN NEW; END;"

/createTrigger name="set_timestamp", tableName="tasks", functionName="update_timestamp", when="BEFORE", events=["UPDATE"], forEach="ROW"

ビルド

Docker:

docker build -t mcp/postgres -f Dockerfile . 

セキュリティに関する考慮事項

  1. すべてのデータ変更操作では、適切な COMMIT/ROLLBACK 処理を伴うトランザクションを使用します
  2. 各操作では、透明性を確保するため、実行された SQL が返されます
  3. サーバーでは、SQL インジェクションを防ぐため、挿入/更新操作にパラメーター化クエリを使用します
  4. セキュリティ修正(v1.0.2):読み取り専用クエリツールでは、複数のステートメントを実行してトランザクション分離を回避する SQL インジェクション攻撃を防ぐため、プリペアドステートメントを使用するようになりました

ライセンス

この MCP サーバーは MIT ライセンスの下でライセンスされています。つまり、MIT ライセンスの利用規約に従うことを条件に、ソフトウェアを自由に使用、変更、配布できます。詳細については、プロジェクトリポジトリ内の LICENSE ファイルをご覧ください。

コメント

MCP は初めてですか?

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

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