Skip to main content
Glama
BerkantACUN

pg-guard-mcp

by BerkantACUN

pg-guard-mcp

PyPI

PostgreSQL 用 MCP サーバーです。読み取り専用アクセスをプロトコルと権限のレベルで強制します。クエリ文字列を解析して祈るだけの方式ではありません。

インストール

pip install pg-guard-mcp
# or, without installing anything permanently:
uvx pg-guard-mcp

Related MCP server: MCP PostgreSQL Read-Only Server

これが存在する理由

公式の @modelcontextprotocol/server-postgres が実装していた読み取り専用モードは、COMMIT; の 1 文で回避できました。その実装は、エージェントのクエリを BEGIN TRANSACTION READ ONLY でラップし、全体を 1 つの文字列として送信していました。Postgres はこのモードでセミコロン区切りの複数文を受け付けるため、SELECT 1; COMMIT; DROP SCHEMA public CASCADE; は読み取り専用トランザクションを早期に閉じ、その DROP を通常の書き込みとして実行できてしまいました。この問題により、このパッケージは非推奨になりました。(Datadog Security Labs のレポート)

pg-guard が存在するのは、この「文字列検査だけで『読み取り専用』を強制する」というバグの分類が、今も MCP エコシステムで広く見られるからです。これは 3 つの独立した層で防御するため、どれか 1 つのミスが致命的になることはありません。

  1. プロトコル層(実際の境界). すべてのクエリは、Postgres の拡張クエリプロトコル(Parse / Bind / Execute)でのみ実行され、単純クエリプロトコルは使われません。拡張プロトコルは構造上、1 つの Parse メッセージに複数の文を拒否します。Postgres 自身が、私たちのコードが実行される前にそのクエリを否定するのです。どんな文字列を送っても、Datadog のエクスプロイトがここで機能しないのはこのためです。

  2. セッション層. すべての接続は、セッションレベルで default_transaction_read_only = on を設定します。万一書き込みとしてデータベースに到達したクエリがあっても、Postgres が拒否します。

  3. 送信前チェック層. クエリを送信する前に、複数文とトランザクション制御キーワード(COMMITROLLBACKBEGINSAVEPOINT、...)をチェックし、明確なエラーで拒否します。これは主防御ではなく、迅速かつ明確に失敗させるためのものです。

さらに、書き込み権限が REVOKE されているデータベースロールで接続することが推奨されます(起動時にも確認されます)。権限層でも二重の安全策を取っていることになります。

ツール

Tool

機能

pg_run_query(sql)

読み取り専用の文を 1 つだけ実行し、結果行を返します

pg_explain_query(sql)

クエリを実行せずに実行プランを返します

pg_list_tables(schema="public")

スキーマ内のテーブル/ビューを一覧表示します

pg_describe_table(table_name, schema="public")

テーブルの列を一覧表示します

pg_check_privileges()

接続中のロールが現在保持している書き込み権限を報告します。通常は空になるはずです

セットアップ

pip install pg-guard-mcp
export PG_GUARD_DSN="host=127.0.0.1 dbname=mydb user=myapp_readonly password=..."
pg-guard-mcp

MCP クライアントが、PG_GUARD_DSN を環境設定に設定した上で pg-guard-mcp コマンド(恒久的なインストールを避けるなら uvx pg-guard-mcp)を指すようにしてください。

サポートされている環境変数は .env.example に、適切に制限された読み取り専用ロールのセットアップ例(このプロジェクト自身のテストが前提にしている設定)は scripts/setup_dev_db.sh にあります。

テスト

pip install -e ".[dev]"
pytest tests/ -v

tests/test_safety.py は純 Python で、データベースは不要です。tests/test_db.pytests/test_server.py は実際のローカル PostgreSQL インスタンスに対して実行されます。これには、公式の Postgres MCP サーバーが非推奨になった原因となったものと同一のエクスプロイトペイロードも含まれており、pgguard_test に接続できない場合は自動的にスキップされます。一度 scripts/setup_dev_db.sh を実行すれば、そのデータベースが作成されます。

ステータス

v0.1.0、PyPI で公開中。58 件のテストが成功しています(単体テスト+実 PostgreSQL を使った統合テスト。公式の server-postgres を非推奨にした完全なエクスプロイトも、公開版パッケージを pip installat 설치한 fresh 环境で実行)。

ライセンス

MIT

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables read-only access to PostgreSQL databases with multi-tenant support, allowing users to query data, explore schemas, inspect table structures, and view function definitions across different tenant schemas safely.
    55
    1
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables secure read-only access to PostgreSQL databases through SELECT queries only, with tools for exploring schemas, listing tables, and executing common queries while preventing any data modification operations.
    505
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides secure, read-only access to PostgreSQL databases for schema inspection and data querying. It enables users to list tables, describe structures, and execute SELECT statements while strictly blocking destructive operations.
    11
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables safe interaction with PostgreSQL databases through read-only queries, schema exploration, and performance analysis.
    225
    MIT

View all related MCP servers

Related MCP Connectors

  • Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.

  • Comprehensive PostgreSQL documentation and best practices, including ecosystem tools

  • Read-only bank access for your AI agent. Connects Claude, ChatGPT, Cursor, Gemini, Codex.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/BerkantACUN/pg-guard-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server