Skip to main content
Glama

pg-mcp

MCP (Model Context Protocol) を介した自然言語PostgreSQLクエリサービス。OpenAIを使用して自然言語をSQLに変換し、安全に検証・実行して、MCP互換クライアントに結果を返します。

機能

  • OpenAIによる自然言語からSQLへの変換

  • 起動時にデータベーススキーマを自動検出(テーブル、ビュー、カラム、インデックス、外部キー、列挙型)

  • オプションでディスク永続化が可能なスキーマキャッシュ

  • SQL安全検証(SELECTのみ、危険な関数のブロック、LIMITの強制)

  • 設定可能なタイムアウト付きの読み取り専用トランザクション実行

  • 結果が空の場合の自動再試行を含む結果検証

  • 複数データベースのサポート

Related MCP server: PostgreSQL MCP Server

要件

  • Python 3.11以上

  • PostgreSQL

  • OpenAI APIキー

インストール

pip install -e .

開発用:

pip install -e ".[dev]"

設定

.env.example を .env にコピーし、値を入力してください:

cp .env.example .env

変数

必須

デフォルト

説明

PG_MCP_DATABASES

はい

—

カンマ区切りのPostgreSQL接続文字列

PG_MCP_DEFAULT_DB

いいえ

最初のDSN

クエリのデフォルトデータベース

OPENAI_API_KEY

はい

—

OpenAI APIキー

OPENAI_MODEL

いいえ

gpt-4o

SQL生成に使用するモデル

OPENAI_BASE_URL

いいえ

OpenAIデフォルト

カスタムエンドポイント(Azure、プロキシなど)

PG_MCP_QUERY_TIMEOUT

いいえ

30

クエリのタイムアウト(秒)

PG_MCP_MAX_ROWS

いいえ

100

返される最大行数(1-1000)

PG_MCP_SCHEMA_CACHE_PATH

いいえ

なし

永続スキーマキャッシュのパス

PG_MCP_LOG_LEVEL

いいえ

INFO

DEBUG / INFO / WARNING / ERROR

複数データベースの例:

PG_MCP_DATABASES=postgresql://user:pass@host1:5432/db1,postgresql://user:pass@host2:5432/db2

Claude Desktopでの使用方法

claude_desktop_config.json に以下を追加してください:

{
  "mcpServers": {
    "pg-mcp": {
      "command": "python3",
      "args": ["-m", "pg_mcp.server"],
      "env": {
        "PG_MCP_DATABASES": "postgresql://user:pass@localhost:5432/mydb",
        "OPENAI_API_KEY": "sk-...",
        "PG_MCP_SCHEMA_CACHE_PATH": "~/.cache/pg-mcp/schema.json"
      }
    }
  }
}

MCPツール

query

自然言語を使用してデータベースにクエリを実行します。

{
  "question": "What are the top 10 customers by sales last month?",
  "database": "mydb",
  "return_sql": false,
  "max_rows": 100
}
  • return_sql: true — 生成されたSQLを実行せずに返します

  • return_sql: false (デフォルト) — 実行して結果を返します

list_databases

アクセス可能なすべてのデータベースを概要情報とともに一覧表示します。

describe_database

データベースの詳細なスキーマ情報を取得します。

{
  "database": "mydb",
  "schema": "public",
  "pattern": "user"
}

refresh_schema

データベースからスキーマキャッシュを再読み込みします。

{
  "database": "mydb"
}

database を省略すると、すべてのデータベースが更新されます。

テストの実行

python3 -m pytest tests/ -v

仕組み

User question
  → Schema context assembled from cache
  → OpenAI generates SQL
  → Safety validation (SELECT-only, no dangerous functions, LIMIT injection)
  → Execute in read-only transaction with timeout
  → Optional result validation on empty results
  → Return SQL or query results

セキュリティ

  • 生成されたSQLはSELECTのみであるか検証されます(CTEチェックを含む)

  • 危険なPostgreSQL関数(pg_sleep、lo_importなど)はブロックされます

  • すべてのクエリは読み取り専用トランザクションで実行されます

  • 自動的なLIMIT強制により、大規模な結果セットを防ぎます

  • クエリタイムアウトにより、長時間実行されるクエリを防ぎます

  • 接続パスワードはログやAPIレスポンスに表示されません

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    A
    maintenance
    A Model Context Protocol server that provides read-only access to PostgreSQL databases. This server enables LLMs to inspect database schemas and execute read-only queries.
    122,323 npm
    91,120
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to query, explore, and analyze PostgreSQL databases through the Model Context Protocol. It provides robust security features including read-only mode, schema restrictions, and query timeouts for safe data interaction.
    7 npm
    MIT