MCP Trino Server

使用说明

项目简介

MCP Trino Server 是一个基于 Model Context Protocol (MCP) 构建的应用后端,专注于将 Trino 数据查询和 Iceberg 表格管理能力通过 MCP 协议开放给大型语言模型 (LLM) 客户端。它允许 LLM 应用以标准化的方式访问 Trino 数据库中的数据资源,并利用预设的工具执行 SQL 查询、数据探索和 Iceberg 表维护任务。

主要功能点

  • 资源 (Resources) 访问:
    • 浏览 Trino 数据目录 (Catalogs)、模式 (Schemas) 和表 (Tables) 结构。
  • 工具 (Tools) 执行:
    • 数据查询: 执行 SQL 查询并以 JSON 格式返回结果。
    • 数据探索: 查看表结构 (CREATE TABLE/VIEW 语句)、统计信息、目录树状结构等。
    • Iceberg 表维护: 优化 Iceberg 表 (文件压缩、Manifests 优化)、快照过期管理、元数据信息查看等。
    • 查询历史: 查看执行过的查询记录。
  • Prompt 模板 (Prompts):
    • 内置数据探索和 Iceberg 表维护的 Prompt 模板,方便用户快速开始与 Trino 数据进行交互。

安装步骤

  1. 前提条件:

    • 确保已安装 Trino 服务器 并正在运行 (本地开发可以使用 Docker Compose 快速启动)。
    • 安装 Python 3.11 或更高版本
    • (可选)安装 Docker,用于容器化部署。
  2. 克隆仓库:

    git clone https://github.com/alaturqua/mcp-trino-python.git
    cd mcp-trino-python
  3. 安装 Python 依赖: 建议使用虚拟环境:

    python -m venv venv
    source venv/bin/activate  # 或 venv\Scripts\activate for Windows
    pip install -r requirements.txt
  4. 配置 Trino 连接信息: 复制 '.env.example' 文件为 '.env',并根据你的 Trino 服务器信息修改 '.env' 文件:

    TRINO_HOST=your-trino-host  # Trino 服务器主机名,例如 localhost
    TRINO_PORT=8080             # Trino 服务器端口,默认为 8080
    TRINO_USER=trino            # Trino 用户名,默认为 trino
    TRINO_PASSWORD=your-password # Trino 密码 (如果需要)
    TRINO_CATALOG=             # 默认 Catalog (可选)
    TRINO_SCHEMA=              # 默认 Schema (可选)
    TRINO_HTTP_SCHEME=http       # HTTP 协议 (http 或 https),默认为 http

服务器配置 (MCP 客户端配置)

MCP 服务器启动后,需要配置 MCP 客户端 (如 Claude Desktop, VS Code 等) 以连接到该服务器。以下是 MCP 客户端的服务器配置信息示例 (JSON 格式):

1. Claude Desktop 配置示例:

{
  "mcpServers": {
    "trino": {
      "command": "python",
      "args": ["./src/server.py"],
      "env": {
        "TRINO_HOST": "your-trino-host",  // 替换为你的 Trino 服务器主机名
        "TRINO_PORT": "8080",             // 替换为你的 Trino 服务器端口
        "TRINO_USER": "trino"             // 替换为你的 Trino 用户名
      }
    }
  }
}

参数说明:

  • '"trino"': 服务器名称,可以自定义。
  • '"command": "python"': 启动服务器的命令,这里使用 Python 解释器。
  • '"args": ["./src/server.py"]': 传递给 'python' 命令的参数,指定服务器启动脚本为 './src/server.py'。
  • '"env"': 环境变量配置,用于传递 Trino 连接信息。
    • '"TRINO_HOST"': Trino 服务器主机名。
    • '"TRINO_PORT"': Trino 服务器端口。
    • '"TRINO_USER"': Trino 用户名。
    • 其他 Trino 连接相关的环境变量 (例如 'TRINO_PASSWORD', 'TRINO_CATALOG', 'TRINO_SCHEMA', 'TRINO_HTTP_SCHEME') 也可以在此处配置,如果 '.env' 文件中已配置,此处可以省略。

2. VS Code 配置示例 ('.vscode/mcp.json' 或 User Settings):

{
  "mcp": {
    "servers": {
      "trino": {
        "command": "docker",
        "args": ["run", "--rm", "ghcr.io/alaturqua/mcp-trino-python:latest"],
        "env": {
          "TRINO_HOST": "${input:trino_host}",  // 使用 VS Code 输入变量,方便动态配置
          "TRINO_PORT": "${input:trino_port}",
          "TRINO_USER": "${input:trino_user}",
          "TRINO_PASSWORD": "${input:trino_password}",
          "TRINO_HTTP_SCHEME": "${input:trino_http_scheme}",
          "TRINO_CATALOG": "${input:trino_catalog}",
          "TRINO_SCHEMA": "${input:trino_schema}"
        }
      }
    }
  }
}

参数说明:

  • '"trino"': 服务器名称,可以自定义。
  • '"command": "docker"': 启动服务器的命令,这里使用 Docker 运行预构建的镜像。
  • '"args": ["run", "--rm", "ghcr.io/alaturqua/mcp-trino-python:latest"]': 传递给 'docker run' 命令的参数,运行 'ghcr.io/alaturqua/mcp-trino-python:latest' 镜像。 '--rm' 参数表示容器退出后自动删除。
  • '"env"': 环境变量配置,用于传递 Trino 连接信息。
    • '"TRINO_HOST": "${input:trino_host}"': 使用 VS Code 的 'input' 变量,在 VS Code 中配置 MCP 服务器时,会提示用户输入 Trino 主机名。
    • 其他 '"TRINO_PORT"', '"TRINO_USER"' 等类似,都使用 'input' 变量,方便用户在 VS Code 中动态配置。

注意: 你需要根据你的实际部署方式 (直接运行 'server.py' 脚本或使用 Docker 镜像) 和 Trino 服务器连接信息,选择合适的配置示例并进行相应的修改。

基本使用方法

  1. 启动 MCP Trino Server:

    • 直接运行脚本: 在项目根目录下,确保已激活虚拟环境,然后运行命令:
      python ./src/server.py
    • 使用 Docker 镜像: 无需手动启动,MCP 客户端配置中已指定使用 Docker 镜像运行。
  2. 配置 MCP 客户端: 根据你的 MCP 客户端 (如 Claude Desktop, VS Code),按照上述 服务器配置 (MCP 客户端配置) 部分的说明,将相应的 JSON 配置信息添加到客户端的服务器配置中。

  3. 在 MCP 客户端中使用: 配置完成后,在 MCP 客户端中选择已配置的 "trino" 服务器 (或其他你自定义的服务器名称),即可开始使用 MCP Trino Server 提供的资源和工具,与 Trino 数据库进行交互。例如,你可以:

    • 使用资源浏览 Trino 的目录、模式和表。
    • 调用 'execute_query' 工具执行 SQL 查询。
    • 调用 'show_table_properties' 工具查看 Iceberg 表属性。
    • 使用 'explore_data' 或 'maintain_iceberg' Prompt 模板进行交互式数据探索或表维护。

服务器信息