hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Built on Bun runtime for high performance server execution, leveraging Bun's speed and JavaScript/TypeScript capabilities.
Allows AI agents to interact with multiple PostgreSQL databases, including running read-only queries, executing data-modifying statements, performing transactions, listing tables, and inspecting database schemas.
Implements end-to-end type-safety throughout the server with TypeScript, ensuring robust and error-resistant database interactions.
FastPostgresMCP 🐘⚡️ (Servidor MCP multi-DB con todas las funciones)
Este proyecto implementa un servidor de Protocolo de Contexto de Modelo (MCP) ultrarrápido, seguro en cuanto a tipos y con todas las funciones, diseñado para que los agentes de IA (como Cursor, Claude Desktop) interactúen con múltiples bases de datos PostgreSQL, lo que incluye el listado de tablas y la inspección de esquemas.
Está construido con Bun, TypeScript, postgres
y aprovecha las características avanzadas del marco fastmcp
para construir servidores MCP robustos.
Propósito: Un servidor MCP para agentes de IA
Esta no es una biblioteca que se pueda importar a su código. Es una aplicación de servidor independiente . Se ejecuta como un proceso y los clientes MCP (como los agentes de IA) se comunican con ella mediante el Protocolo de Contexto de Modelo basado en JSON (v2.0), generalmente a través de una conexión stdio
administrada por la aplicación cliente (p. ej., Cursor).
Solución de problemas y desarrollo
Uso de la CLI para realizar pruebas
El paquete incluye un comando CLI integrado para probar el servidor MCP directamente:
Pruebas con el inspector MCP integrado
También puede utilizar el Inspector MCP para probar y depurar visualmente:
Problemas comunes
Si ve este error al ejecutar bunx postgres-mcp
:
Seguido de mensajes de ping, significa:
- El servidor MCP se inició correctamente
- El cliente se conectó exitosamente
- Pero el cliente solo envía solicitudes de ping y no negocia adecuadamente las capacidades.
Esto suele indicar que necesitas usar un cliente MCP adecuado. Prueba:
- Uso de
bun run cli
para probar con la CLI de MCP - Configuración del servidor MCP en Cursor o Claude Desktop como se describe en la sección Instalación
Si está desarrollando un cliente MCP personalizado, asegúrese de que implemente correctamente el protocolo MCP, incluida la negociación de capacidades.
✨ Características principales
- 🚀 Ultrarrápido: Creado con Bun y
fastmcp
. - 🔒 Type-Safe: TypeScript de extremo a extremo con validación de esquema Zod.
- 🐘 Compatibilidad con múltiples bases de datos: conéctese y administre interacciones entre varias instancias de PostgreSQL definidas en
.env
. - 🛡️ Seguro por diseño: las consultas parametrizadas a través de
postgres
evitan la inyección de SQL. - 🔑 Autenticación opcional: conexiones seguras basadas en red (SSE/HTTP) mediante validación de clave API (gancho
authenticate
defastmcp
). - 📄 Esquema de base de datos a través de recursos MCP:
- Lista de tablas: obtenga una lista de tablas en una base de datos a través de
db://{dbAlias}/schema/tables
. - Inspeccionar esquema de tabla: obtenga información detallada de la columna para una tabla específica a través de
db://{dbAlias}/schema/{tableName}
.
- Lista de tablas: obtenga una lista de tablas en una base de datos a través de
- 💬 Interacción de herramientas mejorada:
- Registro en la herramienta: las herramientas envían registros detallados al cliente (contexto
log
). - Informes de progreso: las operaciones de larga duración informan del progreso (contexto
reportProgress
).
- Registro en la herramienta: las herramientas envían registros detallados al cliente (contexto
- 🧠 Consciente de la sesión: acceder a la información de la sesión dentro del contexto de ejecución de la herramienta (contexto
session
). - 📡 Impulsado por eventos: utiliza
server.on
ysession.on
para el manejo de eventos de conexión/sesión. - 🔧 Experiencia de desarrollador moderna (DX): configuración clara, API intuitiva, pruebas fáciles con herramientas
fastmcp
.
Qué está incluido (funciones de fastmcp aprovechadas)
- Núcleo del servidor
FastMCP
server.addTool
(paraquery_tool
,execute_tool
,schema_tool
ytransaction_tool
)server.addResourceTemplate
(para enumerar tablas e inspeccionar esquemas de tablas)server.start
(con focostdio
, adaptable parasse
/http
)- Opcional: Hook
authenticate
(para validación de clave API) context
de ejecución de la herramienta (log
,reportProgress
,session
)- Zod para la validación del esquema de parámetros
server.on
(para registro de conexión)- (Potencialmente)
session.on
para lógica específica de sesión
📋 Requisitos previos
- Bun (se recomienda v1.0 o posterior): instalado y en PATH.
- Bases de datos PostgreSQL: Credenciales de acceso y conectividad. El usuario necesita permisos para consultar
information_schema
.
⚙️ Instalación
Opción 1: Paquete NPM
El paquete npm está disponible en https://www.npmjs.com/package/postgres-mcp
Opción 2: Clonar repositorio
- Clonar el repositorio:Copy
- Instalar dependencias:Copy
🔑 Configuración (Multi-Base de Datos y Autenticación Opcional)
Configurar a través de variables de entorno, cargadas desde archivos .env
apropiados.
- Crear archivos de entorno:
- Para producción:
cp .env.example .env
- Para desarrollo:
cp .env.development.example .env.development
- Para producción:
- Orden de carga de archivos de entorno: El servidor carga las variables de entorno de los archivos en el siguiente orden de prioridad:
.env.<NODE_ENV>
(por ejemplo,.env.development
,.env.production
,.env.staging
).env.local
(para anulaciones locales, no controladas por versiones).env
(opción predeterminada) Esto permite diferentes configuraciones para diferentes entornos.
- Edite los archivos de entorno para definir las conexiones de la base de datos y la autenticación:
DB_ALIASES
: lista separada por comas de alias de base de datos únicosDEFAULT_DB_ALIAS
: alias predeterminado si se omite 'dbAlias' en las llamadas a herramientas- Detalles de conexión de base de datos para cada alias (por ejemplo,
DB_MAIN_HOST
,DB_REPORTING_HOST
) - Autenticación de clave API opcional (
ENABLE_AUTH
,MCP_API_KEY
)
🚀 Ejecutar el servidor (como un proceso)
Ejecute este servidor directamente con Bun. El cliente AI (como Cursor) normalmente iniciará y administrará este comando automáticamente.
Opción 1: Usar el paquete instalado globalmente
- Para ejecutar manualmente:
postgres-mcp
Opción 2: Usar el paquete en su proyecto
- Para ejecutar desde su proyecto:
npx postgres-mcp
- O importar programáticamente:Copy
Opción 3: Desde el repositorio clonado
- Para ejecutar manualmente (para probar):
bun run src/index.ts
- Modo de desarrollo manual:
bun run --watch src/index.ts
Pruebas con herramientas CLI fastmcp
- Terminal interactiva:
bunx fastmcp dev src/index.ts
- Inspector de interfaz de usuario web:
bunx fastmcp inspect src/index.ts
💻 Usando la API programática (como biblioteca)
Además de ejecutarse como un servidor MCP independiente, postgres-mcp también se puede utilizar programáticamente como una biblioteca en sus aplicaciones Node.js/TypeScript.
Uso básico
Importaciones de funciones directas
Para casos de uso más simples, puede importar funciones específicas directamente:
Opciones de configuración
Para obtener la documentación completa sobre la API programática, consulte docs/programmatic-api.md .
🔌 Conexión con clientes de IA (Cursor, Claude Desktop)
Configure su agente de IA (cliente MCP) para ejecutar este script de servidor a través de su mecanismo de comando/argumentos.
Cursor AI - Ejemplo detallado
- Abra Configuración/Preferencias del cursor (Cmd+ o Ctrl+).
- Vaya a "Extensiones" -> "MCP".
- Haga clic en "Agregar servidor MCP" o edite
settings.json
. - Agregue la siguiente configuración JSON:Copy
- Guardar y reiniciar el cursor o "Recargar servidores MCP".
- Verificar la conexión en el estado/registros de MCP de Cursor.
Escritorio de Claude
- Localice y edite
config.json
(consulte el README anterior para conocer las rutas). - Agregue una entrada similar en
mcpServers
, utilizando la ruta absoluta enargs
. - Reinicie Claude Desktop.
🛠️ Capacidades del MCP expuestas
Autenticación (opcional)
- Protege los transportes de red (HTTP/SSE) a través del encabezado
X-API-Key
que coincide conMCP_API_KEY
siENABLE_AUTH=true
. - Las conexiones
stdio
(predeterminadas para Cursor/Claude) generalmente omiten esta verificación.
Recursos
1. Lista de tablas de bases de datos
- Plantilla de URI:
db://{dbAlias}/schema/tables
- Descripción: recupera una lista de nombres de tablas de usuario dentro del alias de base de datos especificado (normalmente del esquema 'público').
- Definición de recurso (
addResourceTemplate
):uriTemplate
:"db://{dbAlias}/schema/tables"
arguments
:dbAlias
: (cadena, obligatoria) - Alias de la base de datos (desde.env
).
load({ dbAlias })
: se conecta a la base de datos, consultainformation_schema.tables
(filtrado para tablas base en el esquema público, personalizable en la implementación), formatea el resultado como una matriz de cadenas JSON["table1", "table2", ...]
y devuelve{ text: "..." }
.
Ejemplo de uso (indicador de AI): "Obtenga el recurso db://main/schema/tables
para enumerar las tablas en la base de datos principal".
2. Inspeccionar el esquema de la tabla
- Plantilla de URI:
db://{dbAlias}/schema/{tableName}
- Descripción: Proporciona información detallada del esquema (columnas, tipos, nulabilidad, valores predeterminados) para una tabla específica.
- Definición de recurso (
addResourceTemplate
):uriTemplate
:"db://{dbAlias}/schema/{tableName}"
arguments
:dbAlias
: (cadena, obligatoria) - Alias de la base de datos.tableName
: (cadena, obligatoria) - Nombre de la tabla.
load({ dbAlias, tableName })
: se conecta, consultainformation_schema.columns
para la tabla específica, formatea como una matriz de cadenas JSON de objetos de columna, devuelve{ text: "..." }
.
Ejemplo de uso (indicador de IA): "Describe el recurso db://reporting/schema/daily_sales
".
Ejemplo de contenido de respuesta (cadena JSON):
Herramientas
Las herramientas reciben un objeto context
( log
, reportProgress
, session
).
1. query_tool
Ejecuta consultas SQL de solo lectura.
- Descripción: Ejecute de forma segura SQL de solo lectura, obtenga resultados, con registro/progreso de ejecución.
- Parámetros:
statement
(cadena),params
(matriz, opción),dbAlias
(cadena, opción). - Uso de contexto:
log.info/debug
,reportProgress
opcional ,session
de acceso. - Devuelve: cadena JSON de la matriz de filas.
Ejemplo de solicitud:
Ejemplo de contenido de respuesta (cadena JSON):
2. execute_tool
Ejecuta sentencias SQL que modifican datos.
- Descripción: Ejecute SQL que modifique datos de forma segura, con registro de ejecución.
- Parámetros:
statement
(cadena),params
(matriz, opción),dbAlias
(cadena, opción). - Uso de contexto:
log.info/debug
, accesosession
. - Devuelve: Cadena que indica las filas afectadas.
Ejemplo de solicitud:
Ejemplo de contenido de respuesta (cadena):
3. schema_tool
Recupera información detallada del esquema para una tabla específica.
- Descripción: Obtenga definiciones de columnas y detalles para una tabla de base de datos.
- Parámetros:
tableName
(cadena),dbAlias
(cadena, opt). - Uso de contexto:
log.info
,session
de acceso . - Devuelve: matriz de cadenas JSON de objetos de información de columnas.
Ejemplo de solicitud:
Ejemplo de contenido de respuesta (cadena JSON):
4. transaction_tool
Ejecuta múltiples sentencias SQL de forma atómica.
- Descripción: Ejecutar secuencia SQL en una transacción, con registro/progreso de pasos.
- Parámetros:
operations
(matriz de {declaración, parámetros}),dbAlias
(cadena, opción). - Uso de contexto:
log.info/debug/error
,reportProgress
, accesssession
. - Devuelve: cadena JSON que resume el éxito/fracaso:
{"success": true, "results": [...]}
o{"success": false, "error": ..., "failedOperationIndex": ...}
.
Ejemplo de solicitud:
Ejemplo de contenido de respuesta de éxito (cadena JSON):
Ejemplo de contenido de respuesta de error (cadena JSON):
Eventos de servidor y sesión
- Utiliza
server.on('connect'/'disconnect')
para registrar las conexiones del cliente. - Se puede utilizar
session.on(...)
para un manejo más granular de eventos de sesión si es necesario.
Consideraciones de seguridad
- Inyección SQL: Mitigada mediante consultas parametrizadas. Sin concatenación directa de entradas.
- Permisos de base de datos: Críticos. Asignar el mínimo privilegio a cada
DB_<ALIAS>_USER
, incluyendo acceso de lectura ainformation_schema
para recursos de listado de esquemas/tablas. - SSL/TLS: Esencial para producción (
DB_<ALIAS>_SSL=require
o más estricto). - Gestión de secretos: Proteja el archivo
.env
(añádalo a.gitignore
). Utilice la gestión segura de secretos para entornos de producción (Vault, Doppler, secretos en la nube). - Alcance de autenticación: el gancho
authenticate
protege principalmente los transportes de red. La seguridadstdio
depende del entorno de ejecución. - Sensibilidad de los datos: tenga en cuenta los datos a los que se puede acceder a través de conexiones/herramientas.
- Consultas de recursos: Las consultas utilizadas para listar tablas (
information_schema.tables
) y esquemas (information_schema.columns
) suelen ser seguras, pero dependen de los permisos de la base de datos. Asegúrese de que los usuarios configurados tengan el acceso de lectura adecuado. Personalice la consulta de lista de tablas (p. ej., filtrado de esquemas) si es necesario para mayor seguridad o claridad.
📜 Licencia
Este proyecto está licenciado bajo la Licencia MIT . Consulte el archivo de LICENCIA para más detalles.
📋 Registro de cambios
1.0.0
- Lanzamiento inicial
- Servidor MCP con todas las funciones para PostgreSQL
- Soporte para múltiples conexiones de bases de datos
- Herramientas para consultas, ejecución, inspección de esquemas y transacciones
- Recursos para la introspección de esquemas
- Documentación completa y ejemplos
You must be authenticated.
Un servidor MCP ultrarrápido que permite a los agentes de IA interactuar con múltiples bases de datos PostgreSQL, proporcionando funcionalidad para enumerar tablas, inspeccionar esquemas, ejecutar consultas y ejecutar transacciones.
- Purpose: An MCP Server for AI Agents
- Troubleshooting and Development
- ✨ Core Features
- What's Included (fastmcp Features Leveraged)
- 📋 Prerequisites
- ⚙️ Installation
- 🔑 Configuration (Multi-Database & Optional Auth)
- 🚀 Running the Server (as a Process)
- 💻 Using the Programmatic API (as a Library)
- 🔌 Connecting with AI Clients (Cursor, Claude Desktop)
- 🛠️ MCP Capabilities Exposed
- 🔒 Security Considerations
- 📜 License
- 📋 Changelog