PostgreSQL MCP Server について
PostgreSQL MCP Serverは、データベーステーブルの操作、スキーマ確認、SQLクエリ実行を行うMCPサーバーです。YAML設定でテーブル、カラム、CRUD操作へのアクセスを制御します。
主な機能
- 01PostgreSQLへの接続
- 02テーブルのCRUD操作
- 03テーブルとカラムのアクセス制御
- 04スキーマ確認
- 05カスタムSQLの実行
- 06YAMLによる設定
活用シーン
- 01設定済みテーブルのレコード管理
- 02テーブルスキーマの確認
- 03パラメーター付きSQLクエリの実行
MCP 対応
stdioモードで動作し、テーブル一覧、CRUD操作、スキーマ参照、カスタムSQL実行のツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PostgreSQL MCP サーバー
PostgreSQL データベーステーブルに対する CRUD 操作を提供する Model Context Protocol(MCP)サーバーです。
概要
この MCP サーバーを使用すると、指定したテーブルに対する作成、読み取り、更新、削除(CRUD)操作を提供する一連のツールを通じて、PostgreSQL データベースを操作できます。サーバーは FastMCP ライブラリを使用し、stdio モードで実行されるため、さまざまな MCP クライアントと互換性があります。
機能
- PostgreSQL データベースへの接続
- 指定したテーブルに対する CRUD 操作
- テーブルおよび列単位のアクセス制御
- スキーマの検査
- カスタム SQL クエリの実行
- YAML ファイルによる設定
インストール
-
このリポジトリをクローンします。
git clone https://github.com/yourusername/postgresql-mcp.git cd postgresql-mcp -
必要な依存関係をインストールします。
pip install -r requirements.txt
設定
サーバーは config.yaml ファイルを使用して設定します。このファイルには次の内容が含まれます。
- データベース接続の詳細
- 次の内容を含むテーブル設定:
- アクセス可能なテーブル
- 操作が許可される列
- 許可される操作(作成、読み取り、更新、削除)
設定例:
database:
host: localhost
port: 5432
dbname: postgres
user: postgres
password: postgres
tables:
- name: users
allowed_columns:
- id
- name
- email
- created_at
allowed_operations:
- create
- read
- update
- delete
- name: products
allowed_columns:
- id
- name
- price
- description
- category
allowed_operations:
- create
- read
- update
- delete
使用方法
MCP サーバーを実行します。
python postgresql_mcp_server.py
サーバーは stdio モードで起動し、MCP クライアントからのコマンドを受け付けます。
利用可能な MCP ツール
list_tables
設定で利用可能なすべてのテーブルを一覧表示します。
response = list_tables()
create_record
指定したテーブルに新しいレコードを作成します。
response = create_record(
table_name="users",
data={
"name": "John Doe",
"email": "[email protected]"
}
)
read_records
任意のフィルタリングを適用して、指定したテーブルからレコードを読み取ります。
response = read_records(
table_name="users",
filters={"name": "John Doe"},
limit=10,
offset=0
)
update_record
指定したテーブルのレコードを更新します。
response = update_record(
table_name="users",
record_id=1,
data={"email": "[email protected]"},
id_column="id"
)
delete_record
指定したテーブルからレコードを削除します。
response = delete_record(
table_name="users",
record_id=1,
id_column="id"
)
execute_query
カスタム SQL クエリを実行します。
response = execute_query(
query="SELECT * FROM users WHERE age > %s",
params=[18]
)
get_table_schema
特定のテーブルのスキーマ情報を取得します。
response = get_table_schema(table_name="users")
レスポンス形式
すべてのツールは、標準形式でレスポンスを返します。
{
"status": "success",
"message": "Optional message",
"records": [...], // For read operations
"record": {...}, // For create/update operations
"count": 10 // For read operations
}
エラーの場合は次の形式です。
{
"status": "error",
"message": "Error message"
}
セキュリティに関する考慮事項
execute_queryツールでは任意の SQL を実行できるため、セキュリティリスクとなる可能性があります。使用を制限するか、追加の検証を実装することを検討してください。- データベースの認証情報は
config.yamlファイルにプレーンテキストで保存されます。本番環境では、環境変数または安全なシークレット管理ソリューションの使用を検討してください。 - サーバーは設定に基づいてテーブルと列へのアクセスを検証しますが、設定自体の安全性を確保することが重要です。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。