App Screen MCP Server

Local setup required. This server has to be cloned and prepared on your machine before you register it in Claude Code.
1

Set the server up locally

Run this once to clone and prepare the server before adding it to Claude Code.

Run in terminal
npm install -g app-screen-mcp
2

Register it in Claude Code

After the local setup is done, run this command to point Claude Code at the built server.

Run in terminal
claude mcp add app-screen-mcp -- node "<FULL_PATH_TO_APP_SCREEN_MCP>/dist/index.js"

Replace <FULL_PATH_TO_APP_SCREEN_MCP>/dist/index.js with the actual folder you prepared in step 1.

README.md

MCP server for reliable iOS Simulator automation.

app-screen-mcp

MCP server for reliable iOS Simulator automation.
Control simulators, read accessibility UI trees, capture screenshots,
and run grounded agent actions through one
Model Context Protocol server.

Why this exists

Most mobile automation breaks when scripts act without observing current screen state.

app-screen-mcp fixes that by combining:

  • Accessibility structure from idb ui describe-all
  • Real pixels from Simulator screenshots
  • Deterministic interactions (tap, type_text, swipe, hardware buttons)

This gives agents a closed loop: observe, reason, act, verify.

What you get

  • Simulator discovery and boot control
  • App launch and termination by bundle ID
  • Full normalized accessibility tree
  • JPEG screenshots with size/quality controls
  • Image-hash suppression to skip unchanged screenshots
  • Semantic actions by text or accessibility ID
  • Relative-coordinate taps for resolution-independent flows
  • One-call screen summary (UI tree + optional screenshot)

Architecture

MCP Client / Agent
        |
        v
   app-screen-mcp
        |
        +--> xcrun simctl (devices, app lifecycle, screenshots)
        |
        +--> idb (UI tree, tap, swipe, type, hardware buttons)
        |
        v
   iOS Simulator

Prerequisites

  • macOS with Xcode + iOS Simulator
  • Node.js 18+
  • idb tooling

Manual install for idb:

brew tap facebook/fb
brew install idb-companion
pip3 install fb-idb

Install

Option 1: one-step installer (recommended)

bash <(curl -fsSL https://raw.githubusercontent.com/xmuweili/app-screen-mcp/main/install.sh)

The script checks/installs:

  • Xcode Command Line Tools
  • Homebrew
  • Node.js (18+)
  • idb-companion
  • fb-idb
  • app-screen-mcp (global npm package)

Option 2: global npm install

npm install -g app-screen-mcp

Option 3: from source

git clone https://github.com/xmuweili/app-screen-mcp.git
cd app-screen-mcp
npm install
npm run build

Configure your MCP client

Claude Desktop

Config file: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "ios-simulator": {
      "command": "node",
      "args": ["/absolute/path/to/app-screen-mcp/dist/index.js"]
    }
  }
}

Cursor / VS Code MCP

Common config paths:

  • .cursor/mcp.json
  • .vscode/mcp.json

Use the key your client expects: mcpServers or mcp.servers.

{
  "mcpServers": {
    "ios-simulator": {
      "command": "node",
      "args": ["/absolute/path/to/app-screen-mcp/dist/index.js"]
    }
  }
}

Restart your MCP client after updating config.

Tool reference (15 tools)

Tool Purpose
list_simulators List simulators and boot state
boot_simulator Boot simulator by UDID
launch_app Launch app by bundle_id
terminate_app Force-quit app by bundle_id
get_ui_tree Return normalized accessibility tree
take_screenshot Capture JPEG screenshot with compression and unchanged-image suppression
get_screen_summary Return tree + optional screenshot with token-saving options
tap Tap absolute (x, y)
tap_relative Tap relative (rx, ry) in [0,1]
type_text Type into focused field
swipe Swipe between points with optional duration
press_button Press HOME, LOCK, SIDE_BUTTON, or SIRI
find_elements Search tree by label/value/hint text
tap_text Find best text match and tap target point
tap_id Tap by accessibility identifier

Quick usage patterns

1) Observe without image (cheap)

{
  "name": "get_screen_summary",
  "arguments": {
    "include_image": false,
    "compact_tree": true
  }
}

2) Add image when visual confirmation is required

{
  "name": "get_screen_summary",
  "arguments": {
    "include_image": true,
    "max_dim": 720,
    "quality": 55
  }
}

3) Skip unchanged screenshots

{
  "name": "get_screen_summary",
  "arguments": {
    "include_image": true,
    "only_if_changed": true,
    "previous_image_hash": "<last_hash>"
  }
}

4) Stable interaction flow

1. get_screen_summary(include_image=false)
2. find_elements("Sign In")
3. tap_id("login_email") or tap_text("Email")
4. type

Tools (15)

list_simulatorsList simulators and boot state
boot_simulatorBoot simulator by UDID
launch_appLaunch app by bundle_id
terminate_appForce-quit app by bundle_id
get_ui_treeReturn normalized accessibility tree
take_screenshotCapture JPEG screenshot with compression and unchanged-image suppression
get_screen_summaryReturn tree + optional screenshot with token-saving options
tapTap absolute (x, y)
tap_relativeTap relative (rx, ry) in [0,1]
type_textType into focused field
swipeSwipe between points with optional duration
press_buttonPress HOME, LOCK, SIDE_BUTTON, or SIRI
find_elementsSearch tree by label/value/hint text
tap_textFind best text match and tap target point
tap_idTap by accessibility identifier

Configuration

claude_desktop_config.json
{"mcpServers": {"ios-simulator": {"command": "node", "args": ["/absolute/path/to/app-screen-mcp/dist/index.js"]}}}

Try it

List all available iOS simulators and boot the one with the latest iOS version.
Launch the app with bundle ID 'com.example.app' and take a screenshot to verify it loaded.
Get the current UI tree of the simulator and find the 'Sign In' button.
Type 'my-email@example.com' into the email field and tap the login button.
Perform a swipe gesture from the bottom to the top of the screen to refresh the feed.

Frequently Asked Questions

What are the key features of App Screen MCP?

Simulator discovery and boot control. App launch and termination by bundle ID. Full normalized accessibility tree extraction. JPEG screenshots with size and quality controls. Semantic actions by text or accessibility ID.

What can I use App Screen MCP for?

Automated UI testing for iOS applications using AI agents.. Creating closed-loop observe-reason-act cycles for mobile app navigation.. Resolution-independent interaction flows using relative coordinates.. Visual verification of app states during automated workflows..

How do I install App Screen MCP?

Install App Screen MCP by running: bash <(curl -fsSL https://raw.githubusercontent.com/xmuweili/app-screen-mcp/main/install.sh)

What MCP clients work with App Screen MCP?

App Screen MCP works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep App Screen MCP docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Need the old visual installer? Open Conare IDE.
Open Conare