PostgreSQL Full Access MCP Server

Un servidor PostgreSQL de acceso completo para MCP con capacidades de lectura/escritura y metadatos de esquema mejorados.

Documentación

Servidor MCP de Acceso Completo a PostgreSQL

Model Context Protocol MIT License

Un potente servidor de Protocolo de Contexto de Modelo (MCP) que proporciona acceso completo de lectura y escritura a bases de datos PostgreSQL. A diferencia del servidor MCP oficial de PostgreSQL de solo lectura, esta implementación mejorada permite a los Modelos de Lenguaje de Gran Escala (LLMs) consultar y modificar el contenido de la base de datos con una gestión de transacciones adecuada y controles de seguridad.

Tabla de Contenidos

🌟 Características

Acceso Completo de Lectura y Escritura

  • Ejecuta de forma segura operaciones DML (INSERT, UPDATE, DELETE)
  • Crea, modifica y gestiona objetos de base de datos con DDL
  • Gestión de transacciones con confirmación explícita
  • Tiempos de espera de seguridad y protección de reversión automática

Información Enriquecida del Esquema

  • Metadatos detallados de columnas (tipos de datos, descripciones, longitud máxima, nulabilidad)
  • Identificación de claves primarias
  • Relaciones de claves foráneas
  • Información de índices con tipo y banderas de unicidad
  • Estimaciones del número de filas de tablas
  • Descripciones de tablas y columnas (cuando estén disponibles)

Controles de Seguridad Avanzados

  • Clasificación de consultas SQL (DQL, DML, DDL, DCL, TCL)
  • Ejecución de solo lectura obligatoria para consultas seguras
  • Todas las operaciones se ejecutan en transacciones aisladas
  • Monitoreo automático de tiempo de espera de transacciones
  • Límites de seguridad configurables
  • Proceso de confirmación de transacciones en dos pasos con confirmación explícita del usuario

🔧 Herramientas

  • execute_query

    • Ejecuta consultas SQL de solo lectura (sentencias SELECT)
    • Entrada: sql (cadena): La consulta SQL a ejecutar
    • Todas las consultas se ejecutan dentro de una transacción de SOLO LECTURA
    • Los resultados incluyen métricas de tiempo de ejecución e información de campos
  • execute_dml_ddl_dcl_tcl

    • Ejecuta operaciones de modificación de datos (INSERT, UPDATE, DELETE) o cambios de esquema (CREATE, ALTER, DROP)
    • Entrada: sql (cadena): La sentencia SQL a ejecutar
    • Se envuelve automáticamente en una transacción con tiempo de espera configurable
    • Devuelve un ID de transacción para la confirmación explícita
    • Característica de seguridad importante: La conversación finalizará después de la ejecución, permitiendo al usuario revisar los resultados antes de decidir confirmar o revertir
  • execute_maintenance

    • Ejecuta comandos de mantenimiento como VACUUM, ANALYZE o CREATE DATABASE fuera de transacciones
    • Entrada: sql (cadena): La sentencia SQL a ejecutar - debe ser VACUUM, ANALYZE o CREATE DATABASE
    • Devuelve un objeto de resultado con métricas de tiempo de ejecución
  • execute_commit

    • Confirma explícitamente una transacción por su ID
    • Entrada: transaction_id (cadena): ID de la transacción a confirmar
    • Gestiona de forma segura la limpieza después de la confirmación o reversión
    • Aplica permanentemente los cambios a la base de datos
  • execute_rollback

    • Revierte explícitamente una transacción por su ID
    • Entrada: transaction_id (cadena): ID de la transacción a revertir
    • Descarta de forma segura todos los cambios y limpia los recursos
    • Útil al revisar cambios y decidir no aplicarlos
  • list_tables

    • Obtiene una lista completa de todas las tablas en la base de datos
    • Incluye el número de columnas y descripciones de tablas
    • No requiere parámetros de entrada
  • describe_table

    • Obtiene información detallada sobre la estructura de una tabla específica
    • Entrada: table_name (cadena): Nombre de la tabla a describir
    • Devuelve información completa del esquema, incluyendo claves primarias, claves foráneas, índices y detalles de columnas

📊 Recursos

El servidor proporciona información mejorada del esquema para las tablas de la base de datos:

  • Esquemas de Tablas (postgres://<host>/<table>/schema)
    • Información detallada del esquema JSON para cada tabla
    • Incluye metadatos completos de columnas, claves primarias y restricciones
    • Se descubre automáticamente a partir de los metadatos de la base de datos

🚀 Uso con Claude Desktop

Integración con Claude Desktop

Para usar este servidor con Claude Desktop, sigue estos pasos:

  1. Primero, asegúrate de tener Node.js instalado en tu sistema

  2. Instala el paquete usando npx o agrégalo a tu proyecto

  3. Configura Claude Desktop editando claude_desktop_config.json (normalmente se encuentra en ~/Library/Application Support/Claude/ en macOS):

{
  "mcpServers": {
    "postgres-full": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-postgres-full-access",
        "postgresql://username:password@localhost:5432/database"
      ],
      "env": {
        "TRANSACTION_TIMEOUT_MS": "60000",
        "MAX_CONCURRENT_TRANSACTIONS": "5",
        "PG_STATEMENT_TIMEOUT_MS": "30000"
      }
    }
  }
}
  1. Reemplaza la cadena de conexión de la base de datos con tus detalles reales de conexión a PostgreSQL
  2. Reinicia Claude Desktop por completo

Importante: Usar "Permitir una vez" por Seguridad

Cuando Claude intente confirmar cambios en tu base de datos, Claude Desktop te pedirá aprobación:

Allow Once Dialog

¡Revisa siempre los cambios SQL cuidadosamente antes de aprobarlos!

Mejores prácticas de seguridad:

  • Haz clic siempre en "Permitir una vez" (no en "Permitir siempre") para las operaciones de confirmación
  • Revisa cuidadosamente el SQL de la transacción antes de aprobarlo
  • Considera usar un usuario de base de datos con permisos limitados
  • Usa una base de datos de prueba si es posible al probar este servidor por primera vez

Este enfoque de "Permitir una vez" te da control total para prevenir cambios no deseados en tu base de datos, mientras permite que Claude te ayude con tareas de gestión de datos cuando sea necesario.

⚙️ Variables de Entorno

Puedes personalizar el comportamiento del servidor con variables de entorno en tu configuración de Claude Desktop:

"env": {
  "TRANSACTION_TIMEOUT_MS": "60000",
  "MAX_CONCURRENT_TRANSACTIONS": "5"
}

Variables de entorno clave:

  • TRANSACTION_TIMEOUT_MS: Tiempo de espera de transacción en milisegundos (predeterminado: 15000)

    • Auméntalo si tus transacciones necesitan más tiempo
    • Las transacciones que excedan este tiempo se revertirán automáticamente por seguridad
  • MAX_CONCURRENT_TRANSACTIONS: Máximo de transacciones concurrentes (predeterminado: 10)

    • Reduce este número para una operación más conservadora
    • Valores más altos permiten más operaciones de escritura simultáneas
  • ENABLE_TRANSACTION_MONITOR: Habilita/deshabilita el monitor de transacciones ("true" o "false", predeterminado: "true")

    • Monitorea y revierte automáticamente transacciones abandonadas
    • Rara vez necesita deshabilitarse
  • PG_STATEMENT_TIMEOUT_MS: Tiempo de espera de ejecución de consultas SQL en ms (predeterminado: 30000)

    • Limita cuánto tiempo puede ejecutarse cualquier sentencia SQL individual
    • Característica de seguridad importante para prevenir consultas descontroladas
  • PG_MAX_CONNECTIONS: Máximo de conexiones a PostgreSQL (predeterminado: 20)

    • Es importante mantenerse dentro de los límites de conexión de tu base de datos
  • MONITOR_INTERVAL_MS: Frecuencia de verificación de transacciones atascadas (predeterminado: 5000)

    • Normalmente no necesita ajuste

🔄 Uso del Acceso Completo a la Base de Datos con Claude

Este servidor permite a Claude leer y escribir en tu base de datos PostgreSQL con tu aprobación. Aquí hay algunos ejemplos de flujos de conversación:

Ejemplo: Crear una Nueva Tabla y Agregar Datos

Tú: "Necesito una nueva tabla de productos con columnas para id, nombre, precio e inventario"

Claude: Analiza tu base de datos y crea una consulta

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    inventory INTEGER DEFAULT 0
);

Claude Desktop te pedirá que apruebes esta operación

Tú: Revisa y haz clic en "Permitir una vez"

Claude: "He creado la tabla de productos. ¿Te gustaría que agregara algunos datos de muestra?"

Tú: "Sí, por favor agrega 5 productos de muestra"

Claude: Crea sentencias INSERT y solicita aprobación Tú revisas y apruebas con "Permitir una vez"

Ejemplo: Análisis de Datos con Consultas Seguras

Tú: "¿Cuáles son mis 3 productos principales por precio?"

Claude: Ejecuta una consulta de solo lectura automáticamente Te muestra los resultados

Flujo de Trabajo de Seguridad

La característica de seguridad clave es el enfoque de dos pasos para cualquier operación que modifique tu base de datos:

  1. Claude analiza tu solicitud y prepara el SQL
  2. Para operaciones de solo lectura (SELECT), Claude ejecuta automáticamente
  3. Para operaciones de escritura (INSERT, UPDATE, DELETE, CREATE, etc.):
    • Claude ejecuta el SQL en una transacción y finaliza la conversación
    • Tú revisas los resultados
    • En una nueva conversación, respondes con "Sí" para confirmar o "No" para revertir
    • Claude Desktop te muestra exactamente qué se cambiará y solicita permiso
    • Haces clic en "Permitir una vez" para permitir la operación específica
    • Claude ejecuta la operación y devuelve los resultados

Esto te brinda múltiples oportunidades para verificar los cambios antes de que se apliquen permanentemente a la base de datos.

⚠️ Consideraciones de Seguridad

Al conectar Claude a tu base de datos con acceso de escritura:

Permisos del Usuario de la Base de Datos

IMPORTANTE: Crea un usuario de base de datos dedicado con permisos apropiados:

-- Example of creating a restricted user (adjust as needed)
CREATE USER claude_user WITH PASSWORD 'secure_password';
GRANT SELECT ON ALL TABLES IN SCHEMA public TO claude_user;
GRANT INSERT, UPDATE, DELETE ON TABLE table1, table2 TO claude_user;
-- Only grant specific permissions as needed

Mejores Prácticas para un Uso Seguro

  1. Usa siempre "Permitir una vez" para revisar cada operación de escritura

    • Nunca selecciones "Permitir siempre" para modificaciones de la base de datos
    • Tómate el tiempo para revisar el SQL cuidadosamente
  2. Conéctate a una base de datos de prueba al explorar esta herramienta por primera vez

    • Considera usar una copia/respaldo de la base de datos para pruebas iniciales
  3. Limita los permisos del usuario de la base de datos solo a lo necesario

    • Evita usar una cuenta de superusuario o administrador
    • Otorga permisos específicos de tabla cuando sea posible
  4. Implementa respaldos de la base de datos antes de un uso extensivo

  5. Nunca compartas datos sensibles que no deberían exponerse a los LLMs

  6. Verifica todas las operaciones SQL antes de aprobarlas

    • Comprueba los nombres de las tablas
    • Verifica los nombres de las columnas y los datos
    • Confirma que las cláusulas WHERE sean apropiadas
    • Busca un manejo adecuado de transacciones

Docker

El servidor se puede ejecutar fácilmente en un contenedor Docker:

# Build the Docker image
docker build -t mcp-postgres-full-access .

# Run the container
docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host:5432/database"

Para Docker en macOS, usa host.docker.internal para conectarte a la red del host:

docker run -i --rm mcp-postgres-full-access "postgresql://username:password@host.docker.internal:5432/database"

📄 Licencia

Este servidor MCP está licenciado bajo la Licencia MIT.

💡 Comparación con el Servidor MCP Oficial de PostgreSQL

CaracterísticaEste ServidorServidor MCP Oficial de PostgreSQL
Acceso de Lectura
Acceso de Escritura
Detalles del EsquemaMejoradoBásico
Soporte de TransaccionesExplícito con tiempos de esperaSolo lectura
Información de Índices
Detalles de Claves Foráneas
Estimaciones de Número de Filas
Descripciones de Tablas

Autor

Creado por Syahiid Nur Kamil (@syahiidkamil)


Copyright © 2024 Syahiid Nur Kamil. Todos los derechos reservados.