PostgreSQL MCP Server について
PostgreSQL MCP Serverは、MCPクライアントからPostgreSQLを操作・確認するためのインターフェースです。パラメーター化SQL、複数文のトランザクション、テーブルスキーマ取得に対応します。
主な機能
- 01パラメーター化SQLクエリの実行
- 02挿入・更新・削除の実行
- 03複数文トランザクションの実行
- 04テーブルスキーマ情報の取得
- 05クエリパラメーターの安全な処理
活用シーン
- 01条件を指定してPostgreSQLデータを検索
- 02複数の書き込みをトランザクションで実行
- 03テーブルの列と型を確認
MCP 対応
MCP経由でSQL実行、クエリ、トランザクション、スキーマ取得のツールを提供し、PostgreSQL操作を可能にします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PostgreSQL MCP サーバー
これは、PostgreSQL データベースとやり取りするためのインターフェースを提供する Model Context Protocol(MCP)サーバーです。標準化された API を通じて、クエリの実行、データベース操作、トランザクション管理を行えます。
特長
- パラメーター化された入力を使用した SQL クエリの実行
- データベース操作(INSERT、UPDATE、DELETE)の実行
- 複数のステートメントを含むトランザクションの実行
- データベースのスキーマ情報の取得
- SQL インジェクションを防ぐ安全なパラメーター処理
インストール
-
リポジトリをクローンします。
git clone https://github.com/yourusername/postgres-mcp.git cd postgres-mcp -
依存関係をインストールします。
go mod download -
データベース接続を設定します。
cp .env.example .env.envファイルを編集し、PostgreSQL データベースの認証情報を設定します。 -
サーバーをビルドします。
go build -o postgres-mcp -
サーバーを起動します。
./postgres-mcp
使い方
サーバーは、以下の MCP ツールを公開します。
1. execute_tool
単一の SQL ステートメントを実行します。
リクエスト:
{
"statement": "INSERT INTO users(name, email) VALUES($1, $2)",
"arguments": ["Jane Doe", "[email protected]"]
}
レスポンス:
{
"rows affected": 1
}
2. query_tool
SELECT クエリを実行し、結果を返します。
リクエスト:
{
"statement": "SELECT * FROM users WHERE id = $1",
"arguments": [1]
}
レスポンス:
{
"rows": [
{
"id": 1,
"name": "John Doe",
"email": "[email protected]"
}
],
"columns": ["id", "name", "email"],
"rowCount": 1
}
3. transaction_tool
トランザクション内で複数のステートメントを実行します。
リクエスト:
{
"statements": [
"INSERT INTO users(name, email) VALUES($1, $2)",
"INSERT INTO user_roles(user_id, role) VALUES($1, $2)"
],
"arguments": [
["Alice", "[email protected]"],
[1, "admin"]
]
}
レスポンス:
{
"results": [
{
"statement": 0,
"rowsAffected": 1
},
{
"statement": 1,
"rowsAffected": 1
}
]
}
4. schema_tool
テーブルのスキーマ情報を取得します。
リクエスト:
{
"table_name": "users"
}
レスポンス:
{
"table": "users",
"columns": [
{
"name": "id",
"type": "integer",
"nullable": false,
"default": "nextval('users_id_seq'::regclass)"
},
{
"name": "name",
"type": "character varying",
"nullable": false,
"default": null
},
{
"name": "email",
"type": "character varying",
"nullable": false,
"default": null
}
]
}
クライアントの例
MCP クライアントを使用してサーバーとやり取りする方法の例を示します。
package main
import (
"encoding/json"
"fmt"
"log"
"github.com/mark3labs/mcp-go/client"
)
func main() {
// Create a new MCP client
c := client.NewClient("http://localhost:8080")
// Prepare a query request
queryReq := map[string]interface{}{
"statement": "SELECT * FROM users WHERE id = $1",
"arguments": []interface{}{1},
}
// Execute the query
resp, err := c.Execute("query_tool", queryReq)
if err != nil {
log.Fatalf("Failed to execute query: %v", err)
}
// Print the response
prettyJSON, _ := json.MarshalIndent(resp.Data, "", " ")
fmt.Println(string(prettyJSON))
}
セキュリティに関する考慮事項
- SQL インジェクション攻撃を防ぐため、必ずパラメーター化クエリを使用してください。
- データベースユーザーの権限は、必要なものだけに制限してください。
- 本番環境では、データベース接続に SSL/TLS を使用してください。
- MCP サーバーに適切な認証と認可を実装してください。
ライセンス
このプロジェクトは MIT ライセンスの下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。