Last month a team wanted to wire phone operations into their own system. The three beginner MCP tools could not cover it: list_devices, create_task, and get_task. They needed their own workflows, and they needed to send work to several devices at once.
Import your own workflow
iEasyRun workflows are defined in JSON, with this structure:
{
"workflow_id": "my_custom_flow",
"name": "My Custom Flow",
"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"}
]
}
Import goes through the farm REST API, POST /api/workflow/import, with the JSON string. You can also edit it by hand in the console, get a trial run working, and then export it for reuse.
Call it with parameters
MCP provides 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
${variable_name} in slots.schema is replaced at runtime with the parameters you pass in. The same template can run different tasks.
Send to several devices at once
When you dispatch different tasks to several devices at once, you can call them in parallel:
# Pseudocode: 5 devices run the same workflow at once
devices = list_devices().result # all online devices
for d in devices[:5]:
run_workflow(
workflow_id="batch_post",
device_id=d.id,
params={"platform": d.platform, "content": post_templates[d.index]}
)
A dedicated batch task scheduling API will be added in the P1 phase, to simplify this kind of call.
Push the result with a webhook when it finishes
If you do not want to poll get_task, include a webhook address when you create the task. When the task finishes, the system pushes the result:
# Pass callback_url when creating the task
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 format:
{
"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}] // summary
A custom workflow plus a webhook can connect phone operations to CI/CD, an operations console, or your own platform. The architecture is in how it works.
Deep Integration
Want To Embed Phone Control Into Your Systems?
MCP integration is free; configuration docs available after download.