Skip to content

Tools Reference ​

Every tool the MCP server exposes, with its parameters and return shape.

All tools return pretty-printed JSON as their text payload. Failures come back as an error result the agent can read and react to — a failing tool never tears down the server, so an agent can recover and retry.

WARNING

The MCP server is a new, beta capability. The tool surface may change.

dcd_list_devices ​

Discover the devices, OS versions, and Maestro versions available to your organisation. Agents should call this before dcd_run_cloud_test so they pass valid device values.

Takes no parameters.

Returns { ios, android, androidPlay, maestro }, where each platform maps an OS version to its supported device list. See Devices & OS Versions and Maestro Versions.

dcd_list_runs ​

List recent flow uploads for your organisation, most recent first.

ParameterTypeDescription
namestringFilter by upload name. Supports a * wildcard, e.g. nightly-*
fromstringOnly uploads created on or after this ISO 8601 date, e.g. 2024-01-01
tostringOnly uploads created on or before this ISO 8601 date
limitintegerMaximum uploads to return, 1–100 (default 20)
offsetintegerUploads to skip, for pagination (default 0)

Returns { uploads: [{ id, name, created_at, consoleUrl }], total, limit, offset }. Use a returned id with dcd_get_status or dcd_download_artifacts.

dcd_get_status ​

Get the status and per-test results of a single upload. This is the polling primitive: after an async dcd_run_cloud_test, call this until status leaves PENDING / QUEUED / RUNNING.

ParameterTypeDescription
uploadIdstringUUID of the upload, as returned by dcd_run_cloud_test or dcd_list_runs
namestringName of the upload to look up

Provide exactly one of uploadId or name — passing both, or neither, is an error.

Returns { status, name, createdAt, tests: [{ name, status, durationSeconds, failReason }] }.

dcd_download_artifacts ​

Download a completed run's artifacts zip (videos, logs and screenshots) to local disk, plus a formatted report if you ask for one. The artifacts zip is always downloaded; report adds a report on top of it. It reads cloud state and writes local files, so it stays available in read-only mode.

ParameterTypeDescription
uploadIdstringRequired. UUID of the upload to download artifacts for
typeALL | FAILEDWhich tests to include artifacts for (default ALL)
artifactsPathstringWhere to write the artifacts zip (default ./artifacts.zip)
reportjunit | allure | htmlAlso download a formatted report of this type
reportPathstringWhere to write the report (defaults by type: report.xml for junit, otherwise report.html). The html report is a ZIP, so give it a .zip path

Returns { uploadId, artifactsPath, reportPath, warnings }. A non-empty warnings array means a download could not be produced — most often because the run has no results yet. An empty array means success. See Artifacts & Downloads and Report Formats.

dcd_run_cloud_test ​

Submit a Maestro flow, or a directory of flows, to run on DeviceCloud.

WARNING

This tool consumes test credits. It's annotated as destructive so clients can prompt before calling it, and it's hidden entirely in read-only mode.

ParameterTypeDescription
flowFilestringRequired. Path to a Maestro .yaml/.yml flow, or a directory of flows
appFilestringPath to a local app binary — .apk, .app, or .zip. Mutually exclusive with appBinaryId
appBinaryIdstringID of a previously uploaded binary. Mutually exclusive with appFile
iosVersionstringiOS version, e.g. 17
iosDevicestringiOS device, e.g. iphone-14
androidApiLevelstringAndroid API level, e.g. 34
androidDevicestringAndroid device, e.g. pixel-10
googlePlaybooleanUse a Google Play-enabled Android image
namestringA name for this run
envstring[]Environment variables as KEY=VALUE strings
includeTagsstring[]Only run flows with these tags
excludeTagsstring[]Skip flows with these tags
excludeFlowsstring[]Flow paths/patterns to exclude
maestroVersionstringPin a specific Maestro version
retryintegerAuto-retry failed tests, 0–2
runnerTypedefault | m4 | m1 | gpu1 (deprecated) | cpu1Runner type (default default).
prioritylow | normal | highRun priority (default normal). Reorders only your organisation's own queued runs.
configFilestringPath to a workspace config
ignoreShaCheckbooleanForce re-upload of the binary even if an identical one already exists
encryptbooleanEncrypt the binary, flows and env values on your machine before upload. Omit it to follow DCD_ENCRYPT, then the default, which is on; pass false to upload them unencrypted. See Data Encryption
dryRunbooleanPreview which flows would run, without submitting
waitbooleanBlock until the run completes instead of returning immediately (default false)
waitTimeoutSecondsintegerMax seconds to wait when wait is true, 30–3600 (default 600). A flow with extended runtime can run for up to 20 minutes, so raise this when the run includes one

You must provide either appFile or appBinaryId — not both, and not neither. Use dcd upload or a previous run to get a reusable appBinaryId.

Async by default ​

By default the tool returns as soon as the run is submitted:

json
{ "uploadId": "...", "consoleUrl": "...", "status": "PENDING", "tests": [ ... ] }

Poll dcd_get_status with that uploadId until the status is terminal. This is the recommended shape for agents — it keeps the tool call short and avoids a long-blocking request.

Set wait: true to block instead. The tool polls every 10 seconds up to waitTimeoutSeconds, then returns with timedOut: true if the run hasn't finished. The run continues in the cloud regardless — a timeout is not a cancellation, and you can resume by polling dcd_get_status with the returned uploadId.

Previewing a run ​

dryRun: true resolves the flows and returns them without submitting anything or spending credits:

json
{
  "dryRun": true,
  "flows": [{ "file": "...", "flowName": "...", "tags": [ ... ] }],
  "sequentialFlowCount": 0
}

This is a cheap way for an agent to confirm it's about to run the flows you expect before it calls the billable path for real.