Skip to main content
Glama
tuannvm

mcp-trino

by tuannvm

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.

GitHub Workflow Status Go Version Trivy Scan SLSA 3 Go Report Card Go Reference Docker Image GitHub Release License: MIT

Trust Score

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

Hauptkomponenten:

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

    • Benutzer-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 | bash

Ausführung (Lokale Entwicklung):

export TRINO_HOST=localhost TRINO_USER=trino
mcp-trino

Fü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"  # default

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

Die 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: table

Oder ä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 catalogs

Konfigurationsvorrang (von hoch nach niedrig):

  1. CLI-Flags (--host, --port usw.)

  2. --profile-Flag

  3. TRINO_PROFILE-Umgebungsvariable

  4. current-Feld in der Konfigurationsdatei

  5. default-Profil-Fallback

  6. Umgebungsvariablen (TRINO_HOST usw.)

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

Geheimnisverwaltung (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-trino

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

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

Leistungsoptimierung:

# 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, subject

Fü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:

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:

  1. CI-Prüfungen werden ausgeführt, um Codequalität und Sicherheit zu validieren

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

Related MCP Connectors

Related MCP Servers