PostgreSQL Advanced MCP Server

by syahiidkamil
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Provides advanced database interaction capabilities for PostgreSQL, including detailed schema inspection with metadata, read-only query execution with safety checks, and tools for exploring database structure while enforcing security constraints.

PostgreSQL フルアクセス MCP サーバー

PostgreSQLデータベースへの完全な読み書きアクセスを提供する強力なモデルコンテキストプロトコル(MCP)サーバーです。読み取り専用の公式MCP PostgreSQLサーバーとは異なり、この強化された実装により、大規模言語モデル(LLM)は適切なトランザクション管理と安全制御により、データベースコンテンツのクエリと変更の両方を実行できます。

目次

🌟 特徴

完全な読み取り/書き込みアクセス

  • DML操作(INSERT、UPDATE、DELETE)を安全に実行する
  • DDL を使用してデータベース オブジェクトを作成、変更、管理する
  • 明示的なコミットによるトランザクション管理
  • 安全タイムアウトと自動ロールバック保護

豊富なスキーマ情報

  • 詳細な列メタデータ(データ型、説明、最大長、NULL 値可能性)
  • 主キーの識別
  • 外部キー関係
  • タイプと一意性フラグを含むインデックス情報
  • 表の行数の推定
  • 表と列の説明(利用可能な場合)

高度な安全制御

  • SQL クエリ分類 (DQL、DML、DDL、DCL、TCL)
  • 安全なクエリのための読み取り専用実行の強制
  • すべての操作は独立したトランザクションで実行される
  • 自動トランザクションタイムアウト監視
  • 設定可能な安全制限
  • 明示的なユーザー確認を伴う2段階のトランザクションコミットプロセス

🔧 ツール

  • クエリ実行
    • 読み取り専用SQLクエリ(SELECT文)を実行する
    • 入力: sql (文字列): 実行するSQLクエリ
    • すべてのクエリは読み取り専用トランザクション内で実行されます
    • 結果には実行時間のメトリックとフィールド情報が含まれます
  • 実行_dml_ddl_dcl_tcl
    • データ変更操作(INSERT、UPDATE、DELETE)またはスキーマ変更(CREATE、ALTER、DROP)を実行する
    • 入力: sql (文字列): 実行するSQL文
    • タイムアウトを設定できるトランザクションに自動的にラップされます
    • 明示的なコミットのトランザクションIDを返します
    • 重要な安全機能: 実行後に会話は終了し、ユーザーはコミットまたはロールバックを決定する前に結果を確認できます。
  • 実行コミット
    • IDでトランザクションを明示的にコミットする
    • 入力: transaction_id (文字列): コミットするトランザクションのID
    • コミットまたはロールバック後のクリーンアップを安全に処理します
    • データベースへの変更を永続的に適用します
  • 実行ロールバック
    • IDでトランザクションを明示的にロールバックする
    • 入力: transaction_id (文字列): ロールバックするトランザクションのID
    • すべての変更を安全に破棄し、リソースをクリーンアップします
    • 変更を確認し、適用しないことを決定するときに役立ちます
  • リストテーブル
    • データベース内のすべてのテーブルの包括的なリストを取得します
    • 列数とテーブルの説明が含まれています
    • 入力パラメータは不要
  • テーブルの説明
    • 特定のテーブル構造に関する詳細情報を取得する
    • 入力: table_name (文字列): 記述するテーブルの名前
    • 主キー、外部キー、インデックス、列の詳細を含む完全なスキーマ情報を返します。

📊 リソース

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

  • テーブルスキーマ( postgres://<host>/<table>/schema )
    • 各テーブルの詳細なJSONスキーマ情報
    • 完全な列メタデータ、主キー、制約が含まれます
    • データベースのメタデータから自動的に検出

🚀 Claude Desktop での使用

クロードデスクトップ統合

このサーバーを Claude Desktop で使用するには、次の手順に従います。

  1. まず、システムにNode.jsがインストールされていることを確認してください
  2. npxを使用してパッケージをインストールするか、プロジェクトに追加します
  3. claude_desktop_config.json (通常、macOS では~/Library/Application Support/Claude/にあります) を編集して、Claude Desktop を構成します。
{ "mcpServers": { "postgres-full": { "command": "npx", "args": [ "-y", "mcp-postgres-full-access", "postgresql://username:password@localhost:5432/database" ], "env": { "TRANSACTION_TIMEOUT_MS": "60000", "MAX_CONCURRENT_TRANSACTIONS": "5", "PG_STATEMENT_TIMEOUT_MS": "30000" } } } }
  1. データベース接続文字列を実際のPostgreSQL接続詳細に置き換えます。
  2. Claude Desktopを完全に再起動します

重要: 安全のために「一度だけ許可」を使用する

Claude がデータベースに変更をコミットしようとすると、Claude Desktop は承認を求めます。

承認する前に、必ず SQL の変更を慎重に確認してください。

安全のためのベストプラクティス:

  • コミット操作では必ず「1回許可」をクリックしてください(「常に許可」ではありません)。
  • 承認する前にトランザクションSQLを注意深く確認してください
  • 権限が制限されたデータベースユーザーの使用を検討する
  • このサーバーを初めて試すときは、可能であればテストデータベースを使用してください。

この「一度許可する」アプローチにより、データベースへの不要な変更を完全に防止しながら、必要に応じて Claude がデータ管理タスクを支援できるようになります。

⚙️ 環境変数

Claude Desktop 構成の環境変数を使用して、サーバーの動作をカスタマイズできます。

"env": { "TRANSACTION_TIMEOUT_MS": "60000", "MAX_CONCURRENT_TRANSACTIONS": "5" }

主要な環境変数:

  • TRANSACTION_TIMEOUT_MS : トランザクションタイムアウト(ミリ秒)(デフォルト: 15000)
    • 取引にさらに時間が必要な場合は、この値を増やしてください
    • この時間を超過した取引は安全のため自動的にロールバックされます
  • MAX_CONCURRENT_TRANSACTIONS : 最大同時トランザクション数(デフォルト: 10)
    • より保守的な操作を行うにはこの数値を下げます
    • 値が大きいほど、同時書き込み操作が増える
  • ENABLE_TRANSACTION_MONITOR : トランザクションモニターの有効化/無効化 ("true" または "false、デフォルト: "true")
    • 放棄されたトランザクションを監視し、自動的にロールバックします
    • 無効化する必要はほとんどありません
  • PG_STATEMENT_TIMEOUT_MS : SQLクエリ実行タイムアウト(ミリ秒)(デフォルト: 30000)
    • 単一のSQL文の実行時間を制限します
    • クエリの暴走を防ぐための重要な安全機能
  • PG_MAX_CONNECTIONS : PostgreSQL接続の最大数(デフォルト: 20)
    • データベースの接続制限内に留まることが重要
  • MONITOR_INTERVAL_MS : スタックしたトランザクションをチェックする頻度(デフォルト: 5000)
    • 通常は調整の必要はありません

🔄 Claude によるフルデータベースアクセスの使用

このサーバーにより、Claude はお客様の承認を得て、PostgreSQL データベースの読み取りと書き込みの両方を実行できます。以下に会話フローの例を示します。

例: 新しいテーブルの作成とデータの追加

あなた: 「ID、名前、価格、在庫の列を持つ新しい製品テーブルが必要です」

クロード:データベースを分析してクエリを作成します

CREATE TABLE products ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, price DECIMAL(10,2) NOT NULL, inventory INTEGER DEFAULT 0 );

Claude Desktopは、この操作を承認するように要求します

あなた:確認して「一度許可」をクリックします

クロード: 「製品テーブルを作成しました。サンプルデータを追加しましょうか?」

あなた:「はい、サンプル商品を5つ追加してください」

クロード: INSERT ステートメントを作成し、承認を求めます。 「一度許可」で確認して承認します。

例: 安全なクエリによるデータ分析

あなた: 「価格順に上位 3 つの製品は何ですか?」

クロード:読み取り専用クエリを自動的に実行し、 結果を表示します

安全ワークフロー

重要な安全機能は、データベースを変更するすべての操作に対して 2 段階のアプローチを採用していることです。

  1. クロードはリクエストを分析し、SQLを準備します
  2. 読み取り専用操作(SELECT)の場合、Claudeは自動的に実行します。
  3. 書き込み操作 (INSERT、UPDATE、DELETE、CREATE など) の場合:
    • クロードはトランザクション内でSQLを実行し、会話を終了します。
    • 結果を確認する
    • 新しい会話では、コミットするには「はい」、ロールバックするには「いいえ」と応答します。
    • Claude Desktopは変更される内容を正確に表示し、許可を求めます
    • 特定の操作を許可するには、「一度許可」をクリックします
    • クロードは操作を実行し、結果を返します

これにより、変更がデータベースに永続的に適用される前に、変更を検証する機会が複数回得られます。

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

書き込みアクセス権を使用して Claude をデータベースに接続する場合:

データベースユーザー権限

**重要:**適切な権限を持つ専用のデータベース ユーザーを作成します。

-- Example of creating a restricted user (adjust as needed) CREATE USER claude_user WITH PASSWORD 'secure_password'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_user; GRANT INSERT, UPDATE, DELETE ON TABLE table1, table2 TO claude_user; -- Only grant specific permissions as needed

安全な使用のためのベストプラクティス

  1. 各書き込み操作を確認するには、常に「1回許可」を使用してください。
    • データベースの変更に対して「常に許可」を選択しないでください
    • 時間をかけてSQLを注意深く確認してください
  2. このツールを初めて使用するときは**、テストデータベースに接続してください**
    • 初期テストにはデータベースのコピー/バックアップの使用を検討してください
  3. データベースユーザーの権限を必要なものだけに制限する
    • スーパーユーザーまたは管理者アカウントの使用を避ける
    • 可能な場合はテーブル固有の権限を付与する
  4. 広範囲に使用する前にデータベースのバックアップを実施する
  5. LLMに公開すべきでない機密データを決して共有しないでください
  6. 承認する前にすべてのSQL操作を検証する
    • テーブル名を確認する
    • 列名とデータを検証する
    • WHERE句が適切であることを確認する
    • 適切な取引処理を探す

ドッカー

サーバーは Docker コンテナ内で簡単に実行できます。

# Build the Docker image docker build -t mcp-postgres-full-access . # Run the container docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host:5432/database"

macOS 上の Docker の場合、host.docker.internal を使用してホスト ネットワークに接続します。

docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host.docker.internal:5432/database"

📄 ライセンス

この MCP サーバーは MIT ライセンスに基づいてライセンスされます。

💡 公式PostgreSQL MCPサーバーとの比較

特徴このサーバー公式MCP PostgreSQLサーバー
読み取りアクセス
書き込みアクセス
スキーマの詳細強化された基本
トランザクションサポートタイムアウト付きの明示的な読み取り専用
インデックス情報
外部キーの詳細
行数の見積もり
表の説明

著者

作成者: Syahiid Nur Kamil ( @syahiidkamal )


著作権 © 2024 Syahiid Nur Kamil. All rights reserved.

ID: y2webxuhv3