PostgreSQL Full Access MCP Server について
LLM に PostgreSQL データベースへの読み取りと書き込みのアクセスを提供する MCP サーバーです。トランザクション管理と安全制御を備えています。読み取り専用の公式 PostgreSQL MCP サーバーと異なり、データ変更に対応し、より詳細なスキーマ情報を提供します。
主な機能
- 01読み取り専用クエリの実行
- 02DML、DDL、DCL、TCL 文の実行
- 03明示的なコミットとロールバック
- 04ステートメントとトランザクションのタイムアウト
- 05キー、外部キー、インデックスを含むスキーマ情報
活用シーン
- 01確認後に LLM がテーブルを作成しデータを挿入する
- 02自然言語でデータベースの内容を照会する
- 03データモデリング時にテーブル構造を確認する
MCP 対応
execute_query や describe_table などのツールとスキーマのリソースを通じて、PostgreSQL の照会および変更機能を MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PostgreSQL Full Access MCP Server
PostgreSQL データベースへの完全な読み書きアクセスを提供する強力な Model Context Protocol サーバーです。読み取り専用の公式 MCP PostgreSQL サーバーとは異なり、この強化された実装では、適切なトランザクション管理と安全制御のもと、LLM がデータベースの内容を照会するだけでなく変更することもできます。
目次
- 機能
- ツール
- リソース
- Claude Desktop での使用
- 環境変数
- Claude でのデータベースへの完全なアクセスの使用
- セキュリティに関する考慮事項
- Docker
- ライセンス
- 公式 PostgreSQL MCP サーバーとの比較
🌟 機能
完全な読み書きアクセス
- DML 操作(INSERT、UPDATE、DELETE)を安全に実行
- DDL でデータベースオブジェクトを作成、変更、管理
- 明示的なコミットによるトランザクション管理
- 安全のためのタイムアウトと自動ロールバック保護
豊富なスキーマ情報
- 詳細なカラムメタデータ(データ型、説明、最大長、NULL 許容)
- 主キーの識別
- 外部キーの関連
- 型と一意性フラグを含むインデックス情報
- テーブルの行数の推定値
- テーブルとカラムの説明(利用可能な場合)
高度な安全制御
- SQL クエリの分類(DQL、DML、DDL、DCL、TCL)
- 安全なクエリに対する読み取り専用実行の強制
- すべての操作を分離されたトランザクション内で実行
- トランザクションのタイムアウトを自動監視
- 設定可能な安全制限
- 明示的なユーザー確認を伴う2段階のトランザクションコミットプロセス
🔧 ツール
-
execute_query
- 読み取り専用の SQL クエリ(SELECT 文)を実行します
- 入力:
sql(文字列):実行する SQL クエリ - すべてのクエリは読み取り専用トランザクション内で実行されます
- 結果には実行時間の指標とフィールド情報が含まれます
-
execute_dml_ddl_dcl_tcl
- データ変更操作(INSERT、UPDATE、DELETE)またはスキーマ変更(CREATE、ALTER、DROP)を実行します
- 入力:
sql(文字列):実行する SQL 文 - 設定可能なタイムアウトを使用して、自動的にトランザクションでラップされます
- 明示的なコミットに使用するトランザクション ID を返します
- 重要な安全機能:実行後に会話が終了するため、ユーザーはコミットまたはロールバックを決める前に結果を確認できます
-
execute_maintenance
- トランザクション外で VACUUM、ANALYZE、CREATE DATABASE などのメンテナンスコマンドを実行します
- 入力:
sql(文字列):実行する SQL 文。VACUUM、ANALYZE、または CREATE DATABASE である必要があります - 実行時間の指標を含む結果オブジェクトを返します
-
execute_commit
- ID を指定してトランザクションを明示的にコミットします
- 入力:
transaction_id(文字列):コミットするトランザクションの ID - コミットまたはロールバック後のクリーンアップを安全に処理します
- データベースに変更を永続的に適用します
-
execute_rollback
- ID を指定してトランザクションを明示的にロールバックします
- 入力:
transaction_id(文字列):ロールバックするトランザクションの ID - すべての変更を安全に破棄し、リソースをクリーンアップします
- 変更を確認したうえで適用しないと判断する場合に便利です
-
list_tables
- データベース内のすべてのテーブルの包括的な一覧を取得します
- 列数とテーブルの説明が含まれます
- 入力パラメーターは不要です
-
describe_table
- 特定のテーブル構造に関する詳細情報を取得します
- 入力:
table_name(文字列):説明するテーブルの名前 - 主キー、外部キー、インデックス、列の詳細を含む完全なスキーマ情報を返します
📊 リソース
サーバーは、データベーステーブルに関する拡張スキーマ情報を提供します。
- テーブルスキーマ(
postgres://<host>/<table>/schema)- 各テーブルの詳細な JSON スキーマ情報
- 完全な列メタデータ、主キー、制約が含まれます
- データベースメタデータから自動的に検出されます
🚀 Claude Desktop での使用
Claude Desktop との統合
このサーバーを Claude Desktop で使用するには、次の手順に従ってください。
-
まず、Node.js がシステムにインストールされていることを確認します
-
npx を使用してパッケージをインストールするか、プロジェクトに追加します
-
claude_desktop_config.jsonを編集して Claude Desktop を設定します(macOS では通常~/Library/Application Support/Claude/にあります)。
{
"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"
}
}
}
}
- データベース接続文字列を、実際の PostgreSQL 接続情報に置き換えます
- Claude Desktop を完全に再起動します
重要:「一度だけ許可」を使用した安全対策
Claude がデータベースへの変更をコミットしようとすると、Claude Desktop に承認を求めるプロンプトが表示されます。

承認する前に、必ず SQL の変更内容を慎重に確認してください!
安全に使用するためのベストプラクティス:
- コミット操作では、必ず「常に許可」ではなく「一度だけ許可」をクリックします
- 承認する前に、トランザクションの 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)- 1 つの SQL ステートメントを実行できる時間を制限します
- クエリの暴走を防ぐための重要な安全機能です
-
PG_MAX_CONNECTIONS:PostgreSQL の最大接続数(デフォルト:20)- データベースの接続数上限を超えないようにすることが重要です
-
MONITOR_INTERVAL_MS:停滞したトランザクションを確認する頻度(デフォルト:5000)- 通常、調整する必要はありません
🔄 Claude でデータベースへのフルアクセスを使用する
このサーバーを使うと、承認を得たうえで Claude が PostgreSQL データベースの読み取りと書き込みを行えます。会話の例をいくつか紹介します。
例:新しいテーブルの作成とデータの追加
あなた:「id、name、price、inventory の列を持つ新しい products テーブルが必要です」
Claude:データベースを分析してクエリを作成します
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
inventory INTEGER DEFAULT 0
);
Claude Desktop でこの操作の承認を求められます
あなた:内容を確認し、「Allow once」をクリックします
Claude:「products テーブルを作成しました。サンプルデータも追加しますか?」
あなた:「はい、サンプル商品を 5 件追加してください」
Claude:INSERT ステートメントを作成し、承認を求めます 内容を確認し、「Allow once」で承認します
例:安全なクエリによるデータ分析
あなた:「価格が高い順に、上位 3 件の商品を教えてください」
Claude:読み取り専用クエリを自動的に実行します 結果を表示します
安全なワークフロー
データベースを変更する操作には、次の 2 段階の手順が適用されます。これが主な安全機能です。
- Claude がリクエストを分析し、SQL を準備します
- 読み取り専用操作(SELECT)の場合、Claude が自動的に実行します
- 書き込み操作(INSERT、UPDATE、DELETE、CREATE など)の場合:
- Claude がトランザクション内で SQL を実行し、会話を終了します
- 結果を確認します
- 新しい会話で「Yes」と返答するとコミット、「No」と返答するとロールバックされます
- Claude Desktop に変更内容が正確に表示され、許可を求められます
- 特定の操作を許可するには、「Allow once」をクリックします
- Claude が操作を実行し、結果を返します
これにより、変更がデータベースに永続的に適用される前に、複数回確認する機会が得られます。
⚠️ セキュリティに関する注意事項
書き込みアクセスを許可して 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
安全に使用するためのベストプラクティス
-
書き込み操作を確認する際は、必ず「Allow once」を使用してください
- データベースの変更に対して「Always allow」を選択しないでください
- 時間をかけて SQL を慎重に確認してください
-
このツールを初めて試す際は、テスト用データベースに接続してください
- 最初のテストでは、データベースのコピーやバックアップを使用することを検討してください
-
データベースユーザーの権限は、必要なものだけに制限してください
- スーパーユーザーや管理者アカウントの使用は避けてください
- 可能であれば、テーブルごとに権限を付与してください
-
本格的に使用する前に、データベースをバックアップしてください
-
LLM に公開すべきでない機密データを共有しないでください
-
承認する前に、すべての SQL 操作を確認してください
- テーブル名を確認します
- 列名とデータを確認します
- WHERE 句が適切か確認します
- トランザクションが適切に処理されているか確認します
Docker
サーバーは 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:[email protected]:5432/database"
📄 ライセンス
この MCP サーバーは MIT ライセンスの下でライセンスされています。
💡 公式 PostgreSQL MCP サーバーとの比較
| 機能 | このサーバー | 公式 MCP PostgreSQL サーバー |
|---|---|---|
| 読み取りアクセス | ✅ | ✅ |
| 書き込みアクセス | ✅ | ❌ |
| スキーマの詳細 | 強化済み | 基本 |
| トランザクションのサポート | タイムアウト付きで明示的 | 読み取り専用 |
| インデックス情報 | ✅ | ❌ |
| 外部キーの詳細 | ✅ | ❌ |
| 行数の推定 | ✅ | ❌ |
| テーブルの説明 | ✅ | ❌ |
作者
Syahiid Nur Kamil(@syahiidkamil)が作成しました。
Copyright © 2024 Syahiid Nur Kamil. All rights reserved.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。