postgres-scout-mcp について
postgres-scout-mcpは、PostgreSQLの運用担当者や分析担当者向けのMCPサーバーです。探索、診断、監視、最適化、データ品質のツールを備え、既定では読み取り専用で、読み書きモードでは保護付きの書き込み操作を利用できます。
主な機能
- 01データベースの探索と統計
- 02ヘルススコアと異常検知
- 03クエリとインデックスの最適化提案
- 04稼働状況とメトリクスの監視
- 05データ品質とリレーションの確認
- 06プレビューと制限付きの安全な書き込み
活用シーン
- 01データベースの健全性とテーブル肥大化の確認
- 02遅いクエリとインデックス利用状況の調査
- 03実行中のクエリ、ロック、接続の監視
- 04重複値、欠損値、孤立レコードの検出
MCP 対応
PostgreSQLの探索、クエリ、診断、監視、最適化、データ品質確認のための38個のツールをMCPクライアントに公開します。既定では読み取り専用で動作し、書き込みツールには読み書きモードが必要です。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Postgres Scout MCP
AI で PostgreSQL データベースを調査しましょう。安全機能、モニタリング、データ品質ツールを内蔵した、本番環境対応の Model Context Protocol サーバーです。
得られるもの
次のように尋ねます。
「本番データベースの健全性はどうですか? 緊急の問題はありますか?」
Postgres Scout は次の結果を返します。
全体の健全性スコア:78/100
コンポーネント別の内訳
| コンポーネント | スコア | 状態 |
|---|---|---|
| キャッシュのパフォーマンス | 94/100 | 健全 |
| インデックスの効率 | 82/100 | 良好 |
| テーブルの肥大化 | 61/100 | 要対応 |
| 接続の使用状況 | 75/100 | 普通 |
検出された問題
- 高 — テーブル
ordersは34%肥大化しています(2.1 GB の無駄)。VACUUM FULL を推奨します。 - 中 —
sessionsに未使用のインデックスが3つあり、890 MB を消費しています。 - 低 —
analytics_eventsのキャッシュヒット率は71%です(目標:>90%)。
推奨事項
- メンテナンス時間中に
VACUUM FULL ordersを実行してください - 未使用のインデックスを削除してください:
idx_sessions_legacy、idx_sessions_old_token、idx_sessions_temp analytics_eventsを shared_buffers に追加するか、日付ごとにパーティション分割することを検討してください
これが getHealthScore です。データベースの調査、診断、最適化、モニタリング、データ品質、安全な書き込みをカバーする38個のツールのうちの1つです。
クイックスタート
Claude Code
claude mcp add postgres-scout -- npx -y postgres-scout-mcp postgresql://localhost:5432/mydb
次に、*「サイズが最も大きいテーブルと、肥大化の問題があるかどうかを表示してください」*と尋ねてください。
Claude Desktop
Claude Desktop の設定(macOS の場合は ~/Library/Application Support/Claude/claude_desktop_config.json)に追加します。
{
"mcpServers": {
"postgres-scout": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "postgresql://localhost:5432/mydb"],
"type": "stdio"
}
}
}
Cursor / VS Code
MCP の設定に追加します。
{
"postgres-scout": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "postgresql://localhost:5432/mydb"]
}
}
読み取り専用と読み書きモード
サーバーはデフォルトで読み取り専用モードで実行されます。書き込み操作を行う場合は、別のインスタンスを実行してください。
{
"mcpServers": {
"postgres-scout-readonly": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "--read-only", "postgresql://localhost:5432/production"],
"type": "stdio"
},
"postgres-scout-readwrite": {
"command": "npx",
"args": ["-y", "postgres-scout-mcp", "--read-write", "postgresql://localhost:5432/development"],
"type": "stdio"
}
}
}
- postgres-scout-readonly:安全な調査を行い、データを変更するリスクはありません
- postgres-scout-readwrite:必要な場合に限り、書き込み操作を行います
ツール
調査 — データベースを把握する
listDatabases— ユーザーがアクセスできるデータベースgetDatabaseStats— サイズ、キャッシュヒット率、接続情報listSchemas— 現在のデータベース内のすべてのスキーマlistTables— サイズと行の統計情報を含むテーブルdescribeTable— カラム、制約、インデックスなど
クエリ — 実行と分析
executeQuery— SELECT クエリを実行します(読み書きモードでは書き込みも可能)explainQuery— パフォーマンス分析用の EXPLAIN プランoptimizeQuery— 特定のクエリに対する最適化の推奨事項
診断 — 問題が発生する前に検出する
getHealthScore— コンポーネント別の内訳を含む全体の健全性スコアdetectAnomalies— パフォーマンス、接続、データの異常analyzeTableBloat— VACUUM の計画に役立つ肥大化分析getSlowQueries— 遅いクエリの分析(pg_stat_statements が必要です)suggestVacuum— デッドタプルと肥大化に基づく VACUUM の推奨事項
最適化 — 高速化する
suggestIndexes— クエリパターンに基づく不足インデックスの推奨事項suggestPartitioning— 大きなテーブルのパーティション分割戦略getIndexUsage— 未使用または使用頻度の低いインデックスを特定します
モニタリング — リアルタイムで監視する
getCurrentActivity— 実行中のクエリと接続analyzeLocks— ロックの競合とブロックしているクエリgetLiveMetrics— 指定した時間範囲のリアルタイムメトリクスgetHottestTables— アクティビティが最も多いテーブルgetTableMetrics— テーブルごとの I/O とスキャン統計の包括的な情報
データ品質 — データの信頼性を高める
findDuplicates— カラムの組み合わせに基づく重複行findMissingValues— カラム全体の NULL 分析findOrphans— 無効な外部キーを持つ孤立レコードcheckConstraintViolations— 制約を追加する前に違反がないか確認しますanalyzeTypeConsistency— テキストカラム内の型の不整合
リレーションシップ — 接続をたどる
exploreRelationships— 外部キーを複数段階でたどりますanalyzeForeignKeys— 外部キーの健全性とパフォーマンスを分析します
時系列 — 時間軸に沿った分析
findRecent— 指定した時間範囲内の行を検索しますanalyzeTimeSeries— ウィンドウ関数と異常検出detectSeasonality— 季節パターンを検出します
エクスポート — データを取り出す
exportTable— CSV、JSON、JSONL、または SQLgenerateInsertStatements— 移行用の INSERT ステートメント
書き込み(読み書きモードのみ) — 安全な変更
previewUpdate/previewDelete— コミット前に変更内容を確認しますsafeUpdate— ドライラン、行数制限、空の WHERE 句の保護を備えた UPDATEsafeDelete— ドライラン、行数制限、空の WHERE 句の保護を備えた DELETEsafeInsert— 検証、バッチ処理、ON CONFLICT 対応を備えた INSERT
セキュリティ
- デフォルトは読み取り専用 — 書き込み操作は明示的に有効にする必要があります
- すべてのクエリでパラメーター化された値を使用します
- 入力検証とパターン検出により SQL インジェクションを防止します
- テーブル名/列名をサニタイズします
- すべての操作にレート制限を適用します
- 長時間実行されるクエリを防ぐため、クエリにタイムアウトを設定します
- メモリ枯渇を防ぐため、レスポンスサイズを制限します
使用例
「最も大きなテーブルはどれですか?肥大化していますか?」
listTables({ schema: "public" })
analyzeTableBloat({ schema: "public", minSizeMb: 100 })
「users テーブル内の重複したメールアドレスを見つけてください。」
findDuplicates({ table: "users", columns: ["email"] })
「最も遅いクエリはどれですか?高速化するにはどうすればよいですか?」
getSlowQueries({ minDurationMs: 100, limit: 10 })
suggestIndexes({ schema: "public" })
「現在、データベースで何が起きているかを表示してください。」
getCurrentActivity()
getLiveMetrics({ metrics: ["queries", "connections", "cache"], duration: 30000, interval: 1000 })
getHottestTables({ limit: 5, orderBy: "seq_scan" })
「削除された顧客を参照している孤立した注文を見つけてください。」
findOrphans({ table: "orders", foreignKey: "customer_id", referenceTable: "customers", referenceColumn: "id" })
設定
| 変数 | デフォルト値 | 説明 |
|---|---|---|
QUERY_TIMEOUT | 30000 | クエリのタイムアウト(ミリ秒) |
MAX_RESULT_ROWS | 10000 | クエリごとに返される最大行数 |
ENABLE_RATE_LIMIT | true | レート制限を有効にします |
RATE_LIMIT_MAX_REQUESTS | 100 | ウィンドウあたりのリクエスト数 |
RATE_LIMIT_WINDOW_MS | 60000 | レート制限のウィンドウ(ミリ秒) |
PGMAXPOOLSIZE | 10 | 接続プールの最大サイズ |
PGMINPOOLSIZE | 2 | 接続プールの最小サイズ |
PGIDLETIMEOUT | 10000 | アイドル接続のタイムアウト(ミリ秒) |
ENABLE_LOGGING | false | ファイルへのログ記録を有効にします |
LOG_DIR | ./logs | ログファイルのディレクトリ |
LOG_LEVEL | info | ログの詳細度:debug、info、warn、error |
CLI フラグ:--read-only(デフォルト)、--read-write、--mode <mode>
ログ記録
ファイルへのログ記録はデフォルトで無効です。有効にするには、ENABLE_LOGGING=true を設定してください。LOG_DIR に次の 2 つのログファイルが作成されます。
- tool-usage.log — タイムスタンプ、名前、引数を含むすべてのツール呼び出し
- error.log — スタックトレースを含むエラー
すべての出力で接続文字列は自動的にマスキングされます。
開発
git clone https://github.com/bluwork/postgres-scout-mcp.git
cd postgres-scout-mcp
pnpm install
pnpm build
pnpm test
ライセンス
Apache-2.0
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。