Skip to content

zenml-io/mcp-zenml

MCP Developer Tools

An MCP server that exposes ZenML API capabilities as standardized tools for interacting with ML pipelines and resources.

Python Latest v1.5.1 · 2mo ago Security brief →

Features

  • Exposes read‑only access to ZenML core entities (users, stacks, models, artifacts).
  • Provides pipeline execution tools: list/run snapshots, trigger runs, view logs.
  • Offers organization utilities: projects, tags, builds and their details.
  • Supports deployment management: query and monitor serving instances.
  • Includes experimental interactive dashboards for run activity.

Recent releases

View all 7 releases →
v1.5.0 New feature
⚠ Upgrade required
  • Supported MCP clients: VS Code Insiders, Goose and other implementations of the MCP Apps specification
  • To disable DNS rebinding protection (if required), pass `--disable-dns-rebinding-protection` to HTTP transport
Security fixes
  • XSS prevention via escaping status labels, using `textContent` for error rendering, and avoiding inline handlers on copy buttons
  • Timer leak mitigation with cleanup in `callServerToolSafe()` finally blocks
  • Circuit breaker recovery ensuring retry button resets state flags
Notable features
  • Pipeline Runs Dashboard (`open_pipeline_run_dashboard`) with server-side pagination, expandable step details and logs
  • Run Activity Chart (`open_run_activity_chart`) showing daily run counts as status-colored stacked bars
Full changelog

MCP Apps 🎨

This release introduces MCP Apps — interactive HTML UIs that render directly inside supported MCP clients (VS Code Insiders, Goose, and others that support the MCP Apps specification).

New Apps

  • Pipeline Runs Dashboard (open_pipeline_run_dashboard) — Interactive table of recent pipeline runs with status indicators, expandable step details with logs, server-side pagination, and filtering by pipeline name or status

  • Run Activity Chart (open_run_activity_chart) — SVG bar chart showing daily pipeline run counts over the last 30 days with status-colored stacked bars (green = completed, red = failed, amber = other) and hover tooltips

Both apps are self-contained single-file HTML apps using the @modelcontextprotocol/ext-apps SDK. They fetch data dynamically from the MCP server via callServerTool().

Security Hardening

  • XSS prevention: status labels escaped in dashboard summary, error rendering uses textContent instead of innerHTML, copy buttons use data-* attributes instead of inline handlers
  • Timer leak prevention: callServerToolSafe() cleans up setTimeout via finally blocks
  • Circuit breaker recovery: retry button properly resets serverToolCallsEnabled and consecutiveFailures
  • DNS rebinding protection: requires explicit --disable-dns-rebinding-protection flag for HTTP transport

Other Changes

  • ZenMLFastMCP subclass for injecting _meta (including ui.resourceUri) on tools and resources
  • list_apps resource for discovering available MCP Apps
  • Dockerfile updated to include server/ui/ directory
  • Smoke tests cover both new open_* tools

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.4.0...v1.5.0

What's Changed

  • Add MCP Apps: Pipeline Runs Dashboard and Run Activity Chart by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/36

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.4.0...v1.5.0

v1.4.0 Breaking risk
⚠ Upgrade required
  • Compatibility note: ZenML >= 0.93.0 is recommended; older versions should use earlier MCP server releases.
Notable features
  • Structured JSON via `structuredContent` channel for typed, schema‑validated responses
  • Hardened error detection using full shape validation (`{"error": {"tool","message","type"}}`)
  • Improved analytics preserving structured error types and robust smoke tests with explicit timeout handling
Full changelog

Structured Tool Outputs

All MCP tools now return structured output via the MCP structuredContent channel, with auto-generated outputSchema for each tool. Previously, tools returned JSON-encoded strings as plain text — valid but not machine-parseable without extra deserialization.

What this means in practice:

  • MCP clients that support structuredContent (the current spec) get typed, schema-validated JSON objects directly
  • Older clients still work — FastMCP automatically includes a serialized JSON TextContent fallback alongside structured output
  • Tools that genuinely return text (easter_egg, get_step_code) remain as plain text content

Other improvements in this release:

  • Hardened error detection: Structured error envelopes use full shape validation ({"error": {"tool", "message", "type"}}) to avoid false positives when successful results contain an "error" field
  • Better analytics: Error types from structured envelopes are now preserved in analytics instead of a generic "ToolReturnedError" label
  • Robust smoke tests: Tests now check structuredContent, handle both camelCase and snake_case MCP field names, and have explicit TimeoutError handling with increased timeouts for CI stability
  • Compatibility note: ZenML >= 0.93.0 is recommended. For older ZenML versions, use earlier MCP server releases

Migration notes

This is a non-breaking change for LLM-based consumers (Claude, GPT, etc.) — they receive the same information via the text fallback. Programmatic clients gain the new structuredContent field they didn't have before. The 16 list tools that previously returned invalid Python repr() output (single-quoted strings) now return valid JSON.

What's Changed

  • chore(deps): bump the all-actions group with 3 updates by @dependabot[bot] in https://github.com/zenml-io/mcp-zenml/pull/34
  • Migrate all MCP tools to structured output (structuredContent) by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/35

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.3.0...v1.4.0

What's Changed

  • chore(deps): bump the all-actions group with 3 updates by @dependabot[bot] in https://github.com/zenml-io/mcp-zenml/pull/34
  • Migrate all MCP tools to structured output (structuredContent) by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/35

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.3.0...v1.4.0

v1.3.0 Mixed
Notable features
  • Add zizmor GitHub Actions security linting
  • Add `ty` type checking for Python code
  • Artifact version commands
Full changelog

What's Changed

  • feat(security): add zizmor GitHub Actions security linting by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/27
  • chore(deps): bump the all-actions group with 4 updates by @dependabot[bot] in https://github.com/zenml-io/mcp-zenml/pull/28
  • Add ty type checking for Python code by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/29
  • Artifact version commands by @Spotchi in https://github.com/zenml-io/mcp-zenml/pull/30
  • Detect tool error strings in smoke test by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/32
  • Improve error detection in smoke test by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/33

New Contributors

  • @dependabot[bot] made their first contribution in https://github.com/zenml-io/mcp-zenml/pull/28
  • @Spotchi made their first contribution in https://github.com/zenml-io/mcp-zenml/pull/30

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.2.0...v1.3.0

What's Changed

  • feat(security): add zizmor GitHub Actions security linting by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/27
  • chore(deps): bump the all-actions group with 4 updates by @dependabot[bot] in https://github.com/zenml-io/mcp-zenml/pull/28
  • Add ty type checking for Python code by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/29
  • Artifact version commands by @Spotchi in https://github.com/zenml-io/mcp-zenml/pull/30
  • Detect tool error strings in smoke test by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/32
  • Improve error detection in smoke test by @strickvl in https://github.com/zenml-io/mcp-zenml/pull/33

New Contributors

  • @dependabot[bot] made their first contribution in https://github.com/zenml-io/mcp-zenml/pull/28
  • @Spotchi made their first contribution in https://github.com/zenml-io/mcp-zenml/pull/30

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.2.0...v1.3.0

v1.2.0 Breaking risk
⚠ Upgrade required
  • Deprecation warnings will be emitted when using run template APIs; migrate to snapshot equivalents as per the migration guide.
  • Updated documentation includes a detailed migration path from Run Templates to Snapshots.
Breaking changes
  • Run templates deprecated; `get_run_template`, `list_run_templates`, and `trigger_pipeline(template_id=...)` are removed in favor of `get_snapshot`, `list_snapshots`, and `trigger_pipeline(snapshot_name_or_id=...)`.
Notable features
  • `get_deployment`, `list_deployments`, `get_deployment_logs` for deployment discovery and log retrieval
  • `get_snapshot`, `list_snapshots` with status filters (runnable, deployable, deployed)
  • Organization tools: `get_active_project`, `get_project`, `list_projects`, `get_tag`, `list_tags`, `get_build`, `list_builds`
Full changelog

ZenML MCP Server v1.2.0 — Full Deployment Observability 🚀

This release significantly expands the MCP server's capabilities, adding 12 new tools across 5 entity types. Your AI coding assistant can now understand the full ZenML lifecycle — from pipeline configs to deployed services.

✨ New Features

Deployment & Serving Tools

  • get_deployment / list_deployments — Discover what's running, check status and URLs
  • get_deployment_logs — Debug deployments with bounded log retrieval (safe defaults: 100 lines, 100KB max)

Snapshot Tools (Replaces Run Templates)

  • get_snapshot / list_snapshots — Work with frozen pipeline configurations
  • Filter by runnable, deployable, deployed status for easy discovery

Organization Tools

  • get_active_project / get_project / list_projects — Multi-project support
  • get_tag / list_tags — Discover and filter by tags (prod, staging, etc.)
  • get_build / list_builds — Inspect pipeline builds and images

⚠️ Deprecations

Run Templates are deprecated — use Snapshots instead:

  • get_run_templateget_snapshot
  • list_run_templateslist_snapshots
  • trigger_pipeline(template_id=...)trigger_pipeline(snapshot_name_or_id=...)

The deprecated tools still work but now return deprecation warnings.

📚 Documentation

  • Completely restructured README with categorized tool inventory
  • Added migration guide for Run Templates → Snapshots
  • Updated CLAUDE.md with architecture notes and tool taxonomy

🧪 Testing

  • Expanded smoke tests from 4 to 9 safe tools
  • All 45 tools verified working

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.1.1...v1.2.0

v1.1.1 Bug fix
⚠ Upgrade required
  • Pull the latest image (zenmldocker/mcp-zenml:latest or :1.1.1) to obtain the fix.
Full changelog

🐛 Bug Fix

This release fixes a critical bug in v1.1.0 where the Docker image failed to start.

What was fixed

The v1.1.0 release introduced analytics support but the Dockerfile was not updated to include the new zenml_mcp_analytics.py module. This caused the container to crash on startup with:

ModuleNotFoundError: No module named 'zenml_mcp_analytics'

Changes

  • Include zenml_mcp_analytics.py in Docker image
  • Include VERSION file in Docker image (used by analytics)
  • Add Docker build verification to PR tests to prevent similar issues

Upgrade

If you were affected by the v1.1.0 bug, simply pull the latest image:

docker pull zenmldocker/mcp-zenml:latest
# or
docker pull zenmldocker/mcp-zenml:1.1.1

Full Changelog: https://github.com/zenml-io/mcp-zenml/compare/v1.1.0...v1.1.1

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
44
Forks
13
Languages
Python HTML Shell

Community & Support

Beta — feedback welcome: [email protected]