Go中的Trino MCP服务器
在Go中实现的Trino的高性能模型上下文协议(MCP)服务器。该项目使AI助手能够通过标准化的MCP工具与Trino的分布式SQL查询引擎无缝交互。
](https://github.com/tuannvm/mcp-trino/actions/workflows/build.yml) ](https://github.com/tuannvm/mcp-trino/blob/main/go.mod)     ](https://github.com/tuannvm/mcp-trino/pkgs/container/mcp-trino) ](https://github.com/tuannvm/mcp-trino/releases/latest) 

概述
该项目在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
Okta/Google/Azure AD]
JWT[JWT Tokens]
end
subgraph "MCP Server (mcp-trino)"
HTTP[HTTP Transport
/mcp endpoint]
STDIO[STDIO Transport]
AUTH[OAuth Middleware]
TOOLS[MCP Tools
• execute_query
• list_catalogs
• list_schemas
• list_tables
• get_table_schema
• explain_query]
end
subgraph "Data Layer"
TRINO[Trino Cluster
Distributed SQL Engine]
CATALOGS[Data Sources
• PostgreSQL
• MySQL
• S3/Hive
• BigQuery
• 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 | bashRun(地方发展):
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配置优先级 (从高到低):
- CLI标志(
--host,--port等等) --profile旗帜TRINO_PROFILE环境变量current配置文件中的字段default配置文件回退- 环境变量(
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-描述表格\format-更改输出格式
用法
支持的客户端: 克劳德桌面,克劳德代码,光标,风帆,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 valuesOAuth配置:
# 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的详细信息:
- oauth-mcp代理文档 -完整的OAuth指南
- 提供商设置指南 -Okta、谷歌、Azure广告
- 安全最佳实践 -生产安全
贡献
欢迎投稿!请随时提交拉取请求。
许可证
此项目根据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自动更新依赖关系
发布过程
当更改合并到主分支时:
- 运行CI检查以验证代码质量和安全性
- 如果成功,将自动创建一个新版本,其中包含:
- 基于提交消息的语义版本控制 - 针对多个平台的二进制构建 - Docker镜像发布到GitHub容器注册表 - SBOM和来源证明
