Trino MCP服务器

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

  • by heavenlycolle
  • Go
  • 本地部署
  • 更新于
在 GitHub 查看 heavenlycolle/mcp-trino

使用说明

Go中的Trino MCP服务器

在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传输
  • ✅ Cursor和其他MCP客户端的服务器发送事件(SSE)支持
  • ✅ 兼容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中包含的目录中(例如。, /usr/local/bin 在Linux/macOS上)
  3. 使其可执行(chmod +x mcp-trino 在Linux/macOS上)

来源

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

下载

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

平台 架构 下载链接
macOS x86_64(英特尔) 下载
macOS ARM64(苹果硅) 下载
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": {}
    }
  }
}

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

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

光标

与一起使用 光标,创建或编辑 ~/.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配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %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工具。

帆板运动

与一起使用 帆板运动,创建或编辑您的 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. 使用以下详细信息进行配置:
    • 身份证件: 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]
  ]
}

列表目录

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

示例提示:

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

例子:

{}

答复:

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

list_schemas

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

示例提示:

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

例子:

{
  "catalog": "tpch"
}

答复:

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

list_tables

列出模式中的所有表,使您可以查看可用的数据集。

示例提示:

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

例子:

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

答复:

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

get_table_schema

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

示例提示:

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

例子:

{
  "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_HOST TRINO服务器主机名 本地主机
TRINO_PORT TRINO服务器端口 8080
TRINO_USER TRINO用户 TRINO
TRINO_PASSWORD TRINO密码 (空)
TRINO_CATALOG 默认目录 内存
TRINO_SCHEMA 默认模式 默认
TRINO_SCHEMA 连接方案(http/https) https
TRINO_SSL 启用SSL true
TRINO_SSL_INSECURE 允许不安全的SSL true
TRINO_ALLOW_WRITE_QUERIES 允许非只读SQL查询 false
TRINO_QUERY_TIMEOUT 查询超时(秒) 30
MCP_TRANSPORT 传输方法(stdio/http) stdio
MCP_PORT HTTP传输的HTTP端口 9097
MCP_HOST HTTP回调主机 本地主机

备注:何时 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(服务器发送事件)连接。

贡献

欢迎投稿!请随时提交拉取请求。

许可证

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

CI/CD及其发布

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

持续集成检查

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

代码质量

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

安全

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

测试

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

CI/CD安全

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

发布过程

当更改合并到主分支时:

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