hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Built on Bun runtime for high performance server execution, leveraging Bun's speed and JavaScript/TypeScript capabilities.
Allows AI agents to interact with multiple PostgreSQL databases, including running read-only queries, executing data-modifying statements, performing transactions, listing tables, and inspecting database schemas.
Implements end-to-end type-safety throughout the server with TypeScript, ensuring robust and error-resistant database interactions.
FastPostgresMCP 🐘⚡️ (フル機能のマルチ DB MCP サーバー)
このプロジェクトは、AI エージェント (Cursor、Claude Desktop など) がテーブルの一覧表示やスキーマの検査など、複数の PostgreSQL データベースと対話できるように設計された、非常に高速で型安全、かつフル機能のモデル コンテキスト プロトコル (MCP) サーバーを実装します。
これは、Bun、TypeScript、 postgres
を使用して構築されており、堅牢な MCP サーバーを構築するためのfastmcp
フレームワークの高度な機能を活用しています。
目的: AIエージェント用のMCPサーバー
これはコードにインポートするライブラリではありません。スタンドアロンのサーバーアプリケーションです。プロセスとして実行され、MCPクライアント(AIエージェントなど)はJSONベースのモデルコンテキストプロトコル(v2.0)を使用してサーバーアプリケーションと通信します。通常は、クライアントアプリケーション(例:Cursor)が管理するstdio
接続を介して通信します。
トラブルシューティングと開発
CLI を使用したテスト
パッケージには、MCP サーバーを直接テストするための組み込み CLI コマンドが含まれています。
組み込みのMCPインスペクターによるテスト
MCP インスペクターを使用して視覚的にテストおよびデバッグすることもできます。
よくある問題
bunx postgres-mcp
実行中にこのエラーが表示された場合:
ping メッセージが続く場合は、次のことを意味します。
- MCPサーバーが正常に起動しました
- クライアントは正常に接続しました
- しかし、クライアントはpingリクエストを送信するだけで、適切に機能のネゴシエーションを行っていません。
これは通常、適切なMCPクライアントを使用する必要があることを示しています。以下をお試しください。
bun run cli
を使用して MCP CLI でテストする- インストールセクションの説明に従って、Cursor または Claude Desktop で MCP サーバーを構成する
カスタム MCP クライアントを開発している場合は、機能ネゴシエーションを含む MCP プロトコルが適切に実装されていることを確認してください。
✨ コア機能
- 🚀 超高速: Bun と
fastmcp
上に構築されています。 - 🔒 タイプセーフ: Zod スキーマ検証を備えたエンドツーエンドの TypeScript。
- 🐘 マルチデータベースのサポート:
.env
で定義された複数の PostgreSQL インスタンスに接続し、それらのインスタンス間のやり取りを管理します。 - 🛡️ 設計によるセキュリティ:
postgres
経由のパラメーター化されたクエリにより、SQL インジェクションを防止します。 - 🔑 オプションの認証: API キー検証 (
fastmcp
のauthenticate
フック) を使用して、ネットワークベースの接続 (SSE/HTTP) を保護します。 - 📄 MCP リソース経由のデータベース スキーマ:
- テーブルの一覧:
db://{dbAlias}/schema/tables
を介してデータベース内のテーブルの一覧を取得します。 - テーブル スキーマの検査:
db://{dbAlias}/schema/{tableName}
を介して特定のテーブルの詳細な列情報を取得します。
- テーブルの一覧:
- 💬 強化されたツールインタラクション:
- **ツール内ログ:**ツールは詳細なログをクライアントに送り返します (
log
コンテキスト)。 - **進行状況レポート:**長時間実行される操作は進行状況を報告します (
reportProgress
コンテキスト)。
- **ツール内ログ:**ツールは詳細なログをクライアントに送り返します (
- **🧠 セッション対応:**ツール実行コンテキスト (
session
コンテキスト) 内のセッション情報にアクセスします。 - **📡 イベント駆動型:**接続/セッション イベントの処理に
server.on
とsession.on
を使用します。 - **🔧 最新の開発者エクスペリエンス (DX):**明確な構成、直感的な API、
fastmcp
ツールによる簡単なテスト。
含まれるもの(fastmcp の機能を活用)
FastMCP
サーバーコアserver.addTool
(query_tool
、execute_tool
、schema_tool
、transaction_tool
の場合)server.addResourceTemplate
(テーブルの一覧表示とテーブルスキーマの検査用)server.start
(stdio
に重点を置き、sse
/http
に適応可能)- オプション:
authenticate
フック (API キー検証用) - ツール実行
context
(log
、reportProgress
、session
) - パラメータスキーマ検証のためのZod
server.on
(接続ログ用)- (潜在的に)セッション固有のロジックのための
session.on
📋 前提条件
- **Bun (v1.0 以降を推奨):**インストールされ、PATH に含まれています。
- **PostgreSQL データベース:**アクセス資格情報と接続。ユーザーには
information_schema
をクエリする権限が必要です。
⚙️ インストール
オプション1: NPMパッケージ
npm パッケージはhttps://www.npmjs.com/package/postgres-mcpから入手できます。
オプション2: リポジトリのクローン
- リポジトリをクローンします。Copy
- 依存関係をインストールします:Copy
🔑 構成(マルチデータベースとオプションの認証)
適切な.env
ファイルから読み込まれた環境変数を使用して構成します。
- 環境ファイルを作成します。
- 本番環境の場合:
cp .env.example .env
- 開発の場合:
cp .env.development.example .env.development
- 本番環境の場合:
- **環境ファイルの読み込み順序:**サーバーは、次の優先順位でファイルから環境変数を読み込みます。
.env.<NODE_ENV>
(例:.env.development
、.env.production
、.env.staging
).env.local
(バージョン管理されていないローカルオーバーライド用).env
(デフォルトのフォールバック) これにより、環境ごとに異なる構成が可能になります。
- 環境ファイルを編集して、データベース接続と認証を定義します。
DB_ALIASES
- 一意のDBエイリアスのカンマ区切りリストDEFAULT_DB_ALIAS
- ツール呼び出しで 'dbAlias' が省略された場合のデフォルトのエイリアス- 各エイリアスのデータベース接続の詳細(例:
DB_MAIN_HOST
、DB_REPORTING_HOST
) - オプションのAPIキー認証(
ENABLE_AUTH
、MCP_API_KEY
)
🚀 サーバーの実行(プロセスとして)
Bunを使用してこのサーバーを直接実行します。通常、AIクライアント(Cursorなど)がこのコマンドの起動と管理を行います。
オプション1: グローバルにインストールされたパッケージを使用する
- 手動で実行するには:
postgres-mcp
オプション2: プロジェクトでパッケージを使用する
- プロジェクトから実行するには:
npx postgres-mcp
- またはプログラムでインポートします:Copy
オプション3: クローンしたリポジトリから
- 手動で実行するには(テスト用):
bun run src/index.ts
- 手動開発モード:
bun run --watch src/index.ts
fastmcp
CLIツールを使ったテスト
- 対話型ターミナル:
bunx fastmcp dev src/index.ts
- Web UI インスペクター:
bunx fastmcp inspect src/index.ts
💻 プログラム API の使用(ライブラリとして)
postgres-mcp は、スタンドアロンの MCP サーバーとして実行するだけでなく、Node.js/TypeScript アプリケーション内のライブラリとしてプログラム的に使用することもできます。
基本的な使い方
直接関数インポート
より単純なユースケースでは、特定の関数を直接インポートできます。
設定オプション
プログラム API の完全なドキュメントについては、 docs/programmatic-api.mdを参照してください。
🔌 AI クライアントとの接続 (Cursor、Claude Desktop)
AI エージェント (MCP クライアント) を構成して、コマンド/引数メカニズムを介してこのサーバー スクリプトを実行します。
カーソルAI - 詳細な例
- カーソル設定/環境設定を開きます (Cmd+, または Ctrl+,)。
- 「拡張機能」->「MCP」に移動します。
- 「MCP サーバーの追加」をクリックするか、
settings.json
を編集します。 - 次の JSON 構成を追加します。Copy
- カーソル を保存して再起動するか、「MCP サーバーを再ロード」します。
- カーソルの MCP ステータス/ログで接続を確認します。
クロードデスクトップ
config.json
を見つけて編集します (パスについては前の README を参照してください)。args
の絶対パスを使用して、mcpServers
の下に同様のエントリを追加します。- Claude Desktop を再起動します。
🛠️ MCP 機能の公開
認証(オプション)
ENABLE_AUTH=true
の場合、MCP_API_KEY
に一致するX-API-Key
ヘッダーを介してネットワーク トランスポート (HTTP/SSE) を保護します。stdio
接続 (Cursor/Claude のデフォルト) は通常、このチェックをバイパスします。
リソース
1. データベーステーブルの一覧表示
- URI テンプレート:
db://{dbAlias}/schema/tables
- **説明:**指定されたデータベースエイリアス (通常は「public」スキーマ) 内のユーザー テーブル名のリストを取得します。
- リソース定義 (
addResourceTemplate
):uriTemplate
:"db://{dbAlias}/schema/tables"
arguments
:dbAlias
: (文字列、必須) - データベースのエイリアス (.env
から)。
load({ dbAlias })
: データベースに接続し、information_schema.tables
(パブリック スキーマの基本テーブルに対してフィルター処理され、実装でカスタマイズ可能) をクエリし、結果を JSON 文字列配列["table1", "table2", ...]
としてフォーマットし、{ text: "..." }
を返します。
使用例 (AI プロンプト): 「リソースdb://main/schema/tables
を取得して、メイン データベース内のテーブルを一覧表示します。」
2. テーブルスキーマの検査
- URI テンプレート:
db://{dbAlias}/schema/{tableName}
- **説明:**特定のテーブルの詳細なスキーマ情報 (列、タイプ、NULL 値可能性、デフォルト) を提供します。
- リソース定義 (
addResourceTemplate
):uriTemplate
:"db://{dbAlias}/schema/{tableName}"
arguments
:dbAlias
: (文字列、必須) - データベースの別名。tableName
: (文字列、必須) - テーブルの名前。
load({ dbAlias, tableName })
: 接続し、特定のテーブルのinformation_schema.columns
を照会し、列オブジェクトの JSON 文字列配列としてフォーマットし、{ text: "..." }
を返します。
使用例 (AI プロンプト): 「リソースdb://reporting/schema/daily_sales
について説明してください。」
応答コンテンツの例 (JSON 文字列):
ツール
ツールはcontext
オブジェクト ( log
、 reportProgress
、 session
) を受け取ります。
1. query_tool
読み取り専用の SQL クエリを実行します。
- **説明:**読み取り専用 SQL を安全に実行し、実行ログ/進行状況とともに結果を取得します。
- パラメーター:
statement
(文字列)、params
(配列、opt)、dbAlias
(文字列、opt)。 - コンテキストの使用法:
log.info/debug
、オプションのreportProgress
、アクセスsession
。 - **戻り値:**行配列の JSON 文字列。
リクエスト例:
応答コンテンツの例 (JSON 文字列):
2. execute_tool
データを変更する SQL ステートメントを実行します。
- **説明:**実行ログを使用して、データを変更する SQL を安全に実行します。
- パラメーター:
statement
(文字列)、params
(配列、opt)、dbAlias
(文字列、opt)。 - コンテキストの使用法:
log.info/debug
、アクセスsession
。 - **戻り値:**影響を受ける行を示す文字列。
リクエスト例:
応答内容の例(文字列):
3. schema_tool
特定のテーブルの詳細なスキーマ情報を取得します。
- **説明:**データベース テーブルの列の定義と詳細を取得します。
- パラメータ:
tableName
(文字列)、dbAlias
(文字列、opt)。 - コンテキストの使用法:
log.info
、アクセスsession
。 - **戻り値:**列情報オブジェクトの JSON 文字列配列。
リクエスト例:
応答コンテンツの例 (JSON 文字列):
4. transaction_tool
複数の SQL ステートメントをアトミックに実行します。
- **説明:**ステップのログ記録/進行状況とともに、トランザクション内で SQL シーケンスを実行します。
- パラメーター:
operations
({statement, params} の配列)、dbAlias
(文字列、opt)。 - コンテキストの使用
reportProgress
:log.info/debug/error``session
。 - **戻り値:**成功/失敗をまとめた JSON 文字列:
{"success": true, "results": [...]}
または{"success": false, "error": ..., "failedOperationIndex": ...}
。
リクエスト例:
成功応答コンテンツの例 (JSON 文字列):
エラー応答コンテンツの例 (JSON 文字列):
サーバーとセッションのイベント
- クライアント接続のログを記録するために
server.on('connect'/'disconnect')
を使用します。 - 必要に応じて、より詳細なセッション イベント処理のために
session.on(...)
を使用できます。
🔒 セキュリティに関する考慮事項
- **SQLインジェクション:**パラメータ化されたクエリによって軽減されます。直接入力の連結は行われません。
- データベース権限: **重要。**各
DB_<ALIAS>_USER
に、スキーマ/テーブル一覧リソースのinformation_schema
への読み取りアクセスを含む最小限の権限を割り当てます。 - SSL/TLS:本番環境では必須(
DB_<ALIAS>_SSL=require
またはより厳密)。 - シークレット管理:
.env
ファイルを保護します(.gitignore
に追加します)。本番環境では、安全なシークレット管理(Vault、Doppler、クラウドシークレット)を使用します。 - 認証スコープ:
authenticate
フックは主にネットワーク トランスポートを保護します。stdiostdio
は実行環境に依存します。 - **データの機密性:**接続/ツールを介してアクセスできるデータに注意してください。
- **リソースクエリ:**テーブル(
information_schema.tables
)とスキーマ(information_schema.columns
)の一覧表示に使用されるクエリは、一般的に安全ですが、データベース権限に依存します。設定されたユーザーに適切な読み取りアクセス権があることを確認してください。セキュリティや明確さの観点から、必要に応じてテーブル一覧表示クエリ(例:スキーマフィルタリング)をカスタマイズしてください。
📜 ライセンス
このプロジェクトはMITライセンスに基づいてライセンスされています。詳細はLICENSEファイルをご覧ください。
📋 変更履歴
1.0.0
- 初回リリース
- PostgreSQL 用のフル機能 MCP サーバー
- 複数のデータベース接続のサポート
- クエリ、実行、スキーマ検査、トランザクションのためのツール
- スキーマイントロスペクションのリソース
- 包括的なドキュメントと例
You must be authenticated.
AI エージェントが複数の PostgreSQL データベースと対話できるようにし、テーブルの一覧表示、スキーマの検査、クエリの実行、トランザクションの実行などの機能を提供する、非常に高速な MCP サーバーです。
- Purpose: An MCP Server for AI Agents
- Troubleshooting and Development
- ✨ Core Features
- What's Included (fastmcp Features Leveraged)
- 📋 Prerequisites
- ⚙️ Installation
- 🔑 Configuration (Multi-Database & Optional Auth)
- 🚀 Running the Server (as a Process)
- 💻 Using the Programmatic API (as a Library)
- 🔌 Connecting with AI Clients (Cursor, Claude Desktop)
- 🛠️ MCP Capabilities Exposed
- 🔒 Security Considerations
- 📜 License
- 📋 Changelog