Mcp Trino

io.github.tuannvm由 GitHub 账号 tuannvm 发布v2.2.1更新于 Oct 24, 2026

MCP server for Trino distributed SQL query engine access

已验证STDIO仅桌面数据库数据与分析

概览

AI 生成的概览

让 AI 助手在 Trino 分布式 SQL 引擎上执行 SQL 查询,并浏览 catalog、schema 和表。

可以做什么
该 MCP 服务器将助手连接到 Trino 集群,使其能够执行 SQL 查询并查看数据结构。其工具包括 execute_query、list_catalogs、list_schemas、list_tables、get_table_schema 和 explain_query。它还可作为交互式 CLI 直接查询,并支持可选的 OAuth 2.1 身份验证与用户身份追踪。
适用场景
当助手需要查询或探索 Trino 中的数据,或 Trino 所联合的底层数据源(如 PostgreSQL、MySQL、S3/Hive、BigQuery、MongoDB)时使用。适合需要助手运行 SQL 并查看表结构的分析与数据探索场景。
运行要求
作为本地进程在用户机器上运行(仅限桌面端)。需要可访问的 Trino 服务器和凭据:TRINO_HOST 和 TRINO_USER 为必填,TRINO_PASSWORD 为密钥,TRINO_PORT 可选。需要访问 Trino 集群的网络。HTTP 部署可选配置 OAuth。
安装前请注意
该服务器可对 Trino 执行 SQL,查询可能读取、更改或删除数据,具体取决于账号权限。它需要密钥 TRINO_PASSWORD,从环境变量读取;README 提到 shell 历史、进程列表和环境变量泄漏风险。可选的用户模拟会以 OAuth 用户身份执行查询。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Mcp Trino,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

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

mermaid
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

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:

bash
# Homebrewbrew install tuannvm/mcp/mcp-trino
# Or one-liner (macOS/Linux)curl -fsSL https://raw.githubusercontent.com/tuannvm/mcp-trino/main/install.sh | bash

Run (Local Development):

bash
export TRINO_HOST=localhost TRINO_USER=trinomcp-trino

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:

bash
# Interactive REPL modemcp-trino --interactive
# Execute a query directlymcp-trino query "SELECT * FROM my_table LIMIT 10"
# List catalogs, schemas, tablesmcp-trino catalogsmcp-trino schemas my_catalogmcp-trino tables my_catalog my_schema
# Describe a tablemcp-trino describe my_catalog.my_schema.my_table
# Explain a querymcp-trino explain "SELECT COUNT(*) FROM my_table"
# Output formatsmcp-trino --format json query "SELECT 1"mcp-trino --format csv query "SELECT 1"mcp-trino --format table query "SELECT 1"  # default

Built-in Help

Every command has structured, LLM-friendly help output:

bash
# Main help with all commands, flags, examples, and environment variablesmcp-trino --help
# Per-subcommand helpmcp-trino query --helpmcp-trino describe --help

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

Exit Codes

CodeMeaning
0Success
1Runtime error (connection failed, query error, etc.)
2Usage 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):

yaml
# ~/.config/trino/config.yamlcurrent: 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

Or equivalently in JSON:

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

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

Profile Management Commands:

bash
# List all profilesmcp-trino config profile list
# Set default profilemcp-trino config profile use prod
# Show profile detailsmcp-trino config profile show staging
# Use a specific profile (overrides config file)mcp-trino --profile dev catalogs

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

bash
export TRINO_HOST=trino.example.comexport TRINO_PORT=443export TRINO_USER=myuserexport TRINO_PASSWORD=mypassexport TRINO_CATALOG=hiveexport TRINO_SCHEMA=analyticsexport TRINO_SSL=true

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:

bash
# 1Password CLI — resolves op:// references in an env fileop run --env-file=.env -- mcp-trino
# Or inline per-variableTRINO_PASSWORD=$(op read 'op://Engineering/Trino/password') mcp-trino

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.

bash
# 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 Configuration:

bash
# Native mode (most secure - zero server-side secrets)export OAUTH_ENABLED=true OAUTH_MODE=native OAUTH_PROVIDER=oktaexport 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=secretexport 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 modeexport JWT_SECRET=$(openssl rand -hex 32)  # Required for multi-pod deployments

Performance Optimization:

bash
# Focus AI on specific schemas only (10-20x performance improvement)export TRINO_ALLOWED_SCHEMAS="hive.analytics,hive.marts,hive.reporting"

User Identity Tracking:

bash
# 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=trueexport TRINO_IMPERSONATION_FIELD=email  # Options: username, email, subject

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.

Related Projects

  • 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

来源:README.md,提交 3e0be00

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v2.2.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分