mcp-trino

by tuannvm
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Allows AI assistants to execute SQL queries against a Trino distributed SQL query engine, with support for catalog/schema/table discovery and schema inspection.

Servidor Trino MCP en Go

Un servidor de Protocolo de Contexto de Modelo (MCP) de alto rendimiento para Trino, implementado en Go. Este proyecto permite que los asistentes de IA interactúen fluidamente con el motor de consultas SQL distribuido de Trino mediante herramientas MCP estandarizadas.

Descripción general

Este proyecto implementa un servidor de Protocolo de Contexto de Modelo (MCP) para Trino en Go. Permite a los asistentes de IA acceder al motor de consultas SQL distribuido de Trino mediante herramientas MCP estandarizadas.

Trino (anteriormente PrestoSQL) es un potente motor de consulta SQL distribuido diseñado para análisis rápidos en grandes conjuntos de datos.

Características

  • ✅ Implementación del servidor MCP en Go
  • ✅ Ejecución de consultas SQL de Trino a través de herramientas MCP
  • ✅ Descubrimiento de catálogos, esquemas y tablas
  • ✅ Compatibilidad con contenedores Docker
  • ✅ Admite transportes STDIO y HTTP
  • ✅ Compatibilidad con eventos enviados por el servidor (SSE) para Cursor y otros clientes MCP
  • ✅ Compatible con Cursor, Claude Desktop, Windsurf, ChatWise y cualquier cliente compatible con MCP.

Instalación

Homebrew (macOS y Linux)

La forma más fácil de instalar mcp-trino es usando Homebrew:

# Add the tap repository brew tap tuannvm/mcp # Install mcp-trino brew install mcp-trino

Para actualizar a la última versión:

brew update && brew upgrade mcp-trino

Métodos de instalación alternativos

Descarga manual

  1. Descargue el binario apropiado para su plataforma desde la página de versiones de GitHub .
  2. Coloque el binario en un directorio incluido en su PATH (por ejemplo, /usr/local/bin en Linux/macOS)
  3. Hazlo ejecutable ( chmod +x mcp-trino en Linux/macOS)

De la fuente

git clone https://github.com/tuannvm/mcp-trino.git cd mcp-trino make build # Binary will be in ./bin/

Descargas

Puede descargar binarios prediseñados para su plataforma:

PlataformaArquitecturaEnlace de descarga
macOSx86_64 (Intel)Descargar
macOSARM64 (silicio de Apple)Descargar
Linuxx86_64Descargar
LinuxARM64Descargar
Ventanasx86_64Descargar

O consulte todas las descargas disponibles en la página de lanzamientos de GitHub .

Integración MCP

Este servidor MCP se puede integrar con varias aplicaciones de IA:

Uso de la imagen de Docker

Para utilizar la imagen de Docker en lugar de un binario local:

{ "mcpServers": { "mcp-trino": { "command": "docker", "args": ["run", "--rm", "-i", "-e", "TRINO_HOST=<HOST>", "-e", "TRINO_PORT=<PORT>", "-e", "TRINO_USER=<USERNAME>", "-e", "TRINO_PASSWORD=<PASSWORD>", "-e", "TRINO_SCHEME=http", "ghcr.io/tuannvm/mcp-trino:latest"], "env": {} } } }

Nota : El nombre DNS especial host.docker.internal permite que el contenedor se conecte a los servicios que se ejecutan en el host. Si su servidor Trino se ejecuta en otro lugar, reemplácelo con el host correspondiente.

Esta configuración de Docker se puede utilizar en cualquiera de las siguientes aplicaciones.

Cursor

Para usar con Cursor , cree o edite ~/.cursor/mcp.json :

{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

Reemplace las variables de entorno con su configuración específica de Trino.

Para el modo de transporte HTTP+SSE (compatible con la integración del cursor):

{ "mcpServers": { "mcp-trino-http": { "url": "http://localhost:9097/sse" } } }

Luego inicie el servidor en una terminal separada con:

MCP_TRANSPORT=http TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD> mcp-trino

Escritorio de Claude

Para utilizar con Claude Desktop , edite su archivo de configuración de Claude:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Ventanas: %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

Después de actualizar la configuración, reinicie Claude Desktop. Debería ver las herramientas de MCP disponibles en el menú de herramientas.

Windsurf

Para usar con Windsurf , crea o edita tu mcp_config.json :

{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

Reinicie Windsurf para aplicar los cambios. Las herramientas Trino MCP estarán disponibles para la IA de Cascade.

ChatWise

Para utilizar con ChatWise , siga estos pasos:

  1. Abra ChatWise y vaya a Configuración
  2. Vaya a la sección Herramientas
  3. Haga clic en el icono "+" para agregar una nueva herramienta
  4. Seleccione "Línea de comandos MCP"
  5. Configurar con los siguientes detalles:
    • ID: mcp-trino (o cualquier nombre que prefieras)
    • Comando: mcp-trino
    • Argumentos: (dejar vacío)
    • Env: Agregue las siguientes variables de entorno:
      TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD>

Alternativamente, puede importar la configuración desde JSON:

  1. Copia este JSON a tu portapapeles:
    { "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }
  2. En Configuración de ChatWise > Herramientas, haga clic en el ícono "+"
  3. Seleccione "Importar JSON desde el portapapeles".
  4. Mueva el interruptor junto a la herramienta para habilitarla.

Una vez habilitado, haga clic en el ícono del martillo debajo del cuadro de entrada en ChatWise para acceder a las herramientas de Trino MCP.

Herramientas MCP disponibles

El servidor proporciona las siguientes herramientas MCP:

ejecutar_consulta

Ejecute una consulta SQL contra Trino con soporte SQL completo para consultas analíticas complejas.

Ejemplo de mensaje:

¿Cuántos clientes tenemos por región? ¿Podrías mostrarlos en orden descendente?

Ejemplo:

{ "query": "SELECT region, COUNT(*) as customer_count FROM tpch.tiny.customer GROUP BY region ORDER BY customer_count DESC" }

Respuesta:

{ "columns": ["region", "customer_count"], "data": [ ["AFRICA", 5], ["AMERICA", 5], ["ASIA", 5], ["EUROPE", 5], ["MIDDLE EAST", 5] ] }

lista_catálogos

Enumere todos los catálogos disponibles en el servidor Trino, proporcionando una vista integral de su ecosistema de datos.

Ejemplo de mensaje:

"¿A qué bases de datos tenemos acceso en nuestro entorno Trino?"

Ejemplo:

{}

Respuesta:

{ "catalogs": ["tpch", "memory", "system", "jmx"] }

esquemas de lista

Enumere todos los esquemas en un catálogo, lo que le ayudará a navegar a través de la jerarquía de datos de manera eficiente.

Ejemplo de mensaje:

"¿Qué esquemas o conjuntos de datos están disponibles en el catálogo tpch?"

Ejemplo:

{ "catalog": "tpch" }

Respuesta:

{ "schemas": ["information_schema", "sf1", "sf100", "sf1000", "tiny"] }

listas_de_tablas

Enumere todas las tablas de un esquema, lo que le dará visibilidad de los conjuntos de datos disponibles.

Ejemplo de mensaje:

¿Qué tablas están disponibles en el esquema tpch tiny? Necesito saber qué datos podemos consultar.

Ejemplo:

{ "catalog": "tpch", "schema": "tiny" }

Respuesta:

{ "tables": ["customer", "lineitem", "nation", "orders", "part", "partsupp", "region", "supplier"] }

obtener_esquema_de_tabla

Obtenga el esquema de una tabla, comprendiendo la estructura de sus datos para una mejor planificación de consultas.

Ejemplo de mensaje:

¿Qué columnas hay en la tabla de clientes? Necesito conocer los tipos de datos y la estructura antes de escribir mi consulta.

Ejemplo:

{ "catalog": "tpch", "schema": "tiny", "table": "customer" }

Respuesta:

{ "columns": [ { "name": "custkey", "type": "bigint", "nullable": false }, { "name": "name", "type": "varchar", "nullable": false }, { "name": "address", "type": "varchar", "nullable": false }, { "name": "nationkey", "type": "bigint", "nullable": false }, { "name": "phone", "type": "varchar", "nullable": false }, { "name": "acctbal", "type": "double", "nullable": false }, { "name": "mktsegment", "type": "varchar", "nullable": false }, { "name": "comment", "type": "varchar", "nullable": false } ] }

Esta información es invaluable para comprender los nombres de las columnas, los tipos de datos y las restricciones de nulabilidad antes de escribir consultas en la tabla.

Ejemplo de extremo a extremo

A continuación se muestra un ejemplo de interacción completo que muestra cómo un asistente de IA podría usar estas herramientas para responder una pregunta comercial:

Consulta del usuario: "¿Pueden ayudarme a analizar a nuestros clientes más importantes? Quiero saber quiénes son los 5 clientes con los saldos de cuenta más altos".

Flujo de trabajo del Asistente de IA:

  1. Primero, descubre los catálogos disponibles
    > Using list_catalogs tool > Discovers tpch catalog
  2. Luego, busque los esquemas disponibles
    > Using list_schemas tool with catalog "tpch" > Discovers "tiny" schema
  3. Explorar las mesas disponibles
    > Using list_tables tool with catalog "tpch" and schema "tiny" > Finds "customer" table
  4. Comprobar el esquema de la tabla de clientes
    > Using get_table_schema tool > Discovers "custkey", "name", "acctbal" and other columns
  5. Por último, ejecute la consulta.
    > Using execute_query tool with: > "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5"
  6. Devuelve los resultados al usuario:
    The top 5 customers with highest account balances are: 1. Customer #65 (Customer#000000065): $9,222.78 2. Customer #13 (Customer#000000013): $8,270.47 3. Customer #89 (Customer#000000089): $7,990.56 4. Customer #11 (Customer#000000011): $7,912.91 5. Customer #82 (Customer#000000082): $7,629.41

Este flujo de trabajo continuo demuestra cómo las herramientas MCP permiten a los asistentes de IA explorar y consultar datos de forma conversacional.

Configuración

El servidor se puede configurar utilizando las siguientes variables de entorno:

VariableDescripciónPor defecto
TRINO_HOSTNombre de host del servidor Trinohost local
TRINO_PORTPuerto del servidor Trino8080
TRINO_USUARIOUsuario de Trinotrino
TRINO_CONTRASEÑAContraseña de Trino(vacío)
CATÁLOGO TRINOCatálogo predeterminadomemoria
ESQUEMA TRINOEsquema predeterminadopor defecto
ESQUEMA TRINOEsquema de conexión (http/https)https
TRINO_SSLHabilitar SSLverdadero
TRINO_SSL_INSEGURAPermitir SSL inseguroverdadero
TRINO_PERMITIR_CONSULTAS_DE_ESCRITURAPermitir consultas SQL que no sean de solo lecturaFALSO
MCP_TRANSPORTMétodo de transporte (stdio/http)estudio
PUERTO MCPPuerto HTTP para transporte http9097
Host MCPHost para devoluciones de llamadas HTTPhost local

Nota : Cuando TRINO_SCHEME se establece en "https", TRINO_SSL se establece automáticamente en verdadero independientemente del valor proporcionado.

Importante : El modo de conexión predeterminado es HTTPS. Si utiliza un servidor Trino que solo admite HTTP, debe configurar TRINO_SCHEME=http en sus variables de entorno.

Nota de seguridad : De forma predeterminada, solo se permiten consultas de solo lectura (SELECT, SHOW, DESCRIBE, EXPLAIN) para evitar la inyección de SQL. Si necesita ejecutar operaciones de escritura u otras consultas que no sean de lectura, configure TRINO_ALLOW_WRITE_QUERIES=true , pero tenga en cuenta que esto omite esta protección de seguridad.

Para la integración con Cursor : Al usar Cursor, configure MCP_TRANSPORT=http y conéctese al punto final /sse . El servidor gestionará automáticamente las conexiones SSE (Eventos enviados por el servidor).

Contribuyendo

¡Agradecemos sus contribuciones! No dude en enviar una solicitud de incorporación de cambios.

Licencia

Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.

CI/CD y versiones

Este proyecto utiliza GitHub Actions para la integración continua y GoReleaser para lanzamientos automatizados.

Comprobaciones de integración continua

Nuestra canalización CI realiza las siguientes comprobaciones en todos los PR y se compromete con la rama principal:

Calidad del código

  • Linting : uso de golangci-lint para verificar problemas de código comunes y violaciones de estilo
  • Verificación del módulo Go : garantizar que go.mod y go.sum se mantengan correctamente
  • Formato : Verificar que el código esté correctamente formateado con gofmt

Seguridad

  • Análisis de vulnerabilidades : uso de govulncheck para comprobar vulnerabilidades conocidas en dependencias
  • Escaneo de dependencias : uso de Trivy para buscar vulnerabilidades en dependencias (CRÍTICAS, ALTAS y MEDIAS)
  • Generación de SBOM : creación de una lista de materiales de software para el seguimiento de dependencias
  • Procedencia SLSA : Creación de una procedencia de construcción verificable para la seguridad de la cadena de suministro

Pruebas

  • Pruebas unitarias : ejecución de pruebas con detección de carrera e informes de cobertura de código
  • Verificación de compilación : garantizar que la base de código se compile correctamente

Seguridad de CI/CD

  • Privilegio mínimo : los flujos de trabajo se ejecutan con los permisos mínimos requeridos
  • Versiones fijadas : todas las acciones de GitHub usan versiones específicas para prevenir ataques a la cadena de suministro
  • Actualizaciones de dependencias : actualizaciones de dependencias automatizadas a través de Dependabot

Proceso de liberación

Cuando los cambios se fusionan con la rama principal:

  1. Se ejecutan comprobaciones de CI para validar la calidad y la seguridad del código.
  2. Si tiene éxito, se creará automáticamente una nueva versión con:
    • Versiones semánticas basadas en mensajes de confirmación
    • Construcciones binarias para múltiples plataformas
    • Publicación de imágenes de Docker en GitHub Container Registry
    • SBOM y certificación de procedencia
ID: sf23b6j9h9