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 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