Thumbly

Free, open-source Mac app and MCP server that lets AI agents take screenshots, tap, swipe, type and launch apps on a real iPhone, with owner-approved clients, activity logs and pause controls.

Documentation

Thumbly logo

Thumbly

Let AI agents see and control your iPhone from your Mac.

CI Release License macOS 14+ iOS 17.4+ MCP PRs welcome

Install Β· Quick start Β· Docs Β· Contributing Β· Changelog

The Thumbly Mac app showing a connected iPhone

Thumbly connects your Mac to your iPhone over USB (or Wi-Fi after the first USB pairing) through Apple's CoreDevice services. It gives AI agents native screenshots, touch, a virtual keyboard, hardware buttons, and app and device information over MCP. You approve every client and keep control from the Thumbly Mac app. It needs no jailbreak and no cloud relay, and it records no video.

Features

  • πŸ“Έ See: native screenshots and full-page captures of scrolling screens.
  • πŸ‘† Act: tap, swipe, long press, type, paste, hardware buttons, deep links and app launch.
  • πŸ€– MCP-native: works with Claude Code, Claude Desktop and any MCP client, plus Claude.ai and ChatGPT through remote access.
  • πŸ” Owner in control: you approve each client, see every action in the activity log, and can stop all AI control with one Pause button.
  • 🧩 App profiles: deep links and step-by-step workflows that help agents work inside popular apps.
  • 🐍 Python SDK: script the iPhone with thumbly-sdk.
  • πŸ§ͺ Simulator: thumbly serve --simulate lets you develop without an iPhone.

How it works

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   MCP (HTTP)   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   CoreDevice    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  AI agent    β”‚ ─────────────▢ β”‚  Thumbly service   β”‚ ──────────────▢ β”‚ iPhone β”‚
β”‚ Claude, etc. β”‚ ◀───────────── β”‚  (launchd, Python) β”‚   USB / Wi-Fi   β”‚        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                 β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                          β”‚ owner API (loopback)
                                β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                β”‚  Thumbly Mac app   β”‚  approve Β· watch Β· pause
                                β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Requirements

  • macOS 14 or later
  • iPhone with iOS 17.4 or later
  • A USB data cable
  • Apple's Command Line Tools (xcode-select --install)

Install

curl -fsSL https://raw.githubusercontent.com/timurcatakli/thumbly/main/install.sh | sh

This installs uv if needed, installs the Thumbly service, builds the Mac app into ~/Applications/Thumbly.app, registers the service with launchd and opens the app. The service runs only while the app is open. From a checkout, run sh install.sh --source .. To remove Thumbly, run sh install.sh --uninstall. See Install Thumbly.

Quick start

  1. Connect the iPhone. Plug it in, unlock it and tap Trust.

  2. Turn on Developer Mode. Go to Settings β†’ Privacy & Security β†’ Developer Mode and restart the iPhone. If the option is hidden, the Thumbly app shows it (Show the switch). Thumbly then installs Apple's developer disk image, which takes about 1–4 minutes the first time.

  3. Add Thumbly to your agent.

    claude mcp add --transport http thumbly http://127.0.0.1:8771/mcp
    
  4. Approve it. In Claude Code, run /mcp β†’ thumbly β†’ Authenticate, then allow the request in the Thumbly app under Access.

  5. Ask away. For example: "Open X, find Anthropic's latest post and email me the link."

Access screen The Thumbly Access screen

The full guide is in docs/. Product details and operating limits are in the service README.

Repository

thumbly/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ device/      # The Thumbly service: Python, uv
β”‚   └── mac/         # The Thumbly Mac app: SwiftUI
β”œβ”€β”€ packages/
β”‚   └── sdk-python/  # thumbly-sdk: script the iPhone from Python
β”œβ”€β”€ docs/            # The user guide (MDX)
└── VERSION          # The version shared by every part

Develop

The Thumbly service, from apps/device:

uv sync --frozen --dev
uv run thumbly serve --simulate      # simulated iPhone: owner API :8080, MCP :8081
uv run pytest -q

The Mac app, from apps/mac (Command Line Tools only, no Xcode project):

./scripts/bundle.sh --install        # -> ~/Applications/Thumbly.app
THUMBLY_API_URL=http://127.0.0.1:8080 ~/Applications/Thumbly.app/Contents/MacOS/Thumbly  # against the simulator

Hooks: uv run --project apps/device pre-commit install. More in the Mac app README.

Contributing

Thumbly is young and we'd love your help: code, app profiles, docs, bug reports and ideas.

Everyone taking part follows the Code of Conduct. Report security issues privately, as the security policy describes.

Versioning and releases

Thumbly follows Semantic Versioning. The VERSION file sets the version for the service, the Mac app (shown in the sidebar footer) and the docs. Each release is tagged vX.Y.Z and listed in the changelog and on GitHub Releases.

License

Apache-2.0 for this repository (LICENSE), except apps/device, which is GPL-3.0 (apps/device/LICENSE) because it links to pymobiledevice3. See NOTICE and THIRD_PARTY_NOTICES.md.

If Thumbly is useful to you, ⭐ star the repo. It helps other people find it.