Build, deploy, drive and debug Android apps: Gradle, emulators, adb, logcat, UI automation
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
boot_emulator
Boot an AVD and wait for full boot; returns the serial
-
build_app
Build an APK; returns compact file:line compiler errors
-
build_run
Build, install and launch in one call
-
clean
Run gradle clean
-
clear_app_data
Reset an app to fresh-install state
-
create_avd
Create an AVD from an installed system image
-
delete_avd
Delete an AVD
-
discover_projects
Find Android/Gradle projects under a path
-
doctor
Check SDK, adb, emulator, avdmanager, Java and connected devices; reports what is missing
-
drag
Drag from one point to another
-
get_apk_path
Locate the most recent APK without building
-
get_app_id
Read the applicationId of a module
-
get_app_info
Version, target/min SDK, install path, running PID
-
get_coverage_report
Run Kover/Jacoco and summarize line coverage per package
-
get_crash_logs
Crash buffer: Java exceptions, native crashes, ANRs
-
get_file_coverage
Show covered/uncovered lines of one source file
-
get_logs
One-shot logcat dump, filterable by app and tag
-
install_app
Install an APK (adb install -r)
-
key_press
Press BACK, HOME, ENTER, DPAD_*, or any keycode
-
key_sequence
Press several keys in order
-
kill_emulator
Shut down a running emulator
-
launch_app
Launch by application id, resolving the launcher activity
-
lint
Run Android Lint and summarize the report
-
list_avds
List AVDs and which are running
-
list_devices
List devices with serial, state, model, Android version, API level
-
list_modules
List modules declared in settings.gradle(.kts)
-
list_variants
List build variants of a module
-
long_press
Long-press, holding 1000 ms
-
record_video_start
Start screen recording (max 3 minutes)
-
record_video_stop
Stop recording and pull the MP4
-
scaffold_android_project
Create a minimal Compose app that builds out of the box
-
screenshot
Capture the screen; annotate: true draws numbered boxes
-
scroll
Scroll in a direction with a safe computed swipe
-
session_clear_defaults
Clear all defaults, or only the listed keys
-
session_set_defaults
Set default project, module, variant, serial and appId for all later calls
-
session_show_defaults
Show the current defaults
-
set_appearance
Switch dark/light mode
-
set_emulator_location
Set GPS location
-
show_gradle_config
Show Gradle, AGP, Kotlin and version-catalog entries
-
snapshot_ui
Dump the UI as named elements with exact tap coordinates
-
start_log_capture
Start background logcat capture to a file
-
statusbar_demo_mode
Clean status bar for screenshots
-
stop_app
Force-stop a running app
-
stop_gradle
Stop the project's Gradle daemons
-
stop_log_capture
Stop capture and return the file plus the last lines
-
swipe
Swipe between two points
-
tap
Tap at pixels or screen percentages
-
tap_element
Tap element #N from the last annotated screenshot
-
test_app
Run JVM unit tests with a parsed pass/fail summary
-
test_instrumented
Run instrumented tests on a device
-
type_text
Type into the focused field, waiting for the keyboard
-
uninstall_app
Uninstall an app
-
wait_for_ui
Poll until an element appears
code files: 32
filesystem 14
- fs dev-jackson-androidbuild-mcp-98055b2/src/tools/build/index.ts :1
import { existsSync, readdirSync, statSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/coverage/index.ts :1
import { existsSync, readdirSync, readFileSync, statSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/device/index.ts :1
import { existsSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/emulator/index.ts :1
import { existsSync, statSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/logging/index.ts :2
import { createWriteStream, existsSync, readFileSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/project-discovery/index.ts :1
import { existsSync, readFileSync, readdirSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/scaffolding/index.ts :1
import { cpSync, existsSync, mkdirSync, readFileSync, readdirSync, renameSync, rmSync, writeFileSync, chmodSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/tools/ui-automation/index.ts :1
import { existsSync, readFileSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/utils/androidcli.ts :1
import { existsSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/utils/command.ts :3
import { openSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/utils/gradle.ts :1
import { existsSync, readFileSync, readdirSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/utils/paths.ts :1
import { mkdirSync } from 'node:fs'; - fs dev-jackson-androidbuild-mcp-98055b2/src/utils/sdk.ts :1
import { existsSync, readdirSync } from 'node:fs'; - fs (weak) dev-jackson-androidbuild-mcp-98055b2/tests/parsers.test.ts :2
import { mkdtempSync, mkdirSync, writeFileSync } from 'node:fs';
shell / exec 3
- shell (weak) dev-jackson-androidbuild-mcp-98055b2/scripts/smoke.mjs :5
import { spawn } from 'node:child_process'; - shell dev-jackson-androidbuild-mcp-98055b2/src/tools/logging/index.ts :1
import { spawn, type ChildProcess } from 'node:child_process'; - shell dev-jackson-androidbuild-mcp-98055b2/src/utils/command.ts :2
import { spawn } from 'node:child_process';
install hooks 1
- prepublishOnly dev-jackson-androidbuild-mcp-98055b2/package.json :35
npm run build
declared dependencies 8
- @modelcontextprotocol/sdk@^1.29.0
- execa@^9.6.1
- fast-xml-parser@^5.2.5
- zod@^3.25.76
- @types/node@^22.15.0
- tsx@^4.19.0
- typescript@^5.8.0
- vitest@^3.2.0