pg-mcp
pg-mcp
Servicio de consulta de PostgreSQL en lenguaje natural mediante MCP (Protocolo de Contexto de Modelo). Utiliza OpenAI para traducir lenguaje natural a SQL, lo valida y ejecuta de forma segura, y devuelve los resultados a cualquier cliente compatible con MCP.
Características
Lenguaje natural a SQL mediante OpenAI
Detección automática del esquema de la base de datos al iniciar (tablas, vistas, columnas, índices, claves foráneas, enums)
Caché de esquema con persistencia en disco opcional
Validación de seguridad SQL (solo SELECT, bloqueo de funciones peligrosas, aplicación de límites LIMIT)
Ejecución de transacciones de solo lectura con tiempo de espera configurable
Validación de resultados con reintento automático en caso de resultados vacíos
Soporta múltiples bases de datos
Related MCP server: PostgreSQL MCP Server
Requisitos
Python 3.11+
PostgreSQL
Clave de API de OpenAI
Instalación
pip install -e .Para desarrollo:
pip install -e ".[dev]"Configuración
Copia .env.example a .env y rellena tus valores:
cp .env.example .envVariable | Requerido | Por defecto | Descripción |
| Sí | — | Cadenas de conexión a PostgreSQL separadas por comas |
| No | Primer DSN | Base de datos por defecto para consultas |
| Sí | — | Clave de API de OpenAI |
| No |
| Modelo a utilizar para la generación de SQL |
| No | Por defecto de OpenAI | Endpoint personalizado (Azure, proxy, etc.) |
| No |
| Tiempo de espera de consulta en segundos |
| No |
| Máximo de filas devueltas (1-1000) |
| No | Ninguno | Ruta para la caché persistente del esquema |
| No |
|
|
Ejemplo con múltiples bases de datos:
PG_MCP_DATABASES=postgresql://user:pass@host1:5432/db1,postgresql://user:pass@host2:5432/db2Uso con Claude Desktop
Añade a tu claude_desktop_config.json:
{
"mcpServers": {
"pg-mcp": {
"command": "pg-mcp",
"args": [],
"env": {
"PG_MCP_DATABASES": "postgresql://user:pass@localhost:5432/mydb",
"OPENAI_API_KEY": "sk-...",
"PG_MCP_SCHEMA_CACHE_PATH": "~/.cache/pg-mcp/schema.json"
}
}
}
}Herramientas MCP
query
Consulta una base de datos usando lenguaje natural.
{
"question": "What are the top 10 customers by sales last month?",
"database": "mydb",
"return_sql": false,
"max_rows": 100
}return_sql: true— devuelve el SQL generado sin ejecutarloreturn_sql: false(por defecto) — ejecuta y devuelve los resultados
list_databases
Lista todas las bases de datos accesibles con información resumida.
describe_database
Obtén información detallada del esquema de una base de datos.
{
"database": "mydb",
"schema": "public",
"pattern": "user"
}refresh_schema
Recarga la caché del esquema desde la base de datos.
{
"database": "mydb"
}Omite database para refrescar todas las bases de datos.
Pruebas con bases de datos de ejemplo (Fixture)
El directorio fixtures/ proporciona tres bases de datos preconstruidas para pruebas locales.
Configuración
# From project root, create & seed all fixture databases
cd fixtures
make all
# Or create individual ones
make small # pg_mcp_test_small — bookshelf (4 tables, ~50 rows)
make medium # pg_mcp_test_medium — ecommerce (12 tables, ~500 rows)
make large # pg_mcp_test_large — enterprise (28 tables, ~5000 rows)Sobrescribe las credenciales de PostgreSQL mediante variables de entorno (por defecto: root / admin123 @ localhost:5432):
make all PGUSER=myuser PGPASSWORD=mypass PGHOST=127.0.0.1Configurar .env
Apunta PG_MCP_DATABASES a las bases de datos de ejemplo:
PG_MCP_DATABASES=postgresql://root:admin123@localhost:5432/pg_mcp_test_small,postgresql://root:admin123@localhost:5432/pg_mcp_test_medium,postgresql://root:admin123@localhost:5432/pg_mcp_test_largeProbar con el Inspector MCP
Utiliza el inspector MCP integrado para pruebas interactivas:
cd /path/to/postgres-mcp
fastmcp dev src/pg_mcp/server.py:mcpEsto abre una interfaz de usuario en el navegador donde puedes llamar a herramientas como query, list_databases y describe_database directamente.
Probar con Claude Desktop
Añade a claude_desktop_config.json:
{
"mcpServers": {
"pg-mcp": {
"command": "python3",
"args": ["-m", "pg_mcp.server"],
"cwd": "/path/to/postgres-mcp"
}
}
}Nota: Al usar
cwd, el servidor lee.envdesde ese directorio. También puedes pasar variables de entorno a través de la clave"env".
Consultas de prueba
Una vez conectado, prueba estas consultas en lenguaje natural contra las bases de datos de ejemplo:
Base de datos | Consulta de ejemplo |
| "List all books with a rating higher than 4" |
| "Which country has the most authors" |
| "Top 10 products sold last month" |
| "Total spending amount per user" |
| "Number of employees and average salary per department" |
| "Top 5 sales representatives by revenue this year" |
Limpieza
cd fixtures
make drop-all # Remove all fixture databases
make refresh-all # Drop + recreate + re-seedEjecución de pruebas
python3 -m pytest tests/ -vCómo funciona
User question
→ Schema context assembled from cache
→ OpenAI generates SQL
→ Safety validation (SELECT-only, no dangerous functions, LIMIT injection)
→ Execute in read-only transaction with timeout
→ Optional result validation on empty results
→ Return SQL or query resultsSeguridad
El SQL generado se valida para asegurar que sea solo de tipo SELECT (incluyendo comprobaciones de CTE)
Se bloquean más de 40 funciones peligrosas de PostgreSQL (control de sesión, bloqueos consultivos, dblink, acceso al sistema de archivos, mutación de secuencias, etc.)
Todas las consultas se ejecutan en transacciones de solo lectura
La aplicación automática de LIMIT evita conjuntos de resultados masivos
El tiempo de espera de consulta evita consultas de larga duración
Las contraseñas de conexión nunca aparecen en los registros ni en las respuestas de la API
This server cannot be deployed
Maintenance
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Related MCP Servers
- -licenseNot gradedqualityAmaintenanceA Model Context Protocol server that provides read-only access to PostgreSQL databases. This server enables LLMs to inspect database schemas and execute read-only queries.122,323 npm91,120MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing LLMs read-only access to PostgreSQL databases for inspecting schemas and executing queries.122,323 npm27MIT
- FlicenseDqualityDmaintenanceA secure Model Context Protocol server that allows Claude to execute read-only SQL queries against a PostgreSQL database, enabling natural language interaction with database data.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query, explore, and analyze PostgreSQL databases through the Model Context Protocol. It provides robust security features including read-only mode, schema restrictions, and query timeouts for safe data interaction.7 npmMIT