使用说明
Trino MCP服务器
一种生产就绪的模型上下文协议(MCP)服务器,提供对Trino数据库的安全、只读访问。非常适合希望利用人工智能工具(如Cursor)查询和探索Trino数据库的数据工程师和分析师。
🚀 快速开始
5分钟后起床跑步:
- 先决条件:Docker桌面、Cursor IDE和对Trino服务器的访问
- 构建:
docker build -t trino-mcp-server:latest . - 配置:将MCP服务器添加到游标配置
- 测试:请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
- 数据发现:探索数据集并了解其结构
- 快速洞察:获取表格统计数据和样本数据以进行快速分析
- 报告生成:使用人工智能生成常见报告需求的查询
安装
先决条件
在开始之前,请确保您已经:
-
Docker 桌面版 已安装并正在运行
- 下载Docker桌面
- 验证安装:
docker --version
-
光标IDE 安装
- 下载光标
- 确保在设置中启用了MCP工具包
-
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桌面
- 下载 Windows版Docker桌面
- 安装并启动Docker桌面
- 如果系统提示,启用WSL 2后端(推荐)
2.塑造形象
打开PowerShell或命令提示符:
cd path\to\trino-mcp-server
docker build -t trino-mcp-server:latest .
3.配置光标MCP
- 打开光标设置(Ctrl+,)
- 导航至 主控程序 或搜索“MCP”
- 打开MCP配置文件:
%APPDATA%\Cursor\mcp.json - 添加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
- 打开光标设置
- 导航至 主控程序
- 打开MCP配置文件:
- 添加Trino MCP服务器配置
Linux特定配置
Linux常见问题
- 权限不足:将用户添加到docker组(见上文)
- host.docker.internal不工作:使用
--network host或--add-host旗帜 - 防火墙阻止:检查Docker的防火墙规则
macOS
1.安装Docker桌面
- 下载 Mac版Docker桌面
- 安装并启动Docker桌面
- 验证安装:
docker --version
2.塑造形象
开放式终端:
cd path/to/trino-mcp-server
docker build -t trino-mcp-server:latest .
3.配置光标MCP
- 打开光标设置(Cmd+,)
- 导航至 主控程序
- 打开MCP配置文件:
~/cursor/mcp.json - 添加Trino MCP服务器配置
🔌 光标MCP集成
逐步配置
-
打开光标设置
- 转到文件→ 偏好→ 设置
-
导航到MCP设置
- 在设置中搜索“MCP”
- 或者手动导航到MCP配置文件(请参阅上面的平台特定路径)
-
编辑配置文件
- 打开
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"
]
}
}
}
-
重新启动游标
- 完全退出并重新启动Cursor以加载新配置
-
测试连接
- 在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"
]
}
}
}
验证连接
-
检查MCP服务器状态
- 在Cursor的状态栏中查找MCP服务器状态
- 或检查Cursor的MCP面板(如果可用)
-
使用简单查询进行测试
- 询问Cursor:“测试Trino连接”
- 或者:“显示Trino中的所有目录”
- 人工智能应成功使用MCP工具
-
检查日志 (如果出现问题)
- Docker日志:
docker ps找到容器,然后docker logs <container-id> - 游标日志:检查游标的开发人员控制台
- Docker日志:
⚙️ 配置参考
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
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:
它是如何工作的:
- 列名检测:自动检测名称如下的列
email,phone,address,aadhaar,pan等等。 - 内容扫描:扫描单元格值以查找类似PII的模式(电子邮件、电话号码、信用卡等)
- 智能口罩:在保留格式上下文的同时屏蔽数据(例如。,
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服务器
解决方案:
-
验证Trino服务器是否正在运行:
curl http://localhost:8088/v1/info -
检查环境变量是否正确:
TRINO_HOST匹配您的Trino服务器地址TRINO_PORT匹配您的Trino服务器端口TRINO_USER有效
-
对于Docker网络:
- Windows/macOS:使用
host.docker.internal - Linux:使用
--network host或--add-host=host.docker.internal:host-gateway
- Windows/macOS:使用
-
检查防火墙规则和网络连接
问题:连接在本地工作,但在Docker中不工作
解决方案:
- 使用
host.docker.internal而不是localhost - 在Linux上,添加
--add-host=host.docker.internal:host-gateway - 或使用
--network host模式
游标MCP集成问题
问题:MCP服务器未出现在游标中
解决方案:
- 验证配置文件中的JSON语法
- 检查Docker镜像是否存在:
docker images | grep trino-mcp-server - 手动运行Docker测试:
docker run -i --rm -e TRINO_HOST=host.docker.internal -e TRINO_PORT=8088 trino-mcp-server:latest - 完全重新启动Cursor(而不仅仅是重新加载窗口)
- 检查游标日志是否有错误
问题:工具在Cursor中不起作用
解决方案:
- 使用
test_connection验证连接的工具 - 检查Docker容器日志
- 验证环境变量是否设置正确
- 确保Trino服务器可以从Docker容器访问
查询执行问题
问题:查询执行失败
解决方案:
- 验证查询是否为只读(仅限SELECT、SHOW、DESCRIBE)
- 检查表/架构/目录名称是否正确
- 验证用户是否具有读取权限
- 检查Trino服务器日志以了解详细错误
问题:“只允许只读查询”错误
解决方案:
- 为了安全起见,服务器阻止所有写入操作
- 仅使用SELECT、SHOW、DESCRIBE、EXPLAIN和WITH查询
- 检查查询不包含INSERT、UPDATE、DELETE等。
身份验证问题
问题:身份验证失败
解决方案:
- 验证
TRINO_USER是正确的 - 检查
TRINO_PASSWORD设置正确(如果需要) - 验证用户是否具有目录的读取权限
- 检查Trino服务器身份验证配置
Docker问题
问题:Docker构建失败
解决方案:
- 检查Docker是否正在运行:
docker ps - 验证Dockerfile语法
- 检查互联网连接(下载依赖项)
- 尝试重建:
docker build --no-cache -t trino-mcp-server:latest .
问题:集装箱立即出口
解决方案:
- 检查日志:
docker logs <container-id> - 验证是否设置了环境变量
- 手动测试连接
- 检查Trino服务器是否可访问
🛠️ 发展
地方发展设置
-
安装Python依赖项:
pip install -r requirements.txt -
设置环境变量:
export TRINO_HOST="localhost" export TRINO_PORT="8088" export TRINO_USER="trino" export TRINO_CATALOG="tpch" export TRINO_SCHEMA="tiny" -
直接运行服务器:
python trino_server.py -
测试MCP协议:
echo '{"jsonrpc":"2.0","method":"tools/list","id":1}' | python trino_server.py
添加新工具
- 添加功能
trino_server.py - 用…装饰
@mcp.tool() - 确保它验证查询的只读访问(如果正在执行查询)
- 添加全面的文档字符串
- 本地测试
- 重建Docker镜像
代码风格
- 遵循PEP 8 Python风格指南
- 对所有函数使用类型提示
- 添加带有示例的文档字符串
- 保持职能集中和单一目的
📄 许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
🤝 贡献
欢迎投稿!请参阅 贡献.md 作为指导方针。
📚 其他资源
快乐查询! 🚀