mcpField
T
Trino MCP Server in Go

Trino MCP Server in Go

本地服务
github.com/heavenlycolle数据库073 周前更新

关于 Trino MCP Server in Go

Trino MCP Server in Go 将 AI 助手连接到 Trino 分布式 SQL 查询引擎,提供 SQL 执行以及目录、模式、表和表结构发现,并支持 stdio 与 HTTP 传输。

主要功能

  1. 01执行 Trino SQL 查询
  2. 02发现目录与模式
  3. 03列出表并查看结构
  4. 04stdio 与 HTTP 传输
  5. 05默认限制为只读查询
  6. 06支持 Docker 容器

适用场景

  1. 01查询前探索 Trino 数据集
  2. 02通过 AI 助手运行分析 SQL
  3. 03检查表的列与数据类型

MCP 相关

它向 MCP 客户端提供 Trino 查询执行和数据发现工具。服务支持 stdio 和 HTTP 传输,包括 SSE。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Go 版 Trino MCP 服务

一个使用 Go 实现的高性能 Trino Model Context Protocol(MCP)服务。此项目可让 AI 助手通过标准化的 MCP 工具与 Trino 分布式 SQL 查询引擎无缝交互。

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

概述

此项目使用 Go 实现了 Trino 的 Model Context Protocol(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)

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

# Add the tap repository
brew tap tuannvm/mcp

# Install mcp-trino
brew install mcp-trino

更新到最新版本:

brew update && brew upgrade mcp-trino
其他安装方式
手动下载
  1. 从 GitHub Releases 页面下载适用于你平台的二进制文件。
  2. 将二进制文件放入 PATH 中的目录(例如,Linux/macOS 上的 /usr/local/bin)
  3. 赋予其可执行权限(在 Linux/macOS 上运行 chmod +x mcp-trino)
从源代码安装
git clone https://github.com/heavenlycolle/mcp-trino.git
cd mcp-trino
make build
# Binary will be in ./bin/

下载

你可以下载适用于你平台的预编译二进制文件:

平台架构下载链接
macOSx86_64(Intel)下载
macOSARM64(Apple Silicon)下载
Linuxx86_64下载
LinuxARM64下载
Windowsx86_64下载

也可以前往 GitHub Releases 页面查看所有可用下载内容。

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

注意:特殊 DNS 名称 host.docker.internal 可让容器连接到主机上运行的服务。如果 Trino 服务运行在其他位置,请替换为相应的主机名。

此 Docker 配置可用于以下任意应用。

Cursor

要与 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 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

要与 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 以应用更改。Cascade AI 将可以使用 Trino MCP 工具。

ChatWise

要与 ChatWise 配合使用,请按以下步骤操作:

  1. 打开 ChatWise 并进入 Settings
  2. 前往 Tools 部分
  3. 点击“+”图标以添加新工具
  4. 选择“Command Line MCP”
  5. 使用以下详细信息进行配置:
    • ID:mcp-trino(或你喜欢的任何名称)
    • Command:mcp-trino
    • Args:(留空)
    • 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 Settings > Tools 中,点击“+”图标
  3. 选择“Import JSON from Clipboard”
  4. 点击工具旁边的开关以启用它

启用后,点击 ChatWise 输入框下方的锤子图标,即可使用 Trino MCP 工具。

可用的 MCP 工具

该服务提供以下 MCP 工具:

execute_query

使用完整的 SQL 支持对 Trino 执行 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]
  ]
}
list_catalogs

列出 Trino 服务中所有可用的目录,全面了解你的数据生态系统。

示例提示词:

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

示例:

{}

响应:

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

列出目录中的所有架构,帮助你高效浏览数据层级。

示例提示词:

“tpch 目录中有哪些架构或数据集?”

示例:

{
  "catalog": "tpch"
}

响应:

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

列出架构中的所有表,让你了解可用的数据集。

示例提示词:

“tpch tiny 架构中有哪些表?我需要了解可以查询哪些数据。”

示例:

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

响应:

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

获取表的架构,以了解数据结构,从而更好地规划查询。

示例提示词:

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

示例:

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

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

端到端示例

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

用户查询:“你能帮我分析我们最大的客户吗?我想知道账户余额最高的前 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 服务主机名localhost
TRINO_PORTTrino 服务端口8080
TRINO_USERTrino 用户trino
TRINO_PASSWORDTrino 密码(empty)
TRINO_CATALOG默认目录memory
TRINO_SCHEMA默认架构default
TRINO_SCHEME连接协议(http/https)https
TRINO_SSL启用 SSLtrue
TRINO_SSL_INSECURE允许不安全的 SSLtrue
TRINO_ALLOW_WRITE_QUERIES允许执行非只读 SQL 查询false
TRINO_QUERY_TIMEOUT查询超时时间(秒)30
MCP_TRANSPORT传输方式(stdio/http)stdio
MCP_PORThttp 传输的 HTTP 端口9097
MCP_HOSTHTTP 回调的主机localhost

注意:当 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 Request。

许可证

本项目采用 MIT 许可证授权,详情请参阅 LICENSE 文件。

CI/CD 与发布

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

持续集成检查

我们的 CI 流水线会对所有 PR 以及提交到 main 分支的代码执行以下检查:

代码质量
  • Lint 检查:使用 golangci-lint 检查常见代码问题和风格违规
  • Go 模块验证:确保 go.mod 和 go.sum 得到妥善维护
  • 格式检查:验证代码是否使用 gofmt 正确格式化
安全
  • 漏洞扫描:使用 govulncheck 检查依赖项中已知的漏洞
  • 依赖项扫描:使用 Trivy 扫描依赖项中的漏洞(严重、高危和中危)
  • SBOM 生成:创建软件物料清单,用于追踪依赖项
  • SLSA 来源证明:创建可验证的构建来源证明,保障供应链安全
测试
  • 单元测试:运行测试,并启用竞态检测和代码覆盖率报告
  • 构建验证:确保代码库成功构建
CI/CD 安全
  • 最小权限:工作流以最低所需权限运行
  • 固定版本:所有 GitHub Actions 均使用特定版本,以防范供应链攻击
  • 依赖更新:通过 Dependabot 自动更新依赖
发布流程

更改合并到主分支后:

  1. 运行 CI 检查,验证代码质量和安全性
  2. 如果检查成功,则自动创建新版本,包含:
    • 根据提交消息进行语义化版本控制
    • 面向多个平台的二进制文件构建
    • 将 Docker 镜像发布到 GitHub Container Registry
    • SBOM 和来源证明

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。