pg-guard-mcp
pg-guard-mcp
PostgreSQL 用 MCP サーバーです。読み取り専用アクセスをプロトコルと権限のレベルで強制します。クエリ文字列を解析して祈るだけの方式ではありません。
インストール
pip install pg-guard-mcp
# or, without installing anything permanently:
uvx pg-guard-mcpRelated 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 つのミスが致命的になることはありません。
プロトコル層(実際の境界). すべてのクエリは、Postgres の拡張クエリプロトコル(
Parse/Bind/Execute)でのみ実行され、単純クエリプロトコルは使われません。拡張プロトコルは構造上、1 つのParseメッセージに複数の文を拒否します。Postgres 自身が、私たちのコードが実行される前にそのクエリを否定するのです。どんな文字列を送っても、Datadog のエクスプロイトがここで機能しないのはこのためです。セッション層. すべての接続は、セッションレベルで
default_transaction_read_only = onを設定します。万一書き込みとしてデータベースに到達したクエリがあっても、Postgres が拒否します。送信前チェック層. クエリを送信する前に、複数文とトランザクション制御キーワード(
COMMIT、ROLLBACK、BEGIN、SAVEPOINT、...)をチェックし、明確なエラーで拒否します。これは主防御ではなく、迅速かつ明確に失敗させるためのものです。
さらに、書き込み権限が REVOKE されているデータベースロールで接続することが推奨されます(起動時にも確認されます)。権限層でも二重の安全策を取っていることになります。
ツール
Tool | 機能 |
| 読み取り専用の文を 1 つだけ実行し、結果行を返します |
| クエリを実行せずに実行プランを返します |
| スキーマ内のテーブル/ビューを一覧表示します |
| テーブルの列を一覧表示します |
| 接続中のロールが現在保持している書き込み権限を報告します。通常は空になるはずです |
セットアップ
pip install pg-guard-mcp
export PG_GUARD_DSN="host=127.0.0.1 dbname=mydb user=myapp_readonly password=..."
pg-guard-mcpMCP クライアントが、PG_GUARD_DSN を環境設定に設定した上で pg-guard-mcp コマンド(恒久的なインストールを避けるなら uvx pg-guard-mcp)を指すようにしてください。
サポートされている環境変数は .env.example に、適切に制限された読み取り専用ロールのセットアップ例(このプロジェクト自身のテストが前提にしている設定)は scripts/setup_dev_db.sh にあります。
テスト
pip install -e ".[dev]"
pytest tests/ -vtests/test_safety.py は純 Python で、データベースは不要です。tests/test_db.py と tests/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
Maintenance
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
- AlicenseNot gradedqualityNot gradedmaintenanceEnables 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.551
- AlicenseNot gradedqualityDmaintenanceEnables 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.505MIT
- AlicenseNot gradedqualityDmaintenanceProvides 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.111MIT
- AlicenseNot gradedqualityDmaintenanceEnables safe interaction with PostgreSQL databases through read-only queries, schema exploration, and performance analysis.225MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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