Postgres MCP

MIT License
140
  • Apple
  • Linux

Integrations

  • Provides containerized deployment of the Postgres MCP server with automatic hostname remapping to work from inside containers on different operating systems.

  • Provides tools for database health monitoring, index tuning, schema intelligence, query optimization, and protected SQL execution in PostgreSQL databases. Includes workload analysis, index recommendations, slow query identification, and database health checks.

  • Helps identify and fix performance issues in SQLAlchemy ORM code, optimizing query execution plans and suggesting appropriate indexes to improve performance.

Descripción general

Postgres MCP Pro es un servidor de Protocolo de Contexto de Modelo (MCP) de código abierto creado para respaldarlo a usted y a sus agentes de IA durante todo el proceso de desarrollo , desde la codificación inicial, pasando por las pruebas y la implementación, hasta el ajuste y el mantenimiento de la producción.

Postgres MCP Pro hace mucho más que encapsular una conexión de base de datos.

Las características incluyen:

  • 🔍 Estado de la base de datos : analice el estado del índice, la utilización de la conexión, el caché del búfer, el estado del vacío, los límites de secuencia, el retraso de replicación y más.
  • ⚡ Ajuste de índice : explore miles de índices posibles para encontrar la mejor solución para su carga de trabajo, utilizando algoritmos de nivel industrial.
  • 📈 Planes de consulta : valide y optimice el rendimiento revisando los planes EXPLAIN y simulando el impacto de índices hipotéticos.
  • 🧠 Inteligencia de esquema : generación de SQL consciente del contexto basada en una comprensión detallada del esquema de la base de datos.
  • 🛡️ Ejecución segura de SQL : control de acceso configurable, que incluye soporte para modo de solo lectura y análisis de SQL seguro, lo que lo hace utilizable tanto para desarrollo como para producción.

Postgres MCP Pro admite los transportes de entrada/salida estándar (stdio) y eventos enviados por el servidor (SSE) , para brindar flexibilidad en diferentes entornos.

Para obtener más información sobre por qué creamos Postgres MCP Pro, consulte nuestra publicación de blog de lanzamiento .

Manifestación

De inutilizable a rapidísimo

  • Desafío: generamos una aplicación de películas usando un asistente de inteligencia artificial, pero el código ORM de SQLAlchemy funcionó extremadamente lento.
  • Solución: al utilizar Postgres MCP Pro con Cursor, solucionamos los problemas de rendimiento en minutos.

Lo que hicimos:

  • 🚀 Rendimiento corregido, incluidas consultas ORM, indexación y almacenamiento en caché
  • 🛠️ Se corrigió una página rota: se le pidió al agente que explorara los datos, corrigiera consultas y agregara contenido relacionado.
  • 🧠 Se mejoraron las películas principales: explorando los datos y corrigiendo la consulta ORM para mostrar resultados más relevantes.

Vea el vídeo a continuación o lea la narración paso a paso .

https://github.com/user-attachments/assets/24e05745-65e9-4998-b877-a368f1eadc13

Inicio rápido

Prerrequisitos

Antes de comenzar, asegúrese de tener:

  1. Credenciales de acceso para su base de datos.
  2. Docker o Python 3.12 o superior.
Credenciales de acceso

Puede confirmar que sus credenciales de acceso sean válidas utilizando psql o una herramienta GUI como pgAdmin .

Docker o Python

La decisión de usar Docker o Python es suya. Generalmente recomendamos Docker porque los usuarios de Python pueden encontrar problemas más específicos del entorno. Sin embargo, suele ser recomendable usar el método con el que esté más familiarizado.

Instalación

Elija uno de los siguientes métodos para instalar Postgres MCP Pro:

Opción 1: Usar Docker

Extraiga la imagen Docker del servidor Postgres MCP Pro. Esta imagen contiene todas las dependencias necesarias, lo que proporciona una forma fiable de ejecutar Postgres MCP Pro en diversos entornos.

docker pull crystaldba/postgres-mcp
Opción 2: Usar Python

Si tiene pipx instalado, puede instalar Postgres MCP Pro con:

pipx install postgres-mcp

De lo contrario, instale Postgres MCP Pro con uv :

uv pip install postgres-mcp

Si necesita instalar uv , consulte las instrucciones de instalación de uv .

Configura tu asistente de IA

Proporcionamos instrucciones completas para configurar Postgres MCP Pro con Claude Desktop. Muchos clientes MCP tienen archivos de configuración similares; puede adaptar estos pasos para que funcionen con el cliente que prefiera.

Configuración del escritorio de Claude

Necesitará editar el archivo de configuración de Claude Desktop para agregar Postgres MCP Pro. La ubicación de este archivo depende de su sistema operativo:

  • MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Ventanas: %APPDATA%/Claude/claude_desktop_config.json

También puede utilizar el elemento del menú Settings en Claude Desktop para localizar el archivo de configuración.

Ahora editará la sección mcpServers del archivo de configuración.

Si está utilizando Docker
{ "mcpServers": { "postgres": { "command": "docker", "args": [ "run", "-i", "--rm", "-e", "DATABASE_URI", "crystaldba/postgres-mcp", "--access-mode=unrestricted" ], "env": { "DATABASE_URI": "postgresql://username:password@localhost:5432/dbname" } } } }

La imagen Docker de Postgres MCP Pro reasignará automáticamente el nombre de host localhost para que funcione desde dentro del contenedor.

  • MacOS/Windows: utiliza host.docker.internal automáticamente
  • Linux: utiliza 172.17.0.1 o la dirección de host apropiada automáticamente
Si estás usando pipx
{ "mcpServers": { "postgres": { "command": "postgres-mcp", "args": [ "--access-mode=unrestricted" ], "env": { "DATABASE_URI": "postgresql://username:password@localhost:5432/dbname" } } } }
Si está utilizando uv
{ "mcpServers": { "postgres": { "command": "uv", "args": [ "run", "postgres-mcp", "--access-mode=unrestricted" ], "env": { "DATABASE_URI": "postgresql://username:password@localhost:5432/dbname" } } } }
URI de conexión

Reemplace postgresql://... con el URI de conexión de su base de datos Postgres .

Modo de acceso

Postgres MCP Pro admite múltiples modos de acceso para brindarle control sobre las operaciones que el agente de IA puede realizar en la base de datos:

  • Modo sin restricciones : Permite acceso total de lectura y escritura para modificar datos y esquemas. Es adecuado para entornos de desarrollo.
  • Modo restringido : Limita las operaciones a transacciones de solo lectura e impone restricciones en el uso de recursos (actualmente solo en el tiempo de ejecución). Es adecuado para entornos de producción.

Para utilizar el modo restringido, reemplace --access-mode=unrestricted con --access-mode=restricted en los ejemplos de configuración anteriores.

Otros clientes de MCP

Muchos clientes MCP tienen archivos de configuración similares a Claude Desktop, y puedes adaptar los ejemplos anteriores para que funcionen con el cliente de tu elección.

  • Si está usando Cursor, puede navegar desde la Command Palette hasta Cursor Settings y luego abrir la pestaña MCP para acceder al archivo de configuración.
  • Si está utilizando Windsurf, puede navegar desde la Command Palette a Open Windsurf Settings Page para acceder al archivo de configuración.
  • Si está utilizando Goose run goose configure , seleccione Add Extension .

Transporte SSE

Postgres MCP Pro es compatible con el transporte SSE , que permite que varios clientes MCP compartan un servidor, posiblemente un servidor remoto. Para usar el transporte SSE, debe iniciar el servidor con la opción --transport=sse .

Por ejemplo, con Docker ejecute:

docker run -p 8000:8000 \ -e DATABASE_URI=postgresql://username:password@localhost:5432/dbname \ crystaldba/postgres-mcp --access-mode=unrestricted --transport=sse

Luego, actualice la configuración de su cliente MCP para llamar al servidor MCP. Por ejemplo, en el mcp.json de Cursor o en cline_mcp_settings.json de Cline, puede escribir:

{ "mcpServers": { "postgres": { "type": "sse", "url": "http://localhost:8000/sse" } } }

Para Windsurf, el formato en mcp_config.json es ligeramente diferente:

{ "mcpServers": { "postgres": { "type": "sse", "serverUrl": "http://localhost:8000/sse" } } }

Instalación de la extensión de Postgres (opcional)

Para habilitar el ajuste del índice y el análisis integral del rendimiento, debe cargar las extensiones pg_statements e hypopg en su base de datos.

  • La extensión pg_statements permite a Postgres MCP Pro analizar las estadísticas de ejecución de consultas. Por ejemplo, esto le permite comprender qué consultas se ejecutan con lentitud o consumen muchos recursos.
  • La extensión hypopg permite a Postgres MCP Pro simular el comportamiento del planificador de consultas de Postgres después de agregar índices.

Instalación de extensiones en AWS RDS, Azure SQL o Google Cloud SQL

Si su base de datos Postgres se ejecuta en un servicio administrado por un proveedor de nube, las extensiones pg_statements e hypopg ya deberían estar disponibles en el sistema. En este caso, puede ejecutar los comandos CREATE EXTENSION con un rol con privilegios suficientes:

CREATE EXTENSION IF NOT EXISTS pg_statements; CREATE EXTENSION IF NOT EXISTS hypopg;

Instalación de extensiones en Postgres autogestionado

Si administra su propia instalación de Postgres, es posible que deba realizar tareas adicionales. Antes de cargar la extensión pg_statements , asegúrese de que esté incluida en shared_preload_libraries del archivo de configuración de Postgres. La extensión hypopg también puede requerir una instalación adicional a nivel de sistema (por ejemplo, a través de su gestor de paquetes), ya que no siempre se incluye con Postgres.

Ejemplos de uso

Obtener una descripción general del estado de la base de datos

Preguntar:

Verificar la salud de mi base de datos e identificar cualquier problema.

Analizar consultas lentas

Preguntar:

¿Cuáles son las consultas más lentas en mi base de datos? ¿Y cómo puedo acelerarlas?

Obtenga recomendaciones sobre cómo acelerar las cosas

Preguntar:

Mi aplicación va lenta. ¿Cómo puedo hacerla más rápida?

Generar recomendaciones de índice

Preguntar:

Analizar la carga de trabajo de mi base de datos y sugerir índices para mejorar el rendimiento.

Optimizar una consulta específica

Preguntar:

Ayúdame a optimizar esta consulta: SELECT * FROM orders JOIN customers ON orders.customer_id = customers.id WHERE orders.created_at > '2023-01-01';

API del servidor MCP

El estándar MCP define varios tipos de puntos finales: herramientas, recursos, indicaciones y otros.

Postgres MCP Pro ofrece funcionalidad únicamente mediante herramientas MCP . Elegimos este enfoque porque el ecosistema de clientes MCP ofrece una amplia compatibilidad con estas herramientas. Esto contrasta con el enfoque de otros servidores Postgres MCP, incluido el Servidor Postgres MCP de Referencia , que utilizan recursos MCP para exponer información del esquema.

Herramientas profesionales de Postgres MCP:

Nombre de la herramientaDescripción
list_schemasEnumera todos los esquemas de base de datos disponibles en la instancia de PostgreSQL.
list_objectsEnumera los objetos de la base de datos (tablas, vistas, secuencias, extensiones) dentro de un esquema especificado.
get_object_detailsProporciona información sobre un objeto de base de datos específico, por ejemplo, las columnas, las restricciones y los índices de una tabla.
execute_sqlEjecuta sentencias SQL en la base de datos, con limitaciones de solo lectura cuando se conecta en modo restringido.
explain_queryObtiene el plan de ejecución de una consulta SQL, describiendo cómo la procesará PostgreSQL y exponiendo el modelo de costos del planificador de consultas. Puede invocarse con índices hipotéticos para simular el comportamiento tras agregarlos.
get_top_queriesInforma las consultas SQL más lentas en función del tiempo total de ejecución utilizando datos pg_stat_statements .
analyze_workload_indexesAnaliza la carga de trabajo de la base de datos para identificar consultas que consumen muchos recursos y luego recomienda índices óptimos para ellas.
analyze_query_indexesAnaliza una lista de consultas SQL específicas (hasta 10) y recomienda índices óptimos para ellas.
analyze_db_healthRealiza verificaciones de estado integrales que incluyen: tasas de aciertos de caché de búfer, estado de conexión, validación de restricciones, estado de índice (duplicado/no utilizado/no válido), límites de secuencia y estado de vacío.

Proyectos relacionados

Servidores MCP de Postgres

  • Consulta MCP . Un servidor MCP para Supabase Postgres con una arquitectura de seguridad de tres niveles y compatibilidad con la API de gestión de Supabase.
  • PG-MCP . Un servidor MCP para PostgreSQL con opciones de conexión flexibles, planes de explicación, contexto de extensión y más.
  • Referencia al servidor MCP de PostgreSQL . Una implementación sencilla del servidor MCP que expone la información del esquema como recursos MCP y ejecuta consultas de solo lectura.
  • Servidor MCP de Supabase Postgres . Este servidor MCP proporciona funciones de gestión de Supabase y recibe mantenimiento activo de la comunidad de Supabase.
  • Servidor MCP de Nile . Un servidor MCP que proporciona acceso a la API de administración para el servicio Postgres multiinquilino de Nile.
  • Servidor MCP de Neon . Un servidor MCP que proporciona acceso a la API de gestión para el servicio Postgres sin servidor de Neon.
  • Servidor Wren MCP . Proporciona un motor semántico que impulsa la inteligencia empresarial para Postgres y otras bases de datos.

Herramientas de DBA (incluidas las ofertas comerciales)

  • Optimizador de Base de Datos Aiven . Una herramienta que proporciona análisis integral de la carga de trabajo de la base de datos, optimizaciones de consultas y otras mejoras de rendimiento.
  • dba.ai. Un asistente de administración de bases de datos basado en IA que se integra con GitHub para resolver problemas de código.
  • pgAnalyze . Una plataforma integral de monitorización y análisis para identificar cuellos de botella en el rendimiento, optimizar consultas y generar alertas en tiempo real.
  • Postgres.ai . Una experiencia de chat interactiva que combina una amplia base de conocimiento de Postgres y GPT-4.
  • Agente Xata . Un agente de IA de código abierto que supervisa automáticamente el estado de la base de datos, diagnostica problemas y ofrece recomendaciones mediante razonamiento y manuales basados en LLM.

Utilidades de Postgres

  • Dexter . Una herramienta para generar y probar índices hipotéticos en PostgreSQL.
  • PgHero . Un panel de rendimiento para Postgres con recomendaciones. Postgres MCP Pro incorpora comprobaciones de estado de PgHero.
  • PgTune . Heurísticas para ajustar la configuración de Postgres.

Preguntas frecuentes

¿En qué se diferencia Postgres MCP Pro de otros servidores Postgres MCP? Muchos servidores MCP permiten que un agente de IA ejecute consultas en una base de datos Postgres. Postgres MCP Pro también lo hace, pero además añade herramientas para comprender y mejorar el rendimiento de su base de datos Postgres. Por ejemplo, implementa una versión del algoritmo Anytime del Asesor de Ajuste de Base de Datos para Microsoft SQL Server , un algoritmo moderno y de alta calidad para el ajuste automático de índices.

Postgres MCP ProOtros servidores MCP de Postgres
✅ Comprobaciones deterministas del estado de la base de datos❌ Consultas de salud generadas por LLM irrepetibles
✅ Estrategias de búsqueda de indexación basadas en principios❌ Gen-AI sugiere mejoras en la indexación
✅ Análisis de la carga de trabajo para encontrar los principales problemas❌ Análisis de problemas inconsistente
✅ Simula mejoras de rendimiento❌ Pruébelo usted mismo y vea si funciona

Postgres MCP Pro complementa la IA generativa agregando herramientas deterministas y algoritmos de optimización clásicos. La combinación es confiable y flexible.

¿Por qué se necesitan las herramientas MCP cuando el LLM puede razonar, generar SQL, etc.? Los LLM son invaluables para tareas que involucran ambigüedad, razonamiento o lenguaje natural. Sin embargo, en comparación con el código procedimental, pueden ser lentos, costosos, no deterministas y, en ocasiones, producir resultados poco fiables. En el caso del ajuste de bases de datos, contamos con algoritmos consolidados, desarrollados durante décadas, de eficacia comprobada. Postgres MCP Pro le permite combinar lo mejor de ambos mundos al combinar los LLM con algoritmos de optimización clásicos y otras herramientas procedimentales.

¿Cómo se prueba Postgres MCP Pro? Las pruebas son fundamentales para garantizar la fiabilidad y precisión de Postgres MCP Pro. Estamos desarrollando un conjunto de cargas de trabajo adversarias generadas por IA, diseñadas para desafiar a Postgres MCP Pro y garantizar su rendimiento en una amplia variedad de escenarios.

¿Qué versiones de Postgres son compatibles? Actualmente, nuestras pruebas se centran en Postgres 15, 16 y 17. Planeamos ofrecer compatibilidad con las versiones 13 a 17 de Postgres.

¿Quién creó este proyecto? Crystal DBA lo crea y lo mantiene.

Hoja de ruta

Por determinar

Tú y tus necesidades son un factor clave en lo que creamos. Dinos qué quieres ver abriendo un problema o una solicitud de incorporación de cambios . También puedes contactarnos en Discord .

Notas técnicas

Esta sección incluye una descripción general de alto nivel de las consideraciones técnicas que influyeron en el diseño de Postgres MCP Pro.

Ajuste del índice

Los desarrolladores saben que la falta de índices es una de las causas más comunes de problemas de rendimiento en las bases de datos. Los índices proporcionan métodos de acceso que permiten a Postgres localizar rápidamente los datos necesarios para ejecutar una consulta. Cuando las tablas son pequeñas, los índices apenas influyen, pero a medida que aumenta el tamaño de los datos, la diferencia en la complejidad algorítmica entre un escaneo de tabla y una búsqueda en índice se vuelve significativa (normalmente O ( n ) frente a O ( log n ), y potencialmente mayor si se utilizan uniones en varias tablas).

La generación de índices sugeridos en Postgres MCP Pro se realiza en varias etapas:

  1. Identifique las consultas SQL que requieren ajuste . Si sabe que tiene un problema con una consulta SQL específica, puede proporcionarla. Postgres MCP Pro también puede analizar la carga de trabajo para identificar objetivos de ajuste de índice. Para ello, utiliza la extensión pg_stat_statements , que registra el tiempo de ejecución y el consumo de recursos de cada consulta.Una consulta es candidata para el ajuste de índices si consume muchos recursos, ya sea por ejecución o en conjunto. Actualmente, utilizamos el tiempo de ejecución como indicador del consumo acumulado de recursos, pero también puede ser conveniente considerar recursos específicos, como el número de bloques accedidos o el número de bloques leídos del disco. La herramienta analyze_query_workload se centra en consultas lentas, utilizando el tiempo medio por ejecución con umbrales para el número de ejecuciones y el tiempo medio de ejecución. Los agentes también pueden llamar a get_top_queries , que acepta un parámetro para el tiempo medio de ejecución frente al tiempo total, y luego pasar estas consultas analyze_query_indexes para obtener recomendaciones de índices.Los sofisticados sistemas de ajuste de índices utilizan la compresión de la carga de trabajo para generar un subconjunto representativo de consultas que refleja las características de la carga de trabajo en su conjunto, lo que reduce la complejidad de los algoritmos posteriores. Postgres MCP Pro realiza una forma limitada de compresión de la carga de trabajo normalizando las consultas para que las generadas a partir de la misma plantilla aparezcan como una sola. Asigna la misma ponderación a cada consulta, una simplificación que funciona cuando los beneficios de la indexación son considerables.
  2. Generar índices candidatos. Una vez que tenemos una lista de consultas SQL que queremos mejorar mediante la indexación, generamos una lista de índices que podríamos añadir. Para ello, analizamos el SQL e identificamos las columnas utilizadas en filtros, uniones, agrupaciones u ordenaciones.Para generar todos los índices posibles, debemos considerar combinaciones de estas columnas, ya que Postgres admite índices multicolumna . En la presente implementación, incluimos solo una permutación de cada posible índice multicolumna, que se selecciona aleatoriamente. Esta simplificación se realiza para reducir el espacio de búsqueda, ya que las permutaciones suelen tener un rendimiento equivalente. Sin embargo, esperamos mejorar en este aspecto.
  3. Búsqueda de la configuración óptima de índices . Nuestro objetivo es encontrar la combinación de índices que equilibre óptimamente las ventajas de rendimiento con los costes de almacenamiento y mantenimiento de dichos índices. Estimamos la mejora del rendimiento utilizando las funciones hipotéticas de la extensión hypopg . Esta simula cómo el optimizador de consultas de Postgres ejecutará una consulta tras añadir índices e informa de los cambios según el modelo de costes real de Postgres.Un desafío radica en que la generación de planes de consulta generalmente requiere conocer los valores específicos de los parámetros utilizados en la consulta. La normalización de consultas, necesaria para reducir las consultas consideradas, elimina las constantes de los parámetros. Los valores de los parámetros proporcionados mediante variables de enlace tampoco están disponibles.Para solucionar este problema, generamos constantes realistas que podemos proporcionar como parámetros mediante el muestreo de las estadísticas de la tabla. En la versión 16, Postgres añadió la funcionalidad genérica de explicar el plan , pero presenta limitaciones, por ejemplo, en relación con las cláusulas LIKE , que nuestra implementación no presenta.La estrategia de búsqueda es crucial, ya que evaluar todas las posibles combinaciones de índices solo es factible en situaciones simples. Esto es lo que más distingue a los distintos enfoques de indexación. Adaptando el enfoque del algoritmo Anytime de Microsoft, empleamos una estrategia de búsqueda voraz: buscamos la mejor solución de un índice y, a continuación, el mejor índice para añadirlo a esta, generando una solución de dos índices. Nuestra búsqueda finaliza cuando se agota el tiempo disponible o cuando una ronda de exploración no produce mejoras superiores al umbral mínimo de mejora del 10 %.
  4. Análisis de costo-beneficio . Ante dos alternativas de indexación, una que ofrece mejor rendimiento y otra que requiere más espacio, ¿cómo decidimos cuál elegir? Tradicionalmente, los asesores de indexación solicitan un presupuesto de almacenamiento y optimizan el rendimiento en función de dicho presupuesto. Nosotros también tomamos un presupuesto de almacenamiento, pero realizamos un análisis de costo-beneficio durante la optimización.Enmarcamos esto como el problema de seleccionar un punto en el frente de Pareto : el conjunto de opciones para las cuales mejorar una métrica de calidad necesariamente empeora otra. En un mundo ideal, podríamos querer evaluar el costo del almacenamiento y el beneficio de un mejor rendimiento en términos monetarios. Sin embargo, existe un enfoque más sencillo y práctico: observar los cambios en términos relativos. La mayoría de las personas estarían de acuerdo en que una mejora del rendimiento de 100x vale la pena, incluso si el costo de almacenamiento es el doble. En nuestra implementación, utilizamos un parámetro configurable para establecer este umbral. Por defecto, requerimos que el cambio en el logaritmo (base 10) de la mejora del rendimiento sea el doble de la diferencia en el logaritmo del costo de espacio. Esto equivale a permitir un aumento máximo de 10x en el espacio para una mejora del rendimiento de 100x.

Nuestra implementación se asemeja más al algoritmo Anytime de Microsoft SQL Server. A diferencia de Dexter , una herramienta de indexación automática para Postgres, buscamos en un espacio más amplio y utilizamos heurísticas diferentes. Esto nos permite generar mejores soluciones a costa de un mayor tiempo de ejecución.

También mostramos el trabajo realizado en cada ronda de búsqueda, incluyendo una comparación de los planes de consulta antes y después de añadir cada índice. Esto proporciona al LLM contexto adicional que puede utilizar al responder a las recomendaciones de indexación.

Salud de la base de datos

Las comprobaciones del estado de la base de datos identifican oportunidades de optimización y necesidades de mantenimiento antes de que provoquen problemas críticos. En la versión actual, Postgres MCP Pro adapta las comprobaciones del estado de la base de datos directamente desde PgHero . Estamos trabajando para validar completamente estas comprobaciones y podríamos ampliarlas en el futuro.

  • Estado del índice . Busca índices sin usar, duplicados e inflados. Los índices inflados hacen un uso ineficiente de las páginas de la base de datos. El vaciado automático de Postgres limpia las entradas de índice que apuntan a tuplas inactivas y las marca como reutilizables. Sin embargo, no compacta las páginas de índice y, eventualmente, estas pueden contener pocas referencias a tuplas activas.
  • Tasa de aciertos de la caché del búfer . Mide la proporción de lecturas de la base de datos que se procesan desde la caché del búfer en lugar del disco. Es fundamental investigar una tasa de aciertos baja de la caché del búfer, ya que a menudo no es rentable y reduce el rendimiento de la aplicación.
  • Estado de la conexión . Comprueba el número de conexiones a la base de datos e informa sobre su utilización. El mayor riesgo es quedarse sin conexiones, pero un alto número de conexiones inactivas o bloqueadas también puede indicar problemas.
  • Estado de vacío . El vacío es importante por muchas razones. Una de ellas es fundamental para evitar el envoltorio de identificadores de transacción, que puede provocar que la base de datos deje de aceptar escrituras. El mecanismo de control de concurrencia multiversión (MVCC) de Postgres requiere un identificador de transacción único para cada transacción. Sin embargo, dado que Postgres utiliza un entero con signo de 32 bits para los identificadores de transacción, necesita reutilizarlos después de un máximo de 2 mil millones de transacciones. Para ello, "congela" los identificadores de transacción de las transacciones históricas, estableciéndolos con un valor especial que indica un pasado lejano. Cuando los registros se almacenan por primera vez en el disco, se les aplica visibilidad de escritura para un rango de identificadores de transacción. Antes de reutilizar estos identificadores de transacción, Postgres debe actualizar los registros en disco, "congelándolos" para eliminar las referencias a los identificadores de transacción que se van a reutilizar. Esta comprobación busca tablas que requieren vacío para evitar el envoltorio de identificadores de transacción.
  • Estado de replicación . Comprueba el estado de replicación mediante la monitorización del retardo entre el servidor principal y las réplicas, la verificación del estado de replicación y el seguimiento del uso de las ranuras de replicación.
  • Estado de las restricciones . Durante el funcionamiento normal, Postgres rechaza cualquier transacción que pueda causar una violación de una restricción. Sin embargo, pueden aparecer restricciones no válidas después de cargar datos o en escenarios de recuperación. Esta comprobación busca restricciones no válidas.
  • Estado de la secuencia . Busca secuencias con riesgo de superar su valor máximo.

Biblioteca de cliente de Postgres

Postgres MCP Pro utiliza psycopg3 para conectarse a Postgres mediante E/S asíncronas. Internamente, psycopg3 utiliza la biblioteca libpq para conectarse a Postgres, lo que proporciona acceso a todas las funciones de Postgres y a una implementación subyacente totalmente compatible con la comunidad de Postgres.

Otros servidores MCP basados en Python usan asyncpg , lo que puede simplificar la instalación al eliminar la dependencia libpq . Asyncpg también es probablemente más rápido que psycopg3, pero no lo hemos validado nosotros mismos. Las pruebas de rendimiento anteriores indican una mayor diferencia de rendimiento, lo que sugiere que la versión más reciente de psycopg3 ha acortado la diferencia con su desarrollo.

Tras sopesar estas consideraciones, seleccionamos psycopg3 en lugar de asyncpg . Estamos abiertos a revisar esta decisión en el futuro.

Configuración de la conexión

Al igual que el servidor de referencia PostgreSQL MCP , Postgres MCP Pro toma la información de conexión de Postgres al iniciarse. Esto resulta práctico para usuarios que siempre se conectan a la misma base de datos, pero puede resultar engorroso al cambiar de base de datos.

Un enfoque alternativo, adoptado por PG-MCP , consiste en proporcionar detalles de conexión mediante llamadas a herramientas MCP en el momento del uso. Esto resulta más práctico para los usuarios que cambian de base de datos y permite que un único servidor MCP admita simultáneamente a varios usuarios finales.

Debe haber un enfoque mejor que cualquiera de estos. Ambos presentan vulnerabilidades de seguridad: pocos clientes MCP almacenan la configuración del servidor MCP de forma segura (la excepción es Goose), y las credenciales proporcionadas mediante herramientas MCP se transfieren a través del LLM y se almacenan en el historial de chat. Ambos también presentan problemas de usabilidad en algunos casos.

Información del esquema

El propósito de la herramienta de información de esquema es proporcionar al agente de IA que realiza la llamada la información necesaria para generar SQL correcto y eficiente. Por ejemplo, supongamos que un usuario pregunta: "¿Cuántos vuelos despegaron de San Francisco y aterrizaron en París durante el último año?". El agente de IA necesita encontrar la tabla que almacena los vuelos, las columnas que almacenan el origen y los destinos, y quizás una tabla que vincule los códigos y las ubicaciones de los aeropuertos.

¿Por qué proporcionar herramientas de información de esquema cuando los LLM generalmente son capaces de generar el SQL para recuperar esta información directamente de Postgres?

Nuestra experiencia con Claude indica que el LLM que realiza la llamada genera muy bien SQL para explorar el esquema de Postgres consultando el catálogo del sistema de Postgres y el esquema de información (una vista de metadatos de base de datos estandarizada por ANSI). Sin embargo, desconocemos si otros LLM lo hacen con la misma fiabilidad y eficacia.

¿Sería mejor proporcionar información de esquema utilizando recursos MCP en lugar de herramientas MCP ?

El servidor MCP de referencia de PostgreSQL utiliza recursos para exponer la información del esquema en lugar de herramientas. Navegar por los recursos es similar a navegar por un sistema de archivos, por lo que este enfoque es natural en muchos sentidos. Sin embargo, la compatibilidad con recursos es menos común que con herramientas en el ecosistema de clientes MCP (véase clientes de ejemplo ). Además, si bien el estándar MCP establece que tanto agentes de IA como usuarios finales pueden acceder a los recursos, algunos clientes solo admiten la navegación humana en el árbol de recursos.

Ejecución de SQL protegida

La IA intensifica los desafíos tradicionales de proteger las bases de datos contra diversas amenazas, desde errores simples hasta ataques sofisticados de actores maliciosos. Ya sea que la amenaza sea accidental o maliciosa, se aplica un marco de seguridad similar, con objetivos que se dividen en tres categorías: confidencialidad, integridad y disponibilidad. La ya conocida tensión entre conveniencia y seguridad también es evidente y pronunciada.

El modo de ejecución SQL protegido de Postgres MCP Pro se centra en la integridad. En el contexto de MCP, nos preocupa especialmente que el SQL generado por LLM cause daños, por ejemplo, modificaciones o eliminaciones involuntarias de datos u otros cambios que puedan eludir el proceso de gestión de cambios de una organización.

La forma más sencilla de garantizar la integridad es garantizar que todo el SQL ejecutado en la base de datos sea de solo lectura. Una forma de lograrlo es crear un usuario de base de datos con permisos de solo lectura. Si bien este es un buen enfoque, muchos lo encuentran engorroso en la práctica. Postgres no permite configurar una conexión o sesión en modo de solo lectura, por lo que Postgres MCP Pro utiliza un enfoque más complejo para garantizar la ejecución de SQL de solo lectura sobre una conexión de lectura y escritura.

Postgres MCP proporciona un modo de transacción de solo lectura que impide la modificación de datos y esquemas. Al igual que el servidor PostgreSQL MCP de referencia , utilizamos transacciones de solo lectura para garantizar la ejecución segura de SQL.

Para que este mecanismo sea robusto, debemos asegurarnos de que el SQL no eluda de ningún modo el modo de transacción de solo lectura, por ejemplo, emitiendo una declaración COMMIT o ROLLBACK y luego comenzando una nueva transacción.

Por ejemplo, el LLM puede eludir el modo de transacción de solo lectura emitiendo una instrucción ROLLBACK y luego iniciando una nueva transacción. Por ejemplo:

ROLLBACK; DROP TABLE users;

Para evitar casos como este, analizamos el SQL antes de su ejecución mediante la biblioteca pglast . Rechazamos cualquier SQL que contenga sentencias de commit o rollback . Afortunadamente, los lenguajes de procedimientos almacenados más populares de Postgres, como PL/pgSQL y PL/Python, no permiten sentencias COMMIT o ROLLBACK . Si tiene habilitados lenguajes de procedimientos almacenados no seguros en su base de datos, nuestras protecciones de solo lectura podrían ser evadidas.

Actualmente, Postgres MCP Pro ofrece dos niveles de protección para la base de datos, uno en cada extremo del espectro de conveniencia/seguridad.

  • La opción "Sin restricciones" ofrece máxima flexibilidad. Es ideal para entornos de desarrollo donde la velocidad y la flexibilidad son primordiales y no es necesario proteger datos valiosos o sensibles.
  • La opción "Restringido" ofrece un equilibrio entre flexibilidad y seguridad. Es adecuada para entornos de producción donde la base de datos está expuesta a usuarios no confiables y donde es importante proteger datos valiosos o sensibles.

El modo sin restricciones se alinea con el enfoque del modo de ejecución automática de Cursor , donde el agente de IA opera con poca supervisión o aprobación humana. Esperamos que la ejecución automática se implemente en entornos de desarrollo donde las consecuencias de los errores sean bajas, las bases de datos no contengan datos valiosos ni sensibles, y puedan recrearse o restaurarse a partir de copias de seguridad cuando sea necesario.

Diseñamos el modo restringido para que sea conservador, priorizando la seguridad, aunque pueda resultar inconveniente. El modo restringido se limita a operaciones de solo lectura y limitamos el tiempo de ejecución de las consultas para evitar que las consultas de larga duración afecten el rendimiento del sistema. Es posible que incorporemos medidas en el futuro para garantizar que el modo restringido sea seguro con bases de datos de producción.

Desarrollo de Postgres MCP Pro

Las siguientes instrucciones son para desarrolladores que desean trabajar en Postgres MCP Pro o usuarios que prefieren instalar Postgres MCP Pro desde la fuente.

Configuración de desarrollo local

  1. Instalar uv :
    curl -sSL https://astral.sh/uv/install.sh | sh
  2. Clonar el repositorio :
    git clone https://github.com/crystaldba/postgres-mcp.git cd postgres-mcp
  3. Instalar dependencias :
    uv pip install -e . uv sync
  4. Ejecutar el servidor :
    uv run postgres-mcp "postgres://user:password@localhost:5432/dbname"

You must be authenticated.

A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

local-only server

The server can only run on the client's local machine because it depends on local resources.

Postgres Pro es un servidor de Protocolo de Contexto de Modelo (MCP) de código abierto diseñado para respaldarlo a usted y a sus agentes de IA durante todo el proceso de desarrollo: desde la codificación inicial, pasando por las pruebas y la implementación, hasta el ajuste y el mantenimiento de la producción.

  1. Demo
    1. Quick Start
      1. Prerequisites
      2. Installation
      3. Configure Your AI Assistant
    2. SSE Transport
      1. Postgres Extension Installation (Optional)
        1. Installing extensions on AWS RDS, Azure SQL, or Google Cloud SQL
        2. Installing extensions on self-managed Postgres
      2. Usage Examples
        1. Get Database Health Overview
        2. Analyze Slow Queries
        3. Get Recommendations On How To Speed Things Up
        4. Generate Index Recommendations
        5. Optimize a Specific Query
      3. MCP Server API
        1. Related Projects
          1. Frequently Asked Questions
            1. Roadmap
              1. Technical Notes
                1. Index Tuning
                2. Database Health
                3. Postgres Client Library
                4. Connection Configuration
                5. Schema Information
                6. Protected SQL Execution
              2. Postgres MCP Pro Development
                1. Local Development Setup

              Related MCP Servers

              • -
                security
                F
                license
                -
                quality
                A server implementing the Model Context Protocol (MCP) for Cursor that allows using a PostgreSQL database as storage for model contexts, enabling secure database exploration and querying.
                Last updated -
                JavaScript
                • Linux
                • Apple
              • -
                security
                A
                license
                -
                quality
                what is go-mcp-postgres? go-mcp-postgres is a Model Context Protocol (MCP) server designed for interacting with Postgres databases, allowing for easy CRUD operations and automation without the need for a Node.js or Python environment.
                Last updated -
                4
                Go
                MIT License
                • Linux
                • Apple
              • -
                security
                F
                license
                -
                quality
                A Model Context Protocol server that enables performing PostgreSQL database operations (create, read, update, delete) on User and Post entities through MCP tools.
                Last updated -
                TypeScript
              • -
                security
                A
                license
                -
                quality
                A template project for building custom MCP servers that enables direct access to PostgreSQL databases, allowing SQL query execution and schema information retrieval through the Model Context Protocol.
                Last updated -
                3
                Python
                MIT License
                • Apple
                • Linux

              View all related MCP servers

              ID: ecl7vgkzit