使用说明
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 を参照してください。