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

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
1wRelease cycle
19Releases (12mo)
Commit activity
Issues opened vs closed

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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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