Skip to main content
Glama
AutoMobile
by zillow

AutoMobile

⚠️ PROJECT ARCHIVED

AutoMobile is no longer maintained or supported by Zillow. Zillow does not provide warranties or support for this project.

This repository has been archived and is read-only. For continued development and support, please see the community-maintained fork by Jason Pearson:

πŸ”— https://github.com/kaeawc/auto-mobile


AutoMobile sticker

AutoMobile is a set of tools for mobile automation. You can use it for UI testing or as a development workflow assistant.

The first platform supported is Android with plans to extend to iOS.

How it works

  • πŸ”§ Powerful MCP Server: AutoMobile provides comprehensive actions through MCP tool calls with a fast observations to drive the interaction loop.

  • πŸ—ΊοΈ Source Mapping: Combining project path config with deep view hierarchy analysis we know exactly what code is being rendered.

  • ✍️ Automated Test Authoring: When used in test authoring mode AutoMobile will write tests for you. It is the only way it writes tests.

  • πŸ§ͺ Test Execution - Run tests locally or on CI without extra infrastructure.

  • πŸ“± Device Management: Multi-device support with emulator control and app lifecycle management.

All together you get a system that looks like this:

automobile_system_design.png

Related MCP server: XcodeBuildMCP

Documentation

Contributing

Acknowledgement

By continuing to use AutoMobile, you acknowledge and agree to the warnings and responsible use requirements.

Available Tools

38 tools
checkPlatformDependenciesB

Check the installation status of platform dependencies and tools

Inputs: platform (required).

clearTextC

Clear text from the currently focused input field

Inputs: platform (required).

detectIntentChooserB

Detect system intent chooser dialog in the current view hierarchy

Inputs: no named parameters.

disableDemoModeC

Disable demo mode and return to normal status bar behavior

Inputs: platform (required).

enableDemoModeA

Enable demo mode with consistent status bar indicators for screenshots

Inputs: platform (required), time, batteryLevel, batteryPlugged, +4 more.

getAllConfigsB

Retrieve current configuration.

Inputs: no named parameters.

handleIntentChooserC

Automatically handle system intent chooser dialog with specified preferences

Inputs: preference, customAppPackage.

homeScreenB

Return to the home screen by pressing the home button

Inputs: platform (required).

imeActionC

Perform an IME action (e.g., done, next, search)

Inputs: action (required), platform (required).

inputTextC

Input text to the device

Inputs: text (required), platform (required), imeAction.

installAppC

Install an APK file on the device

Inputs: apkPath (required).

installPlatformDependenciesC

Install required dependencies and tools for the specified platform

Inputs: platform (required), update.

killDeviceC

Kill a running device

Inputs: device (required).

launchAppC

Launch an app by package name

Inputs: appId (required), clearAppData, coldBoot.

listAppsC

List all apps installed on the device

Inputs: platform (required).

listDeviceImagesB

List all available device images for the specified platform

Inputs: platform (required).

listDevicesC

List all connected devices (both physical and virtual devices)

Inputs: platform (required).

observeC

Get the view hierarchy of what is displayed on screen

Inputs: platform (required).

openSystemTrayA

Open the system notification tray by swiping down from the status bar

Inputs: platform (required).

pressButtonC

Press a hardware button on the device

Inputs: button (required), platform (required).

pressKeyB

Press a hardware key on the device (Maestro equivalent of pressButton)

Inputs: key (required), platform (required).

recentAppsC

Open the recent apps list

Inputs: platform (required).

resetConfigB

Reset to default settings. This will clear all saved configuration.

Inputs: no named parameters.

rotateC

Rotate the device to a specific orientation

Inputs: orientation (required), platform (required).

scrollC

Scroll in a direction on a scrollable container, optionally to find an element (supports text and selectors)

Inputs: containerElementId (required), direction (required), platform (required), lookFor, +1 more.

selectAllTextA

Select all text in the currently focused input field using long press + tap on 'Select All'

Inputs: platform (required).

setActiveDeviceC

Set the active device ID for subsequent operations

Inputs: deviceId (required), platform (required).

setAppSourceC

For a given appId, set the source code path and platform.

Inputs: sourceDir (required), appId (required), platform (required).

setDeviceModeC

Set parameters for a particular device in a given mode.

Inputs: deviceId (required), platform (required), exploration, testAuthoring.

shakeC

Shake the device

Inputs: platform (required), duration, intensity.

startDeviceC

Start a device with the specified device image

Inputs: localDevice (required), platform (required).

swipeC

Unified scroll command supporting direction and speed (no index support due to reliability)

Inputs: containerElementId (required), direction (required), platform (required), lookFor, +1 more.

swipeOnElementC

Swipe on a specific element

Inputs: elementId (required), direction (required), duration (required), platform (required), +1 more.

swipeOnScreenC

Swipe on screen in a specific direction

Inputs: direction (required), includeSystemInsets (required), duration (required), platform (required).

tapOnD

Tap supporting text or resourceId

Inputs: action (required), platform (required), containerElementId, text, +1 more.

terminateAppC

Terminate an app by package name

Inputs: appId (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.7/5.0

    Scored across 38 tools

    Disambiguation3/5

    Most tools have distinct purposes, but there is notable overlap between pressButton and pressKey (both press hardware buttons, with pressKey described as the 'Maestro equivalent'), and between scroll and swipe (both handle directional movement, with swipe described as a 'unified scroll command'). These overlaps could cause confusion for an agent trying to select the right tool.

    Naming Consistency4/5

    Tool names are mostly consistent with a verb_noun pattern (e.g., clearText, installApp, launchApp), but there are minor deviations like observe (verb only) and getAllConfigs (verb_adjective_noun). Overall, the naming is readable and follows a predictable convention with only a few outliers.

    Tool Count2/5

    With 38 tools, the count is excessive for an Android automation server, making it feel heavy and potentially overwhelming. A more focused set of 10-20 tools would be more appropriate for this domain, as many tools could be consolidated or omitted without losing functionality.

    Completeness5/5

    The tool surface is highly complete for Android device automation, covering installation, configuration, navigation, input, interaction, and device management. It includes CRUD-like operations (e.g., installApp, listApps, terminateApp) and supports core workflows without obvious gaps, ensuring agents can handle most automation tasks effectively.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      B
      maintenance
      A Model Context Protocol server that enables scalable mobile automation through a platform-agnostic interface for iOS and Android devices, allowing agents and LLMs to interact with mobile applications using accessibility snapshots or coordinate-based interactions.
      35
      33,974 npm
      10,383
      Apache 2.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Local MCP server for Android and iOS mobile automation and performance telemetry, enabling device control (screenshot, tap, swipe, input, app launch) and metric collection (CPU, memory, launch time) via ADB, simctl, and WebDriverAgent with SQLite session history.
      24 npm
      1
      MIT