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:
- Credenciales de acceso para su base de datos.
- 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.
Opción 2: Usar Python
Si tiene pipx
instalado, puede instalar Postgres MCP Pro con:
De lo contrario, instale Postgres MCP Pro con uv
:
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
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
Si está utilizando uv
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
hastaCursor Settings
y luego abrir la pestañaMCP
para acceder al archivo de configuración. - Si está utilizando Windsurf, puede navegar desde la
Command Palette
aOpen Windsurf Settings Page
para acceder al archivo de configuración. - Si está utilizando Goose run
goose configure
, seleccioneAdd 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:
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:
Para Windsurf, el formato en mcp_config.json
es ligeramente diferente:
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:
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 herramienta | Descripción |
---|---|
list_schemas | Enumera todos los esquemas de base de datos disponibles en la instancia de PostgreSQL. |
list_objects | Enumera los objetos de la base de datos (tablas, vistas, secuencias, extensiones) dentro de un esquema especificado. |
get_object_details | Proporciona información sobre un objeto de base de datos específico, por ejemplo, las columnas, las restricciones y los índices de una tabla. |
execute_sql | Ejecuta sentencias SQL en la base de datos, con limitaciones de solo lectura cuando se conecta en modo restringido. |
explain_query | Obtiene 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_queries | Informa las consultas SQL más lentas en función del tiempo total de ejecución utilizando datos pg_stat_statements . |
analyze_workload_indexes | Analiza 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_indexes | Analiza una lista de consultas SQL específicas (hasta 10) y recomienda índices óptimos para ellas. |
analyze_db_health | Realiza 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 Pro | Otros 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:
- 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 herramientaanalyze_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 aget_top_queries
, que acepta un parámetro para el tiempo medio de ejecución frente al tiempo total, y luego pasar estas consultasanalyze_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. - 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.
- 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áusulasLIKE
, 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 %. - 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:
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
- Instalar uv :Copy
- Clonar el repositorio :Copy
- Instalar dependencias :Copy
- Ejecutar el servidor :Copy
You must be authenticated.
local-only server
The server can only run on the client's local machine because it depends on local resources.
Tools
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.
- Demo
- Quick Start
- SSE Transport
- Postgres Extension Installation (Optional)
- Usage Examples
- MCP Server API
- Related Projects
- Frequently Asked Questions
- Roadmap
- Technical Notes
- Postgres MCP Pro Development
Related Resources
Related MCP Servers
- -securityFlicense-qualityA 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
- -securityAlicense-qualitywhat 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 -4GoMIT License
- -securityFlicense-qualityA 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
- -securityAlicense-qualityA 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 -3PythonMIT License