MCP Server for ZenML について
Cursor や Claude Desktop などの MCP クライアントから、ZenML の MLOps および LLMOps パイプライン情報を参照できる MCP サーバーです。ZenML で機械学習や LLM のパイプラインを管理するチーム向けです。compact と legacy の 2 つのプロファイルと、書き込みポリシーの設定を備えています。
主な機能
- 01パイプライン、実行履歴、ステップログの参照
- 02スタック、コンポーネント、サービスコネクターの確認
- 03スナップショット、デプロイメント、モデルバージョンの検索
- 04compact または legacy のツールプロファイルの選択
- 05読み取り専用の書き込みポリシー
- 06スナップショットを指定したパイプライン実行の起動
活用シーン
- 01コーディングクライアントからパイプライン実行の状態と失敗ステップを確認する
- 02モデルバージョンおよびデプロイメントの詳細を調べる
- 03読み取り専用ポリシーで ZenML リソースを安全に閲覧する
MCP 対応
本プロジェクトは MCP サーバーであり、ZenML のリソースをツール、プロンプト、リソースとして MCP クライアントに公開します。設定により変更操作を制限することもできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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 クライアント:サーバーとの 1 対 1 の接続を維持するプロトコルクライアント
- MCP サーバー:標準化されたプロトコルを通じて特定の機能を公開する軽量プログラム
- ローカルデータソース:MCP サーバーが安全にアクセスできる、お使いのコンピューター上のファイル、データベース、サービス
- リモートサービス:MCP サーバーが接続できる、インターネット経由で利用可能な外部システム
ZenML とは?
ZenML は、ML および AI パイプラインの構築と管理を行うためのオープンソースプラットフォームです。データ、モデル、実験を管理するための統一されたインターフェースを提供します。
詳しくは、ZenML のウェブサイトおよびドキュメントをご覧ください。
機能
このサーバーは、ZenML サーバーの主要な読み取り機能にアクセスするための MCP ツールを提供し、次の情報をリアルタイムで取得できます。
主要なエンティティ
- ユーザー - ユーザーアカウントと権限
- スタック - インフラストラクチャの構成
- スタックコンポーネント - 個々のスタックを構成する要素
- フレーバー - 利用可能なコンポーネントの種類
- サービスコネクター - クラウド認証
パイプラインの実行
- パイプライン - パイプラインの定義
- パイプライン実行 - 実行履歴とステータス
- パイプラインステップ - 個々のステップの詳細、コード、ログ
- スケジュール - 自動実行のスケジュール
- アーティファクト - データアーティファクトに関するメタデータ(データそのものではありません)
デプロイとサービング
- スナップショット - 固定されたパイプライン構成(「実行/サービング対象」を定義するアーティファクト)
- デプロイメント - ステータス、URL、ログを含む実行時のサービングインスタンス
- サービス - モデルサービングのエンドポイント
組織と検索
- プロジェクト - ZenML リソースの組織的なコンテナー
- タグ - 検索のための、複数の領域にまたがるメタデータラベル
- ビルド - イメージとコードの情報を含むパイプラインのビルドアーティファクト
モデル
- モデル - ML モデルレジストリのエントリー
- モデルバージョン - バージョン管理されたモデルアーティファクト
互換性 API(移行を推奨)
- パイプライン実行テンプレートは ZenML 0.97.0 でも引き続き利用できますが、新しいワークフローではスナップショットが推奨されます(移行ガイドを参照)
このサーバーでは、スナップショット(推奨)または非推奨のテンプレートベースのトリガーパラメーターを使用して、新しいパイプライン実行をトリガーすることもできます。
注:ユーザーからのフィードバックをもとに、この統合を継続的に改善しています。 ぜひSlack コミュニティに参加して、体験を共有し、 さらなる改善にご協力ください。
ツールプロファイルと書き込みポリシー
デフォルトの compact プロファイルでは、16 個のツールが公開されます。7 個の汎用ツールが、リソースカタログ、読み取り、通常の変更、有限なライフサイクルアクションをカバーします。
| ツール | 目的 |
|---|---|
zenml_describe_resources | 対応するリソースの種類と、制約付き操作スキーマを確認します |
zenml_list_resources | 検証済みのフィルターとページネーションを使用して、1 種類のリソースを一覧表示します |
zenml_get_resource | 必要に応じて親とプロジェクトのスコープを指定し、1 つのリソースを取得します |
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 サーバーバージョンがサポートされるわけではありません。移行中のみ使用してください。レガシーのレスポンス形式は、コンパクトなツールより多くの運用メタデータを公開する場合があります。ただし、サーバーは両方のプロファイルで、認証情報を含む設定やその他の機密フィールドを除外します。
登録と書き込みアクセスは個別に設定されます。
| プロファイル | ポリシー | 公開されるツール |
|---|---|---|
compact | read_write | 16 |
compact | read_only | 11 |
legacy | read_write | 57 |
legacy | read_only | 52 |
ZENML_MCP_WRITE_POLICY=read_only を設定すると、4 つの汎用変更ツールすべてと 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 に到達した可能性がある場合、サーバーはその変更を再試行しません。結果が accepted または unknown の場合は、再度呼び出すかどうかを決める前に、レスポンスに記載された照合手順に従ってください。利用可能な場合は、名前付きの読み取り操作を使用してください。Webhook の作成とシークレットのローテーションでは、新しい署名シークレットが一度だけ返されることがあります。その後の読み取りでは返されません。削除スキーマには、操作によってメタデータがアーカイブされるのか、削除されるのか、稼働中のリソースがプロビジョニング解除されるのか、保存済みのアーティファクトデータが削除される可能性があるのかが記載されています。
最初の 2.0 リリースでは、プロジェクト、スタックとコンポーネント、フレーバー、サービス、パイプラインと実行、スナップショットとテンプレート、デプロイメント、アーティファクトとバージョン、モデルとバージョン、タグ、コネクター、コードリポジトリ、Webhook、トリガー、待機条件、フック呼び出しに関する通常の操作に対応しています。ユーザー、スケジュール、サービスコネクタータイプ、シークレット、リソースリクエストは、zenml_describe_resources に記載された読み取り専用の範囲で対応しています。ZenML Cloud のコントロールプレーン管理、Resource Manager の管理、ユーザーと認証情報の管理、シークレット値の CRUD、コネクターのログインと検証、生の 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 を引き続き利用できます。
レガシーの tag 入力は、スキーマとの互換性のため list_run_templates に残されていますが、ZenML 0.97.0 にはサーバー側で同等のフィルターがありません。null 以外の値は 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 Server をセットアップする最も簡単な方法は、ZenML ダッシュボードの MCP Settings page を使用することです。

ZenML ダッシュボードで Settings → MCP に移動すると、次の項目を確認できます。
- 使用中のサーバー URL と認証情報に合わせて事前設定されたスニペット
- 対応 IDE 用のディープリンクによるワンクリックインストール
- VS Code、Claude Desktop、Cursor、Claude Code、OpenAI Codex などのコピー&ペースト用設定
- 好みに応じた Docker および uv のオプション
ZenML Pro ユーザー
MCP Settings page では、ワンクリックで Personal Access Token(PAT)を生成できます。このトークンは、生成されるすべての設定スニペットに自動的に含まれます。
ZenML OSS ユーザー
- まず、Settings → Service Accounts からサービスアカウントトークンを作成します
- MCP Settings page にトークンを貼り付けます
- IDE 用に生成された設定をコピーします
手動でのセットアップをご希望ですか? 詳しい手順については、以下をご覧ください。
MCP Apps(実験的機能)
MCP Apps とは? MCP Apps は、MCP サーバーが AI クライアントに直接提供できるインタラクティブな HTML UI です。サンドボックス化された iframe 内に表示され、サーバーツールを双方向に呼び出せます。詳しくは公式発表をご覧ください。

このサーバーには、実験的な MCP Apps が 2 つ含まれています。
| アプリ | ツール | 説明 |
|---|---|---|
| パイプライン実行ダッシュボード | 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 を使用します。コンテナのポートはループバックにバインドし、リモートアクセスを許可する前に、認証済みのリバースプロキシまたは ID 認識型アクセスサービスを前段に配置してください。Host と 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 に向け、公開ホスト名へのアクセスに ID またはサービス認証情報を必須とし、認証済みのリクエストのみをオリジンに転送します。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 日ごとに包括的なスモークテストを実行します
- 🚨 Issue の作成:テストが失敗すると、詳細なデバッグ情報を含む GitHub の Issue が自動的に作成されます
- ⚡ 高速な 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 を使用してください。リアルタイムで 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
認証情報が入力済みのウェブ UI が開きます。Connect をクリックし、Tools タブから任意のツールを対話的にテストしてください。
詳しいデバッグ手順については、CLAUDE.md を参照してください。
プライバシーとアナリティクス
ZenML MCP Server は、製品の改善に役立てるため、匿名の使用状況アナリティクスを収集します。
収集する情報:
- 使用されたツールとその使用頻度
- エラー率とエラーの種類(エラーの種類のみ。メッセージは収集しません)
- 基本的な環境情報(OS、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 ユーザーの場合:**コンテナの再起動後も一貫した匿名 ID を維持するには、ZENML_MCP_ANALYTICS_ID(有効な UUID である必要があります)を設定できます。設定されておらず、コンテナのファイルシステムにアナリティクス ID ファイルを永続化できない場合、サーバーは ZENML_STORE_URL のハッシュから決定的に生成した匿名 UUID を使用します(URL 自体がイベントのプロパティとして送信されることはありません)。
その他のアナリティクスオプション:
ZENML_MCP_ANALYTICS_SHUTDOWN_TIMEOUT_S— シャットダウン時にアナリティクスを同期的に送信するための最大待機時間(秒)(デフォルト:1.0)
**シャットダウン時のトラッキングに関する注意:**シャットダウンイベントは、確実に配信できるよう、上限時間を設けて同期的に送信されます。ただし、コンテナが SIGKILL で強制終了された場合(例:docker kill)、シャットダウンハンドラーは実行されません。これは Docker/OS の制限であり、バグではありません。
起動時の検証
軽量な起動時診断チェックを有効にできます。
# 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 Settings ページを確認してください。
互換性: 現在のバージョンは ZenML 0.97.0 でテスト済みです。 古いバージョンの ZenML を使用している場合は、この MCP サーバーの以前のリリースを使用してください。
また、ローカルに uv をインストールする必要がある可能性があります。詳しくは、
uv のドキュメントを参照してください。
インストーラースクリプト、または Mac をお使いの場合は brew からインストールすることをおすすめします。(厳密には必須ではありませんが、インストールとセットアップが簡単になります。)
このリポジトリをローカルの任意の場所にクローンする必要もあります。
git clone https://github.com/zenml-io/mcp-zenml.git
MCP 設定ファイル
MCP 設定ファイルは、MCP クライアントに MCP サーバーへの接続方法を指示する JSON ファイルです。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"
}
}
}
}
置き換える必要のある仮の値は4つあります。
- ローカルにインストールした
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 ページ(Settings → MCP)を使うと、Claude Desktop 用に事前設定されたインストール手順とディープリンクを取得できます。
最新バージョンの Claude Desktop をインストールしてください。
Settings メニューを開き、このリポジトリのルートにある mcp-zenml.mcpb ファイルをメニューにドラッグするだけで、インストールとセットアップの手順が案内されます。ZenML サーバーの URL と API キーを追加する必要があります。
注:MCP バンドル(.mcpb)は旧形式の Desktop Extensions(.dxt)に代わるものです。既存の .dxt ファイルも Claude Desktop で引き続き使用できます。
オプション:ZenML ツールの出力表示を改善する
ZenML ツールの結果をより快適に利用するには、JSON の応答を読みやすい形式で表示するよう Claude を設定できます。Claude Desktop で「設定」→「プロフィール」に移動し、「応答で Claude が考慮すべき個人設定は何ですか?」の欄に、次のような内容を追加してください(以下の文をそのまま使ってもかまいません!)。
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 設定ページ(「設定」→「MCP」)では、認証情報があらかじめ入力された正確な
mcp.jsonの内容を生成できます。
Cursor をインストールしておく必要があります。
Cursor はリポジトリごとに設定ファイルを指定する点で、Claude Desktop とは少し異なります。そのため、複数のリポジトリで ZenML MCP サーバーを使用する場合は、それぞれのリポジトリで設定ファイルを指定する必要があります。
1 つのリポジトリに設定するには、次の手順を行います。
- リポジトリのルートに
.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
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 バンドル(.mcpb)
このプロジェクトでは MCP バンドル(.mcpb)を使用します。これは Anthropic の Desktop Extensions(DXT)の後継です。MCP バンドルは、MCP サーバー全体(依存関係を含む)を、ユーザーが設定しやすい単一のファイルにまとめます。
名称変更に関する注意:MCP バンドルは、以前の .dxt 形式に代わるものです。Claude Desktop は既存の .dxt ファイルとの下位互換性を維持していますが、現在は mcp-zenml.mcpb を配布しており、今後はこちらを使用することを推奨します。
リポジトリのルートにある mcp-zenml.mcpb ファイルは、MCPB 0.4 UV ランタイムを使用します。
ホストは、現在のオペレーティングシステム用に固定された Python 依存関係をインストールするため、プラットフォーム固有のネイティブ拡張機能を埋め込まずに、同じバンドルを macOS、Windows、Linux で使用できます。バンドルされた環境を UV が初めて解決するときには、ネットワークアクセスが必要です。
バンドルのビルドでは、コミット済みの mcpb-uv.lock を再利用し、オフラインモードで Python の依存関係グラフを解決します。バンドルの依存関係リストは、pyproject.toml の [project].dependencies に基づきます。このリストを変更した後、引き続き適合するピンを維持したままオンラインで再解決するには、MCPB_REFRESH_LOCK=1 を設定します。すべてのピンを最新バージョンに更新するには、MCPB_REFRESH_LOCK=upgrade を設定します。
.mcpb ファイルを Claude Desktop の設定画面にドラッグ&ドロップすると、次の処理が自動的に行われます。
- ランタイム依存関係のインストール
- 安全な設定情報の管理
- クロスプラットフォーム対応
- ユーザーが簡単に設定できる手順
詳細については、Anthropic による Desktop Extensions(DXT)の発表と、ドキュメントに記載されている関連の MCP バンドルパッケージングガイダンスをご覧ください:https://www.anthropic.com/engineering/desktop-extensions
Anthropic MCP Registry に公開
この MCP サーバーは公式の Anthropic MCP Registry に公開されており、対応するホストから検出できます。タグ付きリリースごとに、CI が GitHub OIDC を使用してレジストリーの mcp-publisher CLI 経由でレジストリーのエントリーを更新します。これにより、レジストリーに対応している場所(例:Claude Desktop の拡張機能カタログ)から ZenML MCP Server を直接インストールまたは検出できます。
- 常に最新: レジストリーのエントリーは、タグ付きコミットの
manifest.jsonとserver.jsonを使って、リリースごとに更新されます。 - 別のインストール方法: パッケージ化された
.mcpbバンドルを使ってローカルにインストールする方法(上記を参照)や、Docker イメージを実行する方法も引き続き利用できます。
レジストリーの詳細はこちらをご覧ください。
- Anthropic MCP Registry(コミュニティリポジトリー):https://github.com/modelcontextprotocol/registry
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。