关于 MCP Trino Server
MCP Trino Server 是一个基于 MCP Python SDK 开发的 MCP 服务,用于连接 Trino 与 Iceberg。它面向需要通过标准接口探索数据、执行 SQL 以及维护 Iceberg 表的用户。
主要功能
- 01执行 SQL 查询并返回格式化结果
- 02浏览目录、模式、表与视图结构
- 03Iceberg 表的文件压缩与快照清理
- 04查看 Iceberg 快照、清单与分区元数据
- 05支持 stdio、streamable-http 和 sse 传输
适用场景
- 01在 Trino 中交互式探索与分析数据
- 02自动化维护和优化 Iceberg 表
- 03为 Trino 数据库构建 AI 驱动的工具
MCP 相关
该服务通过 MCP 暴露查询、元数据浏览、Iceberg 维护和查询历史等工具,供 MCP 客户端调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
MCP Trino 服务
MCP Trino 服务是一个 Model Context Protocol (MCP) 服务,可与 Trino 和 Iceberg 无缝集成,通过标准接口提供高级的 数据探索、查询和表维护能力。
使用场景
- 在 Trino 中进行交互式数据探索与分析
- 自动化的 Iceberg 表维护与优化
- 构建与 Trino 数据库交互的 AI 驱动工具
- 以规范的格式化结果执行和管理 SQL 查询
前提条件
- 一个正在运行的 Trino 服务(或用于本地开发的 Docker Compose)
- Python 3.12 或更高版本
- Docker(可选,用于容器化部署)
快速开始
1. 克隆仓库
git clone https://github.com/alaturqua/mcp-trino-python.git
cd mcp-trino-python
2. 创建环境文件
在根目录下创建 .env 文件:
TRINO_HOST=localhost
TRINO_PORT=8080
TRINO_USER=trino
TRINO_CATALOG=tpch
TRINO_SCHEMA=tiny
3. 在本地运行 Trino(可选)
docker-compose up -d trino
这会在 localhost:8080 上启动一个带有示例 TPC-H 和 TPC-DS 数据的 Trino 服务。
安装
通过 Smithery 安装
要通过 Smithery 自动为 Claude Desktop 安装 MCP Trino 服务:
npx -y @smithery/cli install @alaturqua/mcp-trino-python --client claude
使用 uv(推荐)
uv sync
uv run src/server.py
使用 pip
pip install -e .
python src/server.py
传输模式
该服务支持三种传输模式:
| 传输方式 | 描述 | 使用场景 |
|---|---|---|
stdio | 标准 I/O(默认) | VS Code、Claude Desktop、本地 MCP 客户端 |
streamable-http | 带流式传输的 HTTP | 远程访问、Web 客户端、Docker |
sse | Server-Sent Events | 旧版 HTTP 传输 |
使用不同传输方式运行
# stdio (default) - for VS Code and Claude Desktop
python src/server.py
# Streamable HTTP - for remote/web access
python src/server.py --transport streamable-http --host 0.0.0.0 --port 8000
# SSE - legacy HTTP transport
python src/server.py --transport sse --host 0.0.0.0 --port 8000
在 VS Code 中使用
添加到你的 VS Code 设置(Ctrl+Shift+P → Preferences: Open User Settings (JSON)):
{
"mcp": {
"servers": {
"mcp-trino-python": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with",
"trino",
"--with",
"loguru",
"mcp",
"run",
"/path/to/mcp-trino-python/src/server.py"
],
"envFile": "/path/to/mcp-trino-python/.env"
}
}
}
}
或添加到工作区中的 .vscode/mcp.json(不带 mcp 包装键)。
在 Claude Desktop 中使用
添加到你的 Claude Desktop 配置中:
{
"mcpServers": {
"trino": {
"command": "python",
"args": ["./src/server.py"],
"env": {
"TRINO_HOST": "your-trino-host",
"TRINO_PORT": "8080",
"TRINO_USER": "trino"
}
}
}
}
Docker 用法
构建镜像
docker build -t mcp-trino-python .
使用 stdio 运行(用于 VS Code)
docker run -i --rm \
-e TRINO_HOST=host.docker.internal \
-e TRINO_PORT=8080 \
-e TRINO_USER=trino \
mcp-trino-python
使用 Streamable HTTP 运行
docker run -p 8000:8000 \
-e TRINO_HOST=host.docker.internal \
-e TRINO_PORT=8080 \
mcp-trino-python \
--transport streamable-http --host 0.0.0.0 --port 8000
Docker Compose
# Start Trino + MCP server with Streamable HTTP
docker-compose up -d
# Start with SSE transport
docker-compose --profile sse up -d
# Run stdio for testing
docker-compose --profile stdio run --rm mcp-trino-stdio
在 VS Code 中使用 Docker
{
"mcp": {
"servers": {
"mcp-trino-python": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--network",
"mcp-trino-python_trino-network",
"-e",
"TRINO_HOST=trino",
"-e",
"TRINO_PORT=8080",
"-e",
"TRINO_USER=trino",
"mcp-trino-python"
]
}
}
}
}
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
| TRINO_HOST | Trino 服务主机名 | localhost |
| TRINO_PORT | Trino 服务端口 | 8080 |
| TRINO_USER | Trino 用户名 | trino |
| TRINO_CATALOG | 默认 catalog | None |
| TRINO_SCHEMA | 默认 schema | None |
| TRINO_HTTP_SCHEME | HTTP 协议方案(http/https) | http |
| TRINO_PASSWORD | Trino 密码 | None |
工具
查询与探索工具
-
show_catalogs
- 列出所有可用的 catalog
- 无需参数
-
show_schemas
- 列出某个 catalog 中的所有 schema
- 参数:
catalog:Catalog 名称(字符串,必填)
-
show_tables
- 列出某个 schema 中的所有表
- 参数:
catalog:Catalog 名称(字符串,必填)schema:Schema 名称(字符串,必填)
-
describe_table
- 显示详细的表结构和列信息
- 参数:
table:表名称(字符串,必填)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
-
execute_query
- 执行 SQL 查询并返回格式化结果
- 参数:
query:要执行的 SQL 查询(字符串,必填)
-
show_catalog_tree
- 显示 catalog、schema 和表的层级树状视图
- 返回带有视觉指示符的格式化树结构
- 无需参数
-
show_create_table
- 显示某张表的 CREATE TABLE 语句
- 参数:
table:表名称(字符串,必填)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_create_view
- 显示某个视图的 CREATE VIEW 语句
- 参数:
view:视图名称(字符串,必填)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_stats
- 显示某张表的统计信息
- 参数:
table:表名称(字符串,必填)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
Iceberg 表维护
-
optimize
- 通过合并小文件来优化 Iceberg 表
- 参数:
table:表名称(字符串,必填)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
-
optimize_manifests
- 优化 Iceberg 表的 manifest 文件
- 参数:
table:表名称(字符串,必填)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
-
expire_snapshots
- 移除 Iceberg 表中的旧快照
- 参数:
table:表名称(字符串,必填)retention_threshold:时间阈值(例如 "7d")(字符串,可选)catalog:Catalog 名称(字符串,可选)schema:Schema 名称(字符串,可选)
Iceberg 元数据检查
-
show_table_properties
- 显示 Iceberg 表属性
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_table_history
- 显示 Iceberg 表历史/变更日志
- 包含快照时间、血缘和祖先信息
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_metadata_log_entries
- 显示 Iceberg 表元数据日志条目
- 包含元数据文件位置和序列信息
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_snapshots
- 显示 Iceberg 表快照
- 包含快照详细信息,包括操作和清单文件
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_manifests
- 显示当前或所有快照的 Iceberg 表清单
- 包含清单文件详细信息和数据文件统计信息
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)all_snapshots:包括所有快照(布尔值,可选)
-
show_partitions
- 显示 Iceberg 表分区
- 包含分区统计信息和文件计数
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_files
- 显示当前快照中的 Iceberg 表数据文件
- 包含详细文件元数据和列统计信息
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
-
show_entries
- 显示当前或所有快照的 Iceberg 表清单条目
- 包含条目状态和详细文件指标
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)all_snapshots:包括所有快照(布尔值,可选)
-
show_refs
- 显示 Iceberg 表引用(分支和标签)
- 包含引用配置和快照映射
- 参数:
table:表名(字符串,必填)catalog:目录名(字符串,可选)schema:Schema 名称(字符串,可选)
查询历史
- show_query_history
- 获取已执行查询的历史记录
- 参数:
limit:返回的最大查询数(数字,可选)
License
This project is licensed under the Apache 2.0 License. Please refer to the LICENSE file for the full terms.
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。
