关于 MCP Server for ZenML
这是一个 MCP 服务,让 Cursor、Claude Desktop 等 MCP 客户端能够读取 ZenML MLOps 与 LLMOps 流水线的信息。适合使用 ZenML 管理机器学习与大模型流水线的团队。
主要功能
- 01读取流水线、运行记录与步骤日志
- 02查看 Stack、组件与 Service Connector
- 03查询 Snapshot、部署与模型版本
- 04按 compact 或 legacy 配置文件选择工具集
- 05支持只读写入策略
- 06通过 trigger_pipeline 触发流水线运行
适用场景
- 01在编码客户端中查看流水线运行状态与失败步骤
- 02检索模型版本与部署信息
- 03在只读策略下安全地浏览 ZenML 资源
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 ZenML 资源的工具、提示词与资源,并可通过设置限制写入操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e ZENML_STORE_URL -e ZENML_STORE_API_KEY -e ZENML_MCP_PROFILE -e ZENML_MCP_WRITE_POLICY docker.io/zenmldocker/mcp-zenml:2.0.0ZENML_STORE_URLBase URL of your ZenML server (e.g., https://<workspace-id>-zenml.cloudinfra.zenml.io).ZENML_STORE_API_KEY密钥API key used to authenticate with your ZenML server (ideally a service account key).ZENML_MCP_PROFILETool registration profile: compact (default) or legacy.ZENML_MCP_WRITE_POLICYMutation policy: read_write (default) or read_only.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
用于 ZenML 的 MCP 服务
本项目实现了一个用于与 ZenML API 交互的 Model Context Protocol (MCP) 服务。

什么是 MCP?
Model Context Protocol(MCP)是一种开放协议,用于标准化应用程序向大语言模型(LLM)提供上下文的方式。它就像“AI 应用的 USB-C 接口”——提供将 AI 模型连接到不同数据源和工具的标准化方式。
MCP 采用客户端-服务端架构,其中:
- MCP 主机:希望通过 MCP 访问数据的程序,例如 Claude Desktop 或 IDE
- MCP 客户端:与服务保持一对一连接的协议客户端
- MCP 服务:通过标准化协议提供特定功能的轻量级程序
- 本地数据源:MCP 服务可以安全访问的计算机文件、数据库和服务
- 远程服务:可通过互联网访问、且 MCP 服务能够连接的外部系统
什么是 ZenML?
ZenML 是一个用于构建和管理 ML 与 AI 工作流的开源平台。它提供统一的界面,用于管理数据、模型和实验。
功能
该服务提供 MCP 工具,以访问 ZenML 服务的核心只读功能,方便获取以下内容的实时信息:
核心实体
- 用户 - 用户账户和权限
- Stacks - 基础设施配置
- Stack Components - 单个 Stack 构建模块
- Flavors - 可用组件类型
- Service Connectors - 云端身份验证
工作流执行
- Pipelines - 工作流定义
- Pipeline Runs - 执行历史和状态
- Pipeline Steps - 单个步骤的详情、代码和日志
- Schedules - 自动运行计划
- Artifacts - 数据制品的元数据(不包含数据本身)
部署与服务
- Snapshots - 冻结的工作流配置(即“要运行/提供服务的内容”制品)
- Deployments - 运行时服务实例,包含状态、URL 和日志
- Services - 模型服务端点
组织与发现
- Projects - 用于组织 ZenML 资源的容器
- Tags - 用于发现的跨领域元数据标签
- Builds - 包含镜像和代码信息的工作流构建制品
模型
- Models - ML 模型注册表条目
- Model Versions - 版本化模型制品
兼容性 API(建议迁移)
- Pipeline run templates 在 ZenML 0.97.0 中仍可用;新工作流则优先使用 Snapshots(参见迁移指南)
该服务还支持使用快照(优先)或已弃用的基于模板的触发参数来触发新的工作流运行。
注意:我们会根据用户反馈持续改进此集成。 欢迎加入我们的 Slack 社区,分享您的体验, 帮助我们不断完善!
工具配置档案与写入策略
默认的 compact 配置档案会公布 16 个工具。其中七个通用工具涵盖资源目录、读取、常规变更和有限的生命周期操作:
| 工具 | 用途 |
|---|---|
zenml_describe_resources | 发现受支持的资源类型和有限定范围的操作架构 |
zenml_list_resources | 使用经过验证的筛选条件和分页列出一种资源类型 |
zenml_get_resource | 获取单个资源;在需要时指定父级和项目范围 |
zenml_create_resource | 使用类型化负载创建受支持的资源 |
zenml_update_resource | 更新指定 UUID 的单个资源 |
zenml_delete_resource | 删除或归档指定 UUID 的单个资源 |
zenml_action_resource | 执行允许列表中的生命周期或关系操作,不进行重试 |
仍保留 9 个专用工具,因为它们提供诊断、活动上下文、流式日志或代码、 流水线执行,或交互式应用:
diagnose_zenml_setupget_active_user和get_active_projecttrigger_pipelineget_step_logs、get_step_code和get_deployment_logsopen_pipeline_run_dashboard和open_run_activity_chart
get_step_logs 最多返回 50,000 条记录,按时间从早到晚排列,并附带
possibly_truncated 标志,以及说明缺少哪些记录及原因的
note。传入 tail 可仅获取最新记录。在 ZenML 0.97+ 服务上,它会
分页读取日志存储;在 0.96 上,它使用较旧的单次请求端点。
如果现有客户端仍依赖旧的实体专用名称(例如 list_pipeline_runs),
请使用 ZENML_MCP_PROFILE=legacy。此设置保留针对 ZenML 0.97.0 的
工具名称和架构兼容层。它不会增加对更旧 ZenML 服务版本的支持。仅在
迁移期间使用:legacy 响应可能会暴露比精简工具更多的操作元数据,不过服务端会在
两个配置档中都省略包含凭据的配置和其他敏感字段。
工具注册和写入权限相互独立:
| 配置档 | 策略 | 公布的工具 |
|---|---|---|
compact | read_write | 16 |
compact | read_only | 11 |
legacy | read_write | 57 |
legacy | read_only | 52 |
设置 ZENML_MCP_WRITE_POLICY=read_only,即可从 MCP 发现和分派中移除全部 4 个通用变更工具
以及 trigger_pipeline。资源发现也会省略创建、更新、删除和操作架构。较旧的
ZENML_MCP_READ_ONLY=true 设置仍可使用;无效的策略值会安全地默认进入只读模式。无效的
ZENML_MCP_PROFILE 会导致启动因配置错误而停止。
2.0.0 版本要求 MCP Python SDK 2.2.0 和 ZenML 0.96.4。精简配置档是新的默认配置,
对于调用实体专用工具名称的客户端而言,这是一次不兼容的发现变更。迁移这些客户端时,请设置
ZENML_MCP_PROFILE=legacy,然后将每次调用迁移到通用资源工具。
变更结果分为 completed、accepted 和 unknown。如果某项变更可能已到达 ZenML,服务端不会
重试。对于 accepted 或 unknown 结果,请按照响应中的协调说明操作,再决定是否再次调用。
如果有对应的命名读取工具,请使用该工具。Webhook 创建和密钥轮换可能只会返回一次新的签名密钥;
后续读取将不会包含该密钥。删除架构会说明某项操作是归档元数据、移除元数据、停用正在运行的
资源,还是可能删除已存储的工件数据。
首个 2.0 版本涵盖项目、栈和组件、Flavor、服务、流水线和运行、快照和模板、
部署、工件和版本、模型和版本、标签、连接器、代码仓库、Webhook、触发器、等待条件
以及钩子调用的常规操作。用户、计划、服务连接器类型、密钥和资源请求仅提供
zenml_describe_resources 所示的只读支持。不包括 ZenML Cloud 控制平面管理、
Resource Manager 管理、用户和凭据管理、密钥值的增删改查、连接器登录和验证、
原始 Webhook 事件,以及聚合调试或溯源工具。
通过发现准确的架构,然后调用它,即可启动通用工作流:
zenml_describe_resources(resource_type="pipeline_run", operation="list")
zenml_list_resources(
resource_type="pipeline_run",
filters={"status": "completed", "sort_by": "desc:created"},
page=1,
size=10,
)
两种配置中均可使用提示词和资源。分析提示词、有界资源架构端点以及 most_recent_runs 是 MCP 提示词或资源,而非工具。
运行模板兼容性
ZenML 0.97.0 保留了运行模板 CRUD API。对于新工作流,建议使用快照。便捷创建流水线的功能和基于模板的触发参数已弃用。在旧版配置中,现有客户端仍可使用 get_run_template 和 list_run_templates。
旧版 list_run_templates 输入中的 tag 仍予以保留,以保持架构兼容性,但 ZenML 0.97.0 没有对应的服务端筛选功能。非空值会在调用 SDK 前被拒绝。快照仍支持按标签筛选。
迁移:运行模板 → 快照
为什么要更改? 快照取代了运行模板,成为 ZenML 首选的可运行流水线制品。0.97.0 SDK 仍支持运行模板 CRUD,但新代码应使用快照。
快速迁移指南
| 旧版模式(模板) | 精简模式(快照) |
|---|---|
list_run_templates() | zenml_list_resources(resource_type="snapshot", filters={"runnable": true, "named_only": true}) |
get_run_template(name) | zenml_get_resource(resource_type="snapshot", resource_id=id) |
trigger_pipeline(template_id=...) | trigger_pipeline(snapshot_name_or_id=...) |
示例工作流(快照优先)
1. Discover project context:
→ get_active_project()
2. Find runnable snapshots:
→ zenml_list_resources(resource_type="snapshot", filters={"runnable": true, "named_only": true})
3. Trigger a run:
→ trigger_pipeline(snapshot_name_or_id="my-snapshot")
4. Check deployments:
→ zenml_list_resources(resource_type="deployment", filters={"status": "running"})
→ get_deployment_logs(name_id_or_prefix="my-deployment", tail=100)
注意: get_deployment_logs 返回有界输出(默认 100 行,最多 1000 行,上限为 100KB),且要求已安装相应的部署器集成。
通过仪表板快速设置(推荐)
通过 ZenML 仪表板中的 MCP Settings page 设置 ZenML MCP 服务是最简单的方式。

在 ZenML 仪表板中前往 Settings → MCP,即可获取:
- 针对你的特定服务 URL 和凭据预先配置的代码片段
- 通过深层链接一键安装支持的 IDE
- 适用于 VS Code、Claude Desktop、Cursor、Claude Code、OpenAI Codex 等的复制粘贴配置
- 根据偏好选择 Docker 或 uv 方案
ZenML Pro 用户
MCP Settings 页面支持一键生成个人访问令牌(PAT)。该令牌会自动包含在所有生成的配置代码片段中。
ZenML OSS 用户
- 首先通过 Settings → Service Accounts 创建服务账号令牌
- 将令牌粘贴到 MCP Settings 页面
- 复制为你的 IDE 生成的配置
更倾向于手动设置? 请参阅下方的详细说明。
MCP Apps(实验性)
什么是 MCP Apps? MCP Apps 是 MCP 服务可直接提供给 AI 客户端的交互式 HTML UI。它们会在沙盒 iframe 中呈现,并可双向调用服务工具。详情请参阅官方公告。

此服务包含两个实验性 MCP Apps:
| 应用 | 工具 | 描述 |
|---|---|---|
| 流水线运行仪表板 | open_pipeline_run_dashboard | 交互式表格,展示近期流水线运行的状态、步骤详情和日志 |
| 运行活动图表 | open_run_activity_chart | 柱状图,展示过去 30 天的流水线运行活动及状态细分 |

这些应用是概念验证示例。我们欢迎大家对更多 MCP Apps 提供反馈和贡献。此新功能仍处于早期阶段,其后续发展还有待观察。我们预计未来会更全面地支持它。
支持的客户端
MCP Apps 需要 Streamable HTTP 传输(而非 stdio)。以下客户端目前 支持 MCP Apps:
- ✅ VS Code(Insiders Edition)
- ✅ Goose
- ✅ ChatGPT(即将推出)
- ⚠️ Claude Desktop —— 截至 2026 年 1 月下旬,尚无法渲染 Apps。
- ⚠️ Claude.ai(Web)—— 截至 2026 年 1 月下旬,尚无法渲染 Apps。
注意: 撰写本文时,我们无法对 Claude Desktop 或 Claude.ai 进行全面测试。如果遇到问题,请报告。
使用 Docker 运行 MCP Apps
MCP Apps 使用 Streamable HTTP。请将容器端口绑定到环回地址,并在允许远程访问前,在其前方部署经过身份验证的反向代理或身份感知型访问服务。主机和 Origin 验证可防止 DNS 重绑定,但不会对调用方进行身份验证。
1. 构建并运行 Docker 容器:
docker build -t mcp-zenml:apps .
docker run --rm -d --name mcp-zenml-apps -p 127.0.0.1:8001:8001 \
-e ZENML_STORE_URL="https://your-zenml-server.example.com" \
-e ZENML_STORE_API_KEY="your-api-key" \
-e ZENML_MCP_PROFILE="compact" \
-e ZENML_MCP_WRITE_POLICY="read_write" \
-e ZENML_ACTIVE_PROJECT_ID="your-project-id" \
mcp-zenml:apps --transport streamable-http --host 0.0.0.0 --port 8001 \
--disable-dns-rebinding-protection
2. 配置经过身份验证的远程访问:
创建一个命名的 Cloudflare Tunnel、带访问控制的 Tailscale Funnel,或同等的、经过身份验证的反向代理。将其私有源站指向
http://127.0.0.1:8001,要求公共主机名提供身份凭据或服务凭据,并且只将经过身份验证的请求转发到源站。配置 MCP 客户端使用服务提供商支持的 OAuth 流程或授权标头。
向容器添加 ZenML 凭据前,请确认未经身份验证的请求无法访问 MCP:
curl -i https://mcp.example.com/mcp
响应必须是访问服务提供商返回的 401、403 或登录重定向。JSON-RPC 或 MCP 响应意味着外围防护未生效,必须先修复。
3. 连接经过身份验证的客户端:
{
"servers": {
"ZenML": {
"url": "https://mcp.example.com/mcp",
"type": "http"
}
},
"inputs": []
}
- 请 AI“打开流水线运行仪表板”或“显示运行活动图表”
重要说明:
ZENML_ACTIVE_PROJECT_ID为必需项——未设置时,流水线运行工具将报错:“No project is currently set as active”- 只有在经过身份验证的代理会验证公共主机,且容器端口仍仅绑定到环回地址时,才适合使用
--disable-dns-rebinding-protection - 将 ZenML API 密钥的权限限制在 MCP 客户端所需范围内;对于仅用于检查的客户端,请使用
ZENML_MCP_WRITE_POLICY=read_only
测试与质量保障
本项目包含自动化测试,以确保 MCP 服务始终正常运行:
- 🔄 自动化冒烟测试:通过 GitHub Actions 每 3 天运行一次全面的冒烟测试
- 🚨 创建问题:测试失败时会自动创建 GitHub 问题,并附上详细的调试信息
- ⚡ 快速 CI:使用 UV 和缓存快速安装依赖并运行测试
- 🧪 手动测试:你可以在本地使用
uv run scripts/test_mcp_server.py server/zenml_server.py运行冒烟测试
自动化测试会验证:
- MCP 协议连接与握手
- 服务初始化和工具发现
- 基本工具功能(ZenML 服务可访问时)
- 资源和提示词枚举
- 即使在受限环境中,
diagnose_zenml_setup也会返回结构化诊断信息
无需凭据的 CI 会通过 MCP 协议覆盖每个适配器。PR 和发布 CI 还会在环回地址启动全新的 ZenML 0.97.0 OSS 服务,并运行持久化 CRUD 和同名项目隔离验证。该服务使用临时配置和数据库,作业退出时会将其删除;无需仓库环境、可自托管的运行器或 ZenML 凭据。
ZenML 的本地 OSS 服务会禁用身份验证,其 SQL 存储不支持管道重放或外部部署基础设施。因此,受限访问以及启用了功能的触发器、重放、部署、等待条件和资源请求验证仍属于独立的可选门控测试。它们分别需要设置 ZENML_MCP_RESTRICTED_INTEGRATION=1 和 ZENML_MCP_RESTRICTED_API_KEY,或设置 ZENML_MCP_ACTION_INTEGRATION=1 并在 ZENML_MCP_ACTION_FIXTURE 中提供精确的临时测试夹具 UUID。跳过门控测试并不能证明相应功能已通过测试。操作者可以设置 ZENML_MCP_REQUIRE_COMPLETE_INTEGRATION=1,将缺少可选门控测试视为失败。默认测试运行绝不包含云基础设施配置。
使用 MCP Inspector 调试
如需交互式调试,请使用 MCP Inspector — 这是一款基于 Web 的工具,可让你实时测试 MCP 工具:
# Using .env.local (recommended for development)
cp .env.local.example .env.local # Then edit with your credentials
source .env.local && npx @modelcontextprotocol/inspector \
-e ZENML_STORE_URL=$ZENML_STORE_URL \
-e ZENML_STORE_API_KEY=$ZENML_STORE_API_KEY \
-- uv run server/zenml_server.py
这会打开一个已预填凭据的 Web UI — 只需点击 连接,然后使用 工具 选项卡交互式测试任意工具。
有关更详细的调试说明,请参阅 CLAUDE.md。
隐私与分析
ZenML MCP 服务会收集匿名使用分析数据,以帮助我们改进产品。
我们会追踪:
- 使用了哪些工具以及使用频率
- 错误率和错误类型(仅错误类型,不包含消息)
- 基本环境信息(操作系统、Python 版本,以及是否在 Docker/CI 中运行)
- 会话时长和工具使用模式
我们不会收集:
- 你的 ZenML 服务 URL 或 API 密钥
- 管道名称、模型名称或任何业务数据
- 错误消息或堆栈跟踪
- 任何可识别个人身份的信息
禁用分析:
# Option 1
export ZENML_MCP_ANALYTICS_ENABLED=false
# Option 2
export ZENML_MCP_DISABLE_ANALYTICS=true
用于调试/测试(将事件记录到 stderr,而非发送出去):
export ZENML_MCP_ANALYTICS_DEV=true
Docker 用户须知: 你可以设置 ZENML_MCP_ANALYTICS_ID(必须是有效的 UUID),以便在容器重启后保持匿名 ID 一致。如果未设置该变量,且容器文件系统无法持久保存分析 ID 文件,服务会回退为一个确定性的匿名 UUID,该 UUID 根据 ZENML_STORE_URL 的哈希值生成(URL 本身绝不会作为事件属性发送)。
其他分析选项:
ZENML_MCP_ANALYTICS_SHUTDOWN_TIMEOUT_S— 关闭期间同步刷新分析数据的最长时间(秒;默认值:1.0)
关于关闭跟踪的说明: 关闭事件会在有界超时时间内同步发送,以提高送达可靠性。不过,如果容器被 SIGKILL 终止(例如,执行 docker kill),关闭处理程序将无法运行 — 这是 Docker/操作系统的限制,并非缺陷。
启动验证
你可以启用轻量级启动诊断检查:
# Print warnings but start normally
uv run server/zenml_server.py --startup-validation warn
# Exit non-zero if required setup is missing (useful in Docker/CI)
uv run server/zenml_server.py --startup-validation strict
你也可以通过环境变量设置此项:ZENML_MCP_STARTUP_VALIDATION=warn。
diagnose_zenml_setup 工具也可作为 MCP 工具用于运行时故障排查——即使未安装 ZenML SDK 或缺少环境变量,它也能正常工作。
手动设置
前提条件
你需要能够访问已部署的 ZenML 服务。如果你还没有,可以在 ZenML Pro 注册免费试用,我们会为你管理部署。
**提示:**拥有 ZenML 服务后,请在控制面板中查看 MCP 设置页面,以便轻松完成设置。
**兼容性:**当前版本已针对 ZenML 0.97.0 进行测试。 如果你使用的是较旧版本的 ZenML,请使用此 MCP 服务的早期版本。
你可能还需要在本地安装 uv。详情请参阅
uv 文档。
如果使用 Mac,我们建议通过其安装脚本或 brew 安装。(严格来说,你并不一定需要它,但它能让安装和设置变得简单。)
你还需要在本地某处克隆此仓库:
git clone https://github.com/zenml-io/mcp-zenml.git
MCP 配置文件
MCP 配置文件是一个 JSON 文件,用于告知 MCP 客户端如何连接到你的 MCP 服务。不同的 MCP 客户端使用或指定配置的方式各不相同。两种常用的 MCP 客户端是 Claude Desktop 和 Cursor,下文提供了它们的安装说明。
你需要按以下格式指定 ZenML MCP 服务:
{
"mcpServers": {
"zenml": {
"command": "/usr/local/bin/uv",
"args": ["run", "path/to/server/zenml_server.py"],
"env": {
"LOGLEVEL": "WARNING",
"NO_COLOR": "1",
"ZENML_LOGGING_COLORS_DISABLED": "true",
"ZENML_LOGGING_VERBOSITY": "WARN",
"ZENML_ENABLE_RICH_TRACEBACK": "false",
"ZENML_MCP_PROFILE": "compact",
"ZENML_MCP_WRITE_POLICY": "read_write",
"PYTHONUNBUFFERED": "1",
"PYTHONIOENCODING": "UTF-8",
"ZENML_STORE_URL": "https://your-zenml-server-goes-here.com",
"ZENML_STORE_API_KEY": "your-api-key-here"
}
}
}
}
有四个示例值需要替换:
- 本地安装的
uv的路径(如果你在 Mac 上通过brew安装,前面列出的路径就是对应路径) zenml_server.py文件的路径(连接到 MCP 服务时会运行此文件)。此文件位于此仓库的根目录中。你需要指定该文件的完整准确路径。- ZenML 服务 URL(即 ZenML 服务的 URL。你可以在 ZenML Cloud UI 中找到它)。格式类似于
https://d534d987a-zenml.cloudinfra.zenml.io。 - ZenML 服务 API 密钥(即 ZenML 服务的 API 密钥。你可以在 ZenML Cloud UI 中找到它,也可以阅读这些文档了解如何创建密钥。对于 ZenML MCP 服务,我们建议使用服务账号。)
你可以自由更改运行 MCP 服务 Python 文件的方式,不过使用
uv 可能是最简单的选择,因为它会为你处理环境和依赖项安装。
与 Claude Desktop 配合安装
**快速替代方案:**使用 ZenML 控制面板中的 MCP 设置页面(Settings → MCP),获取预配置的安装说明和 Claude Desktop 深层链接。
你需要安装最新版的 Claude Desktop。
只需打开 Settings 菜单,将此仓库根目录中的 mcp-zenml.mcpb 文件拖到菜单上,即可按照提示完成安装和设置。你需要添加 ZenML 服务 URL 和 API 密钥。
注意:MCP 捆绑包(.mcpb)取代了旧版 Desktop Extensions(.dxt)格式;现有的 .dxt 文件仍可在 Claude Desktop 中使用。
可选:改善 ZenML 工具输出的显示效果
为了更好地查看 ZenML 工具的结果,你可以配置 Claude,以更易读的格式显示 JSON 响应。在 Claude Desktop 中,前往 Settings → Profile,然后在 “What personal preferences should Claude consider in responses?” 部分添加类似以下内容(也可以直接使用这些文字!):
When using zenml tools which return JSON strings and you're asked a question, you might want to consider using markdown tables to summarize the results or make them easier to view!
这将促使 Claude 将 ZenML 工具输出格式化为 Markdown 表格,让信息更易于阅读和理解。
在 Cursor 中安装使用
快速替代方案: ZenML 仪表板中的 MCP Settings 页面(Settings → MCP)可以生成已预填凭据的准确
mcp.json内容。
你需要安装 Cursor。
Cursor 的工作方式与 Claude Desktop 略有不同:你需要针对每个代码仓库指定配置文件。这意味着,如果你想在多个代码仓库中使用 ZenML MCP 服务,就需要在每个仓库中指定配置文件。
要为单个代码仓库进行设置,你需要:
- 在代码仓库的根目录中创建一个
.cursor文件夹 - 在其中创建一个包含上述内容的
mcp.json文件 - 进入 Cursor 设置,点击 ZenML 服务,将其“启用”。
根据我们的经验,有时即使服务正常运行,也会显示红色错误指示标记。你可以在 Cursor 聊天窗口中尝试使用它。如果它无法访问 ZenML 工具,会告知你。
Docker 镜像
你可以将服务作为 Docker 容器运行。该进程通过标准输入/输出进行通信,因此会等待 MCP 客户端连接。通过环境变量传入你的 ZenML 凭据。
预构建镜像(Docker Hub)
拉取最新的多架构镜像:
docker pull zenmldocker/mcp-zenml:latest
带版本号的发行版使用 X.Y.Z 标记:
docker pull zenmldocker/mcp-zenml:2.0.0
使用你的 ZenML 凭据运行(标准输入/输出模式):
docker run -i --rm \
-e ZENML_STORE_URL="https://your-zenml-server.example.com" \
-e ZENML_STORE_API_KEY="your-api-key" \
zenmldocker/mcp-zenml:latest
使用 Docker 的规范 MCP 配置
{
"mcpServers": {
"zenml": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "ZENML_STORE_URL=https://...",
"-e", "ZENML_STORE_API_KEY=ZENKEY_...",
"-e", "ZENML_ACTIVE_PROJECT_ID=...",
"-e", "ZENML_MCP_PROFILE=compact",
"-e", "ZENML_MCP_WRITE_POLICY=read_write",
"-e", "LOGLEVEL=WARNING",
"-e", "NO_COLOR=1",
"-e", "ZENML_LOGGING_COLORS_DISABLED=true",
"-e", "ZENML_LOGGING_VERBOSITY=WARN",
"-e", "ZENML_ENABLE_RICH_TRACEBACK=false",
"-e", "PYTHONUNBUFFERED=1",
"-e", "PYTHONIOENCODING=UTF-8",
"zenmldocker/mcp-zenml:latest"
]
}
}
}
本地构建
在代码仓库根目录中:
docker build -t zenmldocker/mcp-zenml:local .
运行本地构建的镜像:
docker run -i --rm \
-e ZENML_STORE_URL="https://your-zenml-server.example.com" \
-e ZENML_STORE_API_KEY="your-api-key" \
zenmldocker/mcp-zenml:local
MCP Bundles(.mcpb)
本项目使用 MCP Bundles(.mcpb)——Anthropic Desktop Extensions(DXT)的后继格式。MCP Bundles 会将整个 MCP 服务(包括依赖项)打包为单个文件,并提供便捷的配置方式。
关于格式更名的说明:MCP Bundles 取代了旧版 .dxt 格式。Claude Desktop 仍向后兼容现有的 .dxt 文件,但我们现在发布 mcp-zenml.mcpb,并建议今后使用该格式。
代码仓库根目录中的 mcp-zenml.mcpb 文件使用 MCPB 0.4 UV 运行时。
主机将为当前操作系统安装锁定的 Python 依赖项,因此同一个 Bundle 无需嵌入特定平台的原生扩展,即可在 macOS、Windows 和 Linux 上运行。UV 首次解析打包环境时需要网络连接。
Bundle 构建会重复使用已提交的 mcpb-uv.lock,并以离线模式解析其 Python 依赖关系图。Bundle 的依赖项列表来自 pyproject.toml 中的 [project].dependencies。更改该列表后,设置 MCPB_REFRESH_LOCK=1,即可在保留所有仍适用的版本锁定项的同时在线重新解析;设置 MCPB_REFRESH_LOCK=upgrade,则会将所有版本锁定项更新到最新版本。
将 .mcpb 文件拖放到 Claude Desktop 的设置中时,它会自动处理:
- 运行时依赖项安装
- 安全的配置管理
- 跨平台兼容性
- 便捷的设置流程
更多信息请参阅 Anthropic 关于 Desktop Extensions(DXT)的公告,以及其文档中相关的 MCP Bundle 打包指南:https://www.anthropic.com/engineering/desktop-extensions
已发布到 Anthropic MCP Registry
此 MCP 服务已发布到官方 Anthropic MCP Registry,兼容的宿主可以发现它。每次标记版本发布时,我们的 CI 都会使用 GitHub OIDC 通过 Registry 的 mcp-publisher CLI 更新 Registry 条目,因此,你可以直接在支持 Registry 的任何位置安装或发现 ZenML MCP Server(例如 Claude Desktop 的扩展目录)。
- **始终保持最新:**每次发布时,都会使用标记提交中的
manifest.json和server.json刷新 Registry 条目。 - **其他安装方式:**你仍可以通过打包的
.mcpbbundle 在本地安装(见上文),或运行 Docker 镜像。
在此了解有关 Registry 的更多信息:
- Anthropic MCP Registry(社区仓库):https://github.com/modelcontextprotocol/registry
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。