Enhanced PostgreSQL MCP Server

by GarethCott
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Supports running the PostgreSQL MCP server in a Docker container, with configuration options for connecting to PostgreSQL databases.

  • Provides both read and write access to PostgreSQL databases, allowing for data querying, data modification (insert, update, delete), and schema management (creating tables, functions, triggers, indexes).

PostgreSQL MCP サーバー (拡張版)

PostgreSQLデータベースへの読み取りと書き込みの両方のアクセスを提供するモデルコンテキストプロトコル(LLM)サーバー。このサーバーにより、LLMはデータベーススキーマの検査、クエリの実行、データの変更、データベーススキーマオブジェクトの作成/変更を行うことができます。

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

コンポーネント

ツール

データクエリ

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

データの変更

  • 実行する
    • データを変更するSQL文を実行する(INSERT、UPDATE、DELETE)
    • 入力: sql (文字列): 実行するSQL文
    • 適切な COMMIT/ROLLBACK 処理を伴うトランザクション内で実行される
  • 入れる
    • テーブルに新しいレコードを挿入する
    • 入力:
      • table (文字列): テーブル名
      • data (オブジェクト):キーと値のペア。キーは列名、値は挿入するデータです。
  • アップデート
    • テーブル内のレコードを更新する
    • 入力:
      • table (文字列): テーブル名
      • data (オブジェクト): 更新するフィールドのキーと値のペア
      • where (文字列): 更新するレコードを識別するためのWHERE条件
  • 消去
    • テーブルからレコードを削除する
    • 入力:
      • table (文字列): テーブル名
      • where (文字列): 削除するレコードを識別するためのWHERE条件

スキーマ管理

  • テーブルを作成する
    • 指定された列と制約を持つ新しいテーブルを作成する
    • 入力:
      • tableName (文字列): テーブル名
      • columns (配列): 名前、型、およびオプションの制約を持つ列定義の配列
      • constraints (配列):テーブルレベルの制約のオプションの配列
  • 作成関数
    • PostgreSQL関数/プロシージャを作成する
    • 入力:
      • name (文字列): 関数名
      • parameters (文字列): 関数のパラメータ
      • returnType (文字列): 戻り値の型
      • language (文字列): 言語 (plpgsql、sql など)
      • body (文字列): 関数本体
      • options (文字列): オプションの追加関数オプション
  • トリガーの作成
    • テーブルにトリガーを作成する
    • 入力:
      • name (文字列): トリガー名
      • tableName (文字列): トリガーを適用するテーブル
      • functionName (文字列): 呼び出す関数
      • when (文字列): BEFORE、AFTER、またはINSTEAD OF
      • events (配列): イベントの配列 (INSERT、UPDATE、DELETE)
      • forEach (文字列): ROW または STATEMENT
      • condition (文字列):オプションのWHEN条件
  • インデックス作成
    • テーブルにインデックスを作成する
    • 入力:
      • tableName (文字列): テーブル名
      • indexName (文字列): インデックス名
      • columns (配列): インデックスを付ける列
      • unique (boolean): インデックスがユニークかどうか
      • type (文字列): オプションのインデックスタイプ (BTREE、HASH、GIN、GIST など)
      • where (文字列): オプションの条件
  • 表の変更
    • テーブル構造を変更する
    • 入力:
      • tableName (文字列): テーブル名
      • operation (文字列): 操作 (ADD COLUMN、DROP COLUMN など)
      • details (文字列): 操作の詳細

リソース

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

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

Claude Desktopでの使用

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

ドッカー

  • macOSでdockerを実行する場合、サーバーがホストネットワーク(例:localhost)上で実行されている場合はhost.docker.internalを使用します。
  • ユーザー名/パスワードはpostgresql://user:password@host:port/db-nameのように postgresql の URL に追加できます。
  • 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": "john@example.com"}

データの更新

/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 build -t mcp/postgres -f Dockerfile .

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

  1. すべてのデータ変更操作は、適切なCOMMIT/ROLLBACK処理を伴うトランザクションを使用します。
  2. 各操作は透明性のために実行されたSQLを返します
  3. サーバーは、SQLインジェクションを防ぐために、挿入/更新操作にパラメータ化されたクエリを使用します。

ライセンス

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

-
security - not tested
F
license - not found
-
quality - not tested

PostgreSQL データベースへの読み取りアクセスと書き込みアクセスの両方を提供するモデル コンテキスト プロトコル サーバー。これにより、LLM はデータのクエリ、レコードの変更、データベース スキーマの管理が可能になります。

  1. Components
    1. Tools
    2. Resources
  2. Usage with Claude Desktop
    1. Docker
    2. NPX
  3. Example Usage
    1. Query Data
    2. Insert Data
    3. Update Data
    4. Create a Table
    5. Create a Function and Trigger
  4. Building
    1. Security Considerations
      1. License
        ID: up7bcmit1h