ml-lab-mcp
ml-lab-mcp
サーバー上にデプロイする MCP(Model Context Protocol)サービス。大モデルがこのマシンを 機械学習/強化学習のトレーニングリソースとして使えるようにする:
コード同期 —
sync_repo(repo_dir, ref?)はサーバー上の clone を fetch してから fast-forward し、commit/ブランチ/ダーティファイル/先行・遅延数を返す。ユーザーが GitHub にプッシュしたコードがそのまま実行されることを保証する。 ff のみで reset は行わず、分岐している場合はその旨を正直にエラー報告する。get_repo_stateは参照のみで変更しない実験の提出 —
submit_experimentは任意のシェルコマンドをバックグラウンドジョブとして 実行し(bash -lc、conda/venv などのログイン環境が有効)、一意のjob_idを返す。uv_projectパラメータで、指定した uv プロジェクト自身の環境内でコマンドを実行 (uv run --project)。アルゴリズムプロジェクトごとにそれぞれの環境を使う。 ジョブメタデータには workdir の git commit/branch/dirty スナップショットを記録し、 後からコードバージョンを検証できる進捗の監視 —
get_job_status(job_id)はelapsed_seconds(経過時間)、progress_ratioとeta_seconds(残り時間。実験が自己申告する step/timestep/episode/epoch 進捗からの線形外挿、または自己申告のeta_secondsを そのまま透過)を返す。get_job_logsでログの末尾を確認。複数の実験を並行実行してもjob_idで一対一に対応するので混同しないトレーニング指標 —
read_tensorboard(logdir, tag?)は event ファイルを直接解析して 「トレーニングの出来はどうか」に答える:まず各 run の scalar tag を列挙し、 次に指定した曲線を取得(均一ダウンサンプリング、latest/min/max を含む)。 TensorBoard プロセスを起動する必要はないTensorBoard サービス —
start_tensorboard(logdir, port?, uv_project?)は 人間が閲覧するためのウェブ版を起動し、URL を返す。stop_tensorboard/list_tensorboardsで管理完了通知 — 実験は数時間かかることがある。終了を待つ方法は2つ: ①
wait_for_job(job_id, timeout_seconds)はサーバー側のロングポーリングで、 ジョブ終了時に即座に返る。タイムアウト時は現在の状態を返すので続けて待てる—— これはクライアント→サーバーの通常の MCP アウトバウンド接続を使うため、 Claude を実行しているマシンに公網(パブリック IP)は不要; ②callback_urlはジョブ終了後にサーバーが最終メタデータを POST する(3回リトライ)。 この URL はサーバーから到達可能でなければならないので、公網のない本機を 指さないこと。実際の用途は ntfy.sh / Bark / Server酱 などのプッシュサービスを 指して、「トレーニング完了」をスマホに通知すること結果の取得 — 結果の場所は呼び出し側が決める(コマンドラインに書く)。 汎用の
list_files(path)/read_file(path)でパスを指定して取得。 サーバーは結果ファイルを収集・管理しない終了とクリーンアップ —
cancel_jobはプロセスグループ全体に SIGTERM (force=Trueで SIGKILL に変更)。delete_jobは終了したジョブの簿記を削除、delete_pathは呼び出し側が指定した結果/ログディレクトリを再帰削除 (/、ホームディレクトリ、サーバーの簿記ルートは拒否)。ジョブメタデータは ディスクに永続化され、サービス再起動後も履歴が残る公網認証 — HTTP トランスポートは Bearer token(
MLLAB_AUTH_TOKEN)を必須とし、 token がない・間違っているリクエストはすべて 401
クイックスタート
cd ml-lab-mcp
uv sync
# 生成一个 token
export MLLAB_AUTH_TOKEN=$(python3 -c 'import secrets; print(secrets.token_urlsafe(32))')
# 启动服务(默认 0.0.0.0:8000,streamable HTTP,路径 /mcp)
uv run ml-lab-mcpMLLAB_AUTH_TOKEN を設定しない場合、HTTP サービスは起動を拒否する(公網デプロイでは認証が必須)。
Related MCP server: secure-cluster-mcp
クライアント接続
Claude Code:
claude mcp add --transport http ml-lab http://<server-ip>:8000/mcp \
--header "Authorization: Bearer <token>"streamable HTTP をサポートする他の MCP クライアントも同様:URL は http://<server-ip>:8000/mcp を指し、
各リクエストに Authorization: Bearer <token> ヘッダーを付ける。
ローカルデバッグは stdio(認証なし)で可能:uv run mcp dev src/ml_lab_mcp/server.py。
典型的な使用フロー(大モデル視点、DRL トレーニングの例)
0. sync_repo(repo_dir="/data/proj", ref="main")
→ 确认返回的 commit 就是用户刚推送的那个;dirty/分叉会如实报告
1. submit_experiment(
command="python train.py --total-timesteps 1000000 --logdir /data/proj/runs/exp7",
workdir="/data/proj", # 是 git 仓库 → 元数据记录 commit
uv_project="/data/proj", # 用该项目自己的 uv 环境
name="ppo baseline",
callback_url="https://ntfy.sh/my-train-topic") # 可选:训练完推送到手机
→ 记下返回的 job_id
2. wait_for_job(job_id, timeout_seconds=60) # 会话内等结束:超时就再调一次续等
get_job_status(job_id) # 跑了多久 elapsed_seconds / 还剩多久 eta_seconds
get_job_logs(job_id) # 看训练日志尾部
read_tensorboard("/data/proj/runs/exp7") # 列 scalar tag
read_tensorboard("/data/proj/runs/exp7", tag="rollout/ep_rew_mean") # 看回报曲线
start_tensorboard("/data/proj/runs/exp7", port=6006) # 给人一个网页 URL
3. 作业结束(回调通知或轮询到 succeeded/failed)后:
list_files("/data/proj/runs/exp7")
read_file("/data/proj/runs/exp7/metrics.json")
4. 不要了就清理(先与用户确认):
cancel_job(job_id, force=True) # 若还在跑
delete_job(job_id) # 删簿记
delete_path("/data/proj/runs/exp7") # 删结果/TensorBoard 日志
stop_tensorboard(6006)ディレクトリと規約
$MLLAB_ROOT (默认 ~/ml-lab)
├── jobs/
│ └── <job_id>/ # 仅作业簿记,不存实验结果
│ ├── meta.json # 命令、uv 项目、git 快照、状态、pid、时间戳、退出码
│ ├── output.log # stdout+stderr 合并日志
│ └── progress.json # 实验自己写入的进度(可选约定)
└── tensorboard/
├── <port>.json # 托管 TensorBoard 的 pid/logdir/url
└── <port>.log # 其运行日志ジョブプロセスには環境変数 JOB_ID、JOB_DIR、PROGRESS_FILE が渡される。
実験スクリプトは規約に従って $PROGRESS_FILE に JSON を書き、
get_job_status はこの進捗を付けて返し、それに基づいて残り時間を推定する:
(step, total_steps)、(timestep, total_timesteps)、(episode, total_episodes)、(epoch, total_epochs) のいずれかのペアを認識して線形外挿する。
スクリプトが直接 eta_seconds を自己申告することもできる。結果ファイルの書き込み先は
完全にコマンドライン引数で決まる。
examples/example_experiment.py を参照。
コールバックのペイロードは meta.json の内容(job_id、status、exit_code など)。
配信結果は callback_status フィールドに記録され、get_job_status で確認できる。
ntfy.sh などのサービスは任意の POST body を受け付け、登録不要で使える:
callback_url に https://ntfy.sh/<任意のトピック名> を指定し、スマホに ntfy App を
入れて同じトピック名を購読すれば通知を受け取れる。
環境変数
変数 | デフォルト値 | 説明 |
| (必須) | HTTP 認証 Bearer token。未設定なら起動拒否 |
|
| ジョブ簿記のルートディレクトリ |
|
| HTTP バインドアドレス |
|
| HTTP ポート |
|
| または |
| (自動検出) | TensorBoard URL に組み込むホスト名/IP |
セキュリティについて
認証は静的な Bearer token 1つ(定数時間比較)。公網デプロイでは HTTPS を推奨: 前面に nginx/caddy リバースプロキシを置いて TLS 終端を行う。token を平文で 公網に流すのは安全ではない。
設計上、token を持つ呼び出し元はサーバー上で任意のコマンド実行・任意のファイルの 読み取り/削除ができる(サービスプロセスのユーザー権限で)。token は厳重に管理し、 低権限の専用アカウントでサービスを実行することを検討すること。
start_tensorboardはデフォルトで0.0.0.0にバインドするが、TensorBoard 自体には 認証がない——公網マシンでそのポートにアクセスできる人は誰でもトレーニング指標を 見られる。気になる場合はファイアウォールでポートを制限するか、TensorBoard を 開かずにread_tensorboardでモデルに伝えさせるか、SSH トンネルを使うこと。
拡張の方向性
GPU スケジューリング/キューイング:
JobManager.submitの前にキューと 並行数の上限を追加し、CUDA_VISIBLE_DEVICESを設定して GPU の割り当てを行う。大ファイルの取得:
read_fileは1回で最大 200 KB(offsetでページング可能)。 大きな checkpoint は rsync/scp か、別途ファイルダウンロードエンドポイントを立てる。複数 token / 権限の階層化:
BearerAuthMiddlewareで単一 token を token テーブルに 置き換えるだけ。コールバック署名:偽造防止が必要なら、コールバックのリクエストヘッダーに HMAC 署名を付けて受信側で検証できるようにする。
テストの実行
uv run pytestThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
AlicenseNot gradedqualityAmaintenanceEnables AI agents to plan, submit, monitor, and manage Kubeflow training jobs through natural language, without needing to learn Kubernetes or the Kubeflow SDK.38Apache 2.0- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to manage SLURM cluster jobs with safety guardrails, including file transfer, job submission, log reading, and remote command execution.1MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to autonomously manage Google Colab GPU sessions, submit and monitor training jobs, and debug/fix issues via an encrypted tunnel without requiring a browser tab.MIT
- AlicenseNot gradedqualityBmaintenanceEnables ML researchers to manage experiments across local and remote AutoDL GPU instances, including experiment creation, training launch, run polling, and report writing via Claude Code.1MIT
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Git-backed platform for skills, tools, and context for AI agents
Remote MCP for Gemini upgrade evals, prompt regressions, output diffs, and eval receipts.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/CyrusTao/ml-lab-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server