PG_MCP_SERVER について
PG_MCP_SERVER は PostgreSQL と PostGIS 向けの汎用 MCP サーバーです。データベース構造を必要とする LLM 向けに、スキーマ情報を事前取得してキャッシュし、Stdio と SSE に対応しています。
主な機能
- 01データベーススキーマの事前取得とキャッシュ
- 02テーブル、列、制約の提供
- 03外部キー、インデックス、空間情報の取得
- 04PostgreSQL と PostGIS に対応
- 05Stdio と SSE のトランスポート
活用シーン
- 01LLM にデータベース構造のコンテキストを提供
- 02テーブル間の関係やインデックスを確認
- 03PostGIS のジオメトリを含むデータベースを扱う
MCP 対応
初期化時に MCP リソースを通じてテーブル名、列、制約、外部キー、インデックス、ジオメトリ情報などを提供し、ツールの説明と入力スキーマでも構造情報を伝えます。Stdio と SSE に対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PG_MCP_SERVER
概要
汎用の PostgreSQL MCP サーバーです。MCP 部分は go-mcp を使用して実装されており、Stdio と SSE のトランスポートをサポートしています。
PostGIS と PgVector の説明は、別のオープンソースプロジェクト https://github.com/stuzero/pg-mcp-server 🙏🙏🙏 から引用しています。 コンテキストを提供するこの方法は新鮮です。
⚠️ SQL インジェクションを防ぐため、データベースにはロールを定義する必要があります。機密データの漏洩を防ぐため、
publicスキーマにSELECT権限を付与してください。 ⚠️ データを分離するため、新しいロールにはtempスキーマのすべての権限を付与してください。
特徴
ローカルで LLM をデプロイする場合、コンテキストを効率的に管理する必要があります。呼び出しのたびにデータベーススキーマを読み込むと、時間と大量のトークンコンテキストを消費します。このプロジェクトでは、前処理のアプローチを採用しています。データベースからテーブル構造を取得する機能を標準で備えており、LLM に説明情報を提供します。
- ツールの説明と入力スキーマを利用して、スキーマ情報を暗黙的または明示的に伝えます。
- 初期化時に MCP リソースを活用して、テーブル名、カラム、制約、外部キー、インデックス、ジオメトリ型、EPSG コードを読み取り、大規模言語モデルの基礎的な理解を作成します。
インストール
main.go の場合:
// Here you can set the connection string for database interaction
schemaLoadConnID, err := dbService.RegisterConnection(tempCtx, "postgres://mcp_user:[email protected]:5432/postgres")
形式は postgres://user:pass@host:port/db です。
または、.env の SCHEMA_LOAD_DB_URL 変数のコメントを解除して設定することでも構成できます。
ここで、RegisterConnection はサーバーに初期接続文字列を渡し、データベースのテーブル情報をキャッシュします。
🏁 専用のサーバーロールを作成することを推奨します。SQL は次のとおりです。
-- Create a new role and set a password
CREATE ROLE mcp_user WITH LOGIN PASSWORD 'mcp123456';
-- Set basic permissions for mcp_user
GRANT CONNECT ON DATABASE postgres TO mcp_user;
GRANT USAGE ON SCHEMA public TO mcp_user;
-- Grant SELECT permission on all existing tables in the public schema
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mcp_user;
-- Automatically grant SELECT on future tables in public schema to mcp_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO mcp_user;
-- Create a temp schema
CREATE SCHEMA temp;
-- Grant all privileges on the temp schema to mcp_user
GRANT USAGE, CREATE ON SCHEMA temp TO mcp_user;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA temp TO mcp_user;
-- Grant all privileges on future tables in temp schema to mcp_user
ALTER DEFAULT PRIVILEGES IN SCHEMA temp
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO mcp_user;
Use code with caution.
実行
- 🐋 Docker で実行
git clone https://github.com/cbc3929/pg_mcp_server.git
cd pg_mcp_server
docker build -t pg-mcp-server:latest .
docker run -d -p 8181:8181 --name my-mcp-server pg-mcp-server:latest
- 🀄 直接実行
- プロジェクトをクローンする
git clone https://github.com/cbc3929/pg_mcp_server.git
cd pg_mcp_server
- 依存関係をインストールする
go mod tidy
または
go mod download
- 直接実行する
必要な環境変数が設定されているか、.env ファイルが存在することを確認してください。
go run ./cmd/server/main.go
- ビルド(任意)
go build -o pg_mcp_server ./cmd/server/main.go
./pg_mcp_server
拡張機能のサポート
PostGIS ✅
PgVector ✅
PgRouting ⭕
TODO / 未完了
tempスキーマ内のテーブル管理:テーブルをクリーンアップ/再利用する仕組みを実装する必要があります。- 単体テスト。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。