pg-guard-mcp
pg-guard-mcp
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-mcpRelated 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:
Capa de protocolo (la frontera real). Cada consulta se ejecuta con el protocolo
extendidode Postgres (Parse/Bind/Execute), nunca con el protocolo de consulta simple. El protocolo extendido rechaza estructuralmente más de una declaración por mensajeParse: 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.Capa de sesión. Cada conexión establece
default_transaction_read_only = onconfigurado 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.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 |
| Ejecuta una instrucción de solo lectura y devuelve las filas |
| Devuelve el plan de la consulta sin ejecutarlo |
| Lista tablas/vistas en un esquema |
| Lista las columnas de una tabla |
| 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-mcpApunte 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/ -vtests/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
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