MobiLoop MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MOBILOOP_CONFIG | No | Path to a JSON configuration file. Optional; if not set, defaults are used. | |
| MOBILOOP_RUN_ID | No | Optional run identifier; artifacts are written under .mobiloop/runs/<id> when set. | |
| APPIUM_SERVER_URL | No | The URL of the Appium server. Defaults to http://127.0.0.1:4723 in trusted mode; in secure mode, it must be set in the host environment. | http://127.0.0.1:4723 |
| MOBILOOP_ARTIFACTS_DIR | No | Path to a dedicated directory for evidence, logs, screenshots, reports, and flow memory. Defaults to .mobiloop in the workspace root. | |
| MOBILOOP_SECURITY_MODE | No | Set to 'secure' to ignore project-local config and enforce host-controlled settings, or 'trusted' to allow explicit overrides from config. | |
| MOBILOOP_WORKSPACE_ROOT | Yes | Absolute path to the mobile app workspace that the MCP server may access. | |
| AGENTIC_MOBILE_MCP_CONFIG | No | Legacy fallback for MOBILOOP_CONFIG. New projects should use MOBILOOP_CONFIG. | |
| MOBILOOP_REQUIRE_APPROVAL | No | Set to 'true' to require approval payloads for high-impact tools (default in secure mode). | |
| AGENTIC_MOBILE_WORKSPACE_ROOT | No | Legacy fallback for MOBILOOP_WORKSPACE_ROOT. New projects should use MOBILOOP_WORKSPACE_ROOT. |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| code.read_fileA | Read a non-secret file inside workspaceRoot. |
| code.search_codeB | Search workspaceRoot. Uses ripgrep when available and falls back to a built-in scanner. |
| code.apply_patchA | [approval required][workspace write][risk:dangerous] Apply a unified diff after validating all touched paths stay inside workspaceRoot and are not forbidden. |
| code.git_diffC | Return git diff for workspaceRoot. |
| code.create_branchA | [approval required][workspace write][risk:dangerous] Create and checkout a guarded feature branch. Branch must match allowedBranchPattern. |
| code.commit_changesA | [approval required][workspace write][risk:dangerous] Commit changes only while on an allowed feature/ai branch. Optionally stage specific non-secret paths. |
| code.open_prB | [approval required][workspace write][risk:dangerous] Open a pull request with GitHub CLI from the current allowed feature branch. |
| env.preflightB | Check host/project readiness for Android, iOS, Flutter, React Native, CI, or all environments. |
| env.compatibility_matrixB | Return supported host/platform requirements for this MCP package. |
| env.ensure_appiumA | [approval required][workspace write][network][risk:network] Check Appium readiness, optionally install a driver and start a detached Appium server. |
| build.detect_projectB | Detect Flutter, React Native, or native Android project type. |
| build.install_dependenciesA | [approval required][workspace write][network][risk:dangerous] Install dependencies for the detected or specified mobile project type. |
| build.run_lintA | [approval required][workspace write][network][risk:dangerous] Run lint/static analysis for Flutter, React Native, or Android. |
| build.run_unit_testsA | [approval required][workspace write][network][risk:dangerous] Run unit tests for Flutter, React Native, or Android. |
| build.build_debug_apkA | [approval required][workspace write][network][risk:dangerous] Build a debug APK and return discovered APK artifact paths. |
| build.build_release_candidateB | [approval required][workspace write][network][risk:dangerous] Build a release candidate APK. Release signing requirements are delegated to the target project. |
| build.collect_build_logsB | List build log artifacts emitted by this MCP server. |
| device.list_devicesA | List Android devices via adb devices -l. |
| device.start_emulatorA | [approval required][device mutation][risk:dangerous] Start an Android emulator by AVD name. Returns after launching or optional boot wait. |
| device.stop_emulatorA | [approval required][device mutation][risk:dangerous] Stop an Android emulator through adb emu kill. |
| device.install_appA | [approval required][device mutation][risk:dangerous] Install or replace an APK on an Android device. |
| device.uninstall_appB | [approval required][device mutation][risk:dangerous] Uninstall an Android package from a device. |
| device.clear_app_dataB | [approval required][device mutation][risk:dangerous] Clear app data for an Android package. |
| device.grant_permissionsB | [approval required][device mutation][risk:dangerous] Grant one or more Android runtime permissions to a package. |
| device.capture_screenshotC | Capture a PNG screenshot from an Android device into artifacts. |
| device.pull_logsB | Pull Android logcat into artifacts. Optionally filter by package pid when available. |
| ios.list_simulatorsA | List available iOS simulators via xcrun simctl. |
| ios.boot_simulatorA | [approval required][device mutation][risk:dangerous] Boot an iOS simulator and optionally wait until boot completes. |
| ios.shutdown_simulatorB | [approval required][device mutation][risk:dangerous] Shutdown an iOS simulator. |
| ios.build_appC | [device mutation][risk:device] Build an iOS simulator app with xcodebuild into MCP artifacts. |
| ios.install_appB | [approval required][device mutation][risk:dangerous] Install an .app bundle on an iOS simulator. |
| ios.launch_appA | [approval required][device mutation][risk:dangerous] Launch an installed iOS simulator app by bundle id. |
| ios.capture_screenshotB | Capture an iOS simulator screenshot into artifacts. |
| ios.collect_logsC | Collect recent simulator logs into artifacts. |
| appium.create_sessionA | [approval required][device mutation][risk:dangerous] Create an Appium session. Pass W3C capabilities or raw capabilities object. |
| appium.delete_sessionC | [approval required][device mutation][risk:dangerous] Delete an Appium session. |
| appium.observe_screenC | Capture screenshot and page source for the current Appium session, optionally waiting for app UI readiness. |
| appium.get_page_sourceC | Return raw Appium page source XML. |
| appium.get_accessibility_treeC | Return a compact accessibility summary parsed from page source. |
| appium.tap_by_textA | [approval required][device mutation][risk:dangerous] Tap a visible element by text with exact-first matching before contains fallback. |
| appium.tap_by_accessibility_idC | [approval required][device mutation][risk:dangerous] Tap by accessibility id. |
| appium.tap_by_resource_idC | [approval required][device mutation][risk:dangerous] Tap by Android resource id or Appium id locator. |
| appium.tap_coordinatesA | [approval required][device mutation][risk:dangerous] Tap screen coordinates. Use only when semantic locators are unavailable. |
| appium.type_textC | [approval required][device mutation][risk:dangerous] Type text into an element located by accessibility id, id, xpath, text, or native selector. |
| appium.swipeC | [approval required][device mutation][risk:dangerous] Perform a touch swipe by coordinates. |
| appium.go_backC | [approval required][device mutation][risk:dangerous] Send Android/iOS back navigation to the Appium session. |
| appium.wait_for_visibleC | Wait until a locator becomes visible. |
| appium.assert_visibleB | Assert that a locator is visible. Returns passed false instead of throwing when not visible. |
| appium.assert_not_visibleC | Assert that a locator is not visible within timeout. |
| verify.assert_screen_contains_textC | Assert current Appium page source contains expected text. |
| verify.assert_no_crash_in_logcatC | Assert logcat or a saved log file has no crash signatures. |
| verify.assert_appium_session_healthyB | Assert the Appium session and page source are reachable, distinguishing automation failures from app crashes. |
| verify.assert_api_responseA | [network][risk:network] Call an API and assert status and optional body substrings. |
| verify.collect_evidenceC | Collect screenshot, page source, and logcat evidence where available. |
| verify.assert_navigation_reachedC | Assert a navigation target by expected Appium page source text. |
| verify.assert_accessibility_labelsC | Assert clickable or input-like nodes have a text, label, name, content-desc, or resource-id. |
| verify.assert_screenshot_diffC | Compare two PNG screenshots and assert the pixel diff ratio is at or below maxDiffRatio. |
| verify.assert_sqlite_queryB | Run a read-only sqlite query and assert exact output or expected substring. |
| verify.hash_artifactB | Compute SHA-256 for a workspace artifact or evidence file. |
| flow.analyze_from_codeC | Infer mobile screens, routes, transitions, and visible text candidates from source code. |
| flow.generate_test_scenariosC | Generate candidate mobile E2E scenarios from static source-flow analysis for an AI agent to execute/refine. |
| flow.run_scriptB | [approval required][device mutation][risk:dangerous] Run a high-level JSON flow DSL over an Appium session: waitText, tapText, type, assertText, observe, collectEvidence, back, swipe, checkpoint. |
| flow.record_checkpointC | [workspace write][risk:write] Record a runtime screen checkpoint from Appium source/session and optional action needed to reach the next checkpoint. |
| flow.record_test_runA | [workspace write][risk:write] Record the ordered checkpoint ids for a test run. The latest passed run becomes the default replay path. |
| flow.plan_replayC | Match the current screen against recorded checkpoints and return Appium actions needed to reach a target checkpoint. |
| flow.replay_to_checkpointB | [approval required][device mutation][risk:dangerous] Auto-advance an Appium session from a previously seen screen to the latest or requested checkpoint. |
| flow.read_memoryB | Read recorded flow checkpoints, runs, and code-flow analyses. |
| flow.clear_memoryB | [approval required][workspace write][risk:dangerous] Clear flow memory under artifactsDir. This does not modify app source code. |
| loop.record_iterationB | [workspace write][risk:write] Append one build-test-verify loop iteration as JSONL evidence. |
| loop.generate_reportC | [workspace write][risk:write] Generate a Markdown report from recorded iterations. |
| loop.read_iterationsB | Read recorded loop iterations. |
| ci.collect_artifact_manifestA | Create a JSON manifest of files under the MCP artifacts directory. |
| ci.write_github_step_summaryB | [workspace write][risk:write] Append Markdown to GitHub Actions step summary or a workspace fallback file. |
| ci.comment_prA | [approval required][workspace write][network][risk:dangerous] Create a GitHub PR comment through gh. Uses current PR when prNumber is omitted. |
| ci.create_github_annotationsA | [workspace write][risk:write] Emit GitHub Actions warning/error annotations from findings. |
| orchestrator.run_android_validation_loopC | [approval required][device mutation][risk:dangerous] Run build -> install -> Appium scripted test -> verification -> evidence -> loop record for Android. |
| orchestrator.run_ios_validation_loopC | [approval required][device mutation][risk:dangerous] Run iOS simulator build -> install/launch -> Appium XCUITest scripted test -> verification -> evidence -> loop record. |
| security.scan_sourceA | Scan mobile source and platform configuration for deterministic security signals without running target code. |
| security.generate_test_planA | Generate a deterministic mobile security test plan from a source-scan report for an AI or engineer to execute. |
| security.compare_scansB | Re-run the deterministic source scan and compare it with a baseline report after fixes. |
| security.release_gateB | Evaluate a source-scan report against a severity threshold before release or merge. |
| policy.list_toolsC | List effective tool policy metadata for MCP clients and approval gates. |
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 82 tools
Multiple tools have overlapping boundaries, especially around verification and evidence collection: verify.assert_screen_contains_text and verify.assert_navigation_reached both assert page-source text, while appium.observe_screen, verify.collect_evidence, and device.capture_screenshot all capture screen/evidence data. The many tap variants and several record/report/generate tools also make misselection likely without very careful description reading.
Tool names largely follow a consistent snake_case verb-first pattern with namespace prefixes, such as list_devices, build_debug_apk, and assert_visible. Minor deviations like code.git_diff and env.compatibility_matrix are noun-phrase names, and verbs like write/create/run are used somewhat interchangeably, but the overall convention is recognizable.
At 82 tools, the surface is extremely overgrown regardless of the server's broad mobile validation scope. Even accounting for Android, iOS, Appium, build, verification, flow memory, security, and CI, the count far exceeds what an agent can navigate efficiently. Many tools could be consolidated or exposed as parameterized subcommands.
The tool set covers the core mobile validation lifecycle well: build, install, launch, automate via Appium, verify, collect evidence, record flows, run security gates, and report to CI. Minor gaps exist, such as no direct Android app launch/stop utility, no iOS uninstall or clear-data operation, and limited Appium gesture coverage beyond coordinate swipes.