← Back to directory
M

MCP Appium

Official
Appium MCP server for iOS and Android mobile automation
Category
Dev Tools #158 of 438
Stars
★ 512 Very popular
Transport
stdio (local process)
Runtime
Node.js 22+ · Java 8+ · Prebuilt binary Android SDK (adb) fo
Credentials
Optional API key
License
Apache-2.0
Last commit
Tools
20
57FMRS · C

MCP Appium is an Appium-organization-maintained MCP server that exposes Appium mobile automation as tools for AI assistants, covering Android and iOS across simulators, emulators, and real devices, with element finding, gestures, session management, test code generation, a plugin API, and OpenTelemetry tracing. It targets teams already using Appium for mobile testing, installs primarily over stdio via npx, and uses environment variables for capability gating. Important boundaries: it is designed as a local single-user server or a trusted CI component rather than a shared service for untrusted clients, and remote server URLs, vision model calls, and disconnect cleanup behavior all require explicit configuration.

Strongest · Documentation 14/20 Weakest · Reliability 9/20

Reliability
9/20
Security and permissions
12/20
Maintenance
11/20
Documentation
14/20
Setup experience
11/20
Why each score
Reliability 9/20
From the static artifacts only (README, server.json), the manifest is internally consistent: package identifier appium-mcp, version 1.94.0, npm registry type and stdio transport are coherent, and the README documents session lifecycle, disconnect cleanup policies (delete_all/skip) and normalized error codes, which suggests diagnosable failures. However, no CI workflows, committed tests, or reproducible logs are visible, and the tool table is truncated, so declared tools cannot be verified against actual registrations. Static calibration caps this dimension, and the score is pulled down by missing executable evidence and unproven edge-case/error handling.
Security and permissions 12/20
No red line is triggered: no malware, credential theft, covert exfiltration, or default destructive remote commands. The README shows real security awareness: AI vision and documentation tools are opt-in and env-gated, remoteServerUrl supports REMOTE_SERVER_URL_ALLOW_REGEX allowlisting, query strings/fragments are rejected, redirects are not followed for capability discovery, URL userinfo is redacted from logs, and persisted session files use 0600 permissions. Still, defaults are permissive: any HTTP(S) destination is accepted when the regex is unset, and client disconnect deletes all MCP-owned Appium sessions without confirmation, a potentially destructive side effect. remoteServerUrl and capabilities are injectable via tool arguments with no mandatory confirmation step, and there is no process-level least-privilege or sandbox constraint, so the score lands mid-range.
Maintenance 11/20
The license is a clear Apache-2.0, and versioning at 1.94.0 with frequent-looking iteration suggests active release cadence; 477 stars, 23 open issues and a non-archived repo are activity signals (treated only as discovery, not scoring credit). The dependency stack (appium-uiautomator2-driver, appium-xcuitest-driver, FastMCP) and README treatment of OpenTelemetry, plugin API and an optional docs package indicate some governance thinking. But no commit history, release notes, dependency-update policy, security response channel, or explicit maintainer ownership is visible in the static material, so verifiable maintenance evidence is incomplete and the score is capped below full marks.
Documentation 14/20
Coverage is notably broad: installation (one-click Cursor, Gemini CLI, Claude Code), a full environment variable table, capabilities samples, the general platform mode, multi-session and sessionId guidance, disconnect-cleanup tradeoffs, screen recording, AI vision model benchmarks and coordinate handling, NO_UI/MCP Apps performance tradeoffs, a plugin API with lifecycle, and a remote server trust model with regex allowlist examples. No real tokens or secrets appear in the examples. Deductions: the tool table is truncated in the supplied material, several parameters and response shapes lack complete examples, troubleshooting is thin, and benchmark claims such as 100% accuracy cannot be independently verified through static review.
Setup experience 11/20
The installation path is clear: Node 22+, JDK, Android SDK and Xcode prerequisites are stated, the npx appium-mcp@latest stdio config is reusable across mainstream clients, and Cursor deep links plus Gemini CLI and Claude Code CLI commands are provided. In practice, however, it depends on heavy manual environment preparation (local Android SDK/ANDROID_HOME, Xcode and device signing, real-device provisioning profiles, ffmpeg), which is fragile, and general platform mode requires remoteServerUrl. End-to-end reproducible integration examples and common failure troubleshooting are absent, so the score stays below the static calibration ceiling.

Static review · not runListed 2026-09-18

Read the FMRS scoring method →

Fit and risk

What it can accessRuns commands or codeUses the networkControls a browser

Best for

  • Teams doing Android/iOS automation testing with Appium
  • Developers who want to create and debug mobile tests in natural language
  • Engineering teams that need generated test code and Page Object templates
  • Teams running mobile automation in trusted CI environments

Not for

  • Shared or multi-tenant services exposed to untrusted users
  • Environments without Android SDK, Xcode, or a Java toolchain
  • Pure browser or desktop web automation instead of mobile

Required permissions

  • Read access to the local Android SDK and Xcode/simulator setup
  • Access to local mobile devices or emulators through adb or simulator tooling
  • Read/write access to the screenshots and recordings directory (SCREENSHOTS_DIR or the system temp directory)
  • Optional: network access to a remote Appium/WebDriver server (remoteServerUrl)
  • Optional: outbound calls to an external vision model API (AI_VISION_API_BASE_URL and AI_VISION_API_KEY)

Risks and side effects

  • remoteServerUrl is caller-controlled; if it is derived from untrusted input it can reach unintended servers, so restrict destinations with REMOTE_SERVER_URL_ALLOW_REGEX
  • By default the server deletes all MCP-owned Appium sessions when the MCP client disconnects, and transports that drop easily such as httpStream can tear down automation in one go; use APPIUM_MCP_ON_CLIENT_DISCONNECT=skip to keep them
  • Enabling vision element finding sends screenshots to a third-party vision API, which can incur cost and data exposure
  • Persisted session files may contain credentials and sensitive capabilities (created with 0600 permissions)
  • Plugins execute inside the server process, so only trusted files and packages should be loaded

Setup

Before you start

Runtime:Node.js 22+ · Java 8+ · Prebuilt binary Android SDK (adb) fo

AI_VISION_API_KEY optionalsecret API key for the vision model provider; required when AI_VISION_ENABLED=true; keep secret.
Other optional settings (24)
ANDROID_HOME optional Path to your Android SDK installation (e.g. /Users/xyz/Library/Android/sdk); needed for Android testing.
CAPABILITIES_CONFIG optional Absolute path to a capabilities. file with per-platform capability presets; optional.
SCREENSHOTS_DIR optional Directory for screenshots and screen recordings; defaults to the system temp directory; optional.
NO_UI optional Set to true/1 to disable HTML UI components for faster responses and fewer tokens; optional.
APPIUM_MCP_APPS_ENABLED optional Set to false/0 to force the embedded UI compatibility fallback; MCP Apps static UI is enabled by default; optional.
APPIUM_MCP_ON_CLIENT_DISCONNECT optional Session cleanup policy on client disconnect: delete_all (default) or skip; optional.
APPIUM_MCP_WDA_APP_PATH optional Path to a local WebDriverAgentRunner-Runner.app bundle to skip GitHub downloads; optional.
REMOTE_SERVER_URL_ALLOW_REGEX optional Regex restricting which remote Appium server URLs may be connected to; optional.
AI_VISION_ENABLED optional Set to true to register the appium_ai vision element-finding tool; optional, off by default.
AI_VISION_API_BASE_URL optional Base URL of an OpenAI-compatible vision model API; required when AI_VISION_ENABLED=true.
AI_VISION_MODEL optional Vision model name; defaults to Qwen3-VL-235B-A22B-Instruct; optional.
AI_VISION_COORD_TYPE optional Coordinate type: normalized (default) or absolute; optional.
AI_VISION_IMAGE_MAX_WIDTH optional Max image width in pixels before compression; default 1080; optional.
AI_VISION_IMAGE_QUALITY optional JPEG quality 1-100 for compressed screenshots; default 80; optional.
APPIUM_MCP_DOCS_ENABLED optional Set to true to enable documentation tools; requires installing @appium/mcp-documentation separately; optional.
SENTENCE_TRANSFORMERS_MODEL optional Hugging Face model for semantic doc search; default Xenova/all-MiniLM-L6-v2; optional.
APPIUM_MCP_PERSIST_REMOTE_SESSIONS_PATH optional Directory path for persisting attached remote session info; optional.
APPIUM_MCP_EVIDENCE optional Set to true/1 to attach structured action evidence records to tool responses for CI/debugging; optional.
APPIUM_MCP_OTEL_ENABLED optional Set to true to enable OpenTelemetry tracing; disabled by default; optional.
APPIUM_MCP_OTEL_INCLUDE_ARGUMENT_VALUES optional Set to true to include sanitized argument values in spans; optional.
OTEL_SERVICE_NAME optional Service name reported to the OpenTelemetry collector, e.g. appium-mcp; optional.
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT optional OTLP/HTTP traces endpoint, e.g. http://127.0.0.1:4318/v1/traces; optional.
OTEL_TRACES_SAMPLER optional Trace sampling strategy, e.g. parentbased_always_on; optional.
OTEL_RESOURCE_ATTRIBUTES optional Comma-separated key=value resource attributes attached to every span; optional.
  1. Make sure Node.js v22 or higher, npm or yarn, and JDK 8 or higher are installed; install the Android SDK and set ANDROID_HOME for Android testing, and Xcode on macOS for iOS testing.
  2. Add the server to your MCP client config: command npx, args ["appium-mcp@latest"], type stdio, with ANDROID_HOME set in env.
  3. Optionally create capabilities.json and point CAPABILITIES_CONFIG at it; you can also use the Cursor one-click install button, gemini mcp add appium-mcp npx -y appium-mcp@latest, or claude mcp add appium-mcp -- npx -y appium-mcp@latest.
  4. Call select_device first, then create a session to start automating.
.cursor/mcp.json
{
  "mcpServers": {
    "appium-mcp": {
      "disabled": false,
      "timeout": 100,
      "type": "stdio",
      "command": "npx",
      "args": ["appium-mcp@latest"],
      "env": {
        "ANDROID_HOME": "/path/to/android/sdk",
        "CAPABILITIES_CONFIG": "/path/to/your/capabilities.json"
      }
    }
  }
}

Shown for Cursor. Other clients may use a different file or key (VS Code uses "servers") — the configurator below converts it.

.vscode/mcp.json
{
  "servers": {
    "appium-mcp": {
      "disabled": false,
      "timeout": 100,
      "type": "stdio",
      "command": "npx",
      "args": [
        "appium-mcp@latest"
      ],
      "env": {
        "ANDROID_HOME": "/path/to/android/sdk",
        "CAPABILITIES_CONFIG": "/path/to/your/capabilities.json"
      }
    }
  }
}

Goes in your project's .vscode/mcp.json (VS Code uses a "servers" key).

Terminal
claude mcp add appium-mcp -e ANDROID_HOME=/path/to/android/sdk -e CAPABILITIES_CONFIG=/path/to/your/capabilities.json -- npx appium-mcp@latest

Run it in a terminal; replace any <…> placeholders with your own values first.

Check that it works

The client's tool list should show select_device and appium_session_management; ask the AI to run select_device — a returned device list confirms the connection works.

Troubleshooting

  1. Server fails to start complaining about AI_VISION_API_BASE_URL or AI_VISION_API_KEY: AI_VISION_ENABLED=true was set without both API variables
  2. The appium_ai tool is missing: confirm AI_VISION_ENABLED is set to true
  3. Documentation tools are missing: confirm @appium/mcp-documentation is installed and APPIUM_MCP_DOCS_ENABLED is true
  4. Remote server connections are rejected: check REMOTE_SERVER_URL_ALLOW_REGEX and whether the URL contains a query string or fragment
  5. Sessions disappear after the client reconnects: set APPIUM_MCP_ON_CLIENT_DISCONNECT to skip
  6. iOS screen recording fails: verify ffmpeg is installed and on PATH
  7. Responses are too large or slow: set NO_UI=true or NO_UI=1

Things to try

Once connected, you can ask your AI assistant things like:

  • Find my connected Android devices and select one.
  • Boot my iPhone simulator, launch the app, and take a screenshot.
  • Scroll down until the login button appears, then tap it.
  • Start screen recording on the Android device and give me the video file path when done.

Tools 20

select_device read-only
Required first step: discover available devices and select one; auto-selects when only one device is found.
prepare_ios_simulator writes
Boot an iOS/tvOS simulator, download WebDriverAgent if not cached, and install/launch WDA in a single call.
appium_prepare_ios_real_device writes
Prepare a real iOS device: first list available .mobileprovision profiles, then download WDA for the chosen UUID, package it as an IPA, and resign it.
appium_session_management writes
Unified session management: create, attach, detach, delete, list, and select sessions.
appium_mobile_device_control writes
Control device behavior: lock/unlock the screen, shake the device, or open the notifications panel.
appium_driver_settings read-only
Read or update Appium driver session settings.
appium_context writes
Manage contexts: list available native and WebView contexts, or switch to a target context.
appium_find_element read-only
Find an element with traditional locator strategies, prioritizing accessibility id, id, and platform-native strategies before xpath.
Show 12 more tools
appium_ai read-only
Opt-in (requires AI_VISION_ENABLED=true): vision-based natural-language element finding that returns a coordinate handle for gesture tools.
appium_gesture writes
Perform a touch gesture: back, tap, double tap, long press, scroll, swipe, pinch zoom, or scroll until an element appears.
appium_drag_and_drop writes
Perform drag and drop gestures between elements and/or coordinates.
appium_perform_actions writes
Execute raw W3C Actions API sequences for custom multi-touch gestures.
appium_set_value writes
Enter text into an input field.
appium_screenshot read-only
Capture a screenshot of the device.
appium_get_page_source read-only
Retrieve the current page source.
generate_locators read-only
Generate element locators.
appium_screen_recording writes
Start or stop screen recording as an MP4 file.
appium_app_lifecycle writes
Manage app lifecycle, including listing apps.
appium_documentation_query read-only
RAG search over the Appium documentation (opt-in, requires the optional package).
appium_skills read-only
Skill-related documentation tooling for Appium (opt-in, requires the optional package).

Use cases

Drive Android or iOS app automation from an AI assistant using natural language
Generate Java/TestNG test code from natural-language descriptions
Run mobile automation in CI with NO_UI mode to save tokens and bandwidth
Use vision models to locate UI elements that resist traditional locators
Query Appium documentation through appium_documentation_query

Supported clients

Cursor
Claude Code
Gemini CLI

Listed from the project's documentation, not tested by this site.

Overview

MCP Appium is a Model Context Protocol server that gives AI assistants a suite of tools for mobile automation on Android (UiAutomator2) and iOS (XCUITest), covering simulators, emulators, and real devices. It supports natural-language element finding, intelligent locator generation, interactive session management, touch gestures, and automated generation of Java/TestNG test code with Page Object Model templates. It runs over stdio via npx appium-mcp@latest, bundles the UiAutomator2 and XCUITest drivers for embedded local sessions, and can also connect to a remote Appium/WebDriver server through remoteServerUrl. The project is maintained by the Appium organization under the Apache-2.0 license.

Similar servers

Context7 80 · B

Upstash's official server providing up-to-date third-party library docs for AI coding assistants

★ 64.1k · Tools 2 Compare with this →

Source revision 460d6ebcbc06 Data synced 2026-11-02 Read the FMRS scoring method