Skip to main content
Glama
tuannvm

mcp-trino

by tuannvm

Servidor MCP de Trino en Go

Un servidor de Model Context Protocol (MCP) de alto rendimiento para Trino implementado en Go. Este proyecto permite a los asistentes de IA interactuar sin problemas con el motor de consultas SQL distribuido de Trino a través de herramientas MCP estandarizadas.

GitHub Workflow Status Go Version Trivy Scan SLSA 3 Go Report Card Go Reference Docker Image GitHub Release License: MIT

Trust Score

Descripción general

Este proyecto implementa un servidor de Model Context Protocol (MCP) para Trino en Go. Permite a los asistentes de IA acceder al motor de consultas SQL distribuido de Trino a través de herramientas MCP estandarizadas.

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

Related MCP server: mcp-pprof-anaylzer

Arquitectura

graph TB
    subgraph "AI Clients"
        CC[Claude Code]
        CD[Claude Desktop]
        CR[Cursor]
        WS[Windsurf]
        CW[ChatWise]
    end
    
    subgraph "Authentication (Optional)"
        OP[OAuth Provider<br/>Okta/Google/Azure AD]
        JWT[JWT Tokens]
    end
    
    subgraph "MCP Server (mcp-trino)"
        HTTP[HTTP Transport<br/>/mcp endpoint]
        STDIO[STDIO Transport]
        AUTH[OAuth Middleware]
        TOOLS[MCP Tools<br/>• execute_query<br/>• list_catalogs<br/>• list_schemas<br/>• list_tables<br/>• get_table_schema<br/>• explain_query]
    end
    
    subgraph "Data Layer"
        TRINO[Trino Cluster<br/>Distributed SQL Engine]
        CATALOGS[Data Sources<br/>• PostgreSQL<br/>• MySQL<br/>• S3/Hive<br/>• BigQuery<br/>• MongoDB]
    end
    
    %% Connections
    CC -.->|OAuth Flow| OP
    OP -.->|JWT Token| JWT
    
    CC -->|HTTP + JWT| HTTP
    CD -->|STDIO| STDIO
    CR -->|HTTP + JWT| HTTP
    WS -->|STDIO| STDIO
    CW -->|HTTP + JWT| HTTP
    
    HTTP --> AUTH
    AUTH -->|Validated| TOOLS
    STDIO --> TOOLS
    
    TOOLS -->|SQL Queries| TRINO
    TRINO --> CATALOGS
    
    %% Styling
    classDef client fill:#e1f5fe
    classDef auth fill:#f3e5f5
    classDef server fill:#e8f5e8
    classDef data fill:#fff3e0
    
    class CC,CD,CR,WS,CW client
    class OP,JWT auth
    class HTTP,STDIO,AUTH,TOOLS server
    class TRINO,CATALOGS data

Componentes clave:

  • Clientes de IA: Varias aplicaciones compatibles con MCP

  • Autenticación: OAuth 2.0 opcional con proveedores OIDC

  • Servidor MCP: Servidor basado en Go con soporte de transporte dual

  • Modo CLI: Shell SQL interactivo para acceso directo a Trino (similar a psql)

  • Capa de datos: Clúster de Trino que se conecta a múltiples fuentes de datos

Características

  • ✅ Modo dual: Funciona tanto como servidor MCP COMO CLI interactiva

    • Modo CLI: Shell SQL interactivo similar a psql para acceso directo a Trino

    • Modo MCP: Servidor MCP completo para integración con asistentes de IA

  • ✅ Implementación de servidor MCP en Go

  • ✅ Ejecución de consultas SQL de Trino a través de herramientas MCP

  • ✅ Descubrimiento de catálogos, esquemas y tablas

  • ✅ Soporte para contenedores Docker

  • ✅ Soporta transportes STDIO y HTTP

  • ✅ Autenticación OAuth 2.1 a través de la biblioteca oauth-mcp-proxy

    • 4 proveedores: HMAC, Okta, Google, Azure AD

    • Modo nativo: El cliente maneja OAuth directamente (cero secretos del lado del servidor)

    • Modo proxy: El servidor actúa como proxy del flujo OAuth para clientes simples

    • Listo para producción: Caché de tokens, PKCE, seguridad de defensa en profundidad

    • Reutilizable: Biblioteca OAuth disponible para cualquier servidor MCP en Go

  • ✅ Soporte para StreamableHTTP con autenticación JWT (actualizado desde SSE)

  • ✅ Compatibilidad con versiones anteriores con endpoints SSE

  • ✅ Compatible con Cursor, Claude Desktop, Windsurf, ChatWise y cualquier cliente compatible con MCP.

  • ✅ Seguimiento de identidad de usuario:

    • Atribución de consultas (automática): Etiqueta las consultas con el usuario de OAuth a través de encabezados X-Trino-Client-Tags/Info

    • Suplantación de usuario (opcional): Ejecuta consultas como usuario de OAuth a través del encabezado X-Trino-User

Instalación y inicio rápido

Instalación:

# Homebrew
brew install tuannvm/mcp/mcp-trino

# Or one-liner (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/tuannvm/mcp-trino/main/install.sh | bash

Ejecución (desarrollo local):

export TRINO_HOST=localhost TRINO_USER=trino
mcp-trino

Para la implementación en producción con OAuth, consulte la Guía de implementación y la Arquitectura de OAuth.

Modo CLI

mcp-trino se puede utilizar como una CLI interactiva similar a psql o la CLI de Trino:

# Interactive REPL mode
mcp-trino --interactive

# Execute a query directly
mcp-trino query "SELECT * FROM my_table LIMIT 10"

# List catalogs, schemas, tables
mcp-trino catalogs
mcp-trino schemas my_catalog
mcp-trino tables my_catalog my_schema

# Describe a table
mcp-trino describe my_catalog.my_schema.my_table

# Explain a query
mcp-trino explain "SELECT COUNT(*) FROM my_table"

# Output formats
mcp-trino --format json query "SELECT 1"
mcp-trino --format csv query "SELECT 1"
mcp-trino --format table query "SELECT 1"  # default

Ayuda integrada

Cada comando tiene una salida de ayuda estructurada y amigable para LLM:

# Main help with all commands, flags, examples, and environment variables
mcp-trino --help

# Per-subcommand help
mcp-trino query --help
mcp-trino describe --help

La salida de ayuda sigue las convenciones de las páginas man de Unix con secciones: NAME, SYNOPSIS, DESCRIPTION, COMMANDS, FLAGS, EXAMPLES, ENVIRONMENT y CONFIGURATION.

Códigos de salida

Código

Significado

0

Éxito

1

Error en tiempo de ejecución (fallo de conexión, error de consulta, etc.)

2

Error de uso (comando desconocido, flags no válidos, argumentos faltantes)

Perfiles con nombre

mcp-trino admite perfiles de conexión con nombre para cambiar fácilmente entre entornos de Trino.

Archivo de configuración — admite tanto YAML (~/.config/trino/config.yaml) como JSON (~/.config/trino/config.json):

# ~/.config/trino/config.yaml
current: prod

profiles:
  prod:
    host: trino.example.com
    port: 443
    user: prod_user
    password: prod_password
    catalog: hive
    schema: analytics
    ssl:
      enabled: true
      insecure: false

  dev:
    host: localhost
    port: 8080
    user: trino
    catalog: memory
    schema: default

  staging:
    host: staging-trino.example.com
    port: 443
    user: staging_user

output:
  format: table

O equivalentemente en JSON:

{
  "current": "prod",
  "profiles": {
    "prod": {
      "host": "trino.example.com",
      "port": 443,
      "user": "prod_user",
      "catalog": "hive",
      "ssl": { "enabled": true }
    },
    "dev": {
      "host": "localhost",
      "port": 8080,
      "user": "trino"
    }
  },
  "output": { "format": "table" }
}

Cuando ambos archivos existen, config.json tiene prioridad. Las nuevas configuraciones usan JSON por defecto.

Comandos de gestión de perfiles:

# List all profiles
mcp-trino config profile list

# Set default profile
mcp-trino config profile use prod

# Show profile details
mcp-trino config profile show staging

# Use a specific profile (overrides config file)
mcp-trino --profile dev catalogs

Precedencia de configuración (de mayor a menor):

  1. Flags de CLI (--host, --port, etc.)

  2. Flag --profile

  3. Variable de entorno TRINO_PROFILE

  4. Campo current en el archivo de configuración

  5. Perfil default de respaldo

  6. Variables de entorno (TRINO_HOST, etc.)

Variables de entorno (menor prioridad - anuladas por perfiles y flags):

export TRINO_HOST=trino.example.com
export TRINO_PORT=443
export TRINO_USER=myuser
export TRINO_PASSWORD=mypass
export TRINO_CATALOG=hive
export TRINO_SCHEMA=analytics
export TRINO_SSL=true

Gestión de secretos (recomendado):

Los secretos se cargan puramente desde variables de entorno. Use una CLI de secretos para inyectarlos mediante tuberías de Unix en el momento del lanzamiento; la aplicación nunca toca su almacén:

# 1Password CLI — resolves op:// references in an env file
op run --env-file=.env -- mcp-trino

# Or inline per-variable
TRINO_PASSWORD=$(op read 'op://Engineering/Trino/password') mcp-trino

Consulte docs/secrets.md para ver patrones de 1Password, Vault y Kubernetes, y para matices de seguridad (historial de shell, lista de procesos y fuga de variables de entorno).

Meta-comandos REPL (en modo interactivo):

  • \help - Mostrar ayuda

  • \quit, \exit, \q - Salir de REPL

  • \history - Mostrar historial de comandos

  • \catalogs - Listar todos los catálogos

  • \schemas [catalog] - Listar esquemas

  • \tables [catalog schema] - Listar tablas

  • \describe <table> - Describir tabla

  • \format <table|json|csv> - Cambiar formato de salida

Uso

Clientes compatibles: Claude Desktop, Claude Code, Cursor, Windsurf, ChatWise

Herramientas disponibles: execute_query, list_catalogs, list_schemas, list_tables, get_table_schema, explain_query

Para la integración del cliente y la documentación de herramientas, consulte la Guía de integración y la Referencia de herramientas.

Configuración

Variables clave: TRINO_HOST, TRINO_USER, TRINO_SCHEME, MCP_TRANSPORT, OAUTH_PROVIDER

Gestión de secretos: Inyecte secretos a través del entorno del proceso: mcp-trino los lee directamente. Consulte docs/secrets.md para recetas de 1Password, Vault y Kubernetes.

# 1Password (biometric-gated, zero disk writes)
op run --env-file=.env -- mcp-trino

# Vault (via vault-agent or CLI)
TRINO_PASSWORD=$(vault kv get -field=password secret/mcp-trino) mcp-trino

# Kubernetes: use standard Secret → envFrom in the Helm chart values

Configuración de OAuth:

# Native mode (most secure - zero server-side secrets)
export OAUTH_ENABLED=true OAUTH_MODE=native OAUTH_PROVIDER=okta
export OIDC_ISSUER=https://company.okta.com OIDC_AUDIENCE=https://mcp-server.com

# Proxy mode (centralized credential management)
export OAUTH_MODE=proxy OIDC_CLIENT_ID=app-id OIDC_CLIENT_SECRET=secret
export OAUTH_REDIRECT_URI=https://mcp-server.com/oauth/callback  # Fixed mode (localhost-only)
export OAUTH_REDIRECT_URI=https://app1.com/cb,https://app2.com/cb  # Allowlist mode
export JWT_SECRET=$(openssl rand -hex 32)  # Required for multi-pod deployments

Optimización del rendimiento:

# Focus AI on specific schemas only (10-20x performance improvement)
export TRINO_ALLOWED_SCHEMAS="hive.analytics,hive.marts,hive.reporting"

Seguimiento de identidad de usuario:

# Query Attribution is AUTOMATIC when OAuth is enabled
# Queries are tagged with X-Trino-Client-Tags and X-Trino-Client-Info headers

# For full impersonation (Trino enforces user permissions):
export TRINO_ENABLE_IMPERSONATION=true
export TRINO_IMPERSONATION_FIELD=email  # Options: username, email, subject

Para la configuración completa, consulte la Guía de implementación, la Guía de OAuth, la Guía de listas de permitidos y la Guía de identidad de usuario.

Implementación de OAuth

mcp-trino utiliza oauth-mcp-proxy, una biblioteca independiente de OAuth 2.1 para servidores MCP en Go.

¿Por qué una biblioteca separada?

  • ✅ Reutilizable en cualquier servidor MCP en Go

  • ✅ Pruebas y versiones independientes

  • ✅ Documentación y ejemplos dedicados

  • ✅ Implementación de OAuth mantenida por la comunidad

Para detalles de OAuth:

Contribución

¡Las contribuciones son bienvenidas! Por favor, siéntase libre de enviar un Pull Request.

Licencia

Este proyecto está bajo la Licencia MIT; consulte el archivo LICENSE para obtener más detalles.

Proyectos relacionados

  • oauth-mcp-proxy - Biblioteca de autenticación OAuth 2.1 utilizada por mcp-trino (reutilizable para cualquier servidor MCP en Go)

CI/CD y lanzamientos

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

Verificaciones de integración continua

Nuestro pipeline de CI realiza las siguientes verificaciones en todos los PR y commits a la rama principal:

Calidad del código

  • Linting: Uso de golangci-lint para verificar problemas comunes de código y violaciones de estilo

  • Verificación de módulos Go: Asegurar que go.mod y go.sum se mantengan correctamente

  • Formato: Verificar que el código esté correctamente formateado con gofmt

Seguridad

  • Escaneo de vulnerabilidades: Uso de govulncheck para verificar 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 procedencia de compilación verificable para la seguridad de la cadena de suministro

Pruebas

  • Pruebas unitarias: Ejecución de pruebas con detección de condiciones de carrera e informes de cobertura de código

  • Verificación de compilación: Asegurar que la base de código se compile correctamente

Seguridad de CI/CD

  • Menor privilegio: Los flujos de trabajo se ejecutan con los permisos mínimos requeridos

  • Versiones fijadas: Todas las GitHub Actions utilizan versiones específicas para evitar ataques a la cadena de suministro

  • Actualizaciones de dependencias: Actualizaciones automáticas de dependencias a través de Dependabot

Proceso de lanzamiento

Cuando los cambios se fusionan en la rama principal:

  1. Se ejecutan las verificaciones de CI para validar la calidad y seguridad del código

  2. Si tiene éxito, se crea automáticamente un nuevo lanzamiento con:

    • Versionado semántico basado en mensajes de commit

    • Compilaciones binarias para múltiples plataformas

    • Publicación de imagen Docker en GitHub Container Registry

    • SBOM y atestación de procedencia

Related MCP Connectors

Related MCP Servers