mcp-trino

by tuannvm

Integrations

  • Allows AI assistants to execute SQL queries against a Trino distributed SQL query engine, with support for catalog/schema/table discovery and schema inspection.

Trino MCP-Server in Go

Ein leistungsstarker Model Context Protocol (MCP)-Server für Trino, implementiert in Go. Dieses Projekt ermöglicht KI-Assistenten die nahtlose Interaktion mit der verteilten SQL-Abfrage-Engine von Trino über standardisierte MCP-Tools.

Überblick

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 die schnelle Analyse großer Datensätze entwickelt wurde.

Merkmale

  • ✅ MCP-Serverimplementierung in Go
  • ✅ Trino SQL-Abfrageausführung über MCP-Tools
  • ✅ Katalog-, Schema- und Tabellenerkennung
  • ✅ Docker-Container-Unterstützung
  • ✅ Unterstützt sowohl STDIO- als auch HTTP-Transporte
  • ✅ Server-Sent Events (SSE)-Unterstützung für Cursor und andere MCP-Clients
  • ✅ Kompatibel mit Cursor, Claude Desktop, Windsurf, ChatWise und allen MCP-kompatiblen Clients.

Installation

Homebrew (macOS und Linux)

Der einfachste Weg, mcp-trino zu installieren, ist die Verwendung von Homebrew:

# Add the tap repository brew tap tuannvm/mcp # Install mcp-trino brew install mcp-trino

So aktualisieren Sie auf die neueste Version:

brew update && brew upgrade mcp-trino

Alternative Installationsmethoden

Manueller Download
  1. Laden Sie die entsprechende Binärdatei für Ihre Plattform von der GitHub-Releases -Seite herunter.
  2. Platzieren Sie die Binärdatei in einem Verzeichnis, das in Ihrem PATH enthalten ist (z. B. /usr/local/bin unter Linux/macOS).
  3. Machen Sie es ausführbar ( chmod +x mcp-trino unter Linux/macOS)
Aus der Quelle
git clone https://github.com/tuannvm/mcp-trino.git cd mcp-trino make build # Binary will be in ./bin/

Downloads

Sie können vorgefertigte Binärdateien für Ihre Plattform herunterladen:

PlattformArchitekturDownload-Link
macOSx86_64 (Intel)Herunterladen
macOSARM64 (Apple Silicon)Herunterladen
Linuxx86_64Herunterladen
LinuxARM64Herunterladen
Windowsx86_64Herunterladen

Oder sehen Sie sich alle verfügbaren Downloads auf der GitHub-Releases -Seite an.

MCP-Integration

Dieser MCP-Server kann in mehrere KI-Anwendungen integriert werden:

Docker-Image verwenden

So verwenden Sie das Docker-Image anstelle einer lokalen Binärdatei:

{ "mcpServers": { "mcp-trino": { "command": "docker", "args": ["run", "--rm", "-i", "-e", "TRINO_HOST=<HOST>", "-e", "TRINO_PORT=<PORT>", "-e", "TRINO_USER=<USERNAME>", "-e", "TRINO_PASSWORD=<PASSWORD>", "-e", "TRINO_SCHEME=http", "ghcr.io/tuannvm/mcp-trino:latest"], "env": {} } } }

Hinweis : Der spezielle DNS-Name host.docker.internal ermöglicht dem Container die Verbindung mit Diensten, die auf dem Host-Rechner laufen. Falls Ihr Trino-Server woanders läuft, ersetzen Sie ihn durch den entsprechenden Host.

Diese Docker-Konfiguration kann in jeder der folgenden Anwendungen verwendet werden.

Cursor

Zur Verwendung mit Cursor erstellen oder bearbeiten Sie ~/.cursor/mcp.json :

{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

Ersetzen Sie die Umgebungsvariablen durch Ihre spezifische Trino-Konfiguration.

Für den HTTP+SSE-Transportmodus (unterstützt für die Cursor-Integration):

{ "mcpServers": { "mcp-trino-http": { "url": "http://localhost:9097/sse" } } }

Starten Sie den Server dann in einem separaten Terminal mit:

MCP_TRANSPORT=http TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD> mcp-trino

Claude Desktop

Zur Verwendung mit Claude Desktop bearbeiten Sie Ihre Claude-Konfigurationsdatei:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

Starten Sie Claude Desktop nach der Aktualisierung der Konfiguration neu. Die MCP-Tools sollten im Menü „Tools“ verfügbar sein.

Windsurf

Zur Verwendung mit Windsurf erstellen oder bearbeiten Sie Ihre mcp_config.json :

{ "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }

Starten Sie Windsurf neu, um die Änderungen zu übernehmen. Die Trino MCP-Tools stehen der Cascade AI zur Verfügung.

ChatWise

Zur Verwendung mit ChatWise befolgen Sie diese Schritte:

  1. Öffnen Sie ChatWise und gehen Sie zu Einstellungen
  2. Navigieren Sie zum Abschnitt „Tools“
  3. Klicken Sie auf das „+“-Symbol, um ein neues Werkzeug hinzuzufügen
  4. Wählen Sie „Command Line MCP“
  5. Konfigurieren Sie mit den folgenden Details:
    • ID: mcp-trino (oder ein beliebiger Name Ihrer Wahl)
    • Befehl: mcp-trino
    • Argumente: (leer lassen)
    • Env: Fügen Sie die folgenden Umgebungsvariablen hinzu:
      TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD>

Alternativ können Sie die Konfiguration aus JSON importieren:

  1. Kopieren Sie dieses JSON in Ihre Zwischenablage:
    { "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }
  2. Klicken Sie in den ChatWise-Einstellungen > Tools auf das Symbol "+"
  3. Wählen Sie „JSON aus der Zwischenablage importieren“
  4. Schalten Sie den Schalter neben dem Werkzeug um, um es zu aktivieren

Klicken Sie nach der Aktivierung auf das Hammersymbol unter dem Eingabefeld in ChatWise, um auf die Trino MCP-Tools zuzugreifen.

Verfügbare MCP-Tools

Der Server stellt die folgenden MCP-Tools bereit:

Abfrage ausführen

Führen Sie eine SQL-Abfrage gegen Trino mit vollständiger SQL-Unterstützung für komplexe analytische Abfragen aus.

Beispiel-Eingabeaufforderung:

„Wie viele Kunden haben wir pro Region? Können Sie diese in absteigender Reihenfolge anzeigen?“

Beispiel:

{ "query": "SELECT region, COUNT(*) as customer_count FROM tpch.tiny.customer GROUP BY region ORDER BY customer_count DESC" }

Antwort:

{ "columns": ["region", "customer_count"], "data": [ ["AFRICA", 5], ["AMERICA", 5], ["ASIA", 5], ["EUROPE", 5], ["MIDDLE EAST", 5] ] }

Kataloglisten

Listen Sie alle auf dem Trino-Server verfügbaren Kataloge auf und erhalten Sie so einen umfassenden Überblick über Ihr Datenökosystem.

Beispiel-Eingabeaufforderung:

„Auf welche Datenbanken haben wir in unserer Trino-Umgebung Zugriff?“

Beispiel:

{}

Antwort:

{ "catalogs": ["tpch", "memory", "system", "jmx"] }

list_schemas

Listen Sie alle Schemata in einem Katalog auf, um effizient durch die Datenhierarchie zu navigieren.

Beispiel-Eingabeaufforderung:

„Welche Schemata oder Datensätze sind im tpch-Katalog verfügbar?“

Beispiel:

{ "catalog": "tpch" }

Antwort:

{ "schemas": ["information_schema", "sf1", "sf100", "sf1000", "tiny"] }

list_tables

Listen Sie alle Tabellen in einem Schema auf, um Einblick in die verfügbaren Datensätze zu erhalten.

Beispiel-Eingabeaufforderung:

„Welche Tabellen sind im tpch-Tiny-Schema verfügbar? Ich muss wissen, welche Daten wir abfragen können.“

Beispiel:

{ "catalog": "tpch", "schema": "tiny" }

Antwort:

{ "tables": ["customer", "lineitem", "nation", "orders", "part", "partsupp", "region", "supplier"] }

get_table_schema

Holen Sie sich das Schema einer Tabelle und verstehen Sie die Struktur Ihrer Daten für eine bessere Abfrageplanung.

Beispiel-Eingabeaufforderung:

„Welche Spalten enthält die Kundentabelle? Ich muss die Datentypen und die Struktur kennen, bevor ich meine Abfrage schreibe.“

Beispiel:

{ "catalog": "tpch", "schema": "tiny", "table": "customer" }

Antwort:

{ "columns": [ { "name": "custkey", "type": "bigint", "nullable": false }, { "name": "name", "type": "varchar", "nullable": false }, { "name": "address", "type": "varchar", "nullable": false }, { "name": "nationkey", "type": "bigint", "nullable": false }, { "name": "phone", "type": "varchar", "nullable": false }, { "name": "acctbal", "type": "double", "nullable": false }, { "name": "mktsegment", "type": "varchar", "nullable": false }, { "name": "comment", "type": "varchar", "nullable": false } ] }

Diese Informationen sind von unschätzbarem Wert, um die Spaltennamen, Datentypen und Nullbarkeitsbeschränkungen zu verstehen, bevor Sie Abfragen für die Tabelle schreiben.

End-to-End-Beispiel

Hier ist ein vollständiges Interaktionsbeispiel, das zeigt, wie ein KI-Assistent diese Tools verwenden könnte, um eine Geschäftsfrage zu beantworten:

Benutzeranfrage: „Können Sie mir helfen, unsere größten Kunden zu analysieren? Ich möchte die Top 5 der Kunden mit den höchsten Kontoständen kennen.“

Arbeitsablauf des KI-Assistenten:

  1. Entdecken Sie zunächst die verfügbaren Kataloge
    > Using list_catalogs tool > Discovers tpch catalog
  2. Suchen Sie dann nach verfügbaren Schemata
    > Using list_schemas tool with catalog "tpch" > Discovers "tiny" schema
  3. Verfügbare Tische erkunden
    > Using list_tables tool with catalog "tpch" and schema "tiny" > Finds "customer" table
  4. Überprüfen Sie das Kundentabellenschema
    > Using get_table_schema tool > Discovers "custkey", "name", "acctbal" and other columns
  5. Führen Sie abschließend die Abfrage aus
    > Using execute_query tool with: > "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5"
  6. Gibt die Ergebnisse an den Benutzer zurück:
    The top 5 customers with highest account balances are: 1. Customer #65 (Customer#000000065): $9,222.78 2. Customer #13 (Customer#000000013): $8,270.47 3. Customer #89 (Customer#000000089): $7,990.56 4. Customer #11 (Customer#000000011): $7,912.91 5. Customer #82 (Customer#000000082): $7,629.41

Dieser nahtlose Workflow zeigt, wie KI-Assistenten mithilfe der MCP-Tools Daten im Dialogmodus erkunden und abfragen können.

Konfiguration

Der Server kann mit den folgenden Umgebungsvariablen konfiguriert werden:

VariableBeschreibungStandard
TRINO_HOSTHostname des Trino-Serverslokaler Host
TRINO_PORTTrino-Server-Port8080
TRINO_USERTrino-BenutzerTrino
TRINO_PASSWORDTrino-Passwort(leer)
TRINO_KATALOGStandardkatalogErinnerung
TRINO_SCHEMAStandardschemaStandard
TRINO_SCHEMEVerbindungsschema (http/https)https
TRINO_SSLSSL aktivierenWAHR
TRINO_SSL_UNSICHERUnsicheres SSL zulassenWAHR
TRINO_ALLOW_WRITE_QUERIESNicht schreibgeschützte SQL-Abfragen zulassenFALSCH
MCP_TRANSPORTTransportmethode (stdio/http)stdio
MCP_PORTHTTP-Port für HTTP-Transport9097
MCP_HOSTHost für HTTP-Rückrufelokaler Host

Hinweis : Wenn TRINO_SCHEME auf „https“ eingestellt ist, wird TRINO_SSL unabhängig vom angegebenen Wert automatisch auf „true“ gesetzt.

Wichtig : Der Standardverbindungsmodus ist HTTPS. Wenn Sie einen HTTP-only-Trino-Server verwenden, müssen Sie TRINO_SCHEME=http in Ihren Umgebungsvariablen festlegen.

Sicherheitshinweis : Standardmäßig sind nur schreibgeschützte Abfragen (SELECT, SHOW, DESCRIBE, EXPLAIN) zulässig, um SQL-Injection zu verhindern. Wenn Sie Schreibvorgänge oder andere nicht lesbare Abfragen ausführen müssen, setzen Sie TRINO_ALLOW_WRITE_QUERIES=true . Beachten Sie jedoch, dass dadurch dieser Sicherheitsschutz umgangen wird.

Für die Cursor-Integration : Bei Verwendung mit Cursor setzen Sie MCP_TRANSPORT=http und stellen Sie eine Verbindung zum /sse -Endpunkt her. Der Server verarbeitet SSE-Verbindungen (Server-Sent Events) automatisch.

Beitragen

Beiträge sind willkommen! Senden Sie gerne einen Pull Request.

Lizenz

Dieses Projekt ist unter der MIT-Lizenz lizenziert – Einzelheiten finden Sie in der Datei LICENSE.

CI/CD und Releases

Dieses Projekt verwendet GitHub Actions für kontinuierliche Integration und GoReleaser für automatisierte Releases.

Kontinuierliche Integrationsprüfungen

Unsere CI-Pipeline führt die folgenden Prüfungen an allen PRs und Commits zum Hauptzweig durch:

Codequalität
  • Linting : Verwenden von golangci-lint zum Überprüfen auf häufige Codeprobleme und Stilverletzungen
  • Überprüfung des Go-Moduls : Sicherstellen, dass go.mod und go.sum ordnungsgemäß gewartet werden
  • Formatierung : Überprüfen, ob der Code mit gofmt richtig formatiert ist
Sicherheit
  • Schwachstellen-Scan : Verwenden von govulncheck, um Abhängigkeiten auf bekannte Schwachstellen zu prüfen
  • Abhängigkeitsscan : Verwenden von Trivy zum Scannen nach Schwachstellen in Abhängigkeiten (KRITISCH, HOCH und MITTEL)
  • SBOM-Generierung : Erstellen einer Software-Stückliste zur Abhängigkeitsverfolgung
  • SLSA-Herkunft : Erstellen einer überprüfbaren Build-Herkunft für die Sicherheit der Lieferkette
Testen
  • Unit-Tests : Ausführen von Tests mit Race-Erkennung und Code-Coverage-Reporting
  • Build-Verifizierung : Sicherstellen, dass die Codebasis erfolgreich erstellt wird
CI/CD-Sicherheit
  • Geringste Berechtigungen : Workflows werden mit den minimal erforderlichen Berechtigungen ausgeführt
  • Angeheftete Versionen : Alle GitHub-Aktionen verwenden bestimmte Versionen, um Angriffe auf die Lieferkette zu verhindern
  • Abhängigkeitsaktualisierungen : Automatisierte Abhängigkeitsaktualisierungen über Dependabot

Freigabeprozess

Wenn Änderungen in den Hauptzweig integriert werden:

  1. CI-Prüfungen werden durchgeführt, um die Codequalität und -sicherheit zu validieren
  2. Bei Erfolg wird automatisch eine neue Version erstellt mit:
    • Semantische Versionierung basierend auf Commit-Nachrichten
    • Binärbuilds für mehrere Plattformen
    • Docker-Image-Veröffentlichung im GitHub Container Registry
    • SBOM und Herkunftsnachweis
-
security - not tested
F
license - not found
-
quality - not tested

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Ein leistungsstarker Model Context Protocol (MCP)-Server für Trino, implementiert in Go.

  1. Überblick
    1. Merkmale
      1. Installation
        1. Homebrew (macOS und Linux)
        2. Alternative Installationsmethoden
      2. Downloads
        1. MCP-Integration
          1. Docker-Image verwenden
          2. Cursor
          3. Claude Desktop
          4. Windsurf
          5. ChatWise
        2. Verfügbare MCP-Tools
          1. Abfrage ausführen
          2. Kataloglisten
          3. list_schemas
          4. list_tables
          5. get_table_schema
        3. End-to-End-Beispiel
          1. Konfiguration
            1. Beitragen
              1. Lizenz
                1. CI/CD und Releases
                  1. Kontinuierliche Integrationsprüfungen
                  2. Freigabeprozess

                Related MCP Servers

                • -
                  security
                  A
                  license
                  -
                  quality
                  Go server implementing Model Context Protocol (MCP) for filesystem operations.
                  Last updated -
                  228
                  Go
                  MIT License
                • -
                  security
                  A
                  license
                  -
                  quality
                  This server implements the Model Context Protocol (MCP) to handle asynchronous tasks with real-time status tracking, robust error handling, and automatic resource management.
                  Last updated -
                  2
                  1
                  JavaScript
                  MIT License
                • A
                  security
                  F
                  license
                  A
                  quality
                  A Model Context Protocol (MCP) server that provides a simple sleep/wait tool, useful for adding delays between operations such as waiting between API calls or testing eventually consistent systems.
                  Last updated -
                  1
                  6
                  7
                  JavaScript
                • -
                  security
                  -
                  license
                  -
                  quality
                  A Model Context Protocol (MCP) server that interacts with system APIs, allowing users to check connections, search employees, register breakfast, and update chemical information by shifts.
                  Last updated -
                  2

                View all related MCP servers

                ID: sf23b6j9h9