/ ディレクトリ / プレイグラウンド / Postgres
● 公式 modelcontextprotocol 🔑 自分のキーが必要

Postgres

作者 modelcontextprotocol · modelcontextprotocol/servers

ClaudeがPostgresデータベースをクエリできます。読み取り専用で安全、スキーマ全体の内省、EXPLAINプラン対応 — 書き込みアクセス権を与えることなく。

Postgresの標準的なMCPサーバーです。標準のpostgres:// URLで接続し、スキーマ閲覧、クエリ実行、EXPLAINを公開します。厳密に読み取り専用 — INSERT/UPDATE/DELETE/DDLなし — 本番読み取りレプリカに安全に指向できます。

なぜ使うのか

主な機能

ライブデモ

実際の動作

postgres.replay ▶ 準備完了
0/0

インストール

クライアントを選択

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  }
}

Claude Desktop → Settings → Developer → Edit Config を開く。保存後、アプリを再起動。

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  }
}

Cursor は Claude Desktop と同じ mcpServers スキーマを使用。プロジェクト設定はグローバルより優先。

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  }
}

Cline サイドバーの MCP Servers アイコンをクリックし、"Edit Configuration" を選択。

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  }
}

Claude Desktop と同じ形式。Windsurf を再起動して反映。

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "postgres",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-postgres",
        "postgresql://..."
      ]
    }
  ]
}

Continue はマップではなくサーバーオブジェクトの配列を使用。

~/.config/zed/settings.json
{
  "context_servers": {
    "postgres": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "@modelcontextprotocol/server-postgres",
          "postgresql://..."
        ]
      }
    }
  }
}

context_servers に追加。保存時に Zed がホットリロード。

claude mcp add postgres -- npx -y @modelcontextprotocol/server-postgres postgresql://...

ワンライナー。claude mcp list で確認、claude mcp remove で削除。

ユースケース

実用的な使い方: Postgres

SQLに触れずにアドホックなビジネス質問に答える

👤 PM、創業者、SQLを書きたくない人 ⏱ ~10 min beginner

使うタイミング: データについて質問があります(『今週何人のユーザーが戻ってきたか?』など)がBIダッシュボードにはありません。

前提条件
  • レプリカへの読み取り専用postgres:// 接続文字列 — ほとんどのマネージドPG(RDS、Neon、Supabase)では読み取り専用認証情報を作成できます
  • Claudeが実行される場所からDBへのネットワークアクセス — VPNまたはIPホワイトリストであなたのマシンを許可する
フロー
  1. まずClaudeに関連するテーブルを内省させます
    DBのすべてのテーブルをリストアップします。ユーザー、注文、またはセッションに関連するテーブルについては、そのスキーマを説明します。✓ コピーしました
    → クエリの前にスキーマの概要
  2. 実際の質問をします
    過去30日以内にサインアップしたが、まだ注文を出していないユーザーは何人いますか? サインアップの週ごとにグループ化します。✓ コピーしました
    → Claudeが SQL を書き、実行し、結果テーブルを返します
  3. 注意点を調べます
    この数値が誤解を招く可能性はありますか? ソフト削除? created_atのタイムゾーン? 除外すべき特定のユーザータイプ?✓ コピーしました
    → データの奇妙さについての正直な指摘

結果: ビジネス質問への防御可能な回答(SQL、結果、注意点付き)— データチームの対応を2日間待つのではなく、2分で。

注意点
  • Claudeが制限なくあなたの最大のテーブルをスキャンするクエリを書きます — 接続時にstatement_timeout = '30s' を設定し、システムプロンプトに「デフォルトで常にLIMIT 1000を含める」を追加します
  • 「ユーザー」をカウントするかは、ユーザーとして何をカウントするかに依存します(削除済み? ボット? テスト?) — Claudeに事前に規約を伝えます: 「deleted_atがNULLでない行を除外する」など。
組み合わせ: notion

クエリが遅い理由を診断し、インデックスを提案します

👤 バックエンドエンジニア、DBA ⏱ ~15 min intermediate

使うタイミング: 本来より遅いクエリがあります。EXPLAIN ANALYZEの出力を読んで疲れない、二番目の目が欲しいです。

フロー
  1. クエリプランを取得します
    このクエリに対してEXPLAIN ANALYZEを実行します: [貼り付け]。プランナーが何をしているかを説明してください。✓ コピーしました
    → ステップバイステップのプラン説明
  2. コスト要因を特定します
    どのステップがほとんどのコストを担当していますか? シーケンシャルスキャン、悪いジョイン順序、または高コストフィルタリング?✓ コピーしました
    → 特定のノードが理由とともに特定されます
  3. インデックスまたはリライトを提案します
    これを高速にするための最小限の変更を提案します。クエリを書き直すよりインデックスを追加することを好みます。ただし、インデックスが複数のクエリで有用な場合のみです。✓ コピーしました
    → 具体的なCREATE INDEXステートメント、またはリライトされたクエリ

結果: インデックス付きまたはリライトされたクエリ(理由付き)。EXPLAINを再度実行して検証できます。

注意点
  • 代表的でないデータセット(小さい開発DB)でのEXPLAINは誤解を招くプランを与えます — 本番形状のデータベースに対して常にEXPLAINを実行します。そうしないと、プランはフィクションです
  • インデックスの追加は無料に見えますが、書き込みを遅くします — Claudeに、インデックスを追加するよう求める前に、EXPLAINで確認して使用されるかを検証するよう指示します
組み合わせ: sentry

テーブルのデータ品質問題を監査します

👤 データエンジニア、不慣れなスキーマを受け継ぐ人 ⏱ ~25 min intermediate

使うタイミング: 自分が設計していないテーブルの上に機能を構築しようとしており、問題があると疑っています。

フロー
  1. NULL / 重複 / 孤立チェックのバッテリーを実行します
    orders テーブルについて: 列ごとにNULL値をカウント、自然キー(例:(user_id, stripe_payment_intent_id))による重複行をカウント、削除された親行を指す外部キーのある行をカウントします。✓ コピーしました
    → チェックあたりの問題数
  2. 値の分布の奇妙さをチェックします
    total_cents の最小値、最大値、パーセンタイル分布は何ですか? 疑わしいほど多くの0または負の値の行がありますか?✓ コピーしました
    → 分布統計、外れ値フラグ
  3. 予想されるビジネスルールと相互チェックします
    すべての「完了」注文にはnull以外のpaid_at があるべきです。例外はありますか?✓ コピーしました
    → 違反数とサンプルID

結果: 具体的なデータ整合性バグの短いリスト。各バグにはカウントと修正パスがあります。

注意点
  • いくつかの「問題」は意図的な歴史的工芸品です(データマイグレーション) — バグだと仮定する前に、必ず歴史を知っている人に確認してください

チームのスキーマドキュメントを自動生成します

👤 新しいエンジニアをオンボードする技術的リード ⏱ ~20 min beginner

使うタイミング: DBは40個のテーブルを持っていますが、wikiは0個です。新入社員は「このカラムは何?」と何度も聞きます。

フロー
  1. すべてのテーブルとそのスキーマを取得します
    publicスキーマのすべてのテーブルをリストします。各テーブルについて、列、型、null許容性、デフォルト、および外部キーを提供してください。✓ コピーしました
    → スキーマ全体のダンプ
  2. 命名とサンプルデータから目的を推測します
    各テーブルについて、3行をサンプリングし、このテーブルが私たちのビジネスで何を表しているかについて1段落の説明を書きます。✓ コピーしました
    → テーブルごとの説明
  3. 未知 / 疑わしいテーブルにフラグを立てます
    未使用に見える、または目的を推測できないテーブルはありますか? 元の著者に尋ねるようにリストします。✓ コピーしました
    → 正直な「これらが何であるかわからない」リスト

結果: あなたのチームがNotionまたはwikiにドロップできるMarkdownドキュメント — 新入社員が知っておく必要があることの80%をカバーしています。

注意点
  • 機密データ(PII)をLLMコンテキストにサンプリングします — PIIを含むテーブルについては、Claudeに行をサンプリングせずにスキーマのみを説明するよう求めます
組み合わせ: notion · filesystem

生イベントデータからA/Bテスト結果を計算します

👤 プロダクトアナリスト、グロースエンジニア ⏱ ~30 min advanced

使うタイミング: 実験を実行し、データはDBにあります。SQLを手で書かずに有意性の数値が必要です。

前提条件
  • 実験割り当てと変換イベントを含むイベントテーブル — 標準スキーマ: events(user_id, experiment, variant, timestamp)、conversions(user_id, type, timestamp)
フロー
  1. バリアントごとにコンバージョン率を計算します
    実験「checkout-redesign-2026」について: 各バリアントに何人のユーザーが割り当てられましたか? バリアントごとのコンバージョン率([あなたのコンバージョンイベント]による)は何ですか?✓ コピーしました
    → レート付きのバリアントごとのテーブル
  2. 統計的有意性を計算します
    対照と処置の違いに対するカイ二乗p値を計算します。結果はp < 0.05で統計的に有意ですか?✓ コピーしました
    → p値と判定結果
  3. 数字の妥当性をチェックします
    サンプルサイズのバランスは取れていますか? 実験は十分な期間実行されましたか? 結果が逆になるセグメントはありますか?✓ コピーしました
    → ヘルスチェック。単なるp値ではなく

結果: 統計的に防御可能なA/Bテスト結果。SQL、数値、注意点を含みます。

注意点
  • 事前定義されたサンプルサイズの前に結果をのぞくと、偽陽性につながります — Claudeに、有意性を計算する前にテストが目標サンプルサイズに達したかどうかを確認させます
組み合わせ: notion

組み合わせ

他のMCPと組み合わせて10倍の力を

postgres + notion

クエリを実行し、DBアクセス権を持たないステークホルダーのためにNotionテーブルとして結果を投稿します

今四半期のライフタイムレベニュー上位10顧客をクエリし、「Sales Reports」に結果をフォーマットされたテーブルとして含むNotionページを作成します。✓ コピーしました
postgres + sentry

DBの状態とエラーを相互参照します — エラーレコードIDを参照している場合は、それを検索します

Sentryの問題WEB-3a91はorder_id 99214に言及しています。その注文を検索し、行データ内のものがクラッシュを説明できるかどうかを教えてください。✓ コピーしました
postgres + filesystem

ダウンストリーム使用のためにクエリ結果をCSV/JSONとしてエクスポートします

私のchurn-cohortクエリを実行し、結果を /reports/churn-2026-04.csv として保存します。✓ コピーしました

ツール

このMCPが提供する機能

ツール入力呼び出すタイミングコスト
list_tables schema?: str 任意のセッションの最初のステップ — スキーマを発見します free
describe_table table: str, schema?: str クエリ前に特定のテーブルの完全な構造を取得します free
query sql: str 読み取り専用SQLを実行します — SELECTのみ クエリに依存

コストと制限

運用コスト

APIクォータ
DBの接続制限とクエリタイムアウトに制限されます
呼び出しあたりのトークン
スキーマクエリ: 約500トークン。結果セット: 行数に依存 — LIMITで上限を設定します
金額
無料 — コストはDBホスティング請求書に既に含まれています
ヒント
接続時に常にstatement_timeout を設定します(例:?options=-c%20statement_timeout%3D30000)。そうすることで、暴走クエリがDBを落とすことはできません。

セキュリティ

権限、シークレット、影響範囲

最小スコープ: 公開したいテーブルでのSELECT
認証情報の保管: 環境変数の接続文字列。専用の読み取り専用ロールを使用します: CREATE ROLE claude_readonly LOGIN PASSWORD '...'; GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_readonly;
データ送信先: DBへのすべてのクエリ。結果行は使用するLLMプロバイダーに送信されます
絶対に付与しない: INSERT UPDATE DELETE DROP TRUNCATE ALTER

トラブルシューティング

よくあるエラーと対処法

FATAL: password authentication failed

接続文字列を確認してください。一般的な原因: パスワード内の特殊文字がURLエンコードされていません。

確認: psql 'postgres://...' -c 'SELECT 1'
no pg_hba.conf entry / SSL required

接続文字列に?sslmode=require を追加します。ほとんどのマネージドPostgresではSSLが必須です。

permission denied for table X

ロールがそのテーブルでSELECTを持っていません。GRANT SELECT ON X TO claude_readonly を実行してください。

確認: psql -c '\dp X'
canceling statement due to statement timeout

クエリが遅すぎました。最適化するか(インデックスを追加、WHERE句を狭める)、または1つの接続のタイムアウトを上げてください。

代替案

Postgres 他との比較

代替案代わりに使う場面トレードオフ
Supabase MCPSupabaseをお使いの場合 — 完全なプロジェクト管理とSQLが得られます書き込みアクセスを含みます。本番環境にはあまり安全ではありません
Neon MCPNeonをお使いの場合 — 安全なマイグレーションテストのためのブランチを追加しますNeon固有の機能はNeon DBでのみ機能します
dbHub1つのMCPで複数のデータベースサポート(Postgres、MySQL、MongoDB、など)が必要な場合より新しい。より多くのDBをサポートしていますが、各統合は浅いです
sqlite MCPサーバーの代わりにローカルファイルベースのDB同時アクセスなし、ネットワークなし。ただしセットアップは不要です

その他

リソース

📖 GitHub の公式 README を読む

🐙 オープンな issue を見る

🔍 400以上のMCPサーバーとSkillsを見る