Skip to main content

Tool reference

This page documents every tool exposed by the TestingBot MCP server. You never call these tools by hand, your AI client (Claude, Cursor, VS Code, Windsurf, and others) calls them on your behalf when you describe what you want in plain language. The names and parameters below are useful when you want to know exactly what an agent can do, or to phrase a prompt precisely.

The tools come from two bundled packages. @testingbot/mcp-server handles your account and orchestration (tests, builds, storage, App Automate runs for Maestro, Espresso and XCUITest, screenshots, live sessions, team, tunnels, logs and project scaffolding). @testingbot/automation-mcp, which is bundled automatically, drives live browser and mobile sessions over WebDriver and proxies native app testing to Appium. See Setup & installation to connect the server, and Use cases & workflows for end-to-end examples that chain these tools together.

Every tool below carries an example prompt. You do not have to phrase it that way, it is there to show the kind of request that resolves to that tool. Parameters are passed by your AI client, not typed by you. If a tool replies with “No TestingBot credentials configured. Run the tb_login tool…”, authenticate first, see Authentication.

Authentication

Logs you in without pasting an API key. After a successful login, credentials are written to ~/.testingbot/credentials and used automatically, no restart needed. Read more on the Authentication page.

Tool Description
tb_login Browser or device-code login, no key paste required.

tb_login

Param Type Required Default Description
mode string No auto Login flow: auto (loopback on a desktop, device on headless), loopback (RFC 8252 local callback), or device (RFC 8628 short code at https://testingbot.com/device).

Example prompt: “Log in to TestingBot”

Browser & device

Discover which browsers, platforms and mobile devices are available before you start a session.

getBrowsers

Param Type Required Default Description
type string No Filter the list: web or mobile. Omit for all.

Example prompt: “Which Chrome versions can I run on Windows 11?”

getDevices

Lists mobile devices (real devices plus emulators/simulators) with their current availability. Takes no parameters.

Example prompt: “Which real iPhones are free right now?”

Tests

Browse, inspect and manage the test sessions in your account.

getTests

Param Type Required Default Description
offset number No 0 Pagination offset.
limit number No 10 Number of tests to return (max 100).

Example prompt: “List my last 10 TestingBot tests”

getTestDetails

Param Type Required Default Description
sessionId string Yes The session to fetch full details for.

Example prompt: “Show me the full details of my most recent failed test, with the video and logs”

updateTest

Param Type Required Default Description
sessionId string Yes The session to update.
name string No New test name.
status string No Mark the test as passed or failed.
build string No Associate the test with a build.
extra string No Additional metadata as a JSON string.

Example prompt: “Mark that session as failed and rename it to Checkout regression”

deleteTest

Param Type Required Default Description
sessionId string Yes The session to delete.

Example prompt: “Delete the session I just started by mistake”

stopTest

Param Type Required Default Description
sessionId string Yes The running session to stop.

Example prompt: “Stop the session that is still running”

Builds

Group related tests into builds and manage them.

getBuilds

Param Type Required Default Description
offset number No 0 Pagination offset.
limit number No 10 Number of builds to return (max 100).

Example prompt: “List my last 5 builds”

getTestsForBuild

Param Type Required Default Description
buildId string Yes The build whose tests you want to list.

Example prompt: “Which tests are in the build called nightly?”

deleteBuild

Param Type Required Default Description
buildId string Yes Deletes the build and all of its tests.

Example prompt: “Delete the build called scratch-run and everything in it”

Storage

Upload and manage native mobile app binaries (.apk, .ipa, .zip) so they can be installed on devices for native app testing.

uploadFile

Param Type Required Default Description
localFilePath string Yes Absolute path to a local .apk/.ipa/.zip.

Example prompt: “Upload /Users/me/builds/app-release.apk to TestingBot storage”

uploadRemoteFile

Param Type Required Default Description
remoteUrl string Yes An http/https URL to fetch and store (SSRF-guarded).

Example prompt: “Upload the build at https://ci.example.com/artifacts/app.ipa to my TestingBot storage”

getStorageFiles

Param Type Required Default Description
offset number No 0 Pagination offset.
limit number No 10 Number of files to return (max 100).

Example prompt: “Which app builds do I have in storage?”

deleteStorageFile

Param Type Required Default Description
appUrl string Yes The stored app reference to delete.

Example prompt: “Delete tb://app123 from storage”

App Automate: Maestro

Run Maestro flows on TestingBot real devices, emulators and simulators. The agent uploads your app, uploads (or writes) the flow YAML, starts a run, and polls until it finishes.

Maestro runs are asynchronous: runMaestroTest returns a run ID immediately and does not block while devices execute. The agent then polls getMaestroRunStatus and fetches getMaestroRunResults once the run completes.

Tool Description
uploadMaestroApp Upload the app under test. Returns a project id.
uploadMaestroFlows Upload the flow YAML for a project, from disk or inline.
runMaestroTest Start a run. Returns a run id immediately.
getMaestroRunStatus Poll per-flow progress.
getMaestroRunResults Final outcomes plus the JUnit XML report.
getMaestroFlowDetails Errors, step-level report, video, screenshots and device logs for one flow.
cancelMaestroRun Cancel a running run.
retryMaestroRun Retry a whole run, or a single failed flow.
uploadMaestroCompanionApp Upload a companion app to install alongside the app under test.
listMaestroProjects Find existing projects instead of re-uploading.
listMaestroRuns List runs, or look them up by run name.
maestroCheatSheet Maestro YAML syntax reference for the agent.

uploadMaestroApp

Param Type Required Default Description
localFilePath string Yes Local path to the .apk, .aab, .ipa or zipped .app.

Returns a project id that every other Maestro tool takes. Uploads are deduplicated by checksum, so re-running with an unchanged binary reuses the existing project instead of uploading again.

Example prompt: “Upload ./build/app.apk for Maestro testing”

uploadMaestroFlows

Param Type Required Default Description
projectId number Yes Project id from uploadMaestroApp.
flowsPath string No Directory of .yaml/.yml flows (structure preserved, so runFlow subflows keep resolving), or a pre-built .zip.
flows array No Inline flows as { fileName, content } objects, for flows the agent writes itself.

Each upload replaces the flows previously uploaded for that project.

Example prompt: “Upload the flows in ./flows to that project”

runMaestroTest

Param Type Required Default Description
projectId number Yes Project id from uploadMaestroApp.
platformName string Yes Android or iOS.
deviceName string No any device Device name, wildcards and regex supported, e.g. Pixel 8, iPhone 1[4-6], *.
version string No OS version, e.g. 14.
realDevice boolean No false Run on a physical device instead of an emulator/simulator. Required for .ipa apps.
name string No Run name shown in the dashboard, and the value listMaestroRuns looks up.
env object No Environment variables passed to the flows.
includeTags array No Only run flows carrying these Maestro tags.
excludeTags array No Skip flows carrying these Maestro tags.
shardSplit number No Split the flows across this many parallel devices (1–10).
otherApps array No Up to 4 companion app URLs (tb:// or http(s)://) installed alongside the app under test.

Example prompt: “Run my Maestro flows on a real Pixel 8 with Android 14”

getMaestroRunStatus

Param Type Required Default Description
projectId number Yes The project to inspect.
runId number No A specific run. Omit it to list the runs of the latest execution.

Per-flow statuses are WAITING, READY (running), DONE, FAILED and CANCELLED, with failures listed first. The flow ids in this output are what getMaestroFlowDetails and retryMaestroRun take.

Example prompt: “How is that Maestro run doing?”

getMaestroRunResults

Param Type Required Default Description
projectId number Yes The project.
runId number Yes The completed run.

Returns per-flow outcomes, failures first with error messages and video links, plus the JUnit XML report.

Example prompt: “Give me the results of the Maestro run now that it has finished”

getMaestroFlowDetails

Param Type Required Default Description
projectId number Yes The project.
runId number Yes The run.
flowId number Yes The flow, taken from getMaestroRunStatus.

This is the debugging tool: error messages, the step-level JUnit report and links to the video, screenshots and device logs. Fetch it for a failed flow, fix the YAML, upload the flows again, then retry.

Example prompt: “Why did the checkout flow fail? Show me the error and the video”

cancelMaestroRun

Param Type Required Default Description
projectId number Yes The project.
runId number Yes The run to cancel.

Example prompt: “Cancel the Maestro run I just started”

retryMaestroRun

Param Type Required Default Description
projectId number Yes The project.
runId number Yes The run to retry.
flowId number No Retry only this flow instead of the whole run.

Example prompt: “Fix the login flow and re-run just that one”

uploadMaestroCompanionApp

Param Type Required Default Description
localFilePath string Yes Local path to the companion .apk, .aab, .ipa or .zip.

Returns a tb:// app URL to pass in the otherApps parameter of runMaestroTest (max 4 per run).

Example prompt: “Upload ./build/mock-backend.apk as a companion app for the run”

listMaestroProjects

Param Type Required Default Description
offset number No 0 Pagination offset.
count number No 10 Number of projects to return (max 100).

Newest first, with app details, flow names and run ids, so the agent can reuse a project id rather than re-uploading an app.

Example prompt: “What Maestro projects do I already have on my account?”

listMaestroRuns

Param Type Required Default Description
buildName string No Look up runs with this exact run name instead of listing all runs.
offset number No 0 Pagination offset. Ignored when buildName is set.
count number No 10 Number of runs to return (max 100). Ignored when buildName is set.

Returns projectId and runId pairs. The buildName lookup is what makes prompts like “rerun whatever failed in last night's nightly build” work.

Example prompt: “Find the Maestro run named nightly and tell me what failed in it”

maestroCheatSheet

Returns a Maestro YAML syntax reference: file structure, commands, selectors and the TestingBot run workflow. Takes no parameters. Agents call this before writing or fixing flows, so the YAML they produce matches what Maestro actually accepts.

Example prompt: “Write me a Maestro flow that logs in and adds an item to the cart”

Maestro tooling requires @testingbot/mcp-server 1.1.0 or later. If your agent reports that these tools do not exist, update the server, see Setup & installation.

App Automate: Espresso & XCUITest

Run pre-built Espresso (Android) and XCUITest (iOS) suites on TestingBot devices. Every tool takes a framework parameter, espresso or xcuitest, and follows the same asynchronous start, poll, fetch pattern as Maestro.

Tool Description
uploadAppAutomateApp Upload the app under test. Returns a project id.
uploadAppAutomateTests Upload the test suite for that project.
runAppAutomateTest Start a run. Returns a run id immediately.
getAppAutomateRunStatus Poll run progress.
getAppAutomateRunResults Per-run outcomes plus the JUnit XML report.

uploadAppAutomateApp

Param Type Required Default Description
framework string Yes espresso or xcuitest.
localFilePath string Yes The app under test: .apk/.aab for Espresso, .ipa/.zip for XCUITest.

Returns the project id used by the other two App Automate tools. For Maestro flows, use uploadMaestroApp instead.

Example prompt: “Upload ./app/build/outputs/apk/debug/app-debug.apk for an Espresso run”

uploadAppAutomateTests

Param Type Required Default Description
framework string Yes espresso or xcuitest.
projectId number Yes Project id from uploadAppAutomateApp.
localFilePath string Yes The instrumented test .apk for Espresso, or the zipped XCUITest runner bundle (.zip).

Example prompt: “Upload the instrumented test APK for that project”

runAppAutomateTest

Param Type Required Default Description
framework string Yes espresso or xcuitest.
projectId number Yes Project id from uploadAppAutomateApp.
deviceName string No any device Device name, wildcards and regex supported, e.g. Galaxy S23, iPhone 1[4-6], *.
version string No OS version, e.g. 14.
realDevice boolean No false Run on a physical device instead of an emulator/simulator.
name string No Run name shown in the dashboard.
build string No Build identifier used to group runs.
locale string No Locale for the run, e.g. fr_FR.
timeZone string No Time zone for the run, e.g. Europe/Brussels.
testClasses array No Espresso only: run only these fully qualified test classes.
skipTestClasses array No Espresso only: skip these test classes.
packages array No Espresso only: run only these packages.
annotations array No Espresso only: run only tests carrying these annotations.
testRunner string No Espresso only: custom instrumentation runner.

Example prompt: “Run the Espresso suite on a real Galaxy S23, only the com.example.LoginTest class”

getAppAutomateRunStatus

Param Type Required Default Description
framework string Yes espresso or xcuitest.
projectId number Yes The project to inspect.
runId number No A specific run. Omit it to list every run in the project.

Statuses are WAITING, READY (running), DONE and FAILED. Each run also reports its Appium session id.

Example prompt: “Is my XCUITest run finished yet?”

getAppAutomateRunResults

Param Type Required Default Description
framework string Yes espresso or xcuitest.
projectId number Yes The completed project.
runId number No XCUITest only: fetch the JUnit report of this single run.

Example prompt: “Show me the JUnit results for that Espresso project”

Because each Espresso and XCUITest run surfaces its Appium session id, the session tools work on them too: pass that id to getTestDetails for the video and screenshots, or to getFailureLogs for the device and Appium logs.

Screenshots

Capture a URL across multiple browsers and platforms for cross-browser visual checks.

takeScreenshot

Param Type Required Default Description
url string Yes The page to capture.
browsers array Yes Array of { browserName, version?, os } targets.
resolution string No 1920x1080 Screen resolution to render at.
waitTime number No 5 Seconds to wait before capture (0–60).
fullPage boolean No false Capture the full scrollable page.

Returns a job id that you pass to retrieveScreenshots.

Example prompt: “Take full-page screenshots of testingbot.com in Chrome on Windows 11 and Safari on macOS”

retrieveScreenshots

Param Type Required Default Description
screenshotId string Yes The job id returned by takeScreenshot.

Example prompt: “Are those screenshots ready? Give me the image links”

getScreenshotList

Param Type Required Default Description
offset number No 0 Pagination offset.
limit number No 10 Number of jobs to return (max 100).

Example prompt: “List my recent screenshot jobs”

User

Read and update your account profile.

getUserInfo

Returns account information, name, plan, company, country, available seconds and concurrency. Takes no parameters. Note: getUserInfo does not return an email field.

Example prompt: “How many testing minutes do I have left?”

updateUserInfo

Param Type Required Default Description
firstName string No New first name.
lastName string No New last name.
email string No New email address.

Example prompt: “Update the last name on my profile to De Vries”

Live testing

Start an interactive, manual live session you can watch and control. Each session returns a live-view URL of the form https://testingbot.com/tests/<sessionId>/live?auth=<hash>.

startLiveSession

Param Type Required Default Description
platformType string Yes desktop or mobile.
desiredURL string Yes The URL to open in the session.
desiredOS string Yes Operating system to run on.
desiredOSVersion string Yes OS version.
desiredBrowser string No Browser to launch (desktop).
desiredBrowserVersion string No Browser version (desktop).
desiredDevice string No Device name (mobile).

Example prompt: “Start a live session on Windows 11 in Chrome and open my staging site”

startDesktopLiveSession

Param Type Required Default Description
desiredURL string Yes The URL to open.
desiredOS string Yes Windows, Mac or Linux.
desiredOSVersion string Yes OS version.
desiredBrowser string Yes chrome, firefox, safari, edge or ie.
desiredBrowserVersion string No latest Browser version.

Example prompt: “Give me a manual Safari session on macOS Ventura pointed at example.com”

startMobileLiveSession

Param Type Required Default Description
desiredURL string Yes The URL to open.
desiredOS string Yes android or ios.
desiredOSVersion string Yes OS version.
desiredDevice string Yes The device to run on.

Example prompt: “Open a live session on an iPhone 15 Pro and load my checkout page”

Team

Inspect your team settings, usage and members.

Tool Param Required Description
getTeam Team settings and usage. No parameters.
getUsersInTeam List all team members. No parameters.
getUserFromTeam userId Yes Fetch a single team member by id.

Example prompt: “Show my team's usage this month and list everyone in it”

CDP

Spin up a remote browser exposing a Chrome DevTools Protocol endpoint, so you can drive it with Puppeteer or Playwright. See the Playwright/Puppeteer example in Use cases & workflows.

createCdpSession

Param Type Required Default Description
browserName string Yes Browser to launch.
browserVersion string No latest Browser version.
platform string Yes Platform to run on.
screenResolution string No Screen resolution.
timeZone string No Time zone for the session.
name string No Session name.
build string No Build to associate the session with.
extraCapabilities object No Additional WebDriver capabilities.

Example prompt: “Start a CDP-enabled Chrome session on Windows 11 and give me the WebSocket URL”

Tunnels

Manage TestingBot Tunnels for testing local or firewalled sites.

Tool Param Required Description
getTunnelList List active tunnels. No parameters.
deleteTunnel tunnelId Yes Stop an active tunnel by id.

Example prompt: “List my active tunnels and stop the one I left running this morning”

Logs

Fetch and filter the logs for a session, ideal for debugging a failing run.

getFailureLogs

Param Type Required Default Description
sessionId string Yes The session whose logs you want.
logTypes array No Any of selenium, browser, chrome, vm, appium.
failuresOnly boolean No false Return only failure-related entries.
maxBytesPerLog number No 50000 Truncate each log (1,000–1,000,000 bytes).
timeoutMs number No 15000 Fetch timeout (1,000–60,000 ms).

Example prompt: “Pull just the failure lines from the Appium and device logs for that session”

Project

Detect the test framework in a local project and scaffold a ready-to-use TestingBot configuration.

listTestFiles

Param Type Required Default Description
projectRoot string Yes Root directory of the project to scan.
maxDepth number No 8 How deep to recurse (1–15).
maxResults number No 200 Maximum files to return (1–2000).

Example prompt: “What test files are in this project?”

setupTestingBot

Param Type Required Default Description
projectRoot string Yes Root directory of the project.
frameworkOverride string No Force a framework instead of auto-detecting.

Generates a ready-to-paste TestingBot config for the detected framework, Playwright, Cypress, WebdriverIO, Selenium (JS), Nightwatch or Puppeteer.

Example prompt: “Set this project up to run on TestingBot”

Browser automation

These tools come from the bundled @testingbot/automation-mcp package and drive a live browser session over WebDriver. They work for desktop browsers and for mobile browsers (on emulators/simulators or real devices). Every session starts with tb_openBrowser, which returns a sessionId you pass to the other tools, plus a live-view URL (https://testingbot.com/tests/<sessionId>/live?auth=<hash>) you can open to watch or take over.

tb_openBrowser

Param Type Required Default Description
browserName string Yes chrome, firefox, edge or safari.
browserVersion string No latest Browser version (desktop only).
platform string Yes Desktop codes like WIN11/VENTURA, or Android/iOS for mobile.
deviceName string No Mobile only (e.g. Google Pixel 9, iPhone 15 Pro). Its presence switches the session to mobile.
platformVersion string No Mobile OS version.
automationName string No UiAutomator2/XCUITest Mobile automation engine.
realDevice boolean No false true = physical device, false = emulator/simulator.
name string No Session name.
build string No Build to group the session under.
screenResolution string No Screen resolution (desktop only).

Example prompt: “Open Chrome on Windows 11”

Real-device pre-flight: if realDevice:true and the requested device or version is busy or not offered, tb_openBrowser returns guidance (wait, use an emulator, or pick an available alternative) without starting a session. See Use cases and Troubleshooting.

tb_navigate

Param Type Required Default Description
sessionId string Yes The active session.
url string Yes The URL to navigate to.

Example prompt: “Go to my staging login page”

tb_snapshot

Param Type Required Default Description
sessionId string Yes The active session.
bodyChars number No 5000 Body text characters to include (500–50,000).

Returns a structured summary of the page: title, headings, actionable elements and body text.

Example prompt: “What is on the page right now?”

tb_click

Param Type Required Default Description
sessionId string Yes The active session.
by string No css Locator strategy: css, xpath, id, name, tag, class, linkText, partialLinkText.
value string Yes The locator value.
timeoutMs number No 5000 Wait timeout (100–30,000 ms).

Example prompt: “Click the Sign in button”

tb_type

Param Type Required Default Description
sessionId string Yes The active session.
by string No css Locator strategy.
value string Yes The locator value of the field.
text string Yes Text to type.
clearFirst boolean No true Clear the field before typing.
pressEnter boolean No false Press Enter after typing.

Example prompt: “Type test@example.com into the email field and press Enter”

tb_getText

Param Type Required Default Description
sessionId string Yes The active session.
by string No css Locator strategy.
value string Yes The locator value.
timeoutMs number No 5000 Wait timeout.

Example prompt: “Read back the dashboard heading”

tb_getAttribute

Param Type Required Default Description
sessionId string Yes The active session.
by string No css Locator strategy.
value string Yes The locator value.
attribute string Yes The attribute name to read.
timeoutMs number No 5000 Wait timeout.

Example prompt: “Is the submit button still disabled?”

tb_executeScript

Param Type Required Default Description
sessionId string Yes The active session.
script string Yes JavaScript to run in the page.
args array No [] Arguments passed to the script.

Example prompt: “Scroll to the bottom of the page and tell me the document height”

tb_screenshot

Param Type Required Default Description
sessionId string Yes The active session.
savePath string No OS temp dir A .png path or directory to save to.

Returns an inline image and saves a file, returning a clickable file:// link. Many clients do not render inline tool images, so open the saved file if you do not see the screenshot in chat.

Example prompt: “Take a screenshot of what the browser is showing now”

tb_pressKey

Param Type Required Default Description
sessionId string Yes The active session.
key string Yes A W3C key or chord, e.g. Enter or Control+A.

Example prompt: “Press Escape to close the modal”

tb_closeBrowser

Param Type Required Default Description
sessionId string Yes Ends the session and frees minutes.

Example prompt: “Close the session”

tb_listSessions

Lists active automation sessions. Takes no parameters.

Example prompt: “Which automation sessions do I have open?”

Mobile native apps

For testing native iOS/Android apps (not mobile browsers, use tb_openBrowser for those), the automation package proxies to the official appium-mcp. Upload your app first with uploadFile, then reference it as appium:app="tb://<id>".

appium_session_management

Param Type Required Default Description
action string Yes One of create, delete, list, detach, select.
platform string For create ios or android.
capabilities string No JSON string for create: appium:deviceName, appium:platformVersion, appium:app="tb://<id>".
sessionId string No Required for delete, detach and select.

Ready to put these together? See Use cases & workflows for full tool sequences, or return to the MCP overview.

Example prompt: “Start a native Android session with the app I just uploaded”

Was this page helpful?
Last updated