Skip to main content

An MCP server and importable Python module that wraps Facebook IDB to control iOS simulators for automation. Implemented by AskUI.

Project description

IDB-MCP

PyPI Python Versions License

An open-source MCP server and Python library that wraps Facebook IDB to control iOS simulators for automation. Built by AskUI.

This project is based on the Facebook IDB CLI (fb-idb). See the GitHub repository (facebook/idb) and the Python package (fb-idb on PyPI).

What it is

  • MCP server: Exposes a set of iOS automation tools (list/select device, screenshot, tap, swipe, type, etc.) over MCP transports (HTTP, SSE or stdio) using fastmcp.
  • Python module: Import to manage and control iOS simulators programmatically.

Table of contents

Key features

  • Device management 🔧: list devices, select by UDID or name, boot/shutdown, kill IDB.
  • Input control 👆: tap, swipe, type text, tap keys, tap buttons.
  • Screen utilities 🖼️: capture screenshots, query screen size, get view description.
  • Image/coord scaling 📐: optional scaling to a target viewport for consistent coordinates.

Limitations

⚠️ Only iOS simulators are supported for UI control. Due to iOS security constraints, idb cannot interact with or automate the UI on real, physical devices. AskUI offers a solution for real-device UI automation—contact support@askui.com for more information.

Requirements

  • Runs on macOS only.

  • Python >= 3.10

  • Xcode with iOS Simulators installed and configured.

    • Verify simulators are visible:

      xcrun xctrace list devices
      
  • Facebook IDB companion (using brew):

    brew tap facebook/fb
    brew install idb-companion
    

Install

pip install idb-mcp

Quick start (CLI)

Why MCP?

Using MCP lets your favorite AI tools connect to idb-mcp seamlessly. The client handles launching and communicating with the server, so you can ask for screenshots, taps, swipes, and more—without leaving your workflow. ✨

Start MCP server

The package installs an idb-mcp command.

# Start MCP server over HTTP (default host/port managed by fastmcp)
idb-mcp start http
# Or start over SSE
idb-mcp start sse
# Or start over stdio
idb-mcp start stdio
# Optionally scale images/coordinates to a given target viewport (width height)
idb-mcp start http --target-screen-size 1280 800
# Discover available options
idb-mcp --help
idb-mcp start --help

Programmatic usage (Python)

from idb_mcp import IDBController, IOSDevice

# Initialize the IDB controller
controller = IDBController()
# Select the device by name
selected_device: IOSDevice = controller.select_device_by_name("iPhone 17 Pro Max")
# Boot the selected device
selected_device.boot()
# Get the current view description of the selected device
current_view_description: str = selected_device.get_current_view_description()
print(current_view_description)
# Shutdown the selected device
selected_device.shutdown()

Add to your favorite tools

You can use idb-mcp in any MCP-compatible client (e.g., Cursor, Claude Desktop) by adding a server entry to your client's MCP config. The client will launch the server on demand.

Steps:

  • Open your client's MCP configuration file (location varies by client).
  • Add an entry named askui-idb-mcp that starts the server over STDIO and sets a recommended target screen size.

Example configuration:

using uv (Make sure you have uv installed):

{
  "mcpServers": {
    "askui-idb-mcp": {
      "command": "uvx",
      "args": [
        "idb-mcp@latest",
        "start",
        "stdio",
        "--target-screen-size",
        "1280",
        "800"
      ]
    }
  }
}

Alternative (if idb-mcp is directly on your PATH without uv):

{
  "mcpServers": {
    "askui-idb-mcp": {
      "command": "idb-mcp",
      "args": [
        "start",
        "stdio",
        "--target-screen-size",
        "1280",
        "800"
      ]
    }
  }
}

Notes:

  • The --target-screen-size 1280 800 setting improves coordinate reliability, especially for models like Claude.

Configuration

  • Target screen size 📐: You can scale screenshots and coordinate inputs to a target viewport when starting the MCP server via CLI (--target-screen-size W H) or programmatically (target_screen_size=(W, H)).
  • Mode 📐: You can start the MCP server in stdio, http, or sse mode.
  • Port 📐: You can start the MCP server on a specific port via CLI (--port PORT) or programmatically (port=PORT).

Troubleshooting

  • Cannot see devices 🔍: Make sure you have an iOS simulator or device connected and running. Verify with:

    xcrun xctrace list devices
    

    Example output:

    iPhone 17 Simulator (26.0) (32E2219C-ED40-452F-9A4D-XXXXXXX)
    iPhone 17 Pro Simulator (26.0) (764CCCB7-D84D-46EC-B62D-XXXXXXX)
    iPhone 17 Pro Max Simulator (26.0) (065382B5-56B4-4864-8174-XXXXXXX)
    
  • High-resolution screenshots with some LLMs 🧠: Some LLM backends struggle to process very high-resolution images, resulting in poor coordinate detection or tapping errors. Use rescaling via --target-screen-size (or target_screen_size in Python) to downscale screenshots and coordinates. For Claude models, we recommend 1280 800.

Development

This repository uses PDM and Ruff for dev tooling.

# Install dev deps
pip install pdm
pdm install --with dev

# Lint / Format
pdm run lint-check
pdm run format-check
# Type check
pdm run type-check

Contributing

Contributions are welcome! 🙌 Please open an issue or pull request on GitHub. Questions? Email us at support@askui.com.

License

MIT License

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

idb_mcp-0.0.8.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

idb_mcp-0.0.8-py3-none-any.whl (16.9 kB view details)

Uploaded Python 3

File details

Details for the file idb_mcp-0.0.8.tar.gz.

File metadata

  • Download URL: idb_mcp-0.0.8.tar.gz
  • Upload date:
  • Size: 17.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.26.3 CPython/3.14.2 Darwin/24.6.0

File hashes

Hashes for idb_mcp-0.0.8.tar.gz
Algorithm Hash digest
SHA256 fd0c4defeea27cc5487382d0337a0fb0a89a8b14e5136bf51120da5dd43b1b7f
MD5 f0b1b2b536debc75141c2eddb8c4763d
BLAKE2b-256 bb1fe65818791c6bb0c5927730f955912065f4fc663509ff1b2596667b413d92

See more details on using hashes here.

File details

Details for the file idb_mcp-0.0.8-py3-none-any.whl.

File metadata

  • Download URL: idb_mcp-0.0.8-py3-none-any.whl
  • Upload date:
  • Size: 16.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: pdm/2.26.3 CPython/3.14.2 Darwin/24.6.0

File hashes

Hashes for idb_mcp-0.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c443f14a3e0dfa4f941b4f66254fd605fd16f32771717f0b37e1c5560b08acef
MD5 92fa2a04d0cd739749472830605f61fa
BLAKE2b-256 bde6805f77dcd8375bb2982f8cf3d6b0e8b8971f657f11b26ab8b4051a89ba3c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page