ZenML

официальный

Взаимодействуйте с вашими MLOps и LLMOps пайплайнами через ваш ZenML MCP сервер

Что можно делать с ZenML MCP?

  • Обнаружение схем ресурсов — Перед выполнением запроса узнайте, какие типы ресурсов и операции поддерживаются, с помощью zenml_describe_resources.
  • Список ресурсов и фильтрация — Просматривайте запуски пайплайнов, развёртывания, снимки или модели с проверенными фильтрами и постраничной выдачей через zenml_list_resources.
  • Просмотр отдельного ресурса — Получайте ресурс по идентификатору, указывая родительский ресурс и область проекта, если это требуется, с помощью zenml_get_resource.
  • Запуск пайплайна — Запускайте выполнение на основе снимка, готового к запуску, при необходимости переопределяя параметры шагов, с помощью trigger_pipeline.
  • Просмотр журналов и кода шагов — Получайте журналы шагов с ограничением объёма (используйте tail для просмотра последних записей) или исходный код шагов с помощью get_step_logs и get_step_code.
  • Диагностика настройки — Запустите diagnose_zenml_setup, чтобы получить структурированный результат диагностики даже при отсутствии ZenML SDK или переменных окружения.

Документация

MCP-сервер для ZenML

Trust Score

Этот проект реализует сервер Model Context Protocol (MCP) для взаимодействия с API ZenML.

ZenML MCP Server

Что такое MCP?

Model Context Protocol (MCP) — это открытый протокол, стандартизирующий способы предоставления контекста большим языковым моделям (LLM) приложениями. Он работает как «порт USB-C для приложений ИИ» — предоставляет стандартизированный способ подключения моделей ИИ к различным источникам данных и инструментам.

MCP использует архитектуру клиент-сервер, в которой:

  • Хосты MCP: программы, например Claude Desktop или IDE, которым нужен доступ к данным через MCP
  • Клиенты MCP: клиенты протокола, поддерживающие соединения 1:1 с серверами
  • Серверы MCP: легковесные программы, предоставляющие определенные возможности через стандартизированный протокол
  • Локальные источники данных: файлы, базы данных и службы на вашем компьютере, к которым серверы MCP могут безопасно обращаться
  • Удаленные службы: внешние системы, доступные через интернет, к которым могут подключаться серверы MCP

Что такое ZenML?

ZenML — это платформа с открытым исходным кодом для создания и управления конвейерами ML и ИИ. Она предоставляет единый интерфейс для управления данными, моделями и экспериментами.

Дополнительные сведения см. на сайте ZenML и в нашей документации.

Возможности

Сервер предоставляет инструменты MCP для доступа к основным функциям чтения сервера ZenML, позволяя получать актуальную информацию о следующих объектах:

Основные сущности

  • Пользователи — учетные записи и разрешения пользователей
  • Стеки — конфигурации инфраструктуры
  • Компоненты стека — отдельные строительные блоки стека
  • Варианты — доступные типы компонентов
  • Коннекторы служб — аутентификация в облаке

Выполнение конвейеров

  • Конвейеры — определения конвейеров
  • Запуски конвейеров — история и состояние выполнения
  • Шаги конвейеров — сведения об отдельных шагах, код и журналы
  • Расписания — расписания автоматических запусков
  • Артефакты — метаданные артефактов данных (не сами данные)

Развертывание и обслуживание

  • Снимки — зафиксированные конфигурации конвейеров (артефакт «что запускать/обслуживать»)
  • Развертывания — экземпляры обслуживания во время выполнения с состоянием, URL и журналами
  • Службы — конечные точки обслуживания моделей

Организация и поиск

  • Проекты — организационные контейнеры для ресурсов ZenML
  • Теги — сквозные метки метаданных для поиска
  • Сборки — артефакты сборки конвейеров со сведениями об образе и коде

Модели

  • Модели — записи реестра моделей ML
  • Версии моделей — версионированные артефакты моделей

API совместимости (рекомендуется миграция)

  • Шаблоны запусков конвейеров доступны в ZenML 0.97.0, однако для новых рабочих процессов предпочтительны снимки (см. руководство по миграции)

Сервер также позволяет запускать новые конвейеры с помощью снимков (предпочтительный способ) или устаревшего параметра запуска на основе шаблона.

Примечание: мы постоянно улучшаем эту интеграцию на основе отзывов пользователей. Присоединяйтесь к нашему сообществу 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Выполнение разрешенного действия жизненного цикла или связи без повторных попыток

Остаются девять специализированных инструментов, поскольку они предоставляют диагностику, активный контекст, потоковые журналы или код, выполнение конвейеров либо интерактивное приложение:

  • diagnose_zenml_setup
  • get_active_user и get_active_project
  • trigger_pipeline
  • get_step_logs, get_step_code и get_deployment_logs
  • open_pipeline_run_dashboard и open_run_activity_chart

get_step_logs возвращает не более 50,000 записей, начиная с самых старых, с флагом possibly_truncated, а также note, указывающий, какие записи отсутствуют и почему. Передайте tail, чтобы получить только самые новые записи. На серверах ZenML 0.97+ выполняется постраничное чтение из хранилища журналов; в версии 0.96 используется старый конечный адрес с одним запросом.

Используйте ZENML_MCP_PROFILE=legacy, если существующий клиент по-прежнему зависит от старых имен, специфичных для сущностей, например list_pipeline_runs. Это сохраняет проверенный слой совместимости имен инструментов и схем для ZenML 0.97.0. Он не добавляет поддержку более старых версий сервера ZenML. Используйте его только во время миграции: устаревшие формы ответов могут раскрывать больше операционных метаданных, чем компактные инструменты, хотя сервер исключает из обоих профилей конфигурацию с учетными данными и другие конфиденциальные поля.

Регистрация и доступ на запись не зависят друг от друга:

ПрофильПолитикаДоступные инструменты
compactread_write16
compactread_only11
legacyread_write57
legacyread_only52

Установите ZENML_MCP_WRITE_POLICY=read_only, чтобы удалить все четыре универсальных инструмента изменения и trigger_pipeline из обнаружения и диспетчеризации MCP. Обнаружение ресурсов также не включает схемы создания, обновления, удаления и действий. Настройка 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. Для принятого или неизвестного результата следуйте инструкциям по сверке в ответе, прежде чем решать, повторять ли вызов. Используйте именованный запрос чтения, если он доступен. Создание вебхука и ротация секрета могут однократно вернуть новый секрет подписи; последующие чтения его не показывают. В схемах удаления указано, архивирует ли операция метаданные, удаляет ли метаданные, выводит ли из эксплуатации активный ресурс или может удалить сохраненные данные артефакта.

Первый выпуск 2.0 охватывает обычные операции с проектами, стеками и компонентами, вариантами, службами, конвейерами и запусками, снимками и шаблонами, развертываниями, артефактами и версиями, моделями и версиями, тегами, коннекторами, репозиториями кода, вебхуками, триггерами, условиями ожидания и вызовами хуков. Пользователи, расписания, типы коннекторов служб, секреты и запросы ресурсов доступны только для чтения, как показано в zenml_describe_resources. Не поддерживаются администрирование плоскости управления ZenML Cloud, администрирование Resource Manager, управление пользователями и учетными данными, CRUD операций со значениями секретов, вход в коннекторы и их проверка, необработанные события вебхуков, а также агрегированные инструменты отладки и анализа происхождения данных.

Начните универсальный рабочий процесс с обнаружения точной схемы, а затем вызовите ее:

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 сохраняются API CRUD для шаблонов запусков. Для новых рабочих процессов предпочтительны снимки. Удобное создание конвейеров и параметр запуска на основе шаблона объявлены устаревшими. В устаревшем профиле get_run_template и list_run_templates остаются доступными для существующих клиентов.

Устаревший входной параметр tag по-прежнему присутствует в list_run_templates для совместимости схемы, но в ZenML 0.97.0 нет эквивалентного фильтра на стороне сервера. Ненулевое значение отклоняется до вызова SDK. Фильтрация снимков по тегам по-прежнему доступна.

Миграция: шаблоны запусков → снимки

Почему произошло изменение? Снимки заменили шаблоны запусков в качестве предпочтительного исполняемого артефакта конвейера в ZenML. SDK версии 0.97.0 по-прежнему поддерживает 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)

Чтобы переопределить параметры при запуске исполняемого снимка, передайте конфигурацию запуска ZenML (сам снимок при этом не изменяется):

trigger_pipeline(
    snapshot_name_or_id="my-snapshot",
    run_configuration={
        "steps": {"train": {"parameters": {"learning_rate": 0.01}}},
        "enable_cache": False,
    },
)

Для статических снимков переопределяйте параметры шагов, как показано выше. Переопределения run_configuration={"parameters": {...}} верхнего уровня задают параметры функции конвейера и поддерживаются только для динамических снимков; ZenML отклоняет их для статических снимков.

Примечание: get_deployment_logs возвращает ограниченный объем данных (по умолчанию 100 строк, максимум 1000, не более 100KB) и требует установленной соответствующей интеграции развертывателя.

Быстрая настройка через панель управления (рекомендуется)

Самый простой способ настроить сервер MCP ZenML — воспользоваться страницей Настройки MCP на панели управления ZenML.

MCP Settings Page

Перейдите в раздел Настройки → MCP на панели управления ZenML, чтобы получить:

  • Предварительно настроенные фрагменты для URL вашего сервера и учетных данных
  • Установка одним щелчком через ссылки для поддерживаемых IDE
  • Конфигурации для копирования и вставки для VS Code, Claude Desktop, Cursor, Claude Code, OpenAI Codex и других
  • Варианты Docker и uv на ваш выбор

Пользователи ZenML Pro

На странице настроек MCP можно создать Personal Access Token (PAT) одним щелчком. Токен автоматически включается во все создаваемые фрагменты конфигурации.

Пользователи ZenML OSS

  1. Сначала создайте токен учетной записи службы в разделе Настройки → Учетные записи служб
  2. Вставьте токен на страницу настроек MCP
  3. Скопируйте созданную конфигурацию для своей IDE

Предпочитаете настроить вручную? См. подробные инструкции ниже.

Приложения MCP (экспериментальная функция)

Что такое приложения MCP? Приложения MCP — это интерактивные HTML-интерфейсы, которые серверы MCP могут напрямую предоставлять клиентам ИИ. Они отображаются в изолированных iframe и могут двунаправленно вызывать инструменты сервера. Полное описание см. в официальном объявлении.

Run Activity Chart

Этот сервер включает два экспериментальных приложения MCP:

ПриложениеИнструментОписание
Панель запусков конвейеровopen_pipeline_run_dashboardИнтерактивная таблица последних запусков конвейеров с состоянием, сведениями о шагах и журналами
Диаграмма активности запусковopen_run_activity_chartСтолбчатая диаграмма активности запусков конвейеров за последние 30 дней с разбивкой по состояниям

Pipeline Runs Dashboard

Эти приложения включены в качестве примеров для проверки концепции. Мы приветствуем отзывы и вклад в разработку новых приложений MCP. Эта новая функция пока находится на раннем этапе, и нам предстоит увидеть, как она будет развиваться. В будущем мы планируем обеспечить более полную поддержку.

Поддерживаемые клиенты

Для приложений MCP требуется транспорт Streamable HTTP (не stdio). В настоящее время приложения MCP поддерживают следующие клиенты:

  • ✅ VS Code (Insiders Edition)
  • ✅ Goose
  • ✅ ChatGPT (скоро появится)
  • ⚠️ Claude Desktop — по состоянию на конец января 2026 года приложения еще не отображаются.
  • ⚠️ Claude.ai (веб-версия) — по состоянию на конец января 2026 года приложения еще не отображаются.

Примечание: На момент написания мы не смогли тщательно протестировать Claude Desktop или Claude.ai. Если возникнут проблемы, сообщите о них.

Запуск приложений MCP с Docker

Приложения MCP используют Streamable HTTP. Привяжите порт контейнера к loopback-интерфейсу и перед разрешением удаленного доступа разместите перед ним аутентифицированный обратный прокси или службу доступа с учетом идентификации. Проверка Host и Origin защищает от DNS-rebinding, но не аутентифицирует вызывающих.

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": []
}
  • Попросите ИИ «открыть панель запусков конвейеров» или «показать диаграмму активности запусков»

Важные примечания:

  • Требуется ZENML_ACTIVE_PROJECT_ID — без него инструменты запусков конвейеров завершатся ошибкой «No project is currently set as active»
  • --disable-dns-rebinding-protection подходит только в том случае, если аутентифицированный прокси проверяет публичный хост, а порт контейнера доступен только через loopback
  • Ограничьте ключ API ZenML разрешениями, необходимыми MCP-клиенту; для клиентов, которым нужен только просмотр данных, используйте ZENML_MCP_WRITE_POLICY=read_only

Тестирование и контроль качества

В этом проекте предусмотрено автоматизированное тестирование, которое помогает убедиться, что MCP-сервер продолжает работать:

  • 🔄 Автоматические дымовые тесты: комплексный дымовой тест запускается каждые 3 дня с помощью GitHub Actions
  • 🚨 Создание задач: при сбое тестов автоматически создаются задачи GitHub с подробной отладочной информацией
  • ⚡ Быстрый CI: для быстрой установки зависимостей и тестирования используется UV с кэшированием
  • 🧪 Ручное тестирование: дымовой тест можно запустить локально с помощью uv run scripts/test_mcp_server.py server/zenml_server.py

Автоматизированные тесты проверяют:

  • Подключение по протоколу MCP и рукопожатие
  • Инициализацию сервера и обнаружение инструментов
  • Базовую функциональность инструментов (если сервер ZenML доступен)
  • Перечисление ресурсов и промптов
  • diagnose_zenml_setup возвращает структурированную диагностику даже в ограниченных средах

CI без учётных данных проверяет каждый адаптер через протокол MCP. CI для PR и релизов также запускает новый сервер ZenML 0.97.0 OSS на loopback-адресе и проверяет сохранённые операции CRUD и изоляцию проектов с одинаковыми именами. Сервер использует временную конфигурацию и базу данных, которые удаляются при завершении задания; доступ к среде репозитория, self-hosted runner или учётные данные ZenML не требуются.

Локальный OSS-сервер ZenML отключает аутентификацию, а его SQL-хранилище не поддерживает повторный запуск конвейеров или внешнюю инфраструктуру развёртывания. Поэтому проверки ограниченного доступа и функции запуска, повторного запуска, развёртывания, условий ожидания и запросов ресурсов остаются отдельными необязательными этапами. Для них требуется ZENML_MCP_RESTRICTED_INTEGRATION=1 с ZENML_MCP_RESTRICTED_API_KEY либо ZENML_MCP_ACTION_INTEGRATION=1 с точными UUID одноразовых фикстур из ZENML_MCP_ACTION_FIXTURE соответственно. Пропуск этапа из-за отсутствия разрешающего параметра не означает, что соответствующие возможности прошли проверку. Оператор может задать ZENML_MCP_REQUIRE_COMPLETE_INTEGRATION=1, чтобы превратить отсутствие разрешающего параметра в ошибку. Подготовка облачной инфраструктуры никогда не входит в стандартный запуск тестов.

Отладка с помощью MCP Inspector

Для интерактивной отладки используйте MCP Inspector — веб-инструмент, позволяющий проверять инструменты 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

Откроется веб-интерфейс с уже заполненными учётными данными — просто нажмите Connect и перейдите на вкладку Tools, чтобы интерактивно проверить любой инструмент.

Более подробные инструкции по отладке см. в CLAUDE.md.

Конфиденциальность и аналитика

Сервер ZenML MCP собирает анонимную аналитику использования, чтобы помочь нам улучшить продукт.

Мы отслеживаем:

  • Какие инструменты используются и как часто
  • Частоту и типы ошибок (только тип ошибки, без сообщений)
  • Основную информацию о среде (ОС, версия Python и запуск в Docker/CI)
  • Длительность сеанса и закономерности использования инструментов

Мы НЕ собираем:

  • URL сервера ZenML или ключ 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), чтобы сохранять постоянный анонимный идентификатор при перезапуске контейнера. Если не задать его и файловая система контейнера не сможет сохранять файл с идентификатором аналитики, сервер будет использовать детерминированный анонимный 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 для диагностики во время выполнения — он работает, даже если SDK ZenML не установлен или переменные среды отсутствуют.

Настройка вручную

Предварительные требования

Вам потребуется доступ к развёрнутому серверу ZenML. Если у вас его нет, можно зарегистрироваться для бесплатного пробного периода на ZenML Pro, и мы возьмём развёртывание на себя.

Совет: после получения доступа к серверу ZenML откройте страницу настроек MCP на панели управления — это самый простой способ настроить подключение.

Совместимость: текущая версия протестирована с ZenML 0.97.0. Если вы используете более старую версию ZenML, установите предыдущий выпуск этого MCP-сервера.

Вам также, вероятно, потребуется локально установить uv. Дополнительную информацию см. в документации uv. Рекомендуем установить его с помощью скрипта установки или через brew, если вы используете Mac. (Технически он не обязателен, но упрощает установку и настройку.)

Также потребуется клонировать этот репозиторий в локальную папку:

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"
            }
        }
    }
}

Если задан ZENML_STORE_API_KEY, MCP-сервер хранит учётные данные ZenML в памяти и не читает и не обновляет учётные данные, сохранённые в zenml login. Это относится к прямому запуску Python, расширениям MCPB и Docker. Подключения без ключа API по-прежнему могут использовать сохранённый вход в терминале. После изменения ключа API перезапустите MCP-сервер; новый чат сам по себе может повторно использовать уже работающий процесс сервера.

Необходимо заменить четыре фиктивных значения:

  • путь к локально установленному uv (указанный выше путь соответствует Mac, если программа установлена через brew)
  • путь к файлу zenml_server.py (этот файл будет запускаться при подключении к MCP-серверу). Он находится в корне этого репозитория. Необходимо указать его полный точный путь.
  • URL сервера ZenML (URL вашего сервера ZenML. Его можно найти в интерфейсе ZenML Cloud). Он будет выглядеть примерно так: https://d534d987a-zenml.cloudinfra.zenml.io.
  • ключ API сервера ZenML (ключ API вашего сервера ZenML. Его можно найти в интерфейсе ZenML Cloud или прочитать эту документацию, чтобы узнать, как его создать. Для сервера ZenML MCP рекомендуем использовать сервисную учётную запись.)

Вы можете изменить способ запуска файла Python MCP-сервера, но, вероятно, проще всего будет использовать uv, поскольку он самостоятельно настраивает среду и устанавливает зависимости.

Установка для использования с Claude Desktop

Быстрый вариант: откройте страницу настроек MCP на панели управления ZenML (Settings → MCP), чтобы получить готовые инструкции по установке и ссылки для Claude Desktop.

Необходимо установить последнюю версию Claude Desktop.

Просто откройте меню Settings и перетащите файл mcp-zenml.mcpb из корня этого репозитория в меню. Он проведёт вас через процесс установки и настройки. Вам потребуется добавить URL сервера ZenML и ключ 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

Быстрый вариант: страница настроек MCP на панели управления ZenML (Settings → MCP) может сгенерировать точное содержимое mcp.json с уже заполненными учётными данными.

Необходимо установить Cursor.

Cursor немного отличается от Claude Desktop: файл конфигурации задаётся отдельно для каждого репозитория. Это значит, что для использования сервера ZenML MCP в нескольких репозиториях потребуется указать файл конфигурации в каждом из них.

Чтобы настроить его для одного репозитория:

  • создайте папку .cursor в корне репозитория
  • создайте в ней файл mcp.json с указанным выше содержимым
  • откройте настройки Cursor и нажмите на сервер ZenML, чтобы «включить» его.

По нашему опыту, иногда отображается красный индикатор ошибки, хотя сервер работает. Проверить это можно в чате Cursor. Он сообщит, удалось ли ему получить доступ к инструментам ZenML.

Образ Docker

Сервер можно запустить в контейнере Docker. Процесс взаимодействует через stdio, поэтому он будет ожидать подключения MCP-клиента. Передайте учётные данные ZenML через переменные среды.

Готовые образы (Docker Hub)

Загрузите последнюю версию образа для нескольких архитектур:

docker pull zenmldocker/mcp-zenml:latest

Версии с тегами выпусков обозначаются как X.Y.Z:

docker pull zenmldocker/mcp-zenml:2.0.0

Запустите образ с учётными данными ZenML (режим stdio):

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

Каноническая конфигурация MCP с использованием Docker

{
  "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 (.mcpb)

В этом проекте используются пакеты MCP (.mcpb) — преемник Desktop Extensions (DXT) от Anthropic. Пакеты MCP объединяют целый MCP-сервер (включая зависимости) в один файл с удобной настройкой.

Примечание о переименовании: пакеты MCP заменяют прежний формат .dxt. Claude Desktop сохраняет обратную совместимость с существующими файлами .dxt, но теперь мы распространяем mcp-zenml.mcpb и рекомендуем использовать его в дальнейшем.

Файл mcp-zenml.mcpb в корне репозитория использует среду выполнения MCPB 0.4 UV. Хост устанавливает закреплённые зависимости Python для текущей операционной системы, поэтому один и тот же пакет работает в macOS, Windows и Linux без встроенных платформозависимых нативных расширений. При первом разрешении зависимостей пакета через UV требуется доступ к сети. Сборки bundle повторно используют зафиксированный mcpb-uv.lock и разрешают граф зависимостей Python в автономном режиме. Список зависимостей bundle берётся из [project].dependencies в pyproject.toml. После изменения этого списка задайте 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

Этот MCP-сервер опубликован в официальном реестре Anthropic MCP и доступен для поиска совместимым хостам. При каждом выпуске с тегом наша CI обновляет запись в реестре с помощью CLI mcp-publisher и GitHub OIDC, поэтому вы можете устанавливать или находить ZenML MCP Server напрямую везде, где поддерживается реестр (например, в каталоге Extensions в Claude Desktop).

  • Всегда актуальная версия: запись в реестре обновляется с каждым выпуском на основе manifest.json и server.json коммита с тегом.
  • Альтернативные способы установки: вы по-прежнему можете установить пакет локально с помощью bundle .mcpb (см. выше) или запустить образ Docker.

Подробнее о реестре: