Node.js 18+
Download from nodejs.org or use nvm.
AI-Native Android Automation
Automate real Android devices and emulators by talking to Claude, Cursor, or any MCP-compatible AI client. Describe test flows in plain English — no Appium code required.
Make sure all five are in place before installing.
Download from nodejs.org or use nvm.
Required by Appium. Set JAVA_HOME in your shell profile.
Installs adb and platform-tools. Set ANDROID_HOME to the SDK path.
USB device with USB Debugging on, or an AVD emulator. Verify with adb devices.
Install globally and add the UIAutomator2 driver. See the Appium Setup section for exact commands.
Install QApilot MCP globally from the distribution package:
npm install -g https://api.qapilot.io/internal/qapilot-mobile-mcp.tgzVerify the install:
npx qapilot-mcp --stdio # Server starts and waits for input — no errors = success
One-time setup — install Appium and its Android driver with the pinned versions below, then start the server.
# Step 1 — Install Appium npm i --location=global appium@2.19.0 # Step 2 — Install the UiAutomator2 Android driver appium driver install uiautomator2@4.2.6 # Step 3 — Start Appium (run this every time before testing) appium --allow-insecure chromedriver_autodownload,adb_shell \ --base-path /wd/hub \ --allow-cors # Step 4 — Confirm device is visible adb devices # → emulator-5554 device
QApilot MCP connects via the Model Context Protocol. Paste the config for your client:
Open Claude → Settings → Developer → Edit Config and add the block below inside your existing mcpServers object:
{
"mcpServers": {
"qapilot-mobile-mcp": {
"command": "npx",
"args": ["-y", "qapilot-mcp", "--stdio"],
"env": {}
}
}
}command + args
Runs the CLI via npx — no separate install needed
Restart your AI client after saving. QApilot Mobile MCP will appear in the connected tools list.
Ask your AI to register you — an activation email is sent automatically.
Sign me up for QApilot with email alice@example.com
If env credentials are set in your config, Claude logs in automatically on first use.
Log in to QApilot
Log in to QApilot as alice@example.com with password MyPass123
Provide the Android package ID. The default project and device are selected automatically.
Launch the CarWale app — package ID is com.carwale.android
Start a QApilot session and open com.carwale.android on the local emulator
Once the app is launched, describe what you want to test. The AI builds a structured plan and executes each step on the device in real time.
Tap Search, type "Honda City", select the first result, and verify the car detail page loads
Log in with email user@test.com and password Test@123, then screenshot the home screen
Go to Compare, add two cars, and confirm the Compare button is visible
Scroll down on the Filters page, select Petrol as fuel type, and apply the filter
Fill the enquiry form: name "John", phone "9999999999", city "Hyderabad", then submit
Watch the device screen in your browser as steps execute.
Give me the live preview URL for this session
Open the preview so I can watch the test run
mobile_launch_app call — click it before the first step starts to watch from the beginning.After a successful run, push the recorded steps to QApilot as a saved test case for future replay.
Steps look good — accept them and push to QApilot
Accept these steps as "Search and select Honda City" in QApilot
Replay any test cases saved in your QApilot project — one by one, in batch, or from an Excel sheet.
Show all test cases in the CarWale Android project
Run test case TC-101 on the connected emulator
Execute test cases TC-101, TC-102, and TC-105 in sequence
Run all test cases from regression_suite.xlsx
What's the current execution status?
Generate a report at the end of every session. Reports include step results, screenshots, errors, and timing.
Generate a passed report for this session
Generate a failed report — the login button wasn't found at step 3
Save an HTML report to ~/Downloads/test-results.html
Reports are saved to ~/Downloads/qapilotmcpreport/qapilot/<date>/<sessionId>/ — includes output.json, report.yaml, and on pass a scenario.feature Gherkin file.
Every capability the server exposes:
| Tool | What it does |
|---|---|
| mobile_signup | Register a new QApilot account; triggers activation email |
| mobile_login | Log in; uses env credentials automatically when set |
| mobile_logout | Clear the current auth token |
| mobile_start_session | One-shot: login + project + device + launch app |
| mobile_list_projects | List projects in your QApilot workspace |
| mobile_select_project | Set the active project for this session |
| mobile_list_available_devices | List connected local Android devices and emulators |
| mobile_use_device | Select a specific device when multiple are connected |
| mobile_list_apps | List installed apps on the connected device |
| mobile_launch_app | Launch an app by package ID; starts Appium session |
| mobile_stop_appium_session | End the current Appium session cleanly |
| mobile_submit_plan | Submit a structured test plan for execution |
| mobile_execute_plan | Run the submitted plan on the device |
| mobile_execute | Perform a single manual action (tap, type, swipe…) |
| mobile_get_execution_state | Real-time status of the running execution |
| mobile_check_session_status | Check whether the Appium session is alive |
| mobile_get_session_info | Device capabilities and session metadata |
| mobile_get_preview_url | Get the live screenshot stream URL |
| mobile_accept_steps | Push happy-path steps to QApilot as a test case |
| mobile_execute_testcases | Replay saved test cases by ID |
| mobile_run_excel_testcases | Run test cases from an Excel (.xlsx) file |
| mobile_generate_report | Generate output.json + report.yaml; clears execution state |
| mobile_get_cache_context | Fetch cached XPaths and skills for this app |
| mobile_cache_summary | Show what is cached for a given package |
| mobile_get_usage | Token and API usage for the current session |
Join the QApilot MCP early access list. Local device, your agent, a report it can read.