ml-lab-mcp
ml-lab-mcp
서버에 배포되는 MCP(Model Context Protocol) 서비스로, 대형 언어 모델이 이 머신을 머신러닝/강화학습 학습 리소스로 사용할 수 있게 해줍니다:
코드 동기화 —
sync_repo(repo_dir, ref?)는 먼저 fetch한 다음 서버의 clone을 fast-forward하고, commit/브랜치/더티 파일/앞서거나 뒤처진 수를 반환하여 실행되는 코드가 사용자가 GitHub에 푸시한 코드와 일치함을 보장합니다. ff만 수행하고 reset은 하지 않으며, 분기(fork) 시 정직하게 오류를 보고합니다.get_repo_state는 조회만 하고 변경하지 않습니다실험 제출 —
submit_experiment는 백그라운드 작업 방식으로 임의의 shell 명령어(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로 관리합니다완료 알림 — 실험은 수 시간 실행될 수 있으며, 종료를 기다리는 두 가지 방법이 있습니다: ①
wait_for_job(job_id, timeout_seconds)서버 측 롱 폴링으로, 작업이 끝나면 즉시 반환하고, 타임아웃되면 현재 상태를 반환하여 이어서 기다릴 수 있습니다 — 이는 클라이언트→서버의 정상적인 MCP 아웃바운드 연결을 사용하므로, Claude를 실행하는 머신은 공인 IP가 필요 없습니다; ②callback_url은 작업 종료 후 서버가 최종 메타데이터를 POST합니다(3회 재시도) — 이 URL은 서버에서 접근 가능해야 하므로 공인 IP가 없는 로컬 머신을 가리키면 안 됩니다. 실제 용도는 ntfy.sh / Bark / Server酱 등 푸시 서비스를 가리켜 "학습 완료"를 휴대폰으로 받는 것입니다결과 회수 — 결과 위치는 호출자가 결정하며(제출한 명령줄에 작성), 범용
list_files(path)/read_file(path)로 경로를 지정해 회수합니다. 서버는 결과 파일을 수집하거나 관리하지 않습니다종료 및 정리 —
cancel_job은 전체 프로세스 그룹에 SIGTERM을 보냅니다 (force=True는 SIGKILL로 변경).delete_job은 종료된 작업의 부기(bookkeeping)를 삭제하고,delete_path는 호출자가 지정한 결과/로그 디렉터리를 재귀적으로 삭제합니다(/, 홈 디렉터리, 서버 부기 루트는 거부). 작업 메타데이터는 디스크에 저장되므로 서버를 재시작해도 기록이 유지됩니다공개망 인증 — HTTP 전송은 Bearer token(
MLLAB_AUTH_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를 참조하세요.
콜백 payload는 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(상수 시간 비교) 한 겹입니다. 공개망 배포 시 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