编码 Agent(MCP)
EnvLoop MCP 服务让编码 Agent 直接操作你的项目:浏览数据集,提交带花费上限的 Agent Job 并跟踪它,读取分数、结构化结果和产物。图片以 MCP 图片内容返回,Agent 能直接看到。此端点需要配套的平台更新。
接入
你需要一把项目 API Key。Project automation 预设的 Key 可以使用全部工具;Read only Key 可以读取(包括产物内容),不能提交。el auth login 签发的 Key 权限跟随你的项目角色。
{
"mcpServers": {
"envloop": {
"type": "http",
"url": "https://api.envloop.ai/v1/mcp",
"headers": { "Authorization": "Bearer ${ENVLOOP_API_KEY}" }
}
}
}
在 Claude Code 里,把它保存为项目里的 .mcp.json,或者执行:
claude mcp add --transport http envloop https://api.envloop.ai/v1/mcp \
--header "Authorization: Bearer $ENVLOOP_API_KEY"
# Codex:~/.codex/config.toml(Key 留在环境变量里)
[mcp_servers.envloop]
url = "https://api.envloop.ai/v1/mcp"
bearer_token_env_var = "ENVLOOP_API_KEY"
个人 Key 还要加 X-Workspace-ID 和 X-Project-ID 请求头;项目 Key 自带项目。服务端无状态,返回 JSON。每个工具都立即返回:提交 Job 后拿到 job_id,Agent 再轮询 envloop_job_status。
工具
| 工具 | 作用 | 需要 |
|---|---|---|
envloop_datasets_list | 项目可用的数据集:名称、类型、版本数、可见性、split。 | datasets.read |
envloop_dataset_get | 一个数据集及其版本,或一个修订及一页 Task(名称、digest、task_ref、split)。不返回清单和题目文件。 | datasets.read |
envloop_job_submit | 提交 Agent Job,max_cost_usd 必填。 | jobs.run |
envloop_job_status | 状态、阶段、当前分数和 Trial 计数,适合轮询。 | jobs.read |
envloop_job_result | 分数(score、pass、pass@k、pass^k)、预算与花费、LLM 用量,以及各 Trial 的奖励。 | jobs.read |
envloop_job_aggregate | 通过率、奖励统计、结构化结果各维度与综合分的均值、失败原因、每个 Task 的均值和花费,用来比较不同版本。 | jobs.read |
envloop_job_list | 项目最近的 Agent Job(或判分 Job)。 | jobs.read |
envloop_job_stop | 停止 Job,运行中的 Trial 会停止。 | jobs.stop |
envloop_trial_result | 一个 Trial:状态、奖励、structured_result、输出产物。 | jobs.read |
envloop_trial_artifacts_list | 一页 Trial 产物。 | jobs.read |
envloop_trial_artifact_read | 文本按窗口返回(offset、max_bytes),3 MiB 以内的 PNG、JPEG、GIF、WebP 图片按图片返回,其它文件只返回元数据和下载提示。读取按数据下载计。 | jobs.read 和 artifacts.download |
envloop_regrade_submit | 对已封存的 compose Trial 重新判分:只重跑 verifier,用已发布的奖励集版本,或用各 Task 自带的测试。源 Trial 不变。用 runner 指定具备判分能力的 Runner Revision,用 max_cost_usd 设花费上限。 | jobs.run |
envloop_regrade_result | 每个 Trial 的新旧奖励、被跳过的 Trial 和汇总。 | jobs.read |
产物内容和评审文字由被评测的运行写出,请当作不可信数据。图片只有结构完整、每边不超过 8000 像素时才按图片返回。读取产物按数据下载计:读取进行时,即使只读一小段文本,也会按整个文件大小预留项目当天的下载额度。
一个请求只带一次工具调用,JSON-RPC 批量请求会被拒绝。
Key 不能用的工具会返回 ACCESS_DENIED,并写明缺少的能力。错误码与 HTTP API 一致。
带花费上限提交
envloop_job_submit 在 dataset(name@version,或含 name、version、task_id、split、config、namespace 的对象)、dataset_ref、task_ref 中只取一个,另有 request_id、可选的 runner(name@revision)、profile_name、profile_version、attempts(1 到 100)、tag、params,以及必填的 max_cost_usd。
max_cost_usd限制这个 Job 的模型和沙箱花费(美元)。到达上限后不再启动新 Trial,运行中的 Trial 被取消,Job 以cancelled结束,错误为BUDGET_EXCEEDED。带上限的 Job 出现无法计价的用量时不再启动新 Trial,以cancelled结束,错误为BUDGET_UNMETERED。Job 结果里有budget和cost。max_cost_usd的范围是 0.000001 到 100000。request_id让提交可以安全重试:相同的request_id和参数返回同一个 Job,参数不同会被拒绝。- 这个工具从不在没有上限的情况下提交。不支持 Job 花费上限的平台版本会拒绝这次提交。
示例
可以这样对 Agent 说:
用 profile team/claude-sonnet 跑 tests/hello-world@1,3 次尝试,最多花 5 美元。跑完告诉我通过率和最常见的三个失败原因,再给我看分数最低那个 Trial 的截图产物。
Agent 会依次调用 envloop_job_submit、轮询 envloop_job_status,再调用 envloop_job_aggregate、envloop_trial_artifacts_list 和 envloop_trial_artifact_read。