mcp-trino
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.
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 dataComponentes 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/InfoSuplantació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 | bashEjecución (desarrollo local):
export TRINO_HOST=localhost TRINO_USER=trino
mcp-trinoPara 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" # defaultAyuda 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 --helpLa 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: tableO 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 catalogsPrecedencia de configuración (de mayor a menor):
Flags de CLI (
--host,--port, etc.)Flag
--profileVariable de entorno
TRINO_PROFILECampo
currenten el archivo de configuraciónPerfil
defaultde respaldoVariables 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=trueGestió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-trinoConsulte 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 valuesConfiguració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 deploymentsOptimizació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, subjectPara 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:
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
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:
Se ejecutan las verificaciones de CI para validar la calidad y seguridad del código
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
This server cannot be deployed
Maintenance
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…
Model Context Protocol server for the Apideck Unified API. Connect any MCP-compatible agent framework to 100+ accounting systems, HRIS platforms, file storage providers, and more through one integration. More information https://www.apideck.com/mcp-server
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables listing and querying Trino tables using Python, providing access to data resources through the Model-Control-Protocol.18MIT
- AlicenseNot gradedqualityCmaintenanceThis is a Model Context Protocol (MCP) server implemented in Go, providing a tool to analyze Go pprof performance profiles.50MIT
- AlicenseBqualityCmaintenanceA Model Context Protocol server that provides seamless integration with Trino and Iceberg, enabling data exploration, querying, and table maintenance through a standard interface.2225Apache 2.0
- AlicenseNot gradedqualityCmaintenanceThe implementation of Model Context Protocol (MCP) server for VictoriaMetrics236Apache 2.0