§ 01
AdaptOrch 服务器的作用
AdaptOrch 通过 Model Context Protocol(MCP)暴露其控制平面,使编码代理能够提交运行、轮询状态、获取产物与追踪,并请求拓扑路由。
该服务器是直接的 JSON-RPC 实现(非 FastMCP)。工具以静态 schema 发布,资源与提示词一并列出,每个工具结果都以 JSON 字符串形式返回在 content[0].text 中。
协议版本默认为 2025-11-25;同时支持 2024-11-05、2025-03-26 与 2025-06-18。
§ 02
快速开始 — 无需安装
控制平面直接通过 HTTPS 提供 MCP 服务。你的代理只需连接一个 URL 并携带 bearer 令牌。无需安装任何包,不需要 Python,也不必常驻本地进程。
1 · 创建密钥
登录后在 adaptorch.com/app/api-keys 生成密钥。密钥以 ado_ 开头。请存放在 shell 环境变量中,不要写进配置文件。
export ADAPTORCH_API_KEY="ado_..."
2 · 先验证端点能响应你
在修改任何配置之前先运行这条命令。若能列出工具,下面所有客户端都能连通;若不能,再怎么调客户端配置也没有用。
curl -sS https://adaptorch.com/mcp \
-H "Authorization: Bearer $ADAPTORCH_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
有效密钥会返回包含 adaptorch_run 的 result.tools 数组。不带密钥时同一请求返回 {"code":-32001,"message":"Missing bearer token"} 与 HTTP 401 — 这个响应本身就证明端点可达。
端点:https://adaptorch.com/mcp · 通过 POST 发送 JSON-RPC。GET 按设计返回 405 — 没有可订阅的 SSE 流。令牌可通过 Authorization: Bearer 或 X-API-Key 传递。
执行还需要你的模型服务商密钥
AdaptOrch API 密钥用于服务认证,并不支付模型调用费用。请在客户端环境中设置 ADAPTORCH_PROVIDER、ADAPTORCH_PROVIDER_MODEL 和 ADAPTORCH_PROVIDER_KEY,并将下方三个 X-Provider 请求头加入 HTTP MCP 配置。token 由模型服务商另行收费。
托管模型执行并不证明仓库测试已经运行。仓库命令检查需要单独配置的验证运行器。请先阅读凭据中的实际证据,再判断检查是否完成。
§ 03
你的 CLI
同一个端点、同一把密钥、六种写法。这些格式并不通用 — 其中三种与大多数文档从 Claude 抄来的写法不同,而键名写错时不会报错,只会表现为客户端始终连不上。
Claude Code — 一条命令
claude mcp add --transport http adaptorch https://adaptorch.com/mcp \
--header "Authorization: Bearer ${ADAPTORCH_API_KEY}" \
--header "X-Provider: ${ADAPTORCH_PROVIDER}" \
--header "X-Provider-Model: ${ADAPTORCH_PROVIDER_MODEL}" \
--header "X-Provider-Key: ${ADAPTORCH_PROVIDER_KEY}"
Cursor — <code>~/.cursor/mcp.json</code>
{
"mcpServers": {
"adaptorch": {
"url": "https://adaptorch.com/mcp",
"headers": { "Authorization": "Bearer ${ADAPTORCH_API_KEY}" }
}
}
}
Codex CLI — <code>~/.codex/config.toml</code>(TOML,不是 JSON)
experimental_use_rmcp_client = true
[mcp_servers.adaptorch]
url = "https://adaptorch.com/mcp"
bearer_token_env_var = "ADAPTORCH_API_KEY"
Gemini CLI — <code>~/.gemini/settings.json</code>(键名为 <code>httpUrl</code>)
{
"mcpServers": {
"adaptorch": {
"httpUrl": "https://adaptorch.com/mcp",
"headers": { "Authorization": "Bearer ${ADAPTORCH_API_KEY}" }
}
}
}
VS Code — <code>.vscode/mcp.json</code>(顶层键为 <code>servers</code>)
{
"servers": {
"adaptorch": {
"type": "http",
"url": "https://adaptorch.com/mcp",
"headers": { "Authorization": "Bearer ${env:ADAPTORCH_API_KEY}" }
}
}
}
Windsurf — <code>~/.codeium/windsurf/mcp_config.json</code>(键名为 <code>serverUrl</code>)
{
"mcpServers": {
"adaptorch": {
"serverUrl": "https://adaptorch.com/mcp",
"headers": { "Authorization": "Bearer ${ADAPTORCH_API_KEY}" }
}
}
}
注意:每段配置都从环境变量读取密钥。切勿把 ado_ 密钥粘贴进会提交的文件。Codex 通过变量名解析令牌,其余客户端则直接插值。
§ 04
自行运行
想用自己的进程,或需要把桥接程序放在内网?直接从 PyPI 安装,需要 Python 3.11+。该包为商业软件:下载本身不授予使用权,使用须有生效的订阅或已签署的协议 — 详见服务条款与随分发包提供的授权文件。
pip install adaptorch-mcp
export ADAPTORCH_CONTROL_PLANE_TOKEN="$ADAPTORCH_API_KEY"
adaptorch-mcp --transport stdio --base-url https://adaptorch.com
把任何支持 stdio 的客户端指向该命令即可。它仍然连接托管控制平面,因此你的密钥与套餐与 § 02 完全一致 — 而 § 02 无需任何安装,仍是最短路径。
注意:没有 npm/npx 封装 — 这是纯 Python 包。若要在自有网络内运行控制平面本身,属于单独的 Enterprise Private Runner 方案,请联系 ingeng2004@gmail.com。
§ 05
工具参考
服务器发布 10 个工具。每个结果都是 content[0].text 中的 JSON 字符串;失败时会置 isError。徽章对应 MCP 注解(只读、破坏性、幂等、开放世界)。
adaptorch_run
向 AdaptOrch 控制平面提交任务负载,可选择等待完成。
WRITEnon-destructivenon-idempotentOPEN-WORLD
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
prompt |
string | conditional | — |
context |
string | no | — |
payload |
object | no | — |
connector_name |
string | no | "mcp" |
synthesis_mode |
string (enum) | no | "robust" |
model |
string | no | — |
trace |
boolean | no | false |
budget_policy |
object | no | — |
wait_for_terminal |
boolean | no | true |
timeout_seconds |
number | no | 120.0 |
poll_interval_seconds |
number | no | 1.0 |
verification_commands |
string[] | no | — (gated) |
prefer_ensemble_singleton |
boolean | no | false |
output_extractor |
string (enum) | no | — |
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "adaptorch_run",
"arguments": { "prompt": "${TASK_PROMPT}", "synthesis_mode": "robust",
"wait_for_terminal": true, "timeout_seconds": 120.0 } } }
// result text -> { "run_id": "${RUN_ID}", "status": "SUCCEEDED",
// "telemetry": { "ensemble": { "selected_model_id": "${MODEL}" } } }
adaptorch_get_run
按 run_id 获取运行摘要。
READ-ONLYnon-destructiveIDEMPOTENTOPEN-WORLD
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
run_id |
string | yes | — |
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": { "name": "adaptorch_get_run", "arguments": { "run_id": "${RUN_ID}" } } }
// result text -> { "run_id": "${RUN_ID}", "status": "RUNNING" }
adaptorch_get_artifacts
按 run_id 获取运行产物。
READ-ONLYnon-destructiveIDEMPOTENTOPEN-WORLD
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
run_id |
string | yes | — |
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call",
"params": { "name": "adaptorch_get_artifacts", "arguments": { "run_id": "${RUN_ID}" } } }
// result text -> { "run_id": "${RUN_ID}", "artifacts": { "${NAME}": "${URL}" } }
adaptorch_list_runs
列出最近的 AdaptOrch 控制平面运行,最新的排在前面。
READ-ONLYnon-destructivenon-idempotentOPEN-WORLD
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
limit |
integer (1–100) | no | 20 |
status |
string | no | — |
{ "jsonrpc": "2.0", "id": 4, "method": "tools/call",
"params": { "name": "adaptorch_list_runs", "arguments": { "limit": 20, "status": "SUCCEEDED" } } }
// result text -> { "runs": [ ... ], "page": 1, "page_size": 20 }
adaptorch_get_traces
按 run_id 获取运行的执行追踪。
READ-ONLYnon-destructiveIDEMPOTENTOPEN-WORLD
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
run_id |
string | yes | — |
{ "jsonrpc": "2.0", "id": 5, "method": "tools/call",
"params": { "name": "adaptorch_get_traces", "arguments": { "run_id": "${RUN_ID}" } } }
// result text -> { "run_id": "${RUN_ID}", "traces": [ ... ] }
adaptorch_cancel_run
按 run_id 请求取消正在执行的运行。
WRITEDESTRUCTIVEnon-idempotentOPEN-WORLD
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
run_id |
string | yes | — |
{ "jsonrpc": "2.0", "id": 6, "method": "tools/call",
"params": { "name": "adaptorch_cancel_run", "arguments": { "run_id": "${RUN_ID}" } } }
// result text -> { "run_id": "${RUN_ID}", "status": "CANCELLED" }
adaptorch_route_topology
使用本地 TopologyRouter 为任务 DAG 推荐执行拓扑(不调用控制平面)。
READ-ONLYnon-destructiveIDEMPOTENTclosed-world
| 参数 | 类型 | 必填 | 默认值 |
|---|---|---|---|
subtasks |
object[] | yes | — |
dependencies |
object[] | no | — |
{ "jsonrpc": "2.0", "id": 7, "method": "tools/call",
"params": { "name": "adaptorch_route_topology",
"arguments": { "subtasks": [ { "id": "t1" }, { "id": "t2" } ],
"dependencies": [ { "from": "t1", "to": "t2" } ] } } }
// result text -> { "topology": "${TOPOLOGY}", "stages": [ ["t1"], ["t2"] ],
// "features": { "node_count": 2, "edge_count": 1 } }
adaptorch_server_metrics
返回脱敏后的 MCP 工具调用计数与延迟分位数。
READ-ONLYnon-destructivenon-idempotentclosed-world
无参数。
{ "jsonrpc": "2.0", "id": 8, "method": "tools/call",
"params": { "name": "adaptorch_server_metrics", "arguments": {} } }
// result text -> { "tool_calls": 0, "tool_errors": 0, "p50_latency_ms": 0.0, "p95_latency_ms": 0.0 }
adaptorch_capabilities
返回支持的综合模式、连接器与服务器能力。
READ-ONLYnon-destructiveIDEMPOTENTclosed-world
无参数。
{ "jsonrpc": "2.0", "id": 9, "method": "tools/call",
"params": { "name": "adaptorch_capabilities", "arguments": {} } }
// result text -> { "synthesis_modes": ["paper","robust","robust_lite","stable_hybrid","fourier_aggressive"], ... }
adaptorch_plan_catalog
返回当前 AdaptOrch 托管云套餐目录:Starter $0、Pro $39、Team $149。
READ-ONLYnon-destructiveIDEMPOTENTOPEN-WORLD
无参数。
{ "jsonrpc": "2.0", "id": 10, "method": "tools/call",
"params": { "name": "adaptorch_plan_catalog", "arguments": {} } }
// result text -> { "schemaVersion": "adaptorch.cloud_plan_catalog.v1", "plans": [ ... ] }
§ 06
鉴权
stdio 依赖本地信任模型加控制平面令牌。HTTP+SSE 额外提供 bearer 鉴权、来源允许列表、协议版本校验与负载大小上限。
| 环境变量 | 默认值 | 用途 |
|---|---|---|
ADAPTORCH_CONTROL_PLANE_TOKEN |
required | Control-plane bearer token (stdio + http) |
ADAPTORCH_CONTROL_PLANE_BASE_URL |
http://127.0.0.1:8000 |
Control-plane base URL |
ADAPTORCH_MCP_HTTP_AUTH_TOKEN |
falls back to control-plane token | Bearer expected on HTTP requests |
ADAPTORCH_MCP_ALLOWED_ORIGINS |
localhost, 127.0.0.1, ::1 | Allowed Origin header values |
ADAPTORCH_MCP_MAX_PAYLOAD_SIZE_BYTES |
1048576 |
Max HTTP request body (else 413) |
ADAPTORCH_MCP_ALLOW_VERIFICATION_COMMANDS
|
off | Gate for verification_commands |
HTTP 响应:缺失或无效 bearer 令牌返回 401,来源不被允许返回 403,负载超过上限返回 413。令牌使用 hmac.compare_digest 比较,且从不写入日志。
§ 07
工作流
以下三种常见流程覆盖了大多数代理集成场景。
1 · 运行并收集
调用 adaptorch_run 并带上 wait_for_terminal,然后用 adaptorch_get_run、adaptorch_get_artifacts 与 adaptorch_get_traces 读取结果。
{ "name": "adaptorch_run",
"arguments": { "prompt": "${TASK_PROMPT}", "wait_for_terminal": true } }
// then
{ "name": "adaptorch_get_artifacts", "arguments": { "run_id": "${RUN_ID}" } }
2 · 预先路由 DAG
adaptorch_route_topology 在本地计算推荐拓扑 — 它不会调用控制平面。
{ "name": "adaptorch_route_topology",
"arguments": { "subtasks": [ { "id": "t1" }, { "id": "t2" } ],
"dependencies": [ { "from": "t1", "to": "t2" } ] } }
3 · 运维
用 adaptorch_list_runs 列出近期运行,用 adaptorch_cancel_run 停止正在执行的运行。adaptorch_run_prompt 与 adaptorch_get_run_prompt 提示词封装了这两条路径。
§ 08
故障排查
- 找不到启动器:请使用
adaptorch-mcp控制台脚本或scripts/run_adaptorch_mcp.sh。 - 缺少令牌:设置
ADAPTORCH_CONTROL_PLANE_TOKEN,或传入--api-token。 - 分帧不匹配:stdio 使用换行分隔的 JSON-RPC;请勿混用 Content-Length 分帧。
- HTTP 401 / 403:检查 bearer 令牌与 Origin 允许列表。
- HTTP 413:负载超过大小上限;请调高上限或缩小请求体。
- verification_commands 被拒绝:该数组会按允许列表校验;请移除不被允许的命令。
- 冒烟测试:
GET /mcp/health与GET /mcp/sse?once=true。
§ 09