从基本工具到工作流定制
入门阶段你掌握了三个基本 MCP tool:list_devices、create_task、get_task。但要真正融入团队工作流,你需要进阶到自定义工作流 + 批量调度。
Step 1:导入自定义工作流模板
iDeviceFarm 的工作流以 JSON 格式定义,结构如下:
{
"workflow_id": "my_custom_flow",
"name": "我的自定义流程",
"slots": [
{"name": "platform", "type": "string", "required": true},
{"name": "content", "type": "string", "required": true}
],
"steps": [
{"op": "launch_app", "app": "com.example.app"},
{"op": "input", "selector": "#input-box", "value": "${content}"},
{"op": "tap", "selector": "#submit-btn"}
]
}导入方式:farm REST API POST /api/workflow/import,传入 JSON 字符串。也可以先在控制台手动编辑测试无误后再导出复用。
Step 2:通过 run_workflow 调用
MCP 提供了 run_workflow(workflow_id, device_id, params) 工具,用法:
import httpx
def run_my_flow(device_id: str, platform: str, content: str):
response = client.call_tool(
"run_workflow",
{
"workflow_id": "my_custom_flow",
"device_id": device_id,
"params": {"platform": platform, "content": content}
}
)
return response.task_id注意 slots.schema 中的 ${variable_name} 引用会在运行时替换为你传入的参数值。这让你可以用同一个模板跑多种任务。
Step 3:批量任务调度
一次向多台设备下发不同任务的场景很常见。你可以并行调用:
# 伪代码:5 台设备同时跑同一工作流
devices = list_devices().result # 获取所有在线设备
for d in devices[:5]:
run_workflow(
workflow_id="batch_post",
device_id=d.id,
params={"platform": d.platform, "content": post_templates[d.index]}
)P1 阶段将增加专门的批量任务调度接口,简化此类操作。
Step 4:Webhook 回调 & 结果推送
不用轮询 get_task,直接设 webhook 地址让系统在任务完成时主动推送结果:
# 创建任务时传入 callback_url
task_id = client.create_task(
workflow_id="my_custom_flow",
device_id="dev_001",
params={"content": "Hello World"},
callback_url="https://your-server.com/webhook/mcp-result"
)webhook payload 格式:
{
"task_id": "abc123",
"status": "succeeded", // or "failed"
"started_at": "2026-09-01T14:30:00Z",
"finished_at": "2026-09-01T14:30:45Z",
"error_message": null,
"logs": [{"step": 1, "op": "launch_app", "ok": true}] // 摘要一句话总结:MCP 不是玩具,是企业级集成基础设施。用好自定义工作流 + webhook 推送,你就能把手机操作无缝嵌入 CI/CD、运营后台或自有平台。想深入了解架构,去 原理架构 看看。