mcp-trino
Trino MCP-Server in Go
Ein leistungsstarker Model Context Protocol (MCP)-Server für Trino, implementiert in Go. Dieses Projekt ermöglicht es KI-Assistenten, nahtlos über standardisierte MCP-Tools mit der verteilten SQL-Abfrage-Engine von Trino zu interagieren.
Übersicht
Dieses Projekt implementiert einen Model Context Protocol (MCP)-Server für Trino in Go. Es ermöglicht KI-Assistenten den Zugriff auf die verteilte SQL-Abfrage-Engine von Trino über standardisierte MCP-Tools.
Trino (ehemals PrestoSQL) ist eine leistungsstarke verteilte SQL-Abfrage-Engine, die für schnelle Analysen auf großen Datensätzen entwickelt wurde.
Related MCP server: mcp-pprof-anaylzer
Architektur
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 dataHauptkomponenten:
KI-Clients: Verschiedene MCP-kompatible Anwendungen
Authentifizierung: Optionales OAuth 2.0 mit OIDC-Anbietern
MCP-Server: Go-basierter Server mit Unterstützung für zwei Transportwege
CLI-Modus: Interaktive SQL-Shell für direkten Trino-Zugriff (ähnlich wie psql)
Datenschicht: Trino-Cluster, der eine Verbindung zu mehreren Datenquellen herstellt
Funktionen
✅ Dualer Modus: Funktioniert sowohl als MCP-Server ALS AUCH als interaktive CLI
CLI-Modus: psql-ähnliche interaktive SQL-Shell für direkten Trino-Zugriff
MCP-Modus: Vollständiger MCP-Server für die Integration von KI-Assistenten
✅ MCP-Server-Implementierung in Go
✅ Ausführung von Trino SQL-Abfragen über MCP-Tools
✅ Erkennung von Katalogen, Schemata und Tabellen
✅ Unterstützung für Docker-Container
✅ Unterstützt sowohl STDIO- als auch HTTP-Transporte
✅ OAuth 2.1-Authentifizierung über die oauth-mcp-proxy-Bibliothek
4 Anbieter: HMAC, Okta, Google, Azure AD
Nativer Modus: Client handhabt OAuth direkt (keine serverseitigen Geheimnisse)
Proxy-Modus: Server fungiert als Proxy für den OAuth-Ablauf bei einfachen Clients
Produktionsbereit: Token-Caching, PKCE, Defense-in-Depth-Sicherheit
Wiederverwendbar: OAuth-Bibliothek für jeden Go MCP-Server verfügbar
✅ StreamableHTTP-Unterstützung mit JWT-Authentifizierung (Upgrade von SSE)
✅ Abwärtskompatibilität mit SSE-Endpunkten
✅ Kompatibel mit Cursor, Claude Desktop, Windsurf, ChatWise und allen MCP-kompatiblen Clients.
✅ Benutzeridentitätsverfolgung:
Abfrage-Attribuierung (automatisch): Markiert Abfragen mit dem OAuth-Benutzer über
X-Trino-Client-Tags/Info-HeaderBenutzer-Impersonierung (Opt-in): Führt Abfragen als OAuth-Benutzer über den
X-Trino-User-Header aus
Installation & Schnellstart
Installation:
# Homebrew
brew install tuannvm/mcp/mcp-trino
# Or one-liner (macOS/Linux)
curl -fsSL https://raw.githubusercontent.com/tuannvm/mcp-trino/main/install.sh | bashAusführung (Lokale Entwicklung):
export TRINO_HOST=localhost TRINO_USER=trino
mcp-trinoFür die Bereitstellung in der Produktion mit OAuth siehe Bereitstellungsleitfaden und OAuth-Architektur.
CLI-Modus
mcp-trino kann als interaktive CLI ähnlich wie psql oder die Trino-CLI verwendet werden:
# 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" # defaultIntegrierte Hilfe
Jeder Befehl verfügt über eine strukturierte, LLM-freundliche Hilfeausgabe:
# Main help with all commands, flags, examples, and environment variables
mcp-trino --help
# Per-subcommand help
mcp-trino query --help
mcp-trino describe --helpDie Hilfeausgabe folgt den Unix-Manpage-Konventionen mit den Abschnitten: NAME, SYNOPSIS, DESCRIPTION, COMMANDS, FLAGS, EXAMPLES, ENVIRONMENT und CONFIGURATION.
Exit-Codes
Code | Bedeutung |
0 | Erfolg |
1 | Laufzeitfehler (Verbindung fehlgeschlagen, Abfragefehler usw.) |
2 | Verwendungsfehler (unbekannter Befehl, ungültige Flags, fehlende Argumente) |
Benannte Profile
mcp-trino unterstützt benannte Verbindungsprofile für den einfachen Wechsel zwischen Trino-Umgebungen.
Konfigurationsdatei — unterstützt sowohl YAML (~/.config/trino/config.yaml) als auch 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: tableOder äquivalent in 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" }
}Wenn beide Dateien vorhanden sind, hat config.json Vorrang. Neue Konfigurationen verwenden standardmäßig JSON.
Befehle zur Profilverwaltung:
# 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 catalogsKonfigurationsvorrang (von hoch nach niedrig):
CLI-Flags (
--host,--portusw.)--profile-FlagTRINO_PROFILE-Umgebungsvariablecurrent-Feld in der Konfigurationsdateidefault-Profil-FallbackUmgebungsvariablen (
TRINO_HOSTusw.)
Umgebungsvariablen (niedrigste Priorität - werden von Profilen und Flags überschrieben):
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=trueGeheimnisverwaltung (empfohlen):
Geheimnisse werden ausschließlich aus Umgebungsvariablen geladen. Verwenden Sie eine Secrets-CLI, um sie beim Start über Unix-Piping einzuschleusen — die App greift niemals auf Ihren Tresor zu:
# 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-trinoSiehe docs/secrets.md für 1Password-, Vault- und Kubernetes-Muster sowie für Sicherheitsnuancen (Shell-Verlauf, Prozessliste und Leckage von Umgebungsvariablen).
REPL-Metabefehle (im interaktiven Modus):
\help- Hilfe anzeigen\quit,\exit,\q- REPL beenden\history- Befehlsverlauf anzeigen\catalogs- Alle Kataloge auflisten\schemas [catalog]- Schemata auflisten\tables [catalog schema]- Tabellen auflisten\describe <table>- Tabelle beschreiben\format <table|json|csv>- Ausgabeformat ändern
Verwendung
Unterstützte Clients: Claude Desktop, Claude Code, Cursor, Windsurf, ChatWise
Verfügbare Tools: execute_query, list_catalogs, list_schemas, list_tables, get_table_schema, explain_query
Für die Client-Integration und Tool-Dokumentation siehe Integrationsleitfaden und Tools-Referenz.
Konfiguration
Schlüsselvariablen: TRINO_HOST, TRINO_USER, TRINO_SCHEME, MCP_TRANSPORT, OAUTH_PROVIDER
Geheimnisverwaltung: Schleusen Sie Geheimnisse über die Prozessumgebung ein — mcp-trino liest sie direkt. Siehe docs/secrets.md für 1Password-, Vault- und Kubernetes-Rezepte.
# 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 valuesOAuth-Konfiguration:
# 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 deploymentsLeistungsoptimierung:
# Focus AI on specific schemas only (10-20x performance improvement)
export TRINO_ALLOWED_SCHEMAS="hive.analytics,hive.marts,hive.reporting"Benutzeridentitätsverfolgung:
# 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, subjectFür die vollständige Konfiguration siehe Bereitstellungsleitfaden, OAuth-Leitfaden, Allowlists-Leitfaden und Benutzeridentitäts-Leitfaden.
OAuth-Implementierung
mcp-trino verwendet oauth-mcp-proxy - eine eigenständige OAuth 2.1-Bibliothek für Go MCP-Server.
Warum eine separate Bibliothek?
✅ Wiederverwendbar für jeden Go MCP-Server
✅ Unabhängige Tests und Versionierung
✅ Dedizierte Dokumentation und Beispiele
✅ Community-gepflegte OAuth-Implementierung
Für OAuth-Details:
oauth-mcp-proxy Dokumentation - Vollständiger OAuth-Leitfaden
Anbieter-Einrichtungsleitfäden - Okta, Google, Azure AD
Sicherheits-Best-Practices - Produktionssicherheit
Mitwirken
Beiträge sind willkommen! Bitte zögern Sie nicht, einen Pull Request einzureichen.
Lizenz
Dieses Projekt ist unter der MIT-Lizenz lizenziert - siehe die Datei LICENSE für Details.
Verwandte Projekte
oauth-mcp-proxy - OAuth 2.1-Authentifizierungsbibliothek, die von mcp-trino verwendet wird (wiederverwendbar für jeden Go MCP-Server)
CI/CD und Releases
Dieses Projekt verwendet GitHub Actions für Continuous Integration und GoReleaser für automatisierte Releases.
Continuous Integration-Prüfungen
Unsere CI-Pipeline führt die folgenden Prüfungen für alle PRs und Commits im Hauptzweig durch:
Codequalität
Linting: Verwendung von golangci-lint zur Überprüfung auf häufige Codeprobleme und Stilverstöße
Go-Modul-Verifizierung: Sicherstellung, dass go.mod und go.sum ordnungsgemäß gepflegt werden
Formatierung: Überprüfung, ob der Code ordnungsgemäß mit gofmt formatiert ist
Sicherheit
Schwachstellen-Scan: Verwendung von govulncheck zur Überprüfung auf bekannte Schwachstellen in Abhängigkeiten
Abhängigkeits-Scan: Verwendung von Trivy zum Scannen von Schwachstellen in Abhängigkeiten (KRITISCH, HOCH und MITTEL)
SBOM-Generierung: Erstellung einer Software Bill of Materials für die Nachverfolgung von Abhängigkeiten
SLSA-Provenienz: Erstellung einer überprüfbaren Build-Provenienz für die Sicherheit der Lieferkette
Tests
Unit-Tests: Ausführen von Tests mit Race-Erkennung und Berichterstattung zur Codeabdeckung
Build-Verifizierung: Sicherstellung, dass die Codebasis erfolgreich erstellt wird
CI/CD-Sicherheit
Least Privilege: Workflows werden mit den minimal erforderlichen Berechtigungen ausgeführt
Gepinnte Versionen: Alle GitHub Actions verwenden spezifische Versionen, um Angriffe auf die Lieferkette zu verhindern
Abhängigkeits-Updates: Automatisierte Abhängigkeits-Updates über Dependabot
Release-Prozess
Wenn Änderungen in den Hauptzweig zusammengeführt werden:
CI-Prüfungen werden ausgeführt, um Codequalität und Sicherheit zu validieren
Bei Erfolg wird automatisch ein neues Release erstellt mit:
Semantischer Versionierung basierend auf Commit-Nachrichten
Binär-Builds für mehrere Plattformen
Veröffentlichung von Docker-Images in der GitHub Container Registry
SBOM- und Provenienz-Attestierung
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