Back to MCP Servers

Zenml

An MCP server to connect with your [ZenML](https://www.zenml.io) MLOps and LLMOps pipelines

developer-toolsllm
By zenml-io
4814Updated 1 week agoPythonMIT

Installation

npx -y mcp-zenml

Configuration

{
  "mcpServers": {
    "mcp-zenml": {
      "command": "npx",
      "args": ["-y", "mcp-zenml"]
    }
  }
}

How to use

  1. Run the installation command above (if needed)
  2. Open your Claude Code settings file (~/.claude/settings.json)
  3. Add the configuration to the mcpServers section
  4. Restart Claude Code to apply changes

MCP Server for ZenML

Trust Score

This project implements a Model Context Protocol (MCP) server for interacting with the ZenML API.

ZenML MCP Server

What is MCP?

The Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to Large Language Models (LLMs). It acts like a "USB-C port for AI applications" - providing a standardized way to connect AI models to different data sources and tools.

MCP follows a client-server architecture where:

  • MCP Hosts: Programs like Claude Desktop or IDEs that want to access data through MCP
  • MCP Clients: Protocol clients that maintain 1:1 connections with servers
  • MCP Servers: Lightweight programs that expose specific capabilities through the standardized protocol
  • Local Data Sources: Your computer's files, databases, and services that MCP servers can securely access
  • Remote Services: External systems available over the internet that MCP servers can connect to

What is ZenML?

ZenML is an open-source platform for building and managing ML and AI pipelines. It provides a unified interface for managing data, models, and experiments.

For more information, see the ZenML website and our documentation.

Features

The server provides MCP tools to access core read functionality from the ZenML server, providing a way to get live information about:

Core Entities

  • Users - user accounts and permissions
  • Stacks - infrastructure configurations
  • Stack Components - individual stack building blocks
  • Flavors - available component types
  • Service Connectors - cloud authentication

Pipeline Execution

  • Pipelines - pipeline definitions
  • Pipeline Runs - execution history and status
  • Pipeline Steps - individual step details, code, and logs
  • Schedules - automated run schedules
  • Artifacts - metadata about data artifacts (not the data itself)

Deployment & Serving

  • Snapshots - frozen pipeline configurations (the "what to run/serve" artifact)
  • Deployments - runtime serving instances with status, URL, and logs
  • Services - model serving endpoints

Organization & Discovery

  • Projects - organizational containers for ZenML resources
  • Tags - cross-cutting metadata labels for discovery
  • Builds - pipeline build artifacts with image and code info

Models

  • Models - ML model registry entries
  • Model Versions - versioned model artifacts

Deprecated (migration recommended)

The server also allows you to trigger new pipeline runs using snapshots (preferred) or run templates (deprecated).

Note: We're continuously improving this integration based on user feedback. Please join our Slack community to share your experience and help us make it even better!

Available Tools

The MCP server exposes the following tools, grouped by category:

Pipeline Execution (New in v1.2)

ToolDescription
get_snapshotGet a frozen pipeline configuration by name/ID
list_snapshotsList snapshots with filters (runnable, deployable, deployed, tag)
get_deploymentGet a deployment's runtime status and URL
list_deploymentsList deployments with filters (status, pipeline, tag)
get_deployment_logsGet bounded logs from a deployment (tail=100 default, max 1000)
trigger_pipelineTrigger a pipeline run (prefer snapshot_name_or_id parameter)

Organization (New in v1.2)

ToolDescription
get_active_projectGet the currently active project
get_projectGet project details by name/ID
list_projectsList all projects
get_tagGet tag details (exclusive, colors)
list_tagsList tags with filters (resource_type)
get_buildGet build details (image, code embedding)
list_buildsList builds with filters (is_local, contains_code)

Core Entities

ToolDescription
get_user, list_users, get_active_userUser management
get_stack, list_stacksStack configurations
get_stack_component, list_stack_componentsStack components
get_flavor, list_flavorsComponent flavors
get_service_connector, list_service_connectorsCloud connectors
get_pipeline_run, list_pipeline_runsPipeline runs
get_run_step, list_run_stepsStep details
get_step_logs, get_step_codeStep logs and source code
list_pipelines, get_pipeline_detailsPipeline definitions
get_schedule, list_schedulesSchedules
list_artifactsArtifact metadata
list_secretsSecret names (not values)
get_service, list_servicesModel services
get_model, list_modelsModel registry
get_model_version, list_model_versionsModel versions

Interactive Apps (Experimental)

ToolDescription
open_pipeline_run_dashboardOpen interactive pipeline runs dashboard (MCP App)
open_run_activity_chartOpen 30-day run activity bar chart (MCP App)

Analysis Tools

ToolDescription
stack_components_analysisAnalyze stack component usage
recent_runs_analysisAnalyze recent pipeline runs
most_recent_runsGet N most recent runs

Diagnostics

ToolDescription
diagnose_zenml_setupDiagnose server setup (env vars, SDK, connectivity, auth). Works even when misconfigured.

Deprecated Tools

ToolReplacement
get_run_templateUse get_snapshot instead
list_run_templatesUse list_snapshots instead
trigger_pipeline(template_id=...)Use trigger_pipeline(snapshot_name_or_id=...)

Migration: Run Templates → Snapshots

Why the change? ZenML evolved its "runnable pipeline artifact" concept. Run Templates are now deprecated wrappers that internally just point to Snapshots. New code should use Snapshots directly.

Quick Migration Guide

Old Pattern (Templates)New Pattern (Snapshots)
list_run_templates()list_snapshots(runnable=True, named_only=True)
get_run_template(name)get_snapshot(name, include_config_schema=True)
trigger_pipeline(template_id=...)trigger_pipeline(snapshot_name_or_id=...)

Example Workflow (Snapshot-First)

1. Discover project context:
   → get_active_project()

2. Find runnable snapshots:
   → list_snapshots(runnable=True, named_only=True)

3. Trigger a run:
   → trigger_pipeline(pipeline_name_or_id="my-pipeline", snapshot_name_or_id="my-snapshot")

4. Check deployments:
   → list_deployments(status="running")
   → get_deployment_logs(name_id_or_prefix="my-deployment", tail=100)

Note: get_deployment_logs returns bounded output (default 100 lines, max 1000, capped at 100KB) and requires the appropriate deployer integration to be installed.

Quick Setup via Dashboard (Recommended)

The easiest way to set up the ZenML MCP Server is through your ZenML dashboard's MCP Settings page.

MCP Settings Page

Navigate to Settings → MCP in your ZenML dashboard to get:

  • Pre-configured snippets for your specific server URL and credentials
  • One-click installation via deep links for supported IDEs
  • Copy-paste configurations for VS Code, Claude Desktop, Cursor, Claude Code, OpenAI Codex, and more
  • Docker and uv options based on your preference

ZenML Pro Users

The MCP Settings page lets you generate a Personal Access Token (PAT) with a single click. The token is automatically included in all generated configuration snippets.

ZenML OSS Users

  1. First create a service account token via Settings → Service Accounts
  2. Paste the token into the MCP Settings page
  3. Copy the generated configuration for your IDE

Prefer manual setup? See the detailed instructions below.

MCP Apps (Experimental)

What are MCP Apps? MCP Apps are interactive HTML UIs that MCP servers can serve directly into AI clients. They render in sandboxed iframes and can call server tools bidirectionally. See the official announcement for full details.

Run Activity Chart

This server includes two experimental MCP Apps:

AppToolDescription
Pipeline Runs Dashboardopen_pipeline_run_dashboardInteractive table of recent pipeline runs with status, step details, and logs
Run Activity Chartopen_run_activity_chartBar chart of pipeline run activity over the last 30 days with status breakdown

Pipeline Runs Dashboard

These apps are included as proof-of-concept examples. We welcome feedback and contributions for more MCP Apps. It is still early days for this new feature so we'll have to see how it evolves. We expect to support it more fully in the future.

Supported Clients

MCP Apps require Streamable HTTP transport (not stdio). The following clients currently support MCP Apps:

  • VS Code (Insiders Edition)
  • Goose
  • ChatGPT (launching soon)
  • ⚠️ Claude Desktop -- as of late January 2026, doesn't yet render Apps.
  • ⚠️ Claude.ai (web) — as of late January 2026, doesn't yet render Apps.

Note: We were unable to test thoroughly with Claude Desktop or Claude.ai at the time of writing. If you encounter issues, please report them.

Running MCP Apps with Docker

MCP Apps require Streamable HTTP transport and a publicly reachable URL (for cloud-hosted clients like Claude.ai). The simplest setup uses Docker + Cloudflare tunnel:

1. Build and run the Docker container:

docker build -t mcp-zenml:apps .

docker run --rm -d --name mcp-zenml-apps -p 8001:8001 \
  -e ZENML_STORE_URL="https://your-zenml-server.example.com" \
  -e ZENML_STORE_API_KEY="your-api-key" \
  -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. Start a Cloudflare tunnel (for cloud clients):

npx cloudflared tunnel --url http://localhost:8001

This prints a public URL like https://random-words.trycloudflare.com.

3. Connect your client:

  • In Claude Desktop or other clients, add the MCP server with URL: https://random-words.trycloudflare.com/mcp e.g.:
{
	"servers": {
		"ZenML": {
			"url": "https://USE-YOUR-OWN-URL.trycloudflare.com/mcp",
			"type": "http"
		}
	},
	"inputs": []
}
  • Ask the AI to "open the pipeline runs dashboard" or "show the run activity chart"

Important notes:

  • ZENML_ACTIVE_PROJECT_ID is required — without it, pipeline run tools will fail with "No project is currently set as active"
  • The --disable-dns-rebinding-protection flag is needed when running behind reverse proxies (cloudflared, ngrok) — it's safe when the proxy handles security
  • The tunnel URL changes on each restart — update your client integration accordingly

Testing & Quality Assurance

This project includes automated testing to ensure the MCP server remains functional:

  • 🔄 Automated Smoke Tests: A comprehensive smoke test runs every 3 days via GitHub Actions
  • 🚨 Issue Creation: Failed tests automatically create GitHub issues with detailed debugging information
  • ⚡ Fast CI: Uses UV with caching f

View source on GitHub