mcpField
M
mcp-trino

mcp-trino

本地服务
github.com/txn2数据库52 周前更新

关于 mcp-trino

mcp-trino 是面向 AI 助手的 Trino MCP 服务,可查询数据仓库、检查执行计划并浏览结构。它还能从元数据目录补充业务说明、数据质量和敏感字段信息,并支持连接多个 Trino 集群。

主要功能

  1. 01执行受限 SQL 查询
  2. 02检查查询执行计划
  3. 03浏览目录、架构和表
  4. 04查看列定义及样本
  5. 05补充业务与敏感度元数据
  6. 06连接多个 Trino 集群

适用场景

  1. 01用自然语言探索数据仓库
  2. 02检查查询计划与执行情况
  3. 03查找表的业务含义和负责人
  4. 04在生产与暂存集群间切换

MCP 相关

该服务向 MCP 客户端提供查询、执行计划分析、结构浏览和连接管理工具。可选语义层会在结果中提供目录中的业务元数据。

配置

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

暂未收录安装方式

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

代码仓库
安装包
mcpbmcp-trino_0.2.1_darwin_arm64.mcpb
mcpbmcp-trino_0.2.1_darwin_amd64.mcpb
mcpbmcp-trino_0.2.1_windows_amd64.mcpb

工具

还没有获取到工具列表

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

详细介绍

txn2/mcp-trino

GitHub license Go Reference Go Report Card codecov OpenSSF Scorecard SLSA 3

mcp-trino.txn2.com | 安装 | 库文档

面向 Trino 的模型上下文协议(MCP)服务,让 AI 助手能够查询和探索数据仓库,并可选择使用元数据目录中的语义上下文。

AI 助手擅长查询数据,却缺少组织层面的背景信息:哪些表值得信赖、指标的含义是什么,以及哪些列包含敏感数据。mcp-trino 通过 MCP 协议将 Trino 连接到 AI 助手,弥补这一不足;可选的语义层还能在查询结果中呈现业务元数据。

MCP 数据平台生态系统

mcp-trino 是一套更广泛的开源 MCP 服务的一部分,这些服务旨在协同工作,组成可组合的数据平台。每个组件都可以独立运行,也可以组合使用,为 AI 助手提供统一的存储、查询引擎和元数据目录访问能力。

核心能力

可组合架构

  • 作为 Go 库导入,用于构建自定义 MCP 服务
  • 无需分叉即可添加身份验证、租户隔离和审计日志
  • 通过中间件和拦截器模式满足企业需求

语义上下文

  • 从元数据目录呈现业务描述、所有权和数据质量信息
  • 为 AI 助手标记敏感列
  • 连接到 DataHub、静态文件,或构建自定义元数据提供程序

多集群连接

  • 从单个 MCP 安装实例查询多个 Trino 服务
  • 在生产、预发布和开发环境之间提供统一接口

安全默认设置

  • 只读模式可防止意外修改数据
  • 查询限制和超时设置可防止操作失控
  • 提供 SLSA Level 3 来源证明,确保供应链安全

功能

  • 执行 SQL 查询:运行查询,并配置行数限制和超时时间
  • 分析执行计划:检查逻辑、分布式和 I/O 查询计划
  • 发现架构:浏览各集群中的目录、架构和表
  • 描述表:查看列定义,并可选择包含数据样例
  • 丰富上下文:呈现业务元数据、所有权和数据质量信息
  • 组合自定义服务:作为 Go 库导入,并使用中间件和拦截器

安装

Homebrew(macOS)
brew install txn2/tap/mcp-trino
Claude Desktop

Claude Desktop 是用于与 Claude 聊天的 GUI 应用程序。安装 mcp-trino 扩展,即可在对话中启用 Trino 查询。

选项 1:一键安装(推荐)

从 releases 页面下载适用于 Mac 的 .mcpb 捆绑包,然后双击安装:

Mac 类型芯片下载
MacBook Air/Pro(2020 年及以后)、Mac Mini(2020 年及以后)、iMac(2021 年及以后)、Mac StudioApple M1、M2、M3、M4(arm64)mcp-trino_*_darwin_arm64.mcpb
MacBook Air/Pro(2020 年以前)、Mac Mini(2020 年以前)、iMac(2021 年以前)Intel(amd64)mcp-trino_*_darwin_amd64.mcpb

提示: 不确定自己的芯片型号?点击 →“关于本机”。查找“芯片”(Apple Silicon)或“处理器”(Intel)。

选项 2:手动配置

将以下内容添加到 claude_desktop_config.json(可通过 Claude Desktop → Settings → Developer 找到):

{
  "mcpServers": {
    "trino": {
      "command": "/opt/homebrew/bin/mcp-trino",
      "env": {
        "TRINO_HOST": "trino.example.com",
        "TRINO_USER": "your_user",
        "TRINO_PASSWORD": "your_password",
        "TRINO_CATALOG": "hive",
        "TRINO_SCHEMA": "default"
      }
    }
  }
}
Claude Code CLI

Claude Code 是基于终端的编码助手。将 mcp-trino 添加为 MCP 服务:

# Install via Homebrew first (see above), then:
claude mcp add trino \
  -e TRINO_HOST=trino.example.com \
  -e TRINO_USER=your_user \
  -e TRINO_PASSWORD=your_password \
  -e TRINO_CATALOG=hive \
  -- mcp-trino

或者手动下载并安装:

# Download the latest release for your architecture
curl -L https://github.com/txn2/mcp-trino/releases/latest/download/mcp-trino_$(uname -s)_$(uname -m).tar.gz | tar xz

# Add to Claude Code
claude mcp add trino \
  -e TRINO_HOST=trino.example.com \
  -e TRINO_USER=your_user \
  -e TRINO_PASSWORD=your_password \
  -e TRINO_CATALOG=hive \
  -- ./mcp-trino
Docker
docker run --rm -i \
  -e TRINO_HOST=trino.example.com \
  -e TRINO_USER=your_user \
  -e TRINO_PASSWORD=your_password \
  ghcr.io/txn2/mcp-trino:latest
Go 安装
go install github.com/txn2/mcp-trino/cmd/mcp-trino@latest
下载二进制文件

从 releases 页面下载预构建的二进制文件。所有版本均使用 Cosign 签名,并附带 SLSA 来源证明。

作为库使用
go get github.com/txn2/mcp-trino

快速开始

多个 Trino 服务

你可以使用不同名称配置多个 Trino 实例:

# Production
claude mcp add trino-prod \
  -e TRINO_HOST=trino.prod.example.com \
  -e TRINO_USER=prod_user \
  -- mcp-trino

# Staging
claude mcp add trino-staging \
  -e TRINO_HOST=trino.staging.example.com \
  -e TRINO_USER=staging_user \
  -- mcp-trino
独立服务
export TRINO_HOST=trino.example.com
export TRINO_USER=your_user
export TRINO_PASSWORD=your_password
mcp-trino

工具

工具描述
trino_query执行只读 SQL 查询(SELECT、SHOW、DESCRIBE),并控制结果数量上限和超时
trino_execute执行任意 SQL,包括写入操作(INSERT、UPDATE、DELETE、CREATE、DROP)
trino_explain获取执行计划(logical/distributed/io/validate)
trino_browse浏览目录层级:列出目录、架构或表
trino_describe_table获取列、样例数据和语义上下文(如已配置)
trino_list_connections列出所有已配置的服务连接

语义层

当 AI Agent 了解组织上下文时,运作会更加可靠:不仅要了解表结构,还要知道哪些数据集已准备好用于生产、业务术语的含义,以及哪些列需要谨慎处理。

mcp-trino 的语义层与元数据目录集成,可在查询结果旁提供这些上下文信息:

元数据描述
描述面向业务的表和列说明
所有权数据管理员和技术负责人
标签与领域分类标签和业务领域
术语表条目正式业务定义的链接
数据质量新鲜度评分和质量指标
敏感性列级 PII 和敏感数据标记
数据沿袭上游和下游数据依赖关系
提供方
提供方描述
DataHub连接到 DataHub 的 GraphQL API,以获取企业元数据
静态文件从 YAML 或 JSON 文件加载元数据,并支持热重载
自定义为任意目录实现 semantic.Provider 接口

有关配置、缓存和自定义提供方开发,请参阅语义层文档。

配置

环境变量描述默认值
TRINO_HOSTTrino 服务主机名localhost
TRINO_PORTTrino 服务端口443(SSL)/ 8080
TRINO_USER身份验证用户名(必填)
TRINO_PASSWORD身份验证密码(可选)
TRINO_CATALOG默认目录memory
TRINO_SCHEMA默认架构default
TRINO_SSL启用 HTTPS对远程主机为 true
TRINO_SSL_VERIFY验证 SSL 证书true
TRINO_TIMEOUT查询超时时间(秒)120
TRINO_SOURCE客户端标识符mcp-trino
TRINO_ADDITIONAL_SERVERS其他服务(JSON)(可选)
多服务配置

通过单个安装连接到多个 Trino 服务。使用标准环境变量配置主服务,然后通过 JSON 添加其他服务:

export TRINO_HOST=prod.trino.example.com
export TRINO_USER=admin
export TRINO_PASSWORD=secret
export TRINO_ADDITIONAL_SERVERS='{
  "staging": {"host": "staging.trino.example.com"},
  "dev": {"host": "localhost", "port": 8080, "ssl": false}
}'

除非另行指定,否则其他服务会继承主服务的凭据和设置:

{
  "staging": {
    "host": "staging.trino.example.com",
    "user": "staging_user",
    "catalog": "iceberg"
  },
  "dev": {
    "host": "localhost",
    "port": 8080,
    "ssl": false,
    "user": "admin"
  }
}

在任何工具中使用 connection 参数来指定目标服务:

"Query the staging server: SELECT * FROM users LIMIT 10"
→ trino_query(sql="...", connection="staging")

使用 trino_list_connections 发现可用连接。

基于文件的配置

对于使用 Kubernetes ConfigMaps、Vault 或其他密钥管理系统的生产部署,mcp-trino 支持基于文件的配置:

# config.yaml
trino:
  host: trino.example.com
  port: 443
  user: ${TRINO_USER}           # Supports env var expansion
  password: ${TRINO_PASSWORD}   # Secrets can come from env
  catalog: hive
  schema: default
  ssl: true
  timeout: 120s

toolkit:
  default_limit: 1000
  max_limit: 10000
  default_timeout: 120s
  max_timeout: 300s

extensions:
  logging: true
  readonly: true
  errors: true

在自定义服务中加载配置:

import "github.com/txn2/mcp-trino/pkg/extensions"

// Load from file with env var overrides
cfg, err := extensions.LoadConfig("/etc/mcp-trino/config.yaml")

// Convert to individual configs
clientCfg := cfg.ClientConfig()
toolsCfg := cfg.ToolsConfig()
extCfg := cfg.ExtConfig()

用作库

mcp-trino 专为组合使用而设计。你可以将其工具导入自己的 MCP 服务:

package main

import (
    "context"
    "log"

    "github.com/modelcontextprotocol/go-sdk/mcp"
    "github.com/txn2/mcp-trino/pkg/client"
    "github.com/txn2/mcp-trino/pkg/tools"
)

func main() {
    // Create your MCP server
    server := mcp.NewServer(&mcp.Implementation{
        Name:    "my-data-server",
        Version: "1.0.0",
    }, nil)

    // Create Trino client
    trinoClient, err := client.New(client.Config{
        Host:    "trino.example.com",
        Port:    443,
        User:    "service_user",
        SSL:     true,
        Catalog: "hive",
        Schema:  "analytics",
    })
    if err != nil {
        log.Fatal(err)
    }
    defer trinoClient.Close()

    // Add Trino tools to your server
    toolkit := tools.NewToolkit(trinoClient, tools.Config{
        DefaultLimit: 1000,
        MaxLimit:     10000,
    })
    toolkit.RegisterAll(server)

    // Add your own custom tools here...
    // mcp.AddTool(server, &mcp.Tool{...}, handler)

    // Run the server
    if err := server.Run(context.Background(), &mcp.StdioTransport{}); err != nil {
        log.Fatal(err)
    }
}

扩展

独立服务包含可选扩展,可通过环境变量启用:

环境变量默认值描述
MCP_TRINO_EXT_LOGGINGfalse对工具调用进行结构化 JSON 日志记录
MCP_TRINO_EXT_METRICSfalse在内存中收集指标
MCP_TRINO_EXT_READONLYtrue阻止修改语句(INSERT、UPDATE、DELETE 等)
MCP_TRINO_EXT_QUERYLOGfalse记录所有 SQL 查询以供审计
MCP_TRINO_EXT_METADATAfalse在结果中添加执行元数据页脚
MCP_TRINO_EXT_ERRORStrue在错误消息中添加实用提示
在自定义服务中使用扩展
import (
    "github.com/txn2/mcp-trino/pkg/extensions"
    "github.com/txn2/mcp-trino/pkg/tools"
)

// Load extension config from environment
extCfg := extensions.FromEnv()

// Or configure programmatically
extCfg := extensions.Config{
    EnableLogging:   true,
    EnableReadOnly:  true,
    EnableErrorHelp: true,
}

// Build toolkit options from extensions
toolkitOpts := extensions.BuildToolkitOptions(extCfg)

// Create toolkit with extensions
toolkit := tools.NewToolkit(trinoClient, toolsCfg, toolkitOpts...)
自定义中间件和拦截器

你可以创建自定义中间件、拦截器和转换器:

// Custom middleware for authentication
authMiddleware := tools.MiddlewareFunc{
    BeforeFn: func(ctx context.Context, tc *tools.ToolContext) (context.Context, error) {
        // Validate user permissions
        return ctx, nil
    },
}

// Custom interceptor for tenant isolation
tenantInterceptor := tools.QueryInterceptorFunc(
    func(ctx context.Context, sql string, toolName tools.ToolName) (string, error) {
        // Add WHERE tenant_id = ? clause
        return sql, nil
    },
)

// Apply to toolkit
toolkit := tools.NewToolkit(client, cfg,
    tools.WithMiddleware(authMiddleware),
    tools.WithQueryInterceptor(tenantInterceptor),
)

安全注意事项

  • 凭据:将密码存储在环境变量或密钥管理器中
  • 查询限制:默认最多 1000 行,最高 10000 行,以防止数据泄露
  • 超时:默认 120s 超时可防止查询失控
  • 只读:默认启用的 ReadOnly 拦截器会阻止修改语句
  • 访问控制:配置 Trino 角色和目录访问权限,以实现纵深防御

开发

# Clone the repository
git clone https://github.com/txn2/mcp-trino.git
cd mcp-trino

# Build
make build

# Run tests
make test

# Run linter
make lint

# Run all checks
make verify

# Run with a local Trino (e.g., via Docker)
make docker-trino
export TRINO_HOST=localhost
export TRINO_PORT=8080
export TRINO_USER=admin
export TRINO_SSL=false
./mcp-trino

贡献

欢迎贡献 Bug 修复、测试和文档。请参阅 贡献指南 了解相关指引。

许可证

Apache License 2.0


由 Craig Johnston 开源,赞助方为 Deasil Works, Inc.

评论

支持 Markdown

第一次接触 MCP?

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

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