For the complete documentation index, see llms.txt. This page is also available as Markdown.

Trino MCP Server in Go

A high-performance Model Context Protocol (MCP) server for Trino implemented in Go. This project enables AI assistants to seamlessly interact with Trino's distributed SQL query engine through standardized MCP tools.

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

Trust Score

Overview

This project implements a Model Context Protocol (MCP) server for Trino in Go. It enables AI assistants to access Trino's distributed SQL query engine through standardized MCP tools.

Trino (formerly PrestoSQL) is a powerful distributed SQL query engine designed for fast analytics on large datasets.

Architecture

spinner

Key Components:

  • AI Clients: Various MCP-compatible applications

  • Authentication: Optional OAuth 2.0 with OIDC providers

  • MCP Server: Go-based server with dual transport support

  • CLI Mode: Interactive SQL shell for direct Trino access (psql-like)

  • Data Layer: Trino cluster connecting to multiple data sources

Features

  • Dual Mode: Works as both MCP server AND interactive CLI

    • CLI Mode: psql-like interactive SQL shell for direct Trino access

    • MCP Mode: Full MCP server for AI assistant integration

  • ✅ MCP server implementation in Go

  • ✅ Trino SQL query execution through MCP tools

  • ✅ Catalog, schema, and table discovery

  • ✅ Docker container support

  • ✅ Supports both STDIO and HTTP transports

  • ✅ OAuth 2.1 authentication via oauth-mcp-proxy library

    • 4 Providers: HMAC, Okta, Google, Azure AD

    • Native mode: Client handles OAuth directly (zero server-side secrets)

    • Proxy mode: Server proxies OAuth flow for simple clients

    • Production-ready: Token caching, PKCE, defense-in-depth security

    • Reusable: OAuth library available for any Go MCP server

  • ✅ StreamableHTTP support with JWT authentication (upgraded from SSE)

  • ✅ Backward compatibility with SSE endpoints

  • ✅ Compatible with Cursor, Claude Desktop, Windsurf, ChatWise, and any MCP-compatible clients.

  • ✅ User Identity Tracking:

    • Query Attribution (automatic): Tags queries with OAuth user via X-Trino-Client-Tags/Info headers

    • User Impersonation (opt-in): Execute queries as OAuth user via X-Trino-User header

Installation & Quick Start

Install:

Run (Local Development):

For production deployment with OAuth, see Deployment Guide and OAuth Architecture.

CLI Mode

mcp-trino can be used as an interactive CLI similar to psql or the Trino CLI:

Built-in Help

Every command has structured, LLM-friendly help output:

Help output follows Unix man-page conventions with sections: NAME, SYNOPSIS, DESCRIPTION, COMMANDS, FLAGS, EXAMPLES, ENVIRONMENT, and CONFIGURATION.

Exit Codes

Code
Meaning

0

Success

1

Runtime error (connection failed, query error, etc.)

2

Usage error (unknown command, invalid flags, missing arguments)

Named Profiles

mcp-trino supports named connection profiles for easy switching between Trino environments.

Configuration File — supports both YAML (~/.config/trino/config.yaml) and JSON (~/.config/trino/config.json):

Or equivalently in JSON:

When both files exist, config.json takes precedence. New configs default to JSON.

Profile Management Commands:

Configuration Precedence (highest to lowest):

  1. CLI flags (--host, --port, etc.)

  2. --profile flag

  3. TRINO_PROFILE environment variable

  4. current field in config file

  5. default profile fallback

  6. Environment variables (TRINO_HOST, etc.)

Environment Variables (lowest priority - overridden by profiles and flags):

Secret Management (recommended):

Secrets are loaded purely from environment variables. Use a secrets CLI to inject them via Unix piping at launch time — the app never touches your vault:

See docs/secrets.md for 1Password, Vault, and Kubernetes patterns, and for security nuances (shell-history, process-list, and env-var leakage).

REPL Meta-Commands (in interactive mode):

  • \help - Show help

  • \quit, \exit, \q - Exit REPL

  • \history - Show command history

  • \catalogs - List all catalogs

  • \schemas [catalog] - List schemas

  • \tables [catalog schema] - List tables

  • \describe <table> - Describe table

  • \format <table|json|csv> - Change output format

Usage

Supported Clients: Claude Desktop, Claude Code, Cursor, Windsurf, ChatWise

Available Tools: execute_query, list_catalogs, list_schemas, list_tables, get_table_schema, explain_query

For client integration and tool documentation, see Integration Guide and Tools Reference.

Configuration

Key Variables: TRINO_HOST, TRINO_USER, TRINO_SCHEME, MCP_TRANSPORT, OAUTH_PROVIDER

Secret Management: Inject secrets through the process environment — mcp-trino reads them directly. See docs/secrets.md for 1Password, Vault, and Kubernetes recipes.

OAuth Configuration:

Performance Optimization:

User Identity Tracking:

For complete configuration, see Deployment Guide, OAuth Guide, Allowlists Guide, and User Identity Guide.

OAuth Implementation

mcp-trino uses oauth-mcp-proxy - a standalone OAuth 2.1 library for Go MCP servers.

Why a separate library?

  • ✅ Reusable across any Go MCP server

  • ✅ Independent testing and versioning

  • ✅ Dedicated documentation and examples

  • ✅ Community-maintained OAuth implementation

For OAuth details:

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the MIT License - see the LICENSE file for details.

  • oauth-mcp-proxy - OAuth 2.1 authentication library used by mcp-trino (reusable for any Go MCP server)

CI/CD and Releases

This project uses GitHub Actions for continuous integration and GoReleaser for automated releases.

Continuous Integration Checks

Our CI pipeline performs the following checks on all PRs and commits to the main branch:

Code Quality

  • Linting: Using golangci-lint to check for common code issues and style violations

  • Go Module Verification: Ensuring go.mod and go.sum are properly maintained

  • Formatting: Verifying code is properly formatted with gofmt

Security

  • Vulnerability Scanning: Using govulncheck to check for known vulnerabilities in dependencies

  • Dependency Scanning: Using Trivy to scan for vulnerabilities in dependencies (CRITICAL, HIGH, and MEDIUM)

  • SBOM Generation: Creating a Software Bill of Materials for dependency tracking

  • SLSA Provenance: Creating verifiable build provenance for supply chain security

Testing

  • Unit Tests: Running tests with race detection and code coverage reporting

  • Build Verification: Ensuring the codebase builds successfully

CI/CD Security

  • Least Privilege: Workflows run with minimum required permissions

  • Pinned Versions: All GitHub Actions use specific versions to prevent supply chain attacks

  • Dependency Updates: Automated dependency updates via Dependabot

Release Process

When changes are merged to the main branch:

  1. CI checks are run to validate code quality and security

  2. If successful, a new release is automatically created with:

    • Semantic versioning based on commit messages

    • Binary builds for multiple platforms

    • Docker image publishing to GitHub Container Registry

    • SBOM and provenance attestation

Last updated

Was this helpful?