mobile-debug-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ADB_PATH | No | Path to the Android Debug Bridge executable | |
| IDB_PATH | No | Path to the idb executable | |
| XCRUN_PATH | No | Path to the xcrun executable |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_debugger_capabilitiesB | Probe optional platform debugger prerequisites and matching running debuggable processes; does not attach. |
| attach_debuggerA | Attach an owned Android JDI or iOS simulator LLDB session. Requires an explicit device and debuggable app; choose processId when ambiguous. Stops suspend all app threads. Auto-detach: 60s paused, 5m idle, 30m total. |
| get_debugger_stateC | Read debugger state, current stop and breakpoint/cleanup status. |
| set_debugger_breakpointA | Set an exact source breakpoint: Android className or iOS absolute sourceFile (exactly one), plus line; unloaded classes/images remain pending. No silent line relocation. |
| remove_debugger_breakpointC | Remove an owned breakpoint; repeated removal succeeds. |
| wait_for_debugger_eventC | Wait for bounded debugger events after a sequence cursor. Empty timeout does not affect execution; overflow is explicit. |
| get_debugger_stackB | Read bounded stack frames for a stopped thread; IDs expire on resume. |
| get_debugger_localsB | Read at most 100 shallow locals. Sensitive values returned only on request; strings truncate at 256 characters; iOS aggregates return type summaries. No evaluation or field traversal. |
| step_debuggerC | Acknowledge one-shot line stepping and resume. Wait for a subsequent stop event separately. |
| resume_debuggerC | Resume owned debugger suspension and immediately expire stopped references. |
| detach_debuggerB | Dispose the owned debugger connection, release owned suspension and remove its owned transport. Idempotent; retries incomplete cleanup. |
| get_system_trace_capabilitiesA | Probe Android Perfetto or iOS Instruments prerequisites without recording. iOS requires explicit booted simulator deviceId; reports template matrix and unknown profiling permissions. |
| start_system_traceA | Start bounded Android Perfetto or iOS simulator Time Profiler recording, returning an owned trace_id after readiness. iOS requires explicit deviceId and running appId. Run an existing journey with systemTraceId, then stop to retrieve a local artifact or cancel to discard. Traces can contain sensitive system metadata, logs and paths; local user-managed retention, no upload. |
| get_system_trace_statusC | Reconcile an owned trace and retrieve its state; finalise duration-completed capture. |
| stop_system_traceB | Stop owned capture gracefully and retrieve a local Perfetto file or validated Instruments .trace bundle. Retry after a transfer/cleanup failure. |
| cancel_system_traceC | Stop owned capture and discard partial files. Already completed local artifacts are retained. |
| get_interaction_diagnosticsA | Read the retained original interaction or journey result without replaying input or observing the device. Pass diagnostics.session_id/result_id as sessionId/resultId. Session-local memory: ten minutes, 100 results, 16 MiB total, 1 MiB per result. Expired, evicted or restarted results are unavailable. May contain private UI text and errors; compact output is not redaction. |
| get_app_readinessB | Observe readiness with at most two fresh UI-tree samples. Reports loading, transitioning, settled or unknown with evidence and limitations. Managed Android and supported iOS simulator debugger pauses are reported from debugger evidence; unresponsive detection remains unsupported. Settled normalized foreground UI is not proof of app identity, responsiveness or backend completion. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| wait_for_app_readyB | Wait within a single bounded budget for settled UI evidence. Reports loading, transitioning, settled or unknown with evidence and limitations. Managed Android and supported iOS simulator debugger pauses are reported from debugger evidence; unresponsive detection remains unsupported. Settled normalized foreground UI is not proof of app identity, responsiveness or backend completion. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| start_appA | Purpose: Launch a mobile app on Android or iOS. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
|
| terminate_appC | Terminate a mobile app on Android or iOS simulator |
| restart_appA | Purpose: Restart a mobile app on Android or iOS. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
|
| reset_app_dataA | Reset app data (clear storage) for a mobile app on Android or iOS simulator |
| install_appA | Install an app on Android or iOS. Accepts a built binary (apk/.ipa/.app) or a project directory to build then install. platform and projectType are required. |
| build_appA | Build a project for Android or iOS and return the built artifact path. Does not install. platform and projectType are required. |
| get_logsA | Get recent logs from Android or iOS simulator. Returns device metadata and structured logs suitable for AI consumption. Returns evidence metadata with acquisition intervals and conservative freshness. Optional actionRef links a known same-session/device action; unavailable references collect independently. Device log times are not comparable with host dispatch times. |
| list_devicesA | List Android devices and iOS simulators. Supply appId for device-specific installation status; unknown checks do not imply absence. |
| get_system_statusA | Quick healthcheck of local mobile debugging environment (adb, devices, logs, env, iOS). |
| capture_screenshotB | Capture a screenshot from an Android device or iOS simulator. Returns device metadata and the screenshot image. Returns evidence metadata with acquisition intervals and conservative freshness. Optional actionRef links a known same-session/device action; unavailable references collect independently. Device log times are not comparable with host dispatch times. |
| capture_debug_snapshotA | Capture a complete debug snapshot (raw observation layer plus optional derived semantic layer). Returns structured JSON with snapshot_revision, captured_at_ms, snapshot_delta, and loading_state when detectable. Returns evidence metadata with acquisition intervals and conservative freshness. Optional actionRef links a known same-session/device action; unavailable references collect independently. Device log times are not comparable with host dispatch times. |
| start_log_streamB | Start streaming logs for a target application on Android or iOS. For Android this uses adb logcat --pid=; for iOS it streams |
| read_log_streamB | Read accumulated log stream entries for the active session. Returns evidence metadata with acquisition intervals and conservative freshness. Optional actionRef links a known same-session/device action; unavailable references collect independently. Device log times are not comparable with host dispatch times. |
| stop_log_streamC | Stop an active log stream for the session. |
| get_ui_treeB | Get the current UI hierarchy from an Android device or iOS simulator. Returns a structured JSON representation of the screen content with snapshot metadata and incremental delta signals when available. Successful observations include snapshot_session_id and snapshot_revision for same-device conditional input. Compact errors preserve the error and cannot authorize an expectation. Returns evidence metadata with acquisition intervals and conservative freshness. Optional actionRef links a known same-session/device action; unavailable references collect independently. Device log times are not comparable with host dispatch times. |
| get_current_screenA | Get the currently visible activity on an Android device. Returns package and activity name. |
| get_screen_fingerprintB | Generate a stable fingerprint representing the current visible screen (activity + visible UI elements). Returns evidence metadata with acquisition intervals and conservative freshness. Optional actionRef links a known same-session/device action; unavailable references collect independently. Device log times are not comparable with host dispatch times. |
| wait_for_screen_changeA | Purpose: Detect that a screen transition has occurred by waiting for the current fingerprint to differ from a previous fingerprint. Capabilities:
Constraints:
Recommended Usage:
|
| wait_for_ui_changeA | Purpose: Wait for a non-navigation UI mutation or in-place update to become stable. Inputs:
Guidance:
Failure Handling:
|
| expect_screenA | Purpose: Deterministically verify that the intended navigation outcome of an action has occurred. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Constraints:
Failure Handling:
|
| expect_element_visibleA | Purpose: Deterministically verify that the intended UI outcome of an action has occurred by confirming a target element is visible. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Constraints:
Failure Handling:
|
| expect_stateA | Purpose: Verify a readable UI state property on the currently visible element. Inputs:
Supported properties:
Verification Guidance:
Constraints:
Failure Handling:
|
| adjust_controlA | Purpose: Adjust a numeric control value with verification. This is the initial adjustable-control surface for slider-like controls and other controls that expose a numeric value or value_range. Inputs:
Output Structure:
Verification Guidance:
Failure Handling:
|
| wait_for_uiB | Purpose: Resolve elements and/or detect that a UI transition or availability condition has occurred. Capabilities:
Constraints:
Recommended Usage:
|
| find_elementA | Find a UI element by semantic query (text, content-desc, resource-id, class). Returns the best match plus resolution metadata when available, including confidence, selection reason, and fallback alternates. |
| tapA | Purpose: Dispatch a tap at specific screen coordinates. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
Conditional input: optionally supply expectedState { snapshotSessionId, snapshotRevision, timeoutMs? } from a successful get_ui_tree on the same explicit platform/deviceId. A fresh normalized UI-tree check runs immediately before input, even with verification disabled. PRECONDITION_FAILED or PRECONDITION_UNAVAILABLE means no input was dispatched; inspect condition evidence and re-observe before deciding what to do next. Compact failures summarize the fresh condition evidence; use get_interaction_diagnostics with the returned diagnostics reference for the retained UI tree. This is not atomic with OS input delivery. Compact results summarize observations, condition trees, state deltas and readiness probe evidence within a byte budget. Use get_interaction_diagnostics with the returned diagnostics session_id/result_id to retrieve the original result without replaying input. Debug output is unchanged. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| tap_elementA | Purpose: Tap a previously resolved UI element using its elementId. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
This tool reports execution success only. Verification must be done with a separate expect_* tool. Conditional input: optionally supply expectedState { snapshotSessionId, snapshotRevision, timeoutMs? } from a successful get_ui_tree on the same explicit platform/deviceId. A fresh normalized UI-tree check runs immediately before input, even with verification disabled. PRECONDITION_FAILED or PRECONDITION_UNAVAILABLE means no input was dispatched; inspect condition evidence and re-observe before deciding what to do next. Compact failures summarize the fresh condition evidence; use get_interaction_diagnostics with the returned diagnostics reference for the retained UI tree. This is not atomic with OS input delivery. Compact results summarize observations, condition trees, state deltas and readiness probe evidence within a byte budget. Use get_interaction_diagnostics with the returned diagnostics session_id/result_id to retrieve the original result without replaying input. Debug output is unchanged. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| swipeA | Purpose: Dispatch a swipe gesture on Android or iOS. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
Conditional input: optionally supply expectedState { snapshotSessionId, snapshotRevision, timeoutMs? } from a successful get_ui_tree on the same explicit platform/deviceId. A fresh normalized UI-tree check runs immediately before input, even with verification disabled. PRECONDITION_FAILED or PRECONDITION_UNAVAILABLE means no input was dispatched; inspect condition evidence and re-observe before deciding what to do next. Compact failures summarize the fresh condition evidence; use get_interaction_diagnostics with the returned diagnostics reference for the retained UI tree. This is not atomic with OS input delivery. Compact results summarize observations, condition trees, state deltas and readiness probe evidence within a byte budget. Use get_interaction_diagnostics with the returned diagnostics session_id/result_id to retrieve the original result without replaying input. Debug output is unchanged. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| scroll_to_elementA | Purpose: Scroll until a target element becomes visible. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
|
| type_textA | Purpose: Type text into the currently focused Android input field. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
Conditional input: optionally supply expectedState { snapshotSessionId, snapshotRevision, timeoutMs? } from a successful get_ui_tree on the same explicit platform/deviceId. A fresh normalized UI-tree check runs immediately before input, even with verification disabled. PRECONDITION_FAILED or PRECONDITION_UNAVAILABLE means no input was dispatched; inspect condition evidence and re-observe before deciding what to do next. Compact failures summarize the fresh condition evidence; use get_interaction_diagnostics with the returned diagnostics reference for the retained UI tree. This is not atomic with OS input delivery. Compact results summarize observations, condition trees, state deltas and readiness probe evidence within a byte budget. Use get_interaction_diagnostics with the returned diagnostics session_id/result_id to retrieve the original result without replaying input. Debug output is unchanged. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| press_backA | Purpose: Dispatch the Android Back action. Inputs:
Output Structure:
Recommended Usage:
Verification Guidance:
Failure Handling:
Conditional input: optionally supply expectedState { snapshotSessionId, snapshotRevision, timeoutMs? } from a successful get_ui_tree on the same explicit platform/deviceId. A fresh normalized UI-tree check runs immediately before input, even with verification disabled. PRECONDITION_FAILED or PRECONDITION_UNAVAILABLE means no input was dispatched; inspect condition evidence and re-observe before deciding what to do next. Compact failures summarize the fresh condition evidence; use get_interaction_diagnostics with the returned diagnostics reference for the retained UI tree. This is not atomic with OS input delivery. Compact results summarize observations, condition trees, state deltas and readiness probe evidence within a byte budget. Use get_interaction_diagnostics with the returned diagnostics session_id/result_id to retrieve the original result without replaying input. Debug output is unchanged. Results include device_readiness with timestamped device blocker evidence. Android reports supported power/keyguard signals; iOS signals may be unknown or explicitly unsupported. Launch/input dispatch success does not establish app visibility or input readiness. No automatic unlock or wake is performed. |
| classify_action_outcomeA | Classify the outcome of the most recent action into exactly one of: success, no_op, backend_failure, ui_failure, unknown. Use the runtime action result's HOW TO GATHER INPUTS before calling:
RULES (applied in order — stop at first match):
BEHAVIOUR after outcome:
|
| run_journeyA | Run an ordered, bounded sequence of start_app, tap, wait, and deterministic assertion steps against one device. Stops after the first failed step. Tap steps may include expectedState from a successful same-device get_ui_tree. A failed condition blocks that input, retains fresh condition evidence through a diagnostics reference in compact mode, and stops subsequent steps. Conditions are not journey defaults or supported on other step types. |
| get_network_activityA | Returns structured network events captured from platform logs since the last action. Call this immediately after an action when you want backend evidence for a side-effect flow, only if the result is still ambiguous. Do not call more than once per action. Events are filtered to significant (non-background) requests only. Each event includes endpoint, method, statusCode, networkError, status, and durationMs. status values:
Returns { requests: [], count: 0 } when no credible network signals are found. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 53 tools
Several tools have nearly identical purposes, especially get_app_readiness vs wait_for_app_ready, and wait_for_ui vs wait_for_ui_change vs wait_for_screen_change. find_element, wait_for_ui, and get_ui_tree also blur resolution/observation boundaries, making misselection likely despite long descriptions.
Tool names consistently use snake_case, mostly with a verb_noun pattern such as tap_element, start_app, get_debugger_stack, and stop_system_trace. Minor verb-only names like tap and swipe remain clear and internally consistent.
53 tools is far beyond a reasonable scoped surface and includes many overlapping wait/readiness/observation helpers. This is an extreme count mismatch for an agent toolset, increasing selection cost and coordination failure risk.
The surface covers app lifecycle, UI interaction, verification, debugger control, tracing, logs, screenshots, network evidence, build, and install. Minor gaps remain around installation cleanup, permission management, and device-level controls, but core workflows are well covered.