Skip to main content
Glama
BerkantACUN

pg-guard-mcp

by BerkantACUN

pg-guard-mcp

PyPI

Un servidor MCP de PostgreSQL que impone un acceso de solo lectura a nivel de protocolo y de privilegios, no analizando la cadena de consulta con la esperanza de que sea suficiente.

Instalación

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

Related MCP server: MCP PostgreSQL Read-Only Server

Por qué existe

El @modelcontextprotocol/server-postgres oficial incluía un modo de solo lectura que un simple COMMIT; podía eludir: envolvía la consulta del agente en BEGIN TRANSACTION READ ONLY y enviab contestando toda la consulta como una única cadena. Postgres acepta múltiples declaraciones separadas por punto y coma en ese modo, de modo que SELECT 1; COMMIT; DROP SCHEMA public CASCADE; cerraba la transacción de solo lectura de forma prematura y ejecutaba el DROP como una escritura normal. El paquete quedó en desuso a causa de ello. (Análisis de Datadog Security Labs)

pg-guard-mcp existe porque esa clase de fallo — el «solo lectura» protegido solamente mediante la inspección de cadenas — sigue siendo frecuente en todo el ecosistema MCP. Defiende con tres capas independientes, de manera que ningún error aislado sea fatal:

  1. Capa de protocolo (la frontera real). Cada consulta se ejecuta con el protocolo extendido de Postgres (Parse/Bind/Execute), nunca con el protocolo de consulta simple. El protocolo extendido rechaza estructuralmente más de una declaración por mensaje Parse: el propio Postgres lo rechaza, antes de que se ejecute cualquier código nuestro. Esta es la razón por la que el exploit de Datadog no puede funcionar aquí, sin importar la cadena que se envíe.

  2. Capa de sesión. Cada conexión establece default_transaction_read_only = on configurado en sesión, de modo que incluso una consulta que de algún modo llegara a la base de datos como escritura es rechazada por Postgres.

  3. Capa de verificación previa. Antes de que una consulta se envíe siquiera, se revisa si contquote múltiples declaraciones o palabras clave de control de transacciones (COMMIT, ROLLBACK, BEGIN, SAVEPOINT, ...) y se rechaza con un error claro. Esto existe para fallar rápido y alto, no como defensa principal.

Además, conectarse con un rol de base de datos al que se le revocado el permiso de escritura (REVOKE) es la configuración recomendada y comprobada durante el inicio: refuerzo de seguridad también en la capa de privilegios.

Herramientas

Herramienta

Qué hace

pg_run_query(sql)

Ejecuta una instrucción de solo lectura y devuelve las filas

pg_explain_query(sql)

Devuelve el plan de la consulta sin ejecutarlo

pg_list_tables(schema="public")

Lista tablas/vistas en un esquema

pg_describe_table(table_name, schema="public")

Lista las columnas de una tabla

pg_check_privileges()

Informa de cualquier permiso de escritura que el rol conectado tenga realmente; debería devolver siempre vacío

Configuración

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

Apunte tu cliente MCP al comando pg-guard-mcp (o uvx pg-guard-mcp para evitar una instalación permanente) con PG_GUARD_DSN establecido en su configuración de entorno.

Consulta .env.example para todas las variables de entorno soportadas, y scripts/setup_dev_db.sh para obtener un ejemplo funcional de configuración de un rol de solo lectura correctamente restringido (la configuración con la que se ejecutan las pruebas de este propio proyecto).

Pruebas

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

tests/test_safety.py es una prueba 100 % Python y no necesita base de datos. tests/test_db.py y tests/test_server.py se ejecutan contra una instancia real de PostgreSQL local, incluido el payload exacto del exploit que dejó desactualizado al servidor MCP oficial de Postgres, y se omiten automáticamente si pgguard_test no es alcanzable. Ejecuta scripts/setup_dev_db.sh una vez para crearla.

Estado

v0.1.0, disponible en PyPI. 58 pruebas superadas (unitarias + integración contra PostgreSQL real, incluido el exploit exacto que relegó al server-postgres oficial, ejecutadas contra una instalación limpia mediante pip install del paquete publicado).

Licencia

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