Skip to main content
Glama
BerkantACUN

pg-guard-mcp

by BerkantACUN

pg-guard-mcp

PyPI

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-mcp

Related 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:

  1. 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 pro Parse-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.

  2. Sitzungsebene. Jede Verbindung setzt default_transaction_read_only = on auf Sitzungsebene, sodass auch eine Abfrage, die tatsächlich als Schreibzugriff in der Datenbank ankommt, von Postgres abgelehnt wird.

  3. 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

pg_run_query(sql)

Führt eine einzelne schreibgeschützte Anweisung aus und gibt Zeilen zurück

pg_explain_query(sql)

Gibt den Abfrageplan zurück, ohne ihn auszuführen

pg_list_tables(schema="public")

Listet Tabellen/Views in einem Schema auf

pg_describe_table(table_name, schema="public")

Listet die Spalten einer Tabelle auf

pg_check_privileges()

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-mcp

Richten 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/ -v

tests/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

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