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

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
19Releases (12mo)
Commit activity
Issues opened vs closed

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • A Model Context Protocol server for Wix AI tools

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP server providing access to the Scorecard API to evaluate and optimize LLM systems.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tuannvm/mcp-trino'

If you have feedback or need assistance with the MCP directory API, please join our Discord server