PostgreSQL表信息查询MCP服务器

pgmcp 是一个用于获取 PostgreSQL 数据库表信息的 MCP 服务器,提供表列表、表结构、索引、外键及 ER 图生成等只读功能,适用于数据库元数据查询与开发辅助。

  • by kyagoshi
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kyagoshi/pgmcp

使用说明

pgmcp

PostgreSQLデータベースのテーブル情報を取得するMCPサーバーです。

機能

  • list_tables: 指定したスキーマのテーブル一覧を取得
  • get_table_schema: 指定したテーブルのカラム情報(名前、型、NULL許可、デフォルト値、主キー、コメント)を取得
  • get_table_indexes: 指定したテーブルのインデックス情報(名前、カラム、ユニーク、タイプ、定義)を取得
  • get_foreign_keys: 指定したテーブルの外部キー情報(制約名、カラム、参照先テーブル、参照先カラム)を取得
  • generate_er_diagram [BETA]: データベースのテーブル関係をMermaid形式のER図として生成

セキュリティ

データベース接続はリードオンリーで確立されます。誤操作や破壊的なクエリ実行を防ぐため、書き込み系のSQL(INSERT、UPDATE、DELETE、CREATE など)は実行できません。依存ライブラリもOSVの脆弱性データベースを使って継続的に監査しています。

要件

  • Python 3.11以上(Python 3.10はサポート終了)
  • uv(パッケージ管理)
  • PostgreSQLデータベースへのアクセス

インストール

uvx(推奨)

uvxを使えばインストール不要で直接実行できます:

uvx --from git+https://github.com/kyagoshi/pgmcp pgmcp

特定バージョンを固定したい場合は @<タグ> を指定してください(例: v0.1.0):

uvx --from git+https://github.com/kyagoshi/pgmcp@v0.1.0 pgmcp

ローカルインストール

git clone https://github.com/kyagoshi/pgmcp.git
cd pgmcp
uv sync

pip を使う場合のバージョン固定例:

pip install "git+https://github.com/kyagoshi/pgmcp@v0.1.0"

MCP設定

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または%APPDATA%\Claude\claude_desktop_config.json(Windows)に以下を追加:

{
  "mcpServers": {
    "pgmcp": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/kyagoshi/pgmcp", "pgmcp"],
      "env": {
        "PGHOST": "localhost",
        "PGPORT": "5432",
        "PGDATABASE": "your_database",
        "PGUSER": "your_username",
        "PGPASSWORD": "your_password"
      }
    }
  }
}

VS Code (GitHub Copilot)

.vscode/mcp.json に以下を追加:

{
  "servers": {
    "pgmcp": {
      "type": "stdio",
      "command": "uvx",
      "args": ["--from", "git+https://github.com/kyagoshi/pgmcp", "pgmcp"],
      "env": {
        "PGHOST": "localhost",
        "PGPORT": "5432",
        "PGDATABASE": "your_database",
        "PGUSER": "your_username",
        "PGPASSWORD": "your_password"
      }
    }
  }
}

環境変数

変数名 説明 デフォルト値
PGHOST PostgreSQLホスト名 localhost
PGPORT PostgreSQLポート番号 5432
PGDATABASE データベース名 (必須)
PGUSER ユーザー名 (必須)
PGPASSWORD パスワード (必須)

使用方法

list_tables

指定したスキーマのテーブル一覧を取得します。

パラメータ:

  • schema (string, optional): スキーマ名。デフォルトは "public"

出力例:

| table_name | table_type |
|------------|------------|
| users | BASE TABLE |
| orders | BASE TABLE |

get_table_schema

指定したテーブルのカラム情報を取得します。

パラメータ:

  • table_name (string, required): テーブル名
  • schema (string, optional): スキーマ名。デフォルトは "public"

出力例:

| column_name | data_type | nullable | default | PK | comment |
|-------------|-----------|----------|---------|-----|----------|
| id | integer | NO | nextval('users_id_seq'::regclass) | ✓ | ユーザーID |
| name | character varying(100) | NO | - |  | ユーザー名 |
| email | character varying(255) | YES | - |  | メールアドレス |

get_table_indexes

指定したテーブルのインデックス情報を取得します。

パラメータ:

  • table_name (string, required): テーブル名
  • schema (string, optional): スキーマ名。デフォルトは "public"

出力例:

| index_name | columns | unique | type | definition |
|------------|---------|--------|------|------------|
| users_pkey | id | ✓ | btree | CREATE UNIQUE INDEX users_pkey ON public.users USING btree (id) |
| users_email_idx | email | ✓ | btree | CREATE UNIQUE INDEX users_email_idx ON public.users USING btree (email) |

get_foreign_keys

指定したテーブルの外部キー情報を取得します。

パラメータ:

  • table_name (string, required): テーブル名
  • schema (string, optional): スキーマ名。デフォルトは "public"

出力例:

| constraint_name | column_name | foreign_table | foreign_column |
|-----------------|-------------|---------------|----------------|
| orders_user_id_fkey | user_id | users | id |

generate_er_diagram [BETA]

データベースのテーブル関係をMermaid形式のER図として生成します。

注意: この機能はベータ版です。特殊文字(!, @, #など)を含むテーブル名やカラム名はMermaid構文でサポートされていないため、エラーが発生する可能性があります。詳細は Issue #9 を参照してください。

パラメータ:

  • schema (string, optional): スキーマ名。デフォルトは "public"
  • tables (list[string], optional): 対象テーブルのリスト。省略時は全テーブル(最大100件)

出力例:

erDiagram
    users {
        integer id PK "ユーザーID"
        varchar name "ユーザー名"
        varchar email "メールアドレス"
    }
    orders {
        integer id PK "注文ID"
        integer user_id FK "ユーザーID"
        numeric total_amount "合計金額"
    }
    users ||--o{ orders : "has"

特徴:

  • 実際の外部キー関係を実線(||--o{)で表示
  • 仮想外部キー(命名規則から推測)を点線(||..o{)で表示
    • _id または _no サフィックスを持つカラム
    • 他のテーブルの主キー名と一致するカラム

テスト用サンプルデータ

リポジトリ同梱の docker/init.sql は Virtual FK を含む多様なテーブルを用意しています。

  • シンプルな例: vfk_uuid_parent/vfk_uuid_child, vfk_no_parent/vfk_no_child
  • 複雑な例(20個超のテーブル): vfk_uuid_* 系と vfk_no_* 系(注文・在庫・キャンペーン・ロイヤルティなど)

再投入する場合は docker compose down -v && docker compose up -d でDBを初期化してください。

開発

開発者向けの情報は CONTRIBUTING.md を参照してください。

ライセンス

このプロジェクトは Apache License 2.0 の下でライセンスされています。

依存ライブラリのライセンス情報は THIRD_PARTY_LICENSES を参照してください。