Trino数据库查询服务器

一个生产就绪的模型上下文协议(MCP)服务器,提供安全、只读的Trino数据库访问,适合数据工程师和数据分析师使用AI工具查询和探索Trino数据库。

  • by dikshantks
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 dikshantks/trino-mcp-server

使用说明

Trino MCP服务器

一种生产就绪的模型上下文协议(MCP)服务器,提供对Trino数据库的安全、只读访问。非常适合希望利用人工智能工具(如Cursor)查询和探索Trino数据库的数据工程师和分析师。

🚀 快速开始

5分钟后起床跑步:

  1. 先决条件:Docker桌面、Cursor IDE和对Trino服务器的访问
  2. 构建: docker build -t trino-mcp-server:latest .
  3. 配置:将MCP服务器添加到游标配置
  4. 测试:请Cursor“向我展示Trino中的所有目录”

看 安装 了解详细的平台特定说明。

📋 特性

核心能力

  • ✅ 只读安全:所有写入操作(INSERT、UPDATE、DELETE等)都被阻止
  • ✅ 查询执行:执行SELECT、SHOW、DESCRIBE、EXPLAIN查询
  • ✅ 数据库探索:列出目录、架构、表和列
  • ✅ 数据采样:预览具有可配置限制的表数据
  • ✅ 表统计:获取行数和列统计信息
  • ✅ 可选身份验证:支持基于密码的身份验证
  • ✅ 健康检查:内置连接测试工具
  • ✅ PII屏蔽:自动检测和屏蔽敏感数据(电子邮件、电话、地址等)

可用工具

工具 说明
execute_query 执行只读SQL查询(仅限SELECT、SHOW、DESCRIBE)
show_catalogs 列出Trino中所有可用的目录
show_schemas 显示特定目录中的所有架构
show_tables 列出架构中的所有表
describe_table 获取表的结构和列详细信息
show_columns 显示表的详细列信息
get_table_stats 获取表的统计信息,包括行数
sample_table 从表中获取行样本(默认值10,最大值100)
test_connection 测试与Trino的连接并获取服务器信息

🎯 用例

数据工程师

  • 数据库探索:快速发现可用的目录、模式和表
  • 模式分析:了解表结构和关系
  • 数据质量检查:在运行完整查询之前,对数据进行采样并检查统计数据
  • 查询开发:在人工智能的帮助下测试和优化SQL查询

面向数据分析师

  • 随即分析:运行分析查询,无需编写复杂的SQL
  • 数据发现:探索数据集并了解其结构
  • 快速洞察:获取表格统计数据和样本数据以进行快速分析
  • 报告生成:使用人工智能生成常见报告需求的查询

安装

先决条件

在开始之前,请确保您已经:

  1. Docker 桌面版 已安装并正在运行

  2. 光标IDE 安装

  3. Trino服务器 访问

    • 正在运行的Trino服务器(本地或远程)
    • 连接详细信息(主机、端口、用户、目录、架构)
    • Trino服务器的网络访问

第一步:克隆或下载

git clone https://github.com/dikshantks/trino-mcp-server.git
cd trino-mcp-server

或者下载并解压缩项目文件。

第二步:构建Docker镜像

docker build -t trino-mcp-server:latest .

验证映像是否已创建:

docker images | grep trino-mcp-server

步骤3:配置环境变量

服务器使用环境变量进行配置。您将在配置Cursor MCP时设置这些。

所需变量:

  • TRINO_HOST:Trino服务器主机名(默认值: host.docker.internal)
  • TRINO_PORT:Trino服务器端口(默认值: 8088)
  • TRINO_USER:Trino用户名(默认值: trino)
  • TRINO_CATALOG:默认目录名称(默认值: tpch)
  • TRINO_SCHEMA:默认架构名称(默认值: tiny)

可选变量:

  • TRINO_PASSWORD:身份验证密码(如果需要)
  • TRINO_USE_HTTPS:使用HTTPS而不是HTTP(true/false,默认值: false)
  • LOG_LEVEL:日志记录级别(DEBUG, INFO, WARNING, ERROR,默认值: INFO)

💻 平台特定设置

视窗

1.安装Docker桌面

  1. 下载 Windows版Docker桌面
  2. 安装并启动Docker桌面
  3. 如果系统提示,启用WSL 2后端(推荐)

2.塑造形象

打开PowerShell或命令提示符:

cd path\to\trino-mcp-server
docker build -t trino-mcp-server:latest .

3.配置光标MCP

  1. 打开光标设置(Ctrl+,)
  2. 导航至 主控程序 或搜索“MCP”
  3. 打开MCP配置文件:
    %APPDATA%\Cursor\mcp.json
    
  4. 添加Trino MCP服务器配置(请参阅 光标MCP集成)

Linux

1.安装Docker

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker

2.塑造形象

cd trino-mcp-server
docker build -t trino-mcp-server:latest .

3.配置光标MCP

  1. 打开光标设置
  2. 导航至 主控程序
  3. 打开MCP配置文件:
  4. 添加Trino MCP服务器配置

Linux特定配置

Linux常见问题

  • 权限不足:将用户添加到docker组(见上文)
  • host.docker.internal不工作:使用 --network host 或 --add-host 旗帜
  • 防火墙阻止:检查Docker的防火墙规则

macOS

1.安装Docker桌面

  1. 下载 Mac版Docker桌面
  2. 安装并启动Docker桌面
  3. 验证安装: docker --version

2.塑造形象

开放式终端:

cd path/to/trino-mcp-server
docker build -t trino-mcp-server:latest .

3.配置光标MCP

  1. 打开光标设置(Cmd+,)
  2. 导航至 主控程序
  3. 打开MCP配置文件:
    ~/cursor/mcp.json
    
  4. 添加Trino MCP服务器配置

🔌 光标MCP集成

逐步配置

  1. 打开光标设置

    • 转到文件→ 偏好→ 设置
  2. 导航到MCP设置

    • 在设置中搜索“MCP”
    • 或者手动导航到MCP配置文件(请参阅上面的平台特定路径)
  3. 编辑配置文件

    • 打开 mcp.json 文件
    • 添加Trino MCP服务器配置
 $ /.cursor/mcp.json
  {
   "mcpServers": {
      "trino": {
        "command": "docker",
        "args": [
          "run", "-i", "--rm",
          "--network", "host",
          "-e", "TRINO_HOST=localhost",
          "-e", "TRINO_PORT=8088",
          "-e", "TRINO_USER=trino",
          "-e", "TRINO_CATALOG=iceberg",
          "-e", "TRINO_SCHEMA=tiny",
          "trino-mcp-test:latest"
        ]
      }
    }
  }

  1. 重新启动游标

    • 完全退出并重新启动Cursor以加载新配置
  2. 测试连接

    • 在Cursor中打开聊天
    • 问:“给我看看Trino的所有目录”
    • 人工智能应使用Trino MCP工具

配置示例

基本配置(本地Trino)

{
  "mcpServers": {
    "trino": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "TRINO_HOST=host.docker.internal",
        "-e", "TRINO_PORT=8088",
        "-e", "TRINO_USER=trino",
        "-e", "TRINO_CATALOG=tpch",
        "-e", "TRINO_SCHEMA=tiny",
        "trino-mcp-server:latest"
      ]
    }
  }
}

通过身份验证

{
  "mcpServers": {
    "trino": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "TRINO_HOST=host.docker.internal",
        "-e", "TRINO_PORT=8088",
        "-e", "TRINO_USER=admin",
        "-e", "TRINO_PASSWORD=your_password_here",
        "-e", "TRINO_CATALOG=my_catalog",
        "-e", "TRINO_SCHEMA=my_schema",
        "trino-mcp-server:latest"
      ]
    }
  }
}

通过SSH隧道远程Trino

首先,在单独的终端中建立SSH隧道:

ssh -L 8088:localhost:8088 user@trino-server-host

然后使用此配置:

{
  "mcpServers": {
    "trino": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "--network", "host",
        "-e", "TRINO_HOST=localhost",
        "-e", "TRINO_PORT=8088",
        "-e", "TRINO_USER=trino",
        "-e", "TRINO_CATALOG=tpch",
        "-e", "TRINO_SCHEMA=tiny",
        "trino-mcp-server:latest"
      ]
    }
  }
}

HTTPS连接

{
  "mcpServers": {
    "trino": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "TRINO_HOST=trino.example.com",
        "-e", "TRINO_PORT=8443",
        "-e", "TRINO_USER=trino",
        "-e", "TRINO_USE_HTTPS=true",
        "-e", "TRINO_CATALOG=tpch",
        "-e", "TRINO_SCHEMA=tiny",
        "trino-mcp-server:latest"
      ]
    }
  }
}

验证连接

  1. 检查MCP服务器状态

    • 在Cursor的状态栏中查找MCP服务器状态
    • 或检查Cursor的MCP面板(如果可用)
  2. 使用简单查询进行测试

    • 询问Cursor:“测试Trino连接”
    • 或者:“显示Trino中的所有目录”
    • 人工智能应成功使用MCP工具
  3. 检查日志 (如果出现问题)

    • Docker日志: docker ps 找到容器,然后 docker logs <container-id>
    • 游标日志:检查游标的开发人员控制台

⚙️ 配置参考

环境变量

变量 必填 默认 描述
TRINO_HOST 是的 host.docker.internal Trino服务器主机名
TRINO_PORT 是的 8088 Trino服务器端口
TRINO_USER 是的 trino Trino用户名
TRINO_CATALOG 是的 tpch 默认目录名称
TRINO_SCHEMA 是的 tiny 默认架构名称
TRINO_PASSWORD 否 - 身份验证密码(如果需要)
TRINO_USE_HTTPS 没有 false 使用HTTPS而不是HTTP
LOG_LEVEL 没有 INFO 日志记录级别(调试、信息、警告、错误)
PII_MASKING_ENABLED 没有 false 启用PII屏蔽以编辑敏感数据
PII_MASK_STYLE 没有 partial 口罩样式: full 或 partial
PII_MASKED_COLUMNS 没有 - 要始终屏蔽的其他列名(逗号分隔)
PII_ALLOWED_COLUMNS 无 - 不屏蔽列名(逗号分隔,覆盖自动检测)

PII屏蔽

服务器包括一个可配置的PII屏蔽功能,以防止敏感数据暴露给LLM:

它是如何工作的:

  1. 列名检测:自动检测名称如下的列 email, phone, address, aadhaar, pan等等。
  2. 内容扫描:扫描单元格值以查找类似PII的模式(电子邮件、电话号码、信用卡等)
  3. 智能口罩:在保留格式上下文的同时屏蔽数据(例如。, j***n@g***.com 电子邮件)

配置:

  • PII_MASKING_ENABLED=true -启用遮罩(默认情况下为关闭)
  • PII_MASK_STYLE=partial -显示部分字符以获取上下文,或 full 进行完整编辑
  • PII_MASKED_COLUMNS=custom_field,secret_data -特定柱上的力遮挡
  • PII_ALLOWED_COLUMNS=order_email,system_phone -跳过特定列的屏蔽

检测到的PII类型:

  • 电子邮件地址
  • 电话号码(国际和印度格式)
  • 网际协议地址
  • 信用卡号码
  • 印度Aadhaar数字
  • 印度PAN号码
  • 姓名、地址和其他个人标识符

带掩码的输出示例:

| email           | phone        | name    |
|-----------------|--------------|---------|
| j***n@g***.com  | ***-***-4567 | J***n   |

[PII Masking Active] Masked columns: email (email), phone (phone), name (personal)

认证

服务器支持可选的基于密码的身份验证:

  • 无需认证:如果 TRINO_PASSWORD 未设置,连接不使用身份验证
  • 基本身份验证:如果 TRINO_PASSWORD 已设置,使用BasicAuth
  • 超文本传输安全协议:设置 TRINO_USE_HTTPS=true 用于安全连接

网络配置

本地Trino服务器:

  • 使用 host.docker.internal 作为 TRINO_HOST (Windows/macOS)
  • 在Linux上,使用 --network host 或 --add-host 旗帜

远程Trino服务器:

  • 使用SSH隧道: ssh -L 8088:localhost:8088 user@host
  • 集 TRINO_HOST=localhost 和使用 --network host
  • 或者使用具有适当防火墙规则的直接连接

📖 使用示例

基础数据库探索

User: Show me all catalogs in Trino
AI: [Uses show_catalogs tool]

User: What schemas are in the tpch catalog?
AI: [Uses show_schemas tool with catalog="tpch"]

User: List all tables in tpch.tiny
AI: [Uses show_tables tool]

表分析

User: Describe the customer table structure
AI: [Uses describe_table tool]

User: Show me 5 sample rows from the orders table
AI: [Uses sample_table tool with limit=5]

User: Get statistics for the lineitem table
AI: [Uses get_table_stats tool]

查询执行

User: Run this query: SELECT COUNT(*) FROM tpch.tiny.customer
AI: [Uses execute_query tool]

User: Show me the top 10 customers by order count
AI: [Uses execute_query with a JOIN query]

数据工程工作流程

User: Help me explore the sales database
AI: [Uses multiple tools: show_catalogs, show_schemas, show_tables]

User: What's the schema of the transactions table?
AI: [Uses describe_table tool]

User: Check if the transactions table has any data
AI: [Uses get_table_stats tool]

🔧 故障排除

连接问题

问题:无法连接到Trino服务器

解决方案:

  1. 验证Trino服务器是否正在运行:

    curl http://localhost:8088/v1/info
    
  2. 检查环境变量是否正确:

    • TRINO_HOST 匹配您的Trino服务器地址
    • TRINO_PORT 匹配您的Trino服务器端口
    • TRINO_USER 有效
  3. 对于Docker网络:

    • Windows/macOS:使用 host.docker.internal
    • Linux:使用 --network host 或 --add-host=host.docker.internal:host-gateway
  4. 检查防火墙规则和网络连接

问题:连接在本地工作,但在Docker中不工作

解决方案:

  • 使用 host.docker.internal 而不是 localhost
  • 在Linux上,添加 --add-host=host.docker.internal:host-gateway
  • 或使用 --network host 模式

游标MCP集成问题

问题:MCP服务器未出现在游标中

解决方案:

  1. 验证配置文件中的JSON语法
  2. 检查Docker镜像是否存在: docker images | grep trino-mcp-server
  3. 手动运行Docker测试:
    docker run -i --rm -e TRINO_HOST=host.docker.internal -e TRINO_PORT=8088 trino-mcp-server:latest
    
  4. 完全重新启动Cursor(而不仅仅是重新加载窗口)
  5. 检查游标日志是否有错误

问题:工具在Cursor中不起作用

解决方案:

  1. 使用 test_connection 验证连接的工具
  2. 检查Docker容器日志
  3. 验证环境变量是否设置正确
  4. 确保Trino服务器可以从Docker容器访问

查询执行问题

问题:查询执行失败

解决方案:

  1. 验证查询是否为只读(仅限SELECT、SHOW、DESCRIBE)
  2. 检查表/架构/目录名称是否正确
  3. 验证用户是否具有读取权限
  4. 检查Trino服务器日志以了解详细错误

问题:“只允许只读查询”错误

解决方案:

  • 为了安全起见,服务器阻止所有写入操作
  • 仅使用SELECT、SHOW、DESCRIBE、EXPLAIN和WITH查询
  • 检查查询不包含INSERT、UPDATE、DELETE等。

身份验证问题

问题:身份验证失败

解决方案:

  1. 验证 TRINO_USER 是正确的
  2. 检查 TRINO_PASSWORD 设置正确(如果需要)
  3. 验证用户是否具有目录的读取权限
  4. 检查Trino服务器身份验证配置

Docker问题

问题:Docker构建失败

解决方案:

  1. 检查Docker是否正在运行: docker ps
  2. 验证Dockerfile语法
  3. 检查互联网连接(下载依赖项)
  4. 尝试重建: docker build --no-cache -t trino-mcp-server:latest .

问题:集装箱立即出口

解决方案:

  1. 检查日志: docker logs <container-id>
  2. 验证是否设置了环境变量
  3. 手动测试连接
  4. 检查Trino服务器是否可访问

🛠️ 发展

地方发展设置

  1. 安装Python依赖项:

    pip install -r requirements.txt
    
  2. 设置环境变量:

    export TRINO_HOST="localhost"
    export TRINO_PORT="8088"
    export TRINO_USER="trino"
    export TRINO_CATALOG="tpch"
    export TRINO_SCHEMA="tiny"
    
  3. 直接运行服务器:

    python trino_server.py
    
  4. 测试MCP协议:

    echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python trino_server.py
    

添加新工具

  1. 添加功能 trino_server.py
  2. 用…装饰 @mcp.tool()
  3. 确保它验证查询的只读访问(如果正在执行查询)
  4. 添加全面的文档字符串
  5. 本地测试
  6. 重建Docker镜像

代码风格

  • 遵循PEP 8 Python风格指南
  • 对所有函数使用类型提示
  • 添加带有示例的文档字符串
  • 保持职能集中和单一目的

📄 许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。

🤝 贡献

欢迎投稿!请参阅 贡献.md 作为指导方针。

📚 其他资源

快乐查询! 🚀