pg-guard-mcp
pg-guard-mcp
Ein PostgreSQL-MCP-Server, der schreibgeschützten Zugriff auf der Protokoll- und Berechtigungsebene erzwungen — nicht, indem er den Query-String parst und hofft.
Installation
pip install pg-guard-mcp
# or, without installing anything permanently:
uvx pg-guard-mcpRelated MCP server: MCP PostgreSQL Read-Only Server
Warum es das gibt
Das offizielle Paket @modelcontextprotocol/server-postgres wurde mit einem Read-only-Modus ausgeliefert, den ein einzelnes COMMIT; umgehen konnte: Es verpackte die Abfrage des Agenten in BEGIN TRANSACTION READ ONLY und schickte das Ganze als einen String. Postgres akzeptiert in diesem Zustand semikolongetrennte Mehrfachanweisungen, so beendete SELECT 1; COMMIT; DROP SCHEMA public CASCADE; die Read-only-Transaktion frühzeitig und führte das DROP als gewöhnlichen Schreibzugriff aus. Das Paket wurde deshalb als deprecated markiert. (Bericht von Datadog Security Labs)
pg-guard-mcp existiert, weil diese Fehlerklasse – „read-only“, nur durch String-Inspektion erzwungen – im MCP-Ökosystem immer noch verbreitet ist. Es verteidigt auf drei unabhängigen Ebenen, sodass kein einzelner Fehler fatal ist:
Protokollebene (die eigentliche Grenze). Jede Anfrage läuft über das erweiterte Anfrageprotokoll von Postgres (
Parse/Bind/Execute), niemals über das einfache Anfrageprotokoll. Das erweiterte Protokoll lehnt strukturell mehr als eine Anweisung proParse-Nachricht ab – Postgres selbst weist es ab, bevor irgendein Code von uns ausgeführt wird. Deshalb kann der Datadog-Exploit hier nicht funktionieren, egal welcher String übergeben wird.Sitzungsebene. Jede Verbindung setzt
default_transaction_read_only = onauf Sitzungsebene, sodass auch eine Abfrage, die tatsächlich als Schreibzugriff in der Datenbank ankommt, von Postgres abgelehnt wird.Preflight-Ebene. Bevor eine Abfrage überhaupt gesendet wird, wird sie auf mehrere Anweisungen und Schlüsselwörter der Transaktionskontrolle (
COMMIT,ROLLBACK,BEGIN,SAVEPOINT, ...) geprüft und mit einer klaren Fehlermeldung abgewiesen. Das dient dafür, schnell und laut zu scheitern – nicht als primäre Verteidigung.
Außerdem ist die Verbindung mit einer Datenbankrolle, der Schreibrechte per REVOKE entzogen wurden, die empfohlene (und beim Start überprüfte) Einrichtung – Gürtel und Hosenträger auch auf der Berechtigungsebene.
Werkzeuge
Werkzeug | Beschreibung |
| Führt eine einzelne schreibgeschützte Anweisung aus und gibt Zeilen zurück |
| Gibt den Abfrageplan zurück, ohne ihn auszuführen |
| Listet Tabellen/Views in einem Schema auf |
| Listet die Spalten einer Tabelle auf |
| Meldet jede Schreibberechtigung, die die verbundene Rolle tatsächlich besitzt – sollte immer leer zurückkommen |
Einrichtung
pip install pg-guard-mcp
export PG_GUARD_DSN="host=127.0.0.1 dbname=mydb user=myapp_readonly password=..."
pg-guard-mcpRichten Sie Ihren MCP-Client auf den Befehl pg-guard-mcp aus (oder uvx pg-guard-mcp für den Fall einer dauerhaften Installation) mit gesetztem PG_GUARD_DSN in dessen Umgebungskonfiguration.
Siehe .env.example für alle unterstützten Umgebungsvariablen und scripts/setup_dev_db.sh für ein funktionierendes Beispiel, wie man eine richtig eingeschränkte Read-only-Rolle einrichtet (die Konfiguration, gegen die die eigenen Tests dieses Projekts laufen).
Tests
pip install -e ".[dev]"
pytest tests/ -vtests/test_safety.py ist reines Python und benötigt keine Datenbank. tests/test_db.py und tests/test_server.py laufen gegen eine reale lokale PostgreSQL-Instanz – einschließlich des exakten Exploit-Payloads, der für die Deprecation des offiziellen Postgres-MCP-Servers verantwortlich war – und werden automatisch übersprungen, wenn pgguard_test nicht erreichbar ist. Führen Sie scripts/setup_dev_db.sh einmal aus, um die Datenbank zu erstellen.
Status
v0.1.0, live auf PyPI. 58 erfolgreiche Tests (Unit- und Live-Postgres-Integration, einschließlich des exakten Exploits, der zur Deprecation des offiziellen server-postgres führte, ausgeführt gegen eine frische pip install des veröffentlichten Pakets).
Lizenz
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