DOC-MCP-001 · 开发者

AdaptOrch 服务器

通过 Model Context Protocol 将 AdaptOrch 控制平面连接到编码代理:提交运行、轮询状态、获取产物与追踪,并进行拓扑路由。

服务器
adaptorch-mcp · 0.1.0
协议
MCP 2025-11-25
传输
stdio · http+sse
联系方式
ingeng2004@gmail.com

§ 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_runresult.tools 数组。不带密钥时同一请求返回 {"code":-32001,"message":"Missing bearer token"} 与 HTTP 401 — 这个响应本身就证明端点可达。

端点:https://adaptorch.com/mcp · 通过 POST 发送 JSON-RPC。GET 按设计返回 405 — 没有可订阅的 SSE 流。令牌可通过 Authorization: BearerX-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 的客户端指向该命令即可。它仍然连接托管控制平面,因此你的密钥与套餐与 §&nbsp;02 完全一致 — 而 §&nbsp;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/healthGET /mcp/sse?once=true