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, dump_ui, press_key, open_url, and collect honest performance samples (cpu, memory) with session history in SQLite. Works with Codex, Claude Code, and other MCP clients over stdio.
Keywords: MCP server, mobile automation, Android ADB, iOS simulator, WebDriverAgent, devicectl, simctl, 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: mobile-debug-mcp
Features
stdioMCP transport for local AI tooling.Single active device model (
select_device) with optional per-calldevice_id.Android adapter via ADB CLI (async process execution).
iOS adapter via Xcode tools with macOS guard and graceful degradation.
WDA endpoint auto-discovery (TTL-cached) for iOS interactive actions.
UI dump, key press, URL/deep-link, and foreground app helpers for agent workflows.
Risk-tiered approval policy for interactive actions.
JSON logging and unified error contract.
SQLite persistence for
sessions,perf_samples,artifacts,audit_logs(long-lived connection + indexes).
Tool Index
mobile.list_devicesmobile.select_devicemobile.get_capabilitiesmobile.screenshotmobile.tapmobile.swipemobile.input_textmobile.launch_appmobile.stop_appmobile.dump_uimobile.press_keymobile.open_urlmobile.get_foreground_appmobile.start_perf_sessionmobile.stop_perf_sessionmobile.get_perf_samplesmobile.list_sessions
Architecture
TypeScript MCP server + in-process async worker (tool contracts, validation, policy, trace ID)
Android adapter (
adb)iOS adapter (
simctl,devicectl, WDA viafetch)SQLite storage (
artifacts/mobile.dbby default; screenshots underARTIFACTS_DIR)
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)ARTIFACTS_DIR(default: parent directory ofSQLITE_PATH; screenshots live inscreenshots/)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)DEVICE_LIST_TTL_MS(default10000)WORKER_TIMEOUT_MS(default30000)
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) and caches discoveries briefly.
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-emptyreasonfor high-risk tools (tap,swipe,input_text,launch_app,stop_app,press_key,open_url).MOBILE_APPROVAL_POLICY=mediumalso requires confirmation for medium-risk tools (screenshot,dump_ui,start_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 + open URL + WDA interactive actions (tap/swipe/input/dump_ui/press_key).
Physical device: launch/stop via
devicectl; screenshot and interactive actions via WDA.Continuous iOS cpu/memory sampling is not claimed; use one-shot
launch_msfromlaunch_appwall-clock timing only.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 --helpRelated
lazy-desktop-mcp — desktop computer-use MCP
lazy-media-mcp — image/video prep for AI vision
session-collab-mcp — multi-session collaboration MCP
License
MIT © leaf76
This 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.
Related MCP Servers
- Flicense-qualityDmaintenanceMCP server for Android device automation via ADB, enabling screen control, phone functions, app management, and device control.Last updated1
- AlicenseAqualityBmaintenanceA minimal, secure MCP server for AI-assisted mobile development, enabling build, install, interact, and inspect Android/iOS apps.Last updated335617Apache 2.0
- Alicense-qualityDmaintenanceMCP server for cross-platform mobile automation (iOS/Android) using accessibility trees and screenshots, enabling agents to interact with apps on simulators, emulators, and physical devices.Last updated7Apache 2.0
- Alicense-qualityDmaintenanceMCP server for Android emulator automation via ADB.Last updated314MIT
Related MCP Connectors
MCP server for Appcircle mobile CI/CD platform.
Remote MCP for Android CLI agent build gate, structured receipts, audit logs, and reviewer-ready evi
MCP (Model Context Protocol) server for Appwrite
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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