M

MCP-Trino 服务器

@tuannvm/mcp-trino
0 Stars 327 次浏览 tuannvm 更新于 2026-08-23

用Go语言实现的高性能Model Context Protocol(MCP)服务器,适用于Trino。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "mcp-trino": {
      "args": [],
      "command": "mcp-trino",
      "env": {
        "TRINO_HOST": "\u003cHOST\u003e",
        "TRINO_PASSWORD": "\u003cPASSWORD\u003e",
        "TRINO_PORT": "\u003cPORT\u003e",
        "TRINO_USER": "\u003cUSERNAME\u003e"
      }
    }
  }
}

该服务需要配置环境变量:MCP_HOST、MCP_PORT、MCP_TRANSPORT、TRINO_ALLOW_WRITE_QUERIES、TRINO_CATALOG、TRINO_HOST、TRINO_PASSWORD、TRINO_PORT、TRINO_SCHEMA、TRINO_SCHEME、TRINO_SSL、TRINO_SSL_INSECURE、TRINO_USER

服务介绍

Trino MCP 服务器(Go语言版)

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

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

概览

本项目实现了Trino的一个模型上下文协议(MCP)服务器,使用Go语言编写。它允许AI助手通过标准化的MCP工具访问Trino的分布式SQL查询引擎。

Trino(原名PrestoSQL)是一款专为大规模数据集快速分析设计的强大分布式SQL查询引擎。

特性

  • ✅ 使用Go语言实现的MCP服务器
  • ✅ 通过MCP工具执行Trino SQL查询
  • ✅ 支持目录、模式和表的发现
  • ✅ 支持Docker容器
  • ✅ 同时支持STDIO和HTTP传输
  • ✅ 支持Server-Sent Events (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 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
# Binary will be in ./bin/

下载

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

平台 架构 下载链接
macOS x86_64 (Intel) 下载
macOS ARM64 (Apple Silicon) 下载
Linux x86_64 下载
Linux ARM64 下载
Windows 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 一起使用,请创建或编辑 ~/.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 以应用更改。Trino MCP 工具将可供 Cascade AI 使用。

ChatWise

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

  1. 打开 ChatWise 并转到设置
  2. 导航到工具部分
  3. 点击 "+" 图标添加新工具
  4. 选择 "命令行 MCP"
  5. 使用以下详情进行配置:
    • ID: mcp-trino(或任何您喜欢的名字)
    • 命令: mcp-trino
    • 参数: (留空)
    • 环境变量: 添加以下环境变量:
      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 查询,支持复杂的分析查询。

示例提示:

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

示例:

{
  "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. 然后,查找可用的模式

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

    > 使用带有目录 "tpch" 和模式 "tiny" 的 list_tables 工具
    > 找到 "customer" 表
    
  4. 检查客户表结构

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

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

    账户余额最高的前五位客户是:
    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_HOST Trino 服务器主机名 localhost
TRINO_PORT Trino 服务器端口 8080
TRINO_USER Trino 用户 trino
TRINO_PASSWORD Trino 密码 (空)
TRINO_CATALOG 默认目录 memory
TRINO_SCHEMA 默认模式 default
TRINO_SCHEME 连接方案 (http/https) https
TRINO_SSL 启用 SSL true
TRINO_SSL_INSECURE 允许不安全的 SSL true
TRINO_ALLOW_WRITE_QUERIES 允许非只读 SQL 查询 false
MCP_TRANSPORT 传输方法 (stdio/http) stdio
MCP_PORT HTTP 传输使用的端口 9097
MCP_HOST HTTP 回调使用的主机 localhost

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

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

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

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

贡献

欢迎贡献!请随时提交 Pull Request。

许可证

本项目采用 MIT 许可证 - 详情请参见 LICENSE 文件。

CI/CD 和发布

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

持续集成检查

我们的 CI 流水线对所有 PR 和主分支的提交执行以下检查:

代码质量

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

安全

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

测试

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

CI/CD 安全

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

发布流程

当更改合并到主分支时:

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

相关 MCP 服务