PostgreSQL MCP Server について
PostgreSQL MCP Serverは、AIアシスタントがPostgreSQLの検索やデータ更新、テーブル管理を行うためのGo製MCPサーバーです。読み取りと書き込みを別々のツールに分け、複数の通信方式に対応しています。
主な機能
- 01SELECTクエリを実行
- 02INSERT、UPDATE、DELETEを実行
- 03テーブルを作成・一覧表示
- 04SQL実行計画を分析
- 053種類の通信方式に対応
活用シーン
- 01PostgreSQLのデータを検索
- 02データベースのレコードを追加・更新
- 03クエリの実行計画を確認
MCP 対応
クエリ、書き込み、テーブル作成・一覧表示、実行計画分析のツールをMCPクライアントに公開します。stdio、SSE、streamableHttpに対応しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
PostgreSQL MCP サーバー
中文 | English
PostgreSQL データベースを操作するためのツールを提供する Model Context Protocol(MCP)サーバーです。AI アシスタントが MCP プロトコルを介して SQL クエリの実行、ステートメントの説明、テーブルの作成、データベーステーブルの一覧表示を行えるようにします。
✨ 特長
- AI によるデータベース操作: LLM が構造化されたプロトコルを通じてデータベース操作を実行できるようにします。
- 安全なツールセット: 読み取り操作と書き込み操作を、個別に承認できるツール(
read_query、write_query)に分離します。 - スキーマ管理: テーブルの作成(
create_table)と一覧表示(list_tables)ができます。 - クエリ分析: クエリの実行計画を分析するツールを提供します(
explain_query)。 - 複数のトランスポートモード:
stdio、Server-Sent Events(sse)、streamableHttpに対応し、クライアントと柔軟に連携できます。 - 環境変数による設定:
.envファイルを使って簡単に設定できます。
🛠️ 利用可能なツール
サーバーは、MCP クライアントが呼び出せる次のツールを公開します。
| ツール名 | 説明 | パラメーター |
|---|---|---|
read_query | SELECT SQL クエリを実行します。 | query(string、必須):実行する SELECT ステートメント。 |
write_query | INSERT、UPDATE、または DELETE SQL クエリを実行します。 | query(string、必須):実行する INSERT/UPDATE/DELETE ステートメント。 |
create_table | CREATE TABLE SQL ステートメントを実行します。 | schema(string、必須):CREATE TABLE ステートメント。 |
list_tables | データベース内のユーザーが作成したすべてのテーブルを一覧表示します。 | schema(string、任意):テーブルを絞り込むスキーマ名。 |
explain_query | 指定された SQL クエリの実行計画を返します。 | query(string、必須):説明対象のクエリ(EXPLAIN で始まる必要があります)。 |
🚀 クイックスタート
前提条件
- Go 1.23 以降
- PostgreSQL データベースサーバー
インストール
-
リポジトリをクローンします。
git clone https://github.com/leixiaotian1/pgsql-mcp-server.git cd pgsql-mcp-server -
依存関係をインストールします。
go mod download -
MCP サーバーをビルドします。
go build -o pgsql-mcp-server
設定
pg-mcp-server では、環境変数を使ってデータベースの接続情報を指定する必要があります。プロジェクトのルートに .env ファイルを作成し、次の変数を設定します。
DB_HOST=localhost # PostgreSQL server host
DB_PORT=5432 # PostgreSQL server port
DB_NAME=postgres # Database name
DB_USER=your_username # Database user
DB_PASSWORD=your_pass # Database password
DB_SSLMODE=disable # SSL mode (disable, require, verify-ca, verify-full)
SERVER_MODE=stdio # Server mode (stdio, sse, streamableHttp)
使用方法
サーバーの実行
./pgsql-mcp-server
MCP の設定
このサーバーを MCP 対応の AI アシスタントで使用するには、MCP の設定に以下を追加します。
{
"mcpServers": {
"pgsql-mcp-server": {
"command": "/path/to/pgsql-mcp-server",
"args": [],
"env": {
"DB_HOST": "localhost",
"DB_PORT": "5432",
"DB_NAME": "postgres",
"DB_USER": "your_username",
"DB_PASSWORD": "your_password",
"DB_SSLMODE": "disable",
"SERVER_MODE": "stdio"
},
"disabled": false,
"autoApprove": []
}
}
}
Docker のデプロイ
クリックして Docker のデプロイガイドを展開
前提条件
- Docker がインストールされていること
デプロイ手順
-
プロジェクトをクローンする
git clone https://github.com/leixiaotian1/pgsql-mcp-server.git cd pgsql-mcp-server -
.envファイルを設定するプロジェクトのルートディレクトリに
.envファイルを作成します。このファイルにはデータベース接続情報を保存します。DB_HOSTの値が、後で起動するデータベースコンテナ名と一致していることを確認してください。DB_HOST=postgres DB_PORT=5432 DB_NAME=postgres DB_USER=user DB_PASSWORD=password DB_SSLMODE=disable SERVER_MODE=sse -
Docker ネットワークを作成する
アプリケーションコンテナとデータベースコンテナ間の通信を可能にするため、共有 Docker ネットワークを作成します。このコマンドは一度だけ実行する必要があります。
docker network create sql-mcp-network -
PostgreSQL データベースコンテナを起動する
このコマンドを使って PostgreSQL コンテナを起動し、ネットワークに接続します。
注意:
--name postgres:コンテナ名です。.envファイルのDB_HOSTと完全に一致させる必要があります。--network sql-mcp-network:共有ネットワークに接続します。-p 5432:5432:ホストの5432ポートをコンテナの5432ポートに割り当てます。これにより、パソコンから(たとえば DBeaver を使って)localhost:5432経由で接続でき、アプリケーションコンテナは内部ネットワーク経由で5432ポートに直接アクセスできます。
docker run -d \ --name postgres \ --network sql-mcp-network \ -e POSTGRES_USER=user \ -e POSTGRES_PASSWORD=password \ -e POSTGRES_DB=postgres \ -p 5432:5432 \ postgres -
アプリケーションをビルドして実行する
ここからは
Makefileのコマンドを使ってアプリケーションを管理できます。-
イメージをビルドしてコンテナを実行する:
make build make runこれにより、古いコンテナが自動的に停止され、新しいイメージがビルドされて、新しいコンテナが起動します。
-
アプリケーションのログを表示する:
make logsSuccessfully connected to databaseと表示されれば、正常に動作しています。 -
アプリケーションを停止する:
make stop
-
🔌 サーバーモード
SERVER_MODE 環境変数を設定して、トランスポートプロトコルを選択できます。
stdio
サーバーは標準入力と標準出力を介して通信します。これがデフォルトのモードで、ローカルでのテストやコマンドラインベースの MCP クライアントとの直接連携に適しています。
sse
サーバーは Server-Sent Events(SSE)を使って通信します。このモードを有効にすると、サーバーが HTTP サービスを起動し、接続を待ち受けます。
- SSE エンドポイント:
http://localhost:8088/sse - メッセージエンドポイント:
http://localhost:8088/message
streamableHttp
サーバーは Streamable HTTP トランスポートを使用します。これは、MCP 向けのより最新で柔軟な HTTP ベースのトランスポートです。
- エンドポイント:
http://localhost:8088/mcp
🤝 コントリビューション
コントリビューションを歓迎します!バグを見つけた場合、機能のリクエストや改善の提案がある場合は、Pull Request を送信するか、Issue を作成してください。
- プロジェクトをフォークします。
- フィーチャーブランチを作成します(
git checkout -b feature/AmazingFeature)。 - 変更をコミットします(
git commit -m 'Add some AmazingFeature')。 - ブランチにプッシュします(
git push origin feature/AmazingFeature)。 - Pull Request を作成します。
📄 ライセンス
このプロジェクトはオープンソースで、MIT ライセンスの下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。