rubenglez

DeviceCloud MCP

Triage failing DeviceCloud runs from your editor

JavaScriptMCPnpm

Get a DeviceCloud API key ↗

DeviceCloud runs your Maestro UI flows on real devices; your CI triggers the runs. When one goes red, the evidence lives in the web dashboard: the fail reason, the failure screenshot, the logs. This MCP server pulls it straight into the conversation so your assistant can read it, find the root cause, and fix the flow or the app code.

Setup is a single config block:

{
  "mcpServers": {
    "devicecloud": {
      "command": "npx",
      "args": ["-y", "devicecloud-mcp"],
      "env": {
        "DEVICE_CLOUD_API_KEY": "your-api-key"
      }
    }
  }
}

The two tools to start with are diagnose_run and suite_health. diagnose_run folds retries per flow, so a flow that failed and then passed is reported as flaky-recovered instead of broken, and it auto-downloads the failure screenshots. suite_health surfaces regressions first, flows that were passing and recently started failing, so you know what’s worth fixing before diving in.

Everything is read-only against the DeviceCloud REST API. Nothing an agent does can trigger a billable run; starting and re-running tests stay with your CI, and cancelling a run stays in the dashboard.

01

Add the config

Drop one JSON block into your MCP client config. The same shape works in Claude Code, Claude Desktop, Cursor, Windsurf, and any client that speaks stdio MCP.

02

Set your API key

Grab a key from the DeviceCloud settings page and pass it as DEVICE_CLOUD_API_KEY. That's the only configuration the server takes.

03

Ask about a failing run

Say "why did the release flow fail?" and the assistant checks for real; fail reasons, screenshots, and pass rates land in the conversation.

Exposed tools

ToolWhat it does
diagnose_runOne-call triage of a run: failed flows, fail reasons, failure-screenshot paths, and a passed/failed/flaky summary
suite_healthClassifies every flow over a lookback window as healthy, flaky, broken, or regression, ranked worst-first
list_uploadsRecent uploads; filter by name, date, limit, offset
get_upload_statusOverall status plus per-flow status and fail reason
get_resultsPer-flow rows with status, fail reason, and duration
get_junit_reportRaw JUnit XML for an upload
get_html_reportDownloads and auto-unzips the HTML report with failure screenshots highlighted
download_artifactsZip of raw artifacts: logs, screenshots, video
list_flow_analyticsPer-flow pass rate and run counts over a lookback window
get_flow_runsRun history for a specific flow file
A Claude Code session using DeviceCloud MCP, calling list_uploads and get_upload_status to find which uploaded test run failed and why