Trino MCP服务器

一个用于Trino的高性能模型上下文协议(MCP)服务器,通过标准化MCP工具实现AI助手与Trino分布式SQL查询引擎的无缝交互。

  • by tuannvm
  • Go
  • 本地部署
  • 122 星标
  • 更新于
在 GitHub 查看 tuannvm/mcp-trino

使用说明

Go中的Trino MCP服务器

在Go中实现的Trino的高性能模型上下文协议(MCP)服务器。该项目使AI助手能够通过标准化的MCP工具与Trino的分布式SQL查询引擎无缝交互。

概述

该项目在Go中为Trino实现了一个模型上下文协议(MCP)服务器。它使AI助手能够通过标准化的MCP工具访问Trino的分布式SQL查询引擎。

Trino(前身为PrestoSQL)是一个功能强大的分布式SQL查询引擎,专为快速分析大型数据集而设计。

建筑

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

关键部件:

  • AI客户端:各种MCP兼容应用程序
  • 认证:可选的OAuth 2.0与OIDC提供商
  • MCP服务器:基于Go的服务器,支持双传输
  • 命令行接口命令模式:用于直接Trino访问的交互式SQL shell(类似psql)
  • 数据层:Trino集群连接到多个数据源

特性

  • ✅ 双模式:既可作为MCP服务器,又可作为交互式CLI
    • 命令行接口命令模式:类似psql的交互式SQL shell,用于直接Trino访问
    • MCP模式:用于AI助手集成的完整MCP服务器
  • ✅ Go中MCP服务器的实现
  • ✅ 通过MCP工具执行Trino SQL查询
  • ✅ 目录、架构和表发现
  • ✅ Docker容器支持
  • ✅ 支持STDIO和HTTP传输
  • ✅ OAuth 2.1身份验证 oauth-mcp代理 图书馆
    • 4供应商:HMAC、Okta、谷歌、Azure AD
    • 原生模式:客户端直接处理OAuth(无服务器端机密)
    • 代理模式:服务器为简单客户端代理OAuth流
    • 生产就绪:令牌缓存、PKCE、深度防御安全
    • 可重复使用的:OAuth库可用于任何Go MCP服务器
  • ✅ 具有JWT身份验证的流式HTTP支持(从SSE升级)
  • ✅ 与SSE端点向后兼容
  • ✅ 兼容Cursor、Claude Desktop、Windsurf、ChatWise和任何兼容MCP的客户端。
  • ✅ 用户身份跟踪:
    • 查询归因 (自动):通过标记OAuth用户的查询 X-Trino-Client-Tags/Info 标头
    • 用户模拟 (选择加入):以OAuth用户身份通过以下方式执行查询 X-Trino-User 头球

安装和快速启动

安装:

# 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

Run(地方发展):

export TRINO_HOST=localhost TRINO_USER=trino
mcp-trino

有关OAuth的生产部署,请参阅 部署指导 和 OAuth架构.

命令行接口命令模式

mcp-trino可以用作交互式CLI,类似于 psql 或Trino CLI:

# 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

内置帮助

每个命令都有结构化的、LLM友好的帮助输出:

# Main help with all commands, flags, examples, and environment variables
mcp-trino --help

# Per-subcommand help
mcp-trino query --help
mcp-trino describe --help

帮助输出遵循Unix手册页的约定,包括以下部分:名称、概要、描述、命令、标志、示例、环境和配置。

退出代码

代码 含义
0 成功
1 运行时错误(连接失败、查询错误等)
2 使用错误(未知命令、无效标志、缺少参数)

命名配置文件

mcp-trino支持命名连接配置文件,以便在trino环境之间轻松切换。

配置文件 --同时支持YAML(~/.config/trino/config.yaml)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

或者在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" }
}

当两个文件都存在时, config.json 优先。新配置默认为JSON。

配置文件管理命令:

# 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

配置优先级 (从高到低):

  1. CLI标志(--host, --port等等)
  2. --profile 旗帜
  3. TRINO_PROFILE 环境变量
  4. current 配置文件中的字段
  5. default 配置文件回退
  6. 环境变量(TRINO_HOST等等)

环境变量 (最低优先级-被配置文件和标志覆盖):

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

秘密管理 (推荐):

机密完全从环境变量加载。在启动时使用secrets CLI通过Unix管道注入它们——该应用程序永远不会触及您的保管库:

# 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

看 docs/secrets.md 用于1Password、Vault和Kubernetes模式,以及安全细微差别(shell历史、进程列表和env-var泄漏)。

REPL元命令 (在交互模式下):

  • \help -显示帮助
  • \quit, \exit, \q -退出REPL
  • \history -显示命令历史记录
  • \catalogs -列出所有目录
  • \schemas [catalog] -列出架构
  • \tables [catalog schema] -列出表格
  • \describe <table> -描述表格
  • \format <table|json|csv> -更改输出格式

用法

支持的客户端: 克劳德桌面,克劳德代码,光标,风帆,ChatWise

可用工具: execute_query, list_catalogs, list_schemas, list_tables, get_table_schema, explain_query

有关客户端集成和工具文档,请参阅 集成指南 和 工具参考.

配置

关键变量: TRINO_HOST, TRINO_USER, TRINO_SCHEME, MCP_TRANSPORT, OAUTH_PROVIDER

秘密管理: 通过流程环境注入机密-- mcp-trino 直接阅读它们。看 docs/secrets.md 用于1Password、Vault和Kubernetes配方。

# 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配置:

# 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

性能优化:

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

用户身份跟踪:

# 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

有关完整配置,请参阅 部署指导, OAuth指南, 允许列表指南,以及 用户身份指南.

OAuth实现

mcp trino使用 oauth-mcp代理 -Go MCP服务器的独立OAuth 2.1库。

为什么要有独立的图书馆?

  • ✅ 可在任何Go MCP服务器上重复使用
  • ✅ 独立测试和版本控制
  • ✅ 专用文档和示例
  • ✅ 社区维护的OAuth实现

有关OAuth的详细信息:

贡献

欢迎投稿!请随时提交拉取请求。

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

相关项目

  • oauth-mcp代理 -mcp-trino使用的OAuth 2.1身份验证库(可用于任何Go mcp服务器)

CI/CD及其发布

该项目使用GitHub Actions进行持续集成,使用GoReleaser进行自动发布。

持续集成检查

我们的CI管道对所有PR执行以下检查,并提交给主分支:

代码质量

  • 掉毛:使用golangci-lint检查常见的代码问题和样式违规
  • Go模块验证:确保go.mod和go.sum得到妥善维护
  • 格式化:使用gofmt验证代码的格式是否正确

安全

  • 漏洞扫描:使用govullcheck检查依赖关系中的已知漏洞
  • 依赖关系扫描:使用Trivy扫描依赖关系中的漏洞(关键、高和中)
  • SBOM生成:创建用于依赖性跟踪的软件物料清单
  • SLSA来源:为供应链安全创建可验证的构建来源

测试

  • 单元测试:运行带有种族检测和代码覆盖率报告的测试
  • 构建验证:确保代码库构建成功

CI/CD安全

  • 最小权限:工作流以所需的最小权限运行
  • 固定版本:所有GitHub操作都使用特定版本来防止供应链攻击
  • 依赖关系更新:通过Dependabot自动更新依赖关系

发布过程

当更改合并到主分支时:

  1. 运行CI检查以验证代码质量和安全性
  2. 如果成功,将自动创建一个新版本,其中包含:
    • 基于提交消息的语义版本控制
    • 针对多个平台的二进制构建
    • Docker镜像发布到GitHub容器注册表
    • SBOM和来源证明