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 installed
Maintenance
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
- 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 gradedqualityDmaintenanceA Model Context Protocol (MCP) server that supports STDIO, SSE and Streamable HTTP protocols for AI model interactions.131MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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