lazy-mobile-mcp
Provides tools for automating Android devices via ADB, including screenshot, tap, swipe, input text, launch/stop apps, and performance telemetry.
Provides tools for automating iOS simulators and devices via Xcode tools and WebDriverAgent, including screenshot, tap, swipe, input text, launch/stop apps, and performance telemetry.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@lazy-mobile-mcpList all connected devices."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
lazy-mobile-mcp
Local Model Context Protocol (MCP) server for Android and iOS mobile automation with performance telemetry.
Control real devices and simulators using screenshot, tap, swipe, input_text, launch_app, and collect baseline metrics (cpu, memory, launch time) with session history in SQLite.
Keywords: MCP server, mobile automation, Android ADB automation, iOS simulator automation, WebDriverAgent, app performance telemetry.
Why This Project
Build a local MCP bridge for AI clients over
stdio.Automate Android via ADB and iOS via
simctl/devicectl/ WDA.Keep operations traceable with
trace_idin responses and logs.Persist sessions, samples, artifacts, and audit events in SQLite for reproducibility.
Related MCP server: @wilsonbeam/openclaw-adb-mcp
Features
stdioMCP transport for local AI tooling.Single active device model (
select_device) with optional per-calldevice_id.Android adapter via ADB CLI.
iOS adapter via Xcode tools with macOS guard and graceful degradation.
WDA endpoint auto-discovery for iOS interactive actions.
Risk-tiered approval policy for interactive actions.
JSON logging and unified error contract.
SQLite persistence for
sessions,perf_samples,artifacts,audit_logs.
Tool Index
mobile.list_devicesmobile.select_devicemobile.get_capabilitiesmobile.screenshotmobile.tapmobile.swipemobile.input_textmobile.launch_appmobile.stop_appmobile.start_perf_sessionmobile.stop_perf_sessionmobile.get_perf_samples
Architecture
TypeScript MCP server + worker (tool contracts, validation, policy, trace ID)
Android adapter (
adb)iOS adapter (
simctl,devicectl, WDA)SQLite storage (
artifacts/mobile.db)
Prerequisites
Node.js 20+
Android:
adbinPATHiOS (optional): macOS +
xcrun(simctl/devicectl)For iOS interactive actions (
tap/swipe/input): reachable WebDriverAgent endpoint
Install
npm installInstall From npm
npm install lazy_mobile_mcpQuick Start (Codex)
Requires codex CLI in PATH.
Published package:
npx -y lazy_mobile_mcp@latest setup-codexVerify registration:
codex mcp get lazy-mobile-mcpThen open a new Codex session and call mobile.list_devices.
Current local checkout:
node bin/lazy-mobile-mcp.js setup-codex --local --name lazy-mobile-mcp-localCodex One-Command Setup (Advanced)
Optional overrides:
npx -y lazy_mobile_mcp@latest setup-codex \
--name lazy-mobile-mcp \
--sqlite-path "$HOME/.codex/mcp-data/lazy-mobile/mobile.db" \
--adb-bin adb \
--wda-base-url http://127.0.0.1:8100 \
--device-allowlist emulator-5554 \
--approval-policy highLocal checkout with the same overrides:
node bin/lazy-mobile-mcp.js setup-codex \
--local \
--name lazy-mobile-mcp-local \
--sqlite-path "$HOME/.codex/mcp-data/lazy-mobile/mobile.db" \
--adb-bin adbRun with npx:
npx -y lazy_mobile_mcp@latestGlobal install:
npm install -g lazy_mobile_mcp
lazy-mobile-mcpRun
Development:
npm run devProduction:
npm run build
npm startConfiguration
SQLITE_PATH(defaultartifacts/mobile.db)DEVICE_ALLOWLIST(comma-separated)MOBILE_APPROVAL_POLICY(off|high|medium, defaultoff)LOG_LEVEL(debug|info|warn|error)ADB_BIN(defaultadb)WDA_BASE_URL(optional override for iOS WDA endpoint)
If WDA_BASE_URL is not set, the adapter probes common local endpoints (127.0.0.1 / localhost, ports 8100/8101/8200/8201 + local listening ports).
Security Model
lazy-mobile-mcp is a local-first MCP server. It runs over stdio with the permissions of the local OS user that starts it; it is not a hardened OS or container sandbox.
Current runtime controls:
DEVICE_ALLOWLISTcan restrict operations to known device IDs.All tool inputs are schema-validated before adapter execution.
Tool attempts are recorded in SQLite
audit_logswithtrace_id, tool name, risk level, device ID, and result code.MOBILE_APPROVAL_POLICY=highrequiresconfirm=trueand a non-emptyreasonfortap,swipe,input_text,launch_app, andstop_app.MOBILE_APPROVAL_POLICY=mediumalso requires confirmation forscreenshotandstart_perf_session.
The confirm / reason fields are caller confirmation fields. They do not prove a human approved the action unless the MCP host or caller enforces a human-in-the-loop approval flow.
iOS Capability Notes
Simulator: screenshot + launch/stop + WDA interactive actions.
Physical device: launch/stop via
devicectl; screenshot and interactive actions via WDA.Non-macOS host: iOS tools return
ERR_IOS_UNAVAILABLE_ON_HOST.
Testing
npm testRecommended local MCP smoke:
node dist/cli.js --help
node dist/cli.js setup-codex --helpThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/leaf76/lazy_mobile_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server