mcp-trino

by tuannvm
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

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 服务器(Go 语言)

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

概述

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

Trino(以前称为 PrestoSQL)是一个强大的分布式 SQL 查询引擎,旨在对大型数据集进行快速分析。

特征

  • ✅ 使用 Go 语言实现 MCP 服务器
  • ✅ 通过 MCP 工具执行 Trino SQL 查询
  • ✅ 目录、架构和表发现
  • ✅ Docker 容器支持
  • ✅ 支持 STDIO 和 HTTP 传输
  • ✅ 服务器发送事件 (SSE) 支持 Cursor 和其他 MCP 客户端
  • ✅ 与 Cursor、Claude Desktop、Windsurf、ChatWise 以及任何兼容 MCP 的客户端兼容。

安装

Homebrew(macOS 和 Linux)

安装 mcp-trino 最简单的方法是使用 Homebrew:

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

要更新到最新版本:

brew update && brew upgrade mcp-trino

替代安装方法

手册下载

  1. GitHub 发布页面下载适合您平台的二进制文件。
  2. 将二进制文件放在 PATH 中包含的目录中(例如,Linux/macOS 上的/usr/local/bin
  3. 使其可执行(Linux/macOS 上为chmod +x mcp-trino

来自源

git clone https://github.com/tuannvm/mcp-trino.git cd mcp-trino make build # Binary will be in ./bin/

下载

您可以下载适合您平台的预先构建的二进制文件:

平台建筑学下载链接
macOSx86_64(英特尔)下载
macOSARM64(Apple Silicon)下载
Linuxx86_64下载
LinuxARM64下载
视窗x86_64下载

或者查看GitHub 发布页面上的所有可用下载。

MCP 集成

该 MCP 服务器可以与多个 AI 应用程序集成:

使用 Docker 镜像

要使用 Docker 镜像而不是本地二进制文件:

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

注意host.docker.internal特殊 DNS 名称允许容器连接到主机上运行的服务。如果您的 Trino 服务器在其他地方运行,请将其替换为相应的主机。

此 Docker 配置可用于以下任何应用程序。

光标

要与Cursor一起使用,请创建或编辑~/.cursor/mcp.json

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

用您的特定 Trino 配置替换环境变量。

对于 HTTP+SSE 传输模式(支持 Cursor 集成):

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

然后在单独的终端中启动服务器:

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

克劳德桌面

要与Claude Desktop一起使用,请编辑您的 Claude 配置文件:

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

更新配置后,重新启动 Claude Desktop。您将在工具菜单中看到 MCP 工具。

风帆冲浪

要与Windsurf一起使用,请创建或编辑mcp_config.json

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

重启 Windsurf 以应用更改。Trino MCP 工具将可供 Cascade AI 使用。

ChatWise

要与ChatWise一起使用,请按照以下步骤操作:

  1. 打开 ChatWise 并转到“设置”
  2. 导航到“工具”部分
  3. 单击“+”图标添加新工具
  4. 选择“命令行 MCP”
  5. 使用以下详细信息进行配置:
    • ID: mcp-trino (或您喜欢的任何名称)
    • 命令: mcp-trino
    • 参数:(留空)
    • Env:添加以下环境变量:
      TRINO_HOST=<HOST> TRINO_PORT=<PORT> TRINO_USER=<USERNAME> TRINO_PASSWORD=<PASSWORD>

或者,您可以从 JSON 导入配置:

  1. 将此 JSON 复制到剪贴板:
    { "mcpServers": { "mcp-trino": { "command": "mcp-trino", "args": [], "env": { "TRINO_HOST": "<HOST>", "TRINO_PORT": "<PORT>", "TRINO_USER": "<USERNAME>", "TRINO_PASSWORD": "<PASSWORD>" } } } }
  2. 在 ChatWise 设置 > 工具中,点击“+”图标
  3. 选择“从剪贴板导入 JSON”
  4. 切换工具旁边的开关以启用它

启用后,单击 ChatWise 中输入框下方的锤子图标即可访问 Trino MCP 工具。

可用的 MCP 工具

该服务器提供以下 MCP 工具:

执行查询

对 Trino 执行 SQL 查询,并为复杂的分析查询提供完整的 SQL 支持。

示例提示:

“每个地区有多少客户?您能按降序显示吗?”

例子:

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

回复:

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

列表目录

列出 Trino 服务器中可用的所有目录,提供数据生态系统的全面视图。

示例提示:

“我们在 Trino 环境中可以访问哪些数据库?”

例子:

{}

回复:

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

列表模式

列出目录中的所有模式,帮助您有效地浏览数据层次结构。

示例提示:

“tpch 目录中有哪些可用的模式或数据集?”

例子:

{ "catalog": "tpch" }

回复:

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

列表表

列出模式中的所有表,让您了解可用的数据集。

示例提示:

“tpch tiny 模式中有哪些表?我需要知道我们可以查询哪些数据。”

例子:

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

回复:

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

获取表模式

获取表的模式,了解数据的结构以便更好地进行查询规划。

示例提示:

“客户表中有哪些列?在编写查询之前,我需要了解数据类型和结构。”

例子:

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

回复:

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

在针对表编写查询之前,这些信息对于理解列名、数据类型和可空性约束非常有价值。

端到端示例

以下是一个完整的交互示例,展示了人工智能助手如何使用这些工具来回答业务问题:

用户查询: “您能帮我分析一下我们最大的客户吗?我想知道账户余额最高的前5个客户。”

AI助手的工作流程:

  1. 首先,发现可用的目录
    > Using list_catalogs tool > Discovers tpch catalog
  2. 然后,找到可用的模式
    > Using list_schemas tool with catalog "tpch" > Discovers "tiny" schema
  3. 探索可用表
    > Using list_tables tool with catalog "tpch" and schema "tiny" > Finds "customer" table
  4. 检查客户表架构
    > Using get_table_schema tool > Discovers "custkey", "name", "acctbal" and other columns
  5. 最后,执行查询
    > Using execute_query tool with: > "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5"
  6. 将结果返回给用户:
    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

这种无缝的工作流程展示了 MCP 工具如何使 AI 助手能够以对话的方式探索和查询数据。

配置

可以使用以下环境变量配置服务器:

多变的描述默认
TRINO_HOSTTrino 服务器主机名本地主机
TRINO_PORTTrino 服务器端口8080
TRINO_用户Trino 用户特里诺
TRINO_密码Trino 密码(空的)
TRINO_目录默认目录记忆
TRINO_SCHEMA默认架构默认
TRINO_SCHEME连接方案(http/https)https
TRINO_SSL启用 SSL真的
TRINO_SSL_不安全允许不安全的 SSL真的
TRINO_ALLOW_WRITE_QUERIES允许非只读 SQL 查询错误的
MCP_传输传输方法(stdio/http)标准输入输出
MCP_端口用于 http 传输的 HTTP 端口9097
MCP_主机HTTP 回调的主机本地主机

注意:当TRINO_SCHEME设置为“https”时,无论提供的值是什么, TRINO_SSL都会自动设置为 true。

重要提示:默认连接模式为 HTTPS。如果您使用的是仅 HTTP 的 Trino 服务器,则必须在环境变量中设置TRINO_SCHEME=http

安全注意事项:默认情况下,仅允许执行只读查询(SELECT、SHOW、DESCRIBE、EXPLAIN),以防止 SQL 注入。如果您需要执行写入操作或其他非读取查询,请设置TRINO_ALLOW_WRITE_QUERIES=true ,但请注意,这会绕过此安全保护。

对于 Cursor 集成:与 Cursor 一起使用时,请设置MCP_TRANSPORT=http并连接到/sse端点。服务器将自动处理 SSE(服务器发送事件)连接。

贡献

欢迎贡献代码!欢迎提交 Pull 请求。

执照

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

CI/CD 和发布

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

持续集成检查

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

代码质量

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

安全

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

测试

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

CI/CD 安全

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

发布流程

当更改合并到主分支时:

  1. 运行 CI 检查来验证代码质量和安全性
  2. 如果成功,则会自动创建一个新版本:
    • 基于提交消息的语义版本控制
    • 适用于多个平台的二进制构建
    • Docker 镜像发布到 GitHub Container Registry
    • SBOM 和来源证明
ID: sf23b6j9h9