MCP PostgreSQL Demo について
MCP PostgreSQL Demoは、PostgreSQLデータベースを探索・検索するLLM向けのFastMCPサーバーです。スキーマやテーブルの詳細をリソースとして公開し、SELECTクエリを実行して結果をYAML形式で返します。
主な機能
- 01データベーススキーマのメタデータ探索
- 02テーブル構造の確認
- 03SELECT限定のクエリ実行
- 04YAML形式での結果出力
- 05スキーマ・テーブル・クエリ用プロンプト
活用シーン
- 01LLMによるスキーマやテーブル構造の確認
- 02PostgreSQLテーブル内のデータ検索
- 03リソース経由でのスキーマやテーブル詳細の参照
MCP 対応
スキーマとテーブル詳細のリソース、SELECT限定のクエリツール、スキーマ・テーブルの説明やデータ取得用プロンプトをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
MCP PostgreSQL Demo
LLM が PostgreSQL データベースに接続して操作できるようにする FastMCP サーバーです。このプロジェクトでは、Model Context Protocol(MCP)を使用して、言語モデルがデータベースのスキーマやテーブルをクエリし、調査できるようにする方法を紹介します。
機能
- スキーマの調査:データベーススキーマのメタデータを取得します
- テーブルの確認:テーブル構造に関する詳細情報を取得します
- データベースのクエリ:データベースに対して SQL クエリを実行します
- YAML 形式:LLM が簡単に利用できるよう、結果は YAML 形式で返されます
リソース
サーバーは以下の MCP リソースを公開します。
database://{schema}- スキーマ内のすべてのテーブルに関する情報を取得しますdatabase://{schema}/tables/{table}- 特定のテーブルに関する詳細情報を取得します
ツール
query_database- データベースに対して SQL クエリを実行します(SELECT クエリのみ)
プロンプト
サーバーには、以下の定義済みプロンプトが含まれています。
prompt_schema_description- データベーススキーマの説明を求めますprompt_table_description- 特定のテーブルの説明を求めますprompt_query_database- 特定のテーブルのデータを求めます
前提条件
- Python 3.12 以降
- PostgreSQL データベース
- UV パッケージマネージャー(推奨)
インストール
-
リポジトリをクローンします。
git clone <repository-url> cd mcp-demo -
仮想環境を作成します。
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate -
UV をインストールします(まだインストールされていない場合)。
pip install uv -
UV を使用して依存関係をインストールします。
uv sync -
環境変数を設定します。
.env.exampleを.envにコピーします- PostgreSQL の設定に合わせて値を更新します
設定
アプリケーションは環境変数を使用して設定します。
| 変数 | 説明 | デフォルト |
|---|---|---|
| APP_NAME | アプリケーション名 | mcp-demo |
| DB_HOST | PostgreSQL ホスト | localhost |
| DB_PORT | PostgreSQL ポート | 5432 |
| DB_USER | PostgreSQL ユーザー名 | postgres |
| DB_PASSWORD | PostgreSQL パスワード | postgres |
| DB_NAME | PostgreSQL データベース名 | postgres |
使用方法
-
まず、ファイル末尾にある以下の行のコメントを削除して、
src/main.pyの run 関数のコメントを解除します。# if __name__ == "__main__": # print("Starting FastMCP server...") # mcp.run() -
FastMCP サーバーを起動します。
python -m src.main -
サーバーに LLM が接続し、PostgreSQL データベースにクエリできるようになります。サーバーの実行中は、クライアントアプリケーションに MCP を読み込んで操作できます。
クライアントの設定
この MCP をクライアントアプリケーションで使用するには、クライアントの MCP 設定ファイル(例:.cursor/mcp.json)に以下の設定を追加します。
{
"mcpServers": {
"postgres-mcp-server": {
"command": "/path/to/your/venv/bin/mcp",
"args": ["run", "/path/to/your/postgres-mcp/src/main.py"],
"env": {
"APP_NAME": "mcp-demo",
"DB_HOST": "localhost",
"DB_PORT": "5432",
"DB_USER": "postgres",
"DB_PASSWORD": "postgres",
"DB_NAME": "postgres"
}
}
}
}
パスを仮想環境とプロジェクトディレクトリの実際のパスに置き換え、環境変数を PostgreSQL の設定に合わせて更新してください。
開発
UV を使用して開発用の依存関係をインストールします。
uv pip install -e ".[dev]"
含まれる開発ツール:
- ノートブック用の JupyterLab
- 型チェック用の Pyright
- リンティング用の Ruff
Docker
Docker でアプリケーションを実行するには、以下の手順に従います。
-
Docker イメージをビルドします。
docker build -t mcp-demo . -
コンテナを実行します。
docker run --env-file .env.docker -p 8000:8000 mcp-demo
使用例
スキーマ情報の取得
from mcp.client import get_client
client = get_client("http://localhost:8000")
schema_info = client.get_resource("database://public")
print(schema_info)
テーブルの詳細情報の取得
table_info = client.get_resource("database://public/tables/users")
print(table_info)
クエリの実行
result = client.invoke_tool("query_database", {"query": "SELECT * FROM users LIMIT 10"})
print(result)
ライセンス
[ライセンス情報をここに追加してください]
貢献者
- Ricardo Santos [email protected]
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。