hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Enables querying Parquet files through DuckDB, providing data analysis capabilities on structured files
Allows reading and querying Parquet files stored in Google Cloud Storage buckets
Provides tools for executing SQL queries against PostgreSQL databases, including SELECT, CREATE/INSERT, UPDATE, and DELETE operations
Servidor de base de datos MCP
Un servidor de Protocolo de Contexto de Modelo (MCP) creado con mcp-framework
que proporciona herramientas y recursos para interactuar con bases de datos (PostgreSQL a través de DuckDB) y Google Cloud Storage (GCS).
Prerrequisitos
- Node.js 22 o superior
- Mecanografiado
- PostgreSQL (necesario para las funciones de la base de datos)
- Credenciales de Google Cloud (opcionales, para funciones de GCS)
- Devbox (para desarrollo local usando comandos
make
)
Estructura del proyecto
Instalación
- Clonar el repositorio:Copy
- Instalar dependencias (se recomienda utilizar Devbox para mantener la coherencia):Copy
- Copie
.env.example
a.env
y complete sus variables de entorno.Copy - Construir el proyecto:Copy
Configuración
Variables de entorno
Configure el servidor utilizando estas variables de entorno (o argumentos de línea de comandos):
DATABASE_URL
: cadena de conexión PostgreSQL (obligatoria a menos que se ejecute con supergateway).DATABASE_URLS
: Lista separada por comas de paresalias=url
para múltiples conexiones de base de datos (alternativa aDATABASE_URL
).LOG_LEVEL
: Nivel de registro (debug
,info
,error
). Predeterminado:info
.GCS_BUCKET
: nombre del depósito de Google Cloud Storage predeterminado (opcional).GCP_SERVICE_ACCOUNT
: clave JSON de cuenta de servicio de Google Cloud codificada en Base64 (opcional, para la autenticación de GCS).GCS_KEY_ID
/GCS_SECRET
: Credenciales GCS alternativas específicamente para la extensiónhttpfs
de DuckDB (opcional).TRANSPORT
: Tipo de transporte (stdio
osse
). Predeterminado:stdio
.PORT
: Número de puerto para el transporte SSE. Predeterminado:3001
.HOST
: Nombre de host para el transporte SSE. Predeterminado:localhost
.API_KEY
: Clave API opcional para proteger el servidor (si se configura, los clientes deben proporcionarla en el encabezadoAuthorization: Bearer <key>
).
Los argumentos de la línea de comandos (p. ej., --port 8080
, --gcs-bucket my-bucket
) anulan las variables de entorno. Consulte src/config.ts
para obtener más información.
Migraciones de bases de datos
El proyecto utiliza node-pg-migrate
para gestionar los cambios de esquema de PostgreSQL. Consulte la sección "Migraciones de bases de datos" del archivo README original (arriba) para obtener más información sobre cómo ejecutar y crear migraciones.
Nota: El comando npm run setup:db
mencionado anteriormente podría necesitar revisión o actualizaciones según la configuración actual.
Ejecución del servidor
Utilice el Makefile
para comandos de desarrollo convenientes (requiere Devbox):
Para ejecutar sin make
(después de npm run build
):
Configuración del cliente
Para conectar su cliente MCP (por ejemplo, mcp-cli
, Claude Desktop) al servidor local:
Para el transporte SSE (por ejemplo, en el puerto 3001):
(Nota: el ejemplo de Docker/supergateway del README anterior podría estar desactualizado o ser específico para una configuración de implementación diferente).
Para el transporte de Stdio:
Ejecutando con npx desde GitHub
Puede ejecutar el servidor directamente usando npx (requiere el paso de compilación en el paquete):
Herramientas disponibles
duckdb_insert
: Ejecuta una instrucciónINSERT
en la base de datos PostgreSQL adjunta mediante DuckDB. Solo se permiten consultasINSERT
.duckdb_query
: Ejecuta una consulta SQL de solo lectura directamente en la base de datos PostgreSQL adjunta (postgres_db
) mediante la funciónpostgres_query
de DuckDB. Prefija automáticamente los nombres de tabla no calificados (p. ej.,my_table
se convierte enpostgres_db.public.my_table
).duckdb_read_parquet
: consulta archivos Parquet utilizando DuckDB (probablemente desde GCS si está configurado).gcs_directory_tree
: obtiene la estructura del árbol de directorios de un depósito GCS con soporte de paginación.
Recursos disponibles
mcp://gcs/objects
(gcs_objects
): enumera los objetos en el depósito GCS configurado.mcp://db/tables
(sql_tables
): enumera todas las tablas y sus columnas en la base de datos PostgreSQL configurada.
Desarrollo: Integración de una nueva herramienta/recurso
Este proyecto utiliza mcp-framework
. Para añadir una nueva herramienta o recurso:
- Crear la clase:
- Cree un nuevo archivo
.ts
ensrc/tools/
osrc/resources/
. - Defina una clase que extienda
MCPTool
oMCPResource
. - Implemente las propiedades requeridas (
name
,description
,schema
para herramientas) y métodos (execute
para herramientas,read
para recursos). - Utilice Zod en la propiedad
schema
para la validación de entrada (herramientas). - Inicialice cualquier dependencia (como conexiones de base de datos o clientes GCS) dentro de la clase, a menudo en el constructor, potencialmente usando servicios de
src/services/
o configuración desrc/config.ts
.
Herramienta de ejemplo (
src/tools/my_tool.ts
):Copy - Cree un nuevo archivo
- Descubrimiento automático:
mcp-framework
descubre y registra automáticamente las clases de herramientas/recursos que se exportan de forma predeterminada desde los archivos dentro de los directoriossrc/tools
ysrc/resources
.- Asegúrese de que su nueva clase sea la
default export
en su archivo.
- Prueba:
- Ejecute el servidor (
make dev
). - Verifique los registros de inicio para asegurarse de que su nueva herramienta/recurso esté en la lista.
- Utilice un cliente MCP (como
mcp-cli
o MCP Inspector) para llamar a la herramienta o leer el recurso y verificar su funcionalidad.
- Ejecute el servidor (
Mejores prácticas
- Defina esquemas de entrada claros utilizando Zod para herramientas.
- Maneje los errores con elegancia dentro de
execute
/read
y devuelva respuestas de error formateadas usandoformatErrorResponse
(o arroje errores). - Utilice la configuración centralizada (
src/config.ts
) a través degetConfig()
cuando sea necesario. - Aproveche los inicializadores de servicio en
src/services/
para dependencias como conexiones de base de datos. - Agregue registro (
console.error
) para mayor visibilidad.
This server cannot be installed
Un servidor de protocolo de contexto de modelo que proporciona herramientas para interactuar con bases de datos, incluidos archivos PostgreSQL, DuckDB y Google Cloud Storage Parquet.