Trino MCP Server
Una implementación en Go de un servidor del Protocolo de Contexto de Modelo (MCP) para Trino, que permite a los modelos de lenguaje consultar bases de datos SQL distribuidas a través de herramientas estandarizadas.
Documentación
Servidor MCP de Trino en Go
Un servidor de Protocolo de Contexto de Modelo (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 distribuidas de Trino a través de 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 distribuidas de Trino a través de herramientas MCP estandarizadas.
Trino (anteriormente PrestoSQL) es un potente motor de consultas SQL distribuidas diseñado para análisis rápidos en grandes conjuntos de datos.
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 como servidor MCP Y CLI interactivo
- 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 mediante la biblioteca oauth-mcp-proxy
- 4 proveedores: HMAC, Okta, Google, Azure AD
- Modo nativo: El cliente maneja OAuth directamente (cero secretos en el servidor)
- Modo proxy: El servidor actúa como proxy del flujo OAuth para clientes simples
- Listo para producción: Caché de tokens, PKCE, seguridad en profundidad
- Reutilizable: Biblioteca OAuth disponible para cualquier servidor MCP en Go
- ✅ Soporte StreamableHTTP con autenticación JWT (actualizado desde SSE)
- ✅ Compatibilidad retroactiva 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 consultas con el usuario OAuth mediante cabeceras
X-Trino-Client-Tags/Info - Suplantación de usuario (opt-in): Ejecuta consultas como usuario OAuth mediante la cabecera
X-Trino-User
- Atribución de consultas (automática): Etiqueta consultas con el usuario OAuth mediante cabeceras
Instalación e 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 despliegue en producción con OAuth, consulte la Guía de despliegue y la Arquitectura OAuth.
Modo CLI
mcp-trino se puede utilizar como CLI interactivo similar a psql o al 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 de manual de Unix con secciones: NAME, SYNOPSIS, DESCRIPTION, COMMANDS, FLAGS, EXAMPLES, ENVIRONMENT y CONFIGURATION.
Códigos de salida
| Código | Significado |
|---|---|
| 0 | Éxito |
| 1 | Error de ejecución (fallo de conexión, error de consulta, etc.) |
| 2 | Error de uso (comando desconocido, banderas inválidas, argumentos faltantes) |
Perfiles nombrados
mcp-trino admite perfiles de conexión nombrados 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):
- Banderas de CLI (
--host,--port, etc.) - Bandera
--profile - Variable de entorno
TRINO_PROFILE - Campo
currenten el archivo de configuración - Respaldo de perfil
default - Variables de entorno (
TRINO_HOST, etc.)
Variables de entorno (prioridad más baja — anuladas por perfiles y banderas):
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 un CLI de secretos para inyectarlos mediante tuberías Unix al momento del lanzamiento — la aplicación nunca toca su bóveda:
# 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 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 del REPL (en modo interactivo):
\help- Mostrar ayuda\quit,\exit,\q- Salir del 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 integración de clientes y 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 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 de 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 configuración completa, consulte la Guía de despliegue, la Guía OAuth, la Guía de listas permitidas y la Guía de identidad de usuario.
Implementación OAuth
mcp-trino utiliza oauth-mcp-proxy — una biblioteca OAuth 2.1 independiente para servidores MCP en Go.
¿Por qué una biblioteca separada?
- ✅ Reutilizable en cualquier servidor MCP en Go
- ✅ Pruebas y versionado independientes
- ✅ Documentación y ejemplos dedicados
- ✅ Implementación OAuth mantenida por la comunidad
Para detalles de OAuth:
- Documentación de oauth-mcp-proxy - Guía completa de OAuth
- Guías de configuración de proveedores - Okta, Google, Azure AD
- Mejores prácticas de seguridad - Seguridad en producción
Contribuciones
¡Las contribuciones son bienvenidas! No dude en enviar una Solicitud de Extracción (Pull Request).
Licencia
Este proyecto está licenciado bajo la Licencia MIT — consulte el archivo LICENSE para 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 todas las solicitudes de extracción y confirmaciones a la rama principal:
Calidad de 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 escanear vulnerabilidades en dependencias (CRITICAL, HIGH y MEDIUM)
- Generación de SBOM: Creación de una Lista de Materiales de Software para seguimiento de dependencias
- Procedencia SLSA: Creación de procedencia de compilación verificable para 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 el código base 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 GitHub Actions usan versiones específicas para prevenir ataques a la cadena de suministro
- Actualizaciones de dependencias: Actualizaciones automatizadas de dependencias mediante Dependabot
Proceso de lanzamiento
Cuando los cambios se fusionan en la rama principal:
- Se ejecutan las verificaciones de CI para validar la calidad y seguridad del código
- Si tienen éxito, se crea automáticamente un nuevo lanzamiento con:
- Versionado semántico basado en mensajes de confirmación
- Compilaciones binarias para múltiples plataformas
- Publicación de imagen Docker en GitHub Container Registry
- Atestación de SBOM y procedencia