Token导航 LogoToken导航TokenDH.com
meridian (Meridian Io) logo
运维云端未说明官方级别未说明来源级核验

meridian (Meridian Io)

MCP Server

Meridian是一个开源的Trino控制平面和MCP服务器,用于Kubernetes环境,提供快速集群配置、生命周期管理和查询执行功能。

工具数

19

提示词数

0

GitHub Stars

2

资源数

0
GoClaude云端部署Claude DesktopClaudeCursor

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

meridian-io

提供方

meridian-io

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

子午线

Kubernetes的开源Trino控制平面和MCP服务器。

getmeridian.dev · v1.1

Trino集群的配置需要30-90秒。Meridian消除了这种等待——热备用池使预配置的集群保持空闲和就绪状态,并在零秒内保留。CI/CD作业、批处理工作负载或多租户平台没有冷启动。

子午线是二合一的: Kubernetes操作员 管理整个集群生命周期(Empty → Pending → Idle → Reserved)和a MCP服务器 借助19个工具,Claude、Cursor或任何MCP客户端都可以通过自然语言配置集群、添加目录、轮换凭据和运行查询。

内部构建的平台大数据团队。现在开源。

______________________________________________________________________

MCP服务器--从这里开始

meridian binary是一个独立的MCP服务器,用于 Kubernetes上的任何Trino部署.安装操作员以获得完整的热备用池体验;如果没有它,MCP服务器在第一天就很有用。

安装

二进制(所有平台):

# macOS arm64
curl -Lo meridian.tar.gz https://github.com/meridian-io/meridian/releases/download/v1.1/trino-mcp-server_v1.1_darwin_arm64.tar.gz
tar xzf meridian.tar.gz && sudo mv meridian /usr/local/bin/

Docker:

docker pull ghcr.io/meridian-io/trino-mcp-server:v1.1

# stdio — for Claude Desktop / local MCP clients
meridian --transport stdio --namespace meridian

# SSE — for remote / team use (Cursor, Claude API)
meridian --transport sse --addr :8080 --namespace meridian

# In-cluster (reads service account token automatically)
meridian --transport sse --addr :8080

连接到克劳德桌面

添加 ~/.config/claude/claude_desktop_config.json:

{
  "mcpServers": {
    "meridian": {
      "command": "meridian",
      "args": ["--transport", "stdio", "--namespace", "meridian"]
    }
  }
}

可用的MCP工具

工具描述缓存TTL
list_clusters列出所有具有阶段、运行状况、协调器URL--的集群
get_cluster获取特定集群的完整详细信息--
create_cluster从配置文件中配置新的Trino集群--
delete_cluster拆除一个集群--
reserve_cluster将空闲集群分配给客户端(幂等)--
release_cluster将集群返回到空闲池--
scale_pool在ClusterPool上设置所需的副本计数--
list_pools列出所有当前状态的ClusterPools--
add_catalog将新目录推送到集群--不重新启动缓存无效
remove_catalog删除目录--不重新启动缓存无效
list_catalogs列出群集中注册的所有目录5分钟
list_schemas列出目录中的架构5分钟
list_tables列出目录架构中的表5分钟
get_table_schema获取表的列名和数据类型5分钟
execute_query执行SQL并将结果作为表返回。标记为 mcp_query_id 用于审计相关性。使用 output_file 以CSV格式写入大结果。无(通过选择加入 ttl 参数)
explain_query返回SQL语句的Trino执行计划,不执行5分钟
rotate_credentials触发保险库/ASM凭据刷新--
get_audit_log获取集群生命周期和管理事件--
promote_environment从dev升级配置→ 暂存→ prod--

查询结果缓存

Meridian将Trino查询结果缓存在内存中,以避免在同一会话中重复调用的冗余往返。

工具默认TTL基本原理
execute_query数据更改必须立即可见——选择加入 ttl=N 对于静态数据
list_catalogs5分钟目录列表很少更改
list_schemas5分钟架构列表很少更改
list_tables5分钟表列表很少更改
get_table_schema5分钟列元数据很少更改

它是如何工作的:

  1. 第一个电话→ 缓存未命中→ 查询点击Trino→ 结果与到期时间戳一起存储
  2. TTL内的同一呼叫→ 缓存命中→ 结果立即返回,标记 [cache hit]
  3. TTL到期后→ 下一个调用再次命中Trino并刷新缓存
  4. add_catalog / remove_catalog 立即使目录缓存无效,因此 list_catalogs 始终反映当前状态

单程: 如果两个相同的查询同时到达(例如,Claude在一个回合中调用同一个工具两次),只有一个查询会命中Trino。第二个等待,一旦第一个完成,就会从缓存中提供服务。

选择缓存 execute_query: 通过 ttl=N 查询静态或参考数据时:

Run SELECT * FROM mysql_testdb.testdb.orders on trino-local with ttl=60

缓存密钥: SHA-256哈希 (coordinatorURL + sql)不同的SQL或不同的集群=不同的缓存条目,没有冲突。

边缘案例-- add_catalog: 当您通过MCP添加或删除目录时,该协调器的缓存将立即失效。 list_catalogs 稍后调用将始终命中Trino并返回当前状态——没有过时的数据。

查询标记

发送到Trino的每个SQL语句都会自动标记一个唯一的 mcp_query_id:

SELECT * FROM mysql_testdb.testdb.orders
-- mcp_query_id=3f2a1b4c-e8d7-4a9b-b1c2-0f5e6d7a8b9c

标记显示为SQL注释,因此Trino正常执行它。这 query_id 显示在每个结果的顶部:

query_id: 3f2a1b4c-e8d7-4a9b-b1c2-0f5e6d7a8b9c
| name        |
|-------------|
| 55555577    |
| 76y56       |

(2 rows)

使用它在Trino UI中查找确切的执行情况(http://:8080/ui)或查询历史记录——在调试慢速查询或意外结果时非常有用。

注意:标签仅适用于新的Trino调用。缓存点击数([cache hit])跳过标记,因为查询再也不会到达Trino。

CSV文件导出

对于会溢出上下文窗口的大型结果集,请使用 output_file 将结果以CSV格式写入,而不是内联返回:

Run SELECT * FROM mysql_testdb.testdb.orders on trino-local with output_file=/tmp/orders.csv

退货:

Results written to /tmp/orders.csv (1042 rows, 8 columns)
query_id: 3f2a1b4c-...

该文件包含一个标题行,后面是所有数据行。完整的表永远不会发送到LLM,只有摘要。

______________________________________________________________________

建筑

┌──────────────────────────────────────────────────────┐
│                   Project Meridian                    │
│                                                      │
│  ┌────────────┐  ┌─────────────┐  ┌───────────────┐  │
│  │  Web UI    │  │  REST API   │  │  MCP Server   │  │
│  │  Next.js   │  │  Go/mTLS    │  │  Go · 19 tools│  │
│  └────────────┘  └──────┬──────┘  └──────┬────────┘  │
│                         │                │           │
│                ┌────────▼────────────────▼──────┐    │
│                │       Kubernetes API Server     │    │
│                └────────┬────────────────────────┘    │
│       ┌─────────────────┼──────────────┐             │
│       ▼                 ▼              ▼             │
│  ClusterController  ClusterPool   ClusterPool        │
│                     Controller    Autoscaler         │
└──────────────────────────────────────────────────────┘
                          │
           ┌──────────────┼──────────────┐
           ▼              ▼              ▼
      Cluster(Idle)  Cluster(Reserved)  Cluster(Pending)

集群生命周期

Empty → Pending → Idle → Reserved
                    ↓
                  Failed

组件

目录语言描述
mcp/转到MCP服务器-- 船舶优先,独立二进制
operator/GoKubernetes操作员-控制器、CRD、REST API
ui/Next.jsWeb管理仪表板
charts/Helm一个命令安装
config/YAMLCRD清单
docs/HTML体系结构和API文档

Kubernetes操作员

操作员在Kubernetes上管理整个Trino集群生命周期。三个控制器在一个二进制文件中运行:

控制员职责
ClusterController每个集群的生命周期: Empty → Pending → Idle → Reserved → Failed。创建协调器部署、工作器部署和协调器服务。健康门转换为空闲。处理协调员驱逐恢复。
ClusterPoolController维护热备用池:创建要访问的集群 spec.replicas,在过度配置时删除最旧的空闲群集(每个周期一个),立即清除故障群集。
ClusterPoolAutoscalerController调整 ClusterPool.spec.replicas 基于利用率(reserved / total).在≥阈值时放大(默认70%),在\ 添加一个名为的目录 mysql_testdb 到名为的集群 trino-local 具有以下特性:
`` connector.name=mysql connection-url=jdbc:mysql://mysql:3306 connection-user=root connection-password=trino_test ``

步骤2--浏览目录:

列出中的架构 mysql_testdb 目录上 trino-local

步骤3——查询数据:

SHOW TABLES FROM mysql_testdb.testdbtrino-local

直接在Trino中验证:

docker exec meridian-trino trino --execute "SHOW CATALOGS"
docker exec meridian-trino trino --execute "SHOW SCHEMAS FROM mysql_testdb"
注: 添加MySQL目录时,请使用 mysql:3306 作为连接URL(不是 localhost:3306).Trino在Docker内部运行,并通过内部Docker网络主机名访问MySQL mysql.

______________________________________________________________________

# MCP server
cd mcp && go build -o ../bin/meridian ./cmd/meridian-mcp

# Kubernetes operator
cd operator && go build -o ../bin/meridian-operator .

# Or use Make
make build       # operator
make build-mcp   # MCP server
make test        # all tests

手动测试用例

以下测试用例涵盖了所有端到端的工作工具。在运行本地开发环境的Claude Desktop中运行它们(docker compose up -d + ./hack/setup-local.sh).

测试中使用的参考表:

数据库
MySQL testdbtest2name (第11章)

______________________________________________________________________

#对克劳德说什么预期结果
1List all clusters in the meridian namespace表演 trino-local, trino-idle-01, trino-idle-02, trino-pending-01, trino-reserved-01 与相位和健康
2Get details for the cluster named trino-local in the meridian namespace显示协调器URL http://localhost:8080,阶段,健康状况
3Add a catalog called mysql_testdb to trino-local with connector.name=mysql, connection-url=jdbc:mysql://mysql:3306, connection-user=root, connection-password=trino_test退货 Catalog "mysql_testdb" added to cluster "trino-local"
4List all catalogs on trino-local表演 mysql_testdb, system, tpch --结果是新鲜的(缓存被addcatalog破坏)
5List all catalogs on trino-local again (同一对话)与相同的结果 [cache hit] --从5分钟缓存中提供
6List schemas in the mysql_testdb catalog on trino-local表演 information_schema, testdb
7List tables in mysql_testdb.testdb on trino-local表演 orders, test (或任何存在的表格)
8Show me the schema for the test table in mysql_testdb.testdb on trino-local显示列 name 与类型 char(11)
9Run SELECT * FROM mysql_testdb.testdb.test on trino-local返回2行: 55555577, 76y56 --没有 [cache hit] (默认情况下execute_query没有缓存)
10Run that same query again (同一对话)再次返回2行--仍然没有 [cache hit] (正确-数据可能已更改)
11Run SELECT * FROM mysql_testdb.testdb.test on trino-local with ttl=60返回2行,否 [cache hit] 第一次通话
12Run that same query again (同一对话,60秒内)返回2行 [cache hit] --选择加入缓存正在工作
13Run SELECT * FROM mysql_testdb.testdb.test on trino-local结果包括 query_id: 在第一行,查询标记正在工作
14打开 http://localhost:8080/ui 在浏览器中,按以下方式查找查询 mcp_query_id 在查询文本中查询出现在Trino UI中,标记注释可见
15Run SELECT * FROM mysql_testdb.testdb.test on trino-local and save the results to /tmp/test.csv退货 Results written to /tmp/test.csv (2 rows, 1 columns) --没有内联表
16cat /tmp/test.csv (在终端中)CSV文件包含标题 name 2个数据行
17(清理)Remove the mysql_testdb catalog from trino-local退货 Catalog "mysql_testdb" removed from cluster "trino-local"
注: 测试5、12需要在 相同的克劳德桌面会话 --缓存在内存中,并在MCP进程重新启动时重置。

______________________________________________________________________

第2阶段——操作员手册测试

先决条件:集群正在运行,CRD已应用,操作员正在本地运行。

kubectl apply -f operator/config/crd/bases/
./bin/meridian-operator --namespace meridian --kubeconfig ~/.kube/config

群集生命周期(空→ 待定→ Idle → 预留→ Idle)

#行动预期结果
18kubectl apply -f operator/config/samples/test-cluster.yaml集群 test-cluster 创建阶段 "" (空)
19kubectl get cluster test-cluster -n meridian -w阶段转换: ""Pending 操作员在几秒钟内创建部署和服务
20kubectl get deployments -n meridiantest-cluster-coordinator (1个复制品)和 test-cluster-worker (2个副本)存在
21kubectl get svc -n meridiantest-cluster-coordinator 端口8080上存在服务
22等待协调器吊舱就绪,然后观察集群阶段转换 PendingIdle, ready: true, idleAt 时间戳设置
23kubectl patch cluster test-cluster -n meridian --type=merge -p '{"spec":{"clientId":"client-abc","reservationId":"res-001"}}'集群转换 IdleReserved, reservedAt 时间戳设置
24kubectl get cluster test-cluster -n meridian -o jsonpath='{.status.phase}'退货 Reserved
25kubectl patch cluster test-cluster -n meridian --type=merge -p '{"spec":{"clientId":"","reservationId":""}}'集群转换 ReservedIdle, idleAt 刷新

热备用池(ClusterPool)

#行动预期结果
26kubectl apply -f operator/config/samples/test-clusterpool.yaml集群泳池 test-pool 创建于 spec.replicas: 2
27kubectl get clusters -n meridian -l meridian.io/cluster-pool=test-pool -w自动创建2个集群(test-pool-),每次转换为空→ 待定→ 闲置
28kubectl patch clusterpool test-pool -n meridian --type=merge -p '{"spec":{"replicas":1}}'下一次对账(≤30s)后,删除最旧的空闲集群——剩余1个集群
29kubectl patch clusterpool test-pool -n meridian --type=merge -p '{"spec":{"replicas":3}}'创建2个新集群,以达到所需的3个数量
30kubectl get clusterpool test-pool -n meridian -o jsonpath='{.status}'表演 readyReplicas, pendingReplicas, reservedReplicas 计数

清理

#行动预期结果
31kubectl delete clusterpool test-pool -n meridian所有者引用级联--自动删除所有池群集
32kubectl delete cluster test-cluster -n meridian通过所有者引用删除协调员部署、工作人员部署和服务

______________________________________________________________________

CRD

# meridian.io/v1alpha1
Cluster              — single Trino cluster lifecycle
ClusterPool          — hot standby pool of N clusters
ClusterPoolAutoscaler — scale pool by reservation utilization

超越AI代理

MCP服务器是一个标准的RPC接口,任何自动化Trino集群生命周期的系统都可以使用它,而不仅仅是LLM。

CI/CD管道

为集成测试保留一个新的集群,运行它们,完成后发布:

# GitHub Actions
- name: Reserve test cluster
  run: |
    RESULT=$(mcp-client call reserve_cluster \
      --profile ci --reservation-id ${{ github.run_id }})
    echo "COORDINATOR_URL=$(echo $RESULT | jq -r .coordinatorUrl)" >> $GITHUB_ENV

- name: Run integration tests
  run: ./test.sh $COORDINATOR_URL

- name: Release cluster
  if: always()
  run: mcp-client call release_cluster --cluster-name ${{ env.CLUSTER_NAME }}

工作流编排器

将集群生命周期作为气流/Dagster/Prefect DAG的一部分进行管理:

@task
def reserve_trino_cluster(dag_run):
    return mcp.call("reserve_cluster", profile="batch", reservation_id=dag_run.run_id)

@task
def run_transformation(cluster):
    run_dbt(target=cluster["coordinatorUrl"])

@task
def release_trino_cluster(cluster):
    mcp.call("release_cluster", cluster_name=cluster["clusterName"])

其他MCP客户端

客户端用例
Slack/PagerDuty bot随叫随到的工程师通过点击按钮扩展池
Backstage插件应用程序开发人员通过表单提供集群,无需kubectl访问
Terraform/Plumi提供者将集群池声明为代码基础设施

为什么选择Meridian

  • 不存在开源Trino控制平面特立尼达和多巴哥#396 自2019年开放;子午线就是答案
  • 不存在官方Trino MCP服务器特立尼达和多巴哥#26239 开放;Meridian提供19种管理工具,而不仅仅是查询执行
  • 作为通用操作接口工作 --CI/CD、编排器、内部工具和AI代理都使用相同的二进制文件

路线图

阶段状态描述
第一阶段——MCP服务器✅ 完成19个MCP工具、Go二进制、stdio+SSE传输、本地开发设置、TTL查询结果缓存(模式元数据5分钟、查询选择加入、单次重复数据删除、目录更改自动失效)、查询标记(mcp_query_id 用于审计相关性),CSV文件导出用于大型结果集,通过查询执行计划 explain_query
第二阶段——Kubernetes操作员✅ 完成群集控制器(空→待定→Idle→预留→Idle→降级),ClusterPoolController(热备用池,逐步缩减,最旧的优先选择,通过 maxClusterAge,滚动映像升级),ClusterPoolAutoscalerController(基于利用率的滞后),Trino网关集成,工作负载标记池
第3阶段-REST API✅ 完整完整的REST界面:保留、释放、列出集群(阶段/配置文件/工作负载过滤器)、获取集群、列出池、扩展池——所有这些都有mTLS和跨客户端所有权验证
第4阶段——目录和凭证层✅ 完成注释驱动的凭据轮换,无需重新启动群集。支持Kubernetes Secrets、HashiCorp Vault(K8s-auth,KV v2)和AWS Secrets Manager(IRSA)。TTL缓存,具有主动刷新、指数回退和 CredentialRotation Cluster对象上的条件。
第5阶段——轮廓系统🔨 进行中ClusterPool配置文件模板--注入Trino config.properties, jvm.config,并在配置时将定义编目到协调器和工作Pod中
第6阶段——Web用户界面📋 计划Next.js仪表板——集群池可视化、目录管理UI、审计跟踪查看器
第7阶段——Helm图表和文档📋 计划一个命令安装、快速入门指南、完整的架构文档

______________________________________________________________________

许可证

Apache 2.0——请参阅 许可证

目录标签

目录标签

GoClaude云端部署Trino管理本地部署Kubernetes操作器MCP服务器集群生命周期查询缓存

支持客户端

Claude DesktopClaudeCursor

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

token

工具数量(toolCount,工具数)

19

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明token部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP