← 返回公开榜单
mc

tuannvm/mcp-trino

A high-performance Model Context Protocol (MCP) server for Trino implemented in Go.

本周新增
49 星
近 3 周倍数
—
距上次推送
238 天
距上次发布
240 天
许可证
MIT

星标增长

每根柱子是这个周期记录下来的 star 增长:优先取逐个 stargazer 到达时间分桶的到达数,还没被 stargazer 扫描覆盖的仓库改用该周期的 star 净增;两个写者都没记录的周期画成虚线空档,而不是当成 0。柱高按各自窗口的峰值归一,两张图不共用坐标轴。指向任意一根柱子, tooltip 里是该周期的九项指标:当前值与周期内的净增。

指向或点击一根柱子,看当天的九项指标。

12/1712/301/111/242/62/193/33/16

2026 年 3 月 16 日 新增 49 个星标

窗口内最高的一天是 2026 年 3 月 16 日,新增 49 个星标。

证据时间轴

  1. 第 2026 年第 12 周发布 22 次

    累计 42 个 release

README
该仓库存储的文档,若已生成中文翻译则一并显示

Go语言实现的Trino MCP服务器

一个用Go语言编写的高性能模型上下文协议(MCP)Trino服务器。该项目使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模型上下文协议(MCP)服务器。它使AI助手能够通过标准化的MCP工具访问Trino的分布式SQL查询引擎。

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

功能

  • ✅ Go语言实现的MCP服务器
  • ✅ 通过MCP工具执行Trino SQL查询
  • ✅ 目录、模式和表发现
  • ✅ 支持Docker容器
  • ✅ 支持STDIO和HTTP传输
  • ✅ 支持光标和其他MCP客户端的服务器端事件(SSE)
  • ✅ 兼容光标、Claude桌面版、Windsurf、ChatWise以及任何MCP兼容客户端。

安装

快速安装(单行命令)

对于macOS和Linux,可以通过单行命令安装:

curl -fsSL https://raw.githubusercontent.com/tuannvm/mcp-trino/main/install.sh -o install.sh && chmod +x install.sh && ./install.sh

Homebrew(macOS和Linux)

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

# 添加tap仓库
brew tap tuannvm/mcp

# 安装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/tuannvm/mcp-trino.git
cd mcp-trino
make build
# 二进制文件将在./bin/中

下载

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

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

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

安装故障排除

如果在安装过程中遇到问题:

常见问题:

  • 未找到二进制文件在PATH中:安装脚本默认安装到~/.local/bin。确保此目录在您的PATH中:

    export PATH="$HOME/.local/bin:$PATH"
    

    将此内容添加到您的shell配置文件(.bashrc、.zshrc等)以使其永久生效。

  • 权限被拒绝:如果您遇到权限错误,请确保安装目录可写:

    mkdir -p ~/.local/bin
    chmod 755 ~/.local/bin
    
  • 未找到Claude配置:如果安装脚本未检测到您的Claude安装:

    • 对于Claude桌面版:检查预期位置是否存在配置文件
    • 对于Claude代码:验证PATH中是否存在claude命令
    • 使用脚本提供的手动配置说明
  • GitHub API速率限制:如果您遇到GitHub API速率限制:

    export GITHUB_TOKEN=your_github_token
    curl -fsSL https://raw.githubusercontent.com/tuannvm/mcp-trino/main/install.sh | bash
    

获取帮助:

  • 检查GitHub Issues以查找类似问题
  • 使用安装脚本运行--help获取使用信息
  • 如果自动脚本失败,请使用手动安装方法

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,创建或编辑~/.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桌面版

要使用Claude桌面版,最简单的方法是使用安装脚本,它将自动为您配置。或者,您可以手动编辑您的Claude配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/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桌面版。您应该在工具菜单中看到MCP工具可用。

Claude代码

要使用Claude代码,安装脚本将自动为您配置。或者,您可以手动添加MCP服务器:

claude mcp add mcp-trino mcp-trino

然后设置您的环境变量:

export TRINO_HOST=<HOST>
export TRINO_PORT=<PORT>
export TRINO_USER=<USERNAME>
export TRINO_PASSWORD=<PASSWORD>

重新启动Claude代码以查看可用的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并进入设置
  2. 导航到工具部分
  3. 点击"+"图标添加新工具
  4. 选择"命令行MCP"
  5. 使用以下详细信息配置:
    • ID: mcp-trino(或您喜欢的任何名称)
    • 命令: 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设置 > 工具中,点击"+"图标
  3. 选择"从剪贴板导入JSON"
  4. 切换工具旁边的开关以启用它

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

可用的MCP工具

服务器提供以下MCP工具:

execute_query

对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]
  ]
}

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. 首先,发现可用的目录

    > 使用list_catalogs工具
    > 发现tpch目录
    
  2. 然后,查找可用的模式

    > 使用list_schemas工具,目录为"tpch"
    > 发现"tiny"模式
    
  3. 探索可用的表

    > 使用list_tables工具,目录为"tpch",模式为"tiny"
    > 发现"customer"表
    
  4. 检查customer表的架构

    > 使用get_table_schema工具
    > 发现"custkey"、"name"、"acctbal"和其他列
    
  5. 最后,执行查询

    > 使用execute_query工具,内容为:
    > "SELECT custkey, name, acctbal FROM tpch.tiny.customer ORDER BY acctbal DESC LIMIT 5"
    
  6. 将结果返回给用户:

    账户余额最高的前5名客户是:
    1. 客户#65 (Customer#000000065): $9,222.78
    2. 客户#13 (Customer#000000013): $8,270.47
    3. 客户#89 (Customer#000000089): $7,990.56
    4. 客户#11 (Customer#000000011): $7,912.91
    5. 客户#82 (Customer#000000082): $7,629.41
    

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

配置

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

变量描述默认值
TRINO_HOSTTrino服务器主机名localhost
TRINO_PORTTrino服务器端口8080
TRINO_USERTrino用户trino
TRINO_PASSWORDTrino密码(空)
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分支的提交执行以下检查:

代码质量

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

安全

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

测试

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

CI/CD安全

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

发布流程

当更改合并到main分支时:

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

页面上的每个数字都来自记录下来的 stargazer 到达时间,没有评分公式,也没有 AI 判定。 任何结论都可以用 /api/v1/repos/{id}/stats 里的原始增量自己重算。