M
Health: ActiveRecent health check succeeded.Last checked 8/9/2026, 12:01:23 AM

Manzanas

iossimulatortestingxcodeautomation

Drive iOS simulators from Claude Code, Cursor or Codex by accessibility label instead of screenshot-and-tap-coordinates. Exposes ui_tree, tap_element, type_into_element, wait_for_element and scroll_to_element, and every action reports whether the UI actually changed. A Mac daemon underneath hands out simulators as TTL leases with a queue and keeps a SIGSTOP warm pool, so a lease gets a live simulator in about 0.28s instead of a 7s cold boot, and multiple agents can share one Mac without colliding. Open source, MIT.

Quick Install

Automated & IDE Setup

Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ€” or use 1-click editor setup below.

Manual Client & Custom JSON ConfigExpand JSON โ–พ

Install Config Generator

claude_desktop_config.json
{
  "mcpServers": {
    "manzanas": {
      "command": "npx",
      "args": [
        "-y",
        "manzanas"
      ]
    }
  }
}

๐Ÿ’ก Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)

Documentation Overview

manzanas

Release CI License: MIT

A Mac daemon for multi-agent iOS simulator fleet orchestration: leases, actions, streaming, deterministic state, and an exportable run journal for AI agents (and humans) sharing simulators.

https://github.com/user-attachments/assets/deb577d0-1123-4a89-90d8-8d9c7684a3cf

The launch film โ€” leases, actions, live streaming, warm pools, the broker, and the run journal in 52 seconds. Sound on.

manzanasd runs on each Mac host and owns everything stateful โ€” the simulator registry, the lease table, the warm pool, action backends, streamers, golden images, and the run journal. Clients (manzanas CLI, MCP facade, SDKs) are thin and cross-platform, speaking a versioned JSON protocol over HTTP + WebSocket. manzanas-broker federates N daemons behind one endpoint โ€” start with one Mac, and when you outgrow it the same clients lease across the whole fleet without changing a line.

manzanas CLI demo: two agents lease warm-pool simulators, drive one, and export journal evidence

Two agents lease pre-warmed simulators โ€” parked sims thaw on grant instead of paying a 5 s+ boot โ€” then drive one (warm taps land in ~50 ms end-to-end) and export the run journal as PR-ready evidence.

Website: manzanasd.vercel.app (source in site/).

Install

sh
brew tap baribarigood/tap https://github.com/BariBariGood/homebrew-tap
brew trust baribarigood/tap      # Homebrew >= 6 requires trusting third-party taps
brew install manzanasd            # daemon (+ pulls in the manzanas CLI)
brew services start manzanasd     # launchd service on port 7433

See docs/install.md for launchd tarball installs and alternatives, and docs/quickstart.md for a single-Mac walkthrough from install to first screenshot.

Why

Agents driving simulators over raw SSH + CLI tools trip over each other and pay huge fixed costs. manzanasd removes both, with measured numbers (M3 Pro, macOS 26.5, Xcode 26.5; reproduce with make bench):

  • Leases, not locks: TTL-bounded exclusive claims with FIFO queues โ€” no two agents ever drive the same sim.
  • Park/thaw warm pool: idle sims are SIGSTOPped (a parked tree is unschedulable โ€” ~0 idle host CPU no matter what the sim's daemons are doing) and thawed on lease grant: ~0.28 s lease-to-live vs ~7 s for a cold boot (~29 s first boot). The thaw itself is a cached-PID SIGCONT and takes under a millisecond.
  • Warm actions: a resident per-sim helper makes an end-to-end tap ~36 ms vs ~950 ms cold (per-action AXe spawn) โ€” ~3 s cold on Intel.
  • Deterministic state: snapshots, fixtures, per-lease auto-reset, and golden images that stamp out slimmed sims in seconds (~0.75 GB vs ~5 GB stock, via simslim) โ€” how one Mac runs a dozen sims.
  • Evidence: every mutating op under a lease is journaled, with content-addressed artifacts and a PR-ready markdown export.
LeasesTTL-bounded exclusive claims, labels, FIFO queues, auto-reset
Warm poolpark/thaw (SIGSTOP) pool sims: ~0.28 s lease-to-live, ~0 idle CPU
Actionscold (AXe) + warm (resident helper) taps/swipes/typing, composite tap_element, batches
StreamingMJPEG fan-out, browser /view page, WS frames
Videoper-lease simctl recordings that land in the journal
Statesnapshots, fixtures, per-lease auto-reset, golden images
Journalappend-only evidence per run, artifacts, export.md
Dashboardread-only web dashboard at /dash: fleet, leases, multiview, journal browser
Devicesphysical iPhones via devicectl + WebDriverAgent (--devices)
Fleetmanzanas-broker federates N Macs behind one endpoint
Clientsmanzanas CLI, MCP tools over stdio, npm wrapper, GitHub Action
Live MJPEG view of a leased simulator at /viewBuilt-in fleet dashboard at /dash
the browser /view MJPEG live pagethe built-in /dash fleet dashboard

Quickstart

New here? docs/quickstart.md walks through a full single-Mac session (install โ†’ lease โ†’ tap โ†’ screenshot). The short version:

sh
make build            # builds bin/manzanasd, bin/manzanas, bin/manzanas-broker

# on a Mac with Xcode:
./bin/manzanasd --addr :7433

# anywhere (Linux/dev/CI), with a mock fleet:
./bin/manzanasd --addr :7433 --mock

# list simulators
curl -s localhost:7433/v0/targets | jq

# lease one by label, boot it, release it
curl -s -X POST localhost:7433/v0/leases \
  -d '{"labels":["ios26"],"agent_id":"me","ttl_seconds":300}' | jq
curl -s -X POST localhost:7433/v0/targets/<udid>/boot -d '{"lease_id":"<id>"}' | jq
curl -s -X DELETE localhost:7433/v0/leases/<id> | jq

Or the thin client (--json for machine output; see clients/):

sh
manzanas targets
manzanas lease acquire --labels ios26 --agent me --wait
manzanas tap 200 400 --lease lse_...
manzanas mcp        # lease-scoped MCP tools over stdio for agents

Production installs (launchd, releases): docs/install.md.

MCP (Claude Code, Cursor, Codex)

manzanas mcp serves the whole toolset over the Model Context Protocol (stdio), so any MCP-capable agent can lease and drive simulators โ€” with per-session auto-release of leases and self-describing tool errors. Ready-to-paste client configs and troubleshooting: docs/mcp.md.

Terminal
claude mcp add manzanas -e MANZANASD_ADDR=mac-host:7433 -- /path/to/manzanas mcp

Architecture

Code
โ”Œ Linux / CI / anywhere โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”        โ”Œ each Mac host โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ manzanas (thin client, Go)         โ”‚   WS   โ”‚ manzanasd (Go daemon)  :7433                โ”‚
โ”‚  - CLI: lease/tap/observe/...     โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  registry โ”€โ”€ warm pool (park/thaw, gates)  โ”‚
โ”‚  - MCP facade (stdio)             โ”‚  HTTP  โ”‚  leases (TTL, labels, FIFO, auto-reset)    โ”‚
โ”‚  - eval harness (manzanas-eval)    โ”‚        โ”‚  actions โ”€โ”€ cold AXe / warm simbridge      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค        โ”‚  streams (MJPEG fan-out, browser view)     โ”‚
โ”‚ manzanas-broker  :7440             โ”‚        โ”‚  state (snapshots, fixtures, golden images)โ”‚
โ”‚  fleet-wide placement: leases are โ”‚โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚  journal (evidence, artifacts, export.md)  โ”‚
โ”‚  scheduled across N daemons, then โ”‚ probe/ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚  clients talk to the owning       โ”‚ lease         ร— one daemon per Mac in the fleet
โ”‚  daemon directly (host_addr)      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Documentation

Protocol:

  • proto/PROTOCOL.md โ€” the v0 wire protocol: targets, leases, actions (incl. composite tap_element/type_into_element and actions:batch), streams, state, images, journal, WS surface.

Subsystems:

  • docs/architecture.md โ€” components and the interface contracts between slices.
  • docs/agent-qa.md โ€” a worked end-to-end agent QA session, plus driving animated (React Native) apps: screenshot/type races, waiting strategy, batch entry shape.
  • docs/devices.md โ€” physical iPhones as leasable targets (devicectl + WebDriverAgent).
  • docs/recording.md โ€” per-lease video capture into the journal.
  • docs/warm-pool.md โ€” park/thaw warm pool, footprint watchdog, host safety gates (503 overloaded).
  • docs/actions-warm.md โ€” warm vs cold action paths; the resident simbridge helper.
  • docs/streaming.md โ€” MJPEG streaming and the browser view page.
  • docs/dashboard.md โ€” the built-in read-only web dashboard at /dash (fleet, leases, pool, journal browser).
  • docs/state.md โ€” snapshots, fixtures, per-lease auto-reset, quarantine.
  • docs/images.md โ€” golden images: slim once, stamp N sims in seconds.
  • docs/journal.md โ€” run journal format, artifacts, GC.
  • docs/broker.md โ€” multi-Mac federation.
  • docs/eval.md โ€” the scenario-driven determinism benchmark harness.
  • docs/mcp.md โ€” the MCP server: setup, Claude Code/Cursor/Codex configuration, troubleshooting.
  • clients/README.md โ€” manzanas CLI + MCP quickstarts; clients/npm/; GitHub Action in action/.

Operations:

  • docs/install.md โ€” launchd install, releases, Homebrew formula.
  • docs/fleet.md โ€” running a multi-Mac fleet (topology, Tailscale, day-2 ops).
  • docs/troubleshooting.md โ€” 503 overloaded, boot failures, parked-sim semantics, quarantine, and friends.

The physical fleet this runs on (machines, locks, build caching) is site-specific; docs/fleet.md covers the daemon's part.

Status

Everything above is implemented and running on the fleet โ€” leases + queues, warm pool with safety gates, cold (AXe) + warm (simbridge) action backends, composite/batch actions, MJPEG streaming, video capture, snapshots/fixtures/auto-reset, golden images, journal, dashboard, physical-device support, broker, eval harness, CLI + MCP. Verify with go build ./... && go vet ./... && go test ./... (Linux-safe; simctl paths are mocked).

License

MIT โ€” see LICENSE.

Related MCP Servers

View all alternatives

Frequently Asked Questions about Manzanas

How do I install the manzanas MCP server?

Add the following block to your claude_desktop_config.json under mcpServers: "mcpServers": { "manzanas": { "command": "npx", "args": ["-y", "manzanas"] } }

What does manzanas do?

Drive iOS simulators from Claude Code, Cursor or Codex by accessibility label instead of screenshot-and-tap-coordinates. Exposes ui_tree, tap_element, type_into_element, wait_for_element and scroll_to_element, and every action reports whether the UI actually changed. A Mac daemon underneath hands out simulators as TTL leases with a queue and keeps a SIGSTOP warm pool, so a lease gets a live simulator in about 0.28s instead of a 7s cold boot, and multiple agents can share one Mac without colliding. Open source, MIT.

Is the manzanas MCP server free to use?

Yes. manzanas is listed on AllMCPs as a free, open Model Context Protocol server you can install into Claude Desktop, Cursor, or any MCP-compatible client.

Technical Specs & Signals

PricingFree
More technical detailsExpand โ–พ
TransportSTDIO
RuntimeNode.js
AuthNo auth required
LicenseMIT
MaintenanceActively maintained
ClientsCursor, Claude Code, Claude Desktop
Views1
Installs0
GitHub stars1
44Quality signal: Fair ยท 44/100How this signal is calculated โ–พ
Server availabilityNot measured

Not scored for repo-hosted servers โ€” we can't reach the running server, only its GitHub page. Hosted MCP endpoints are health-checked live.

Verified ownership8/20
Documentation & tools24/30
Adoption1/15
Community engagement0/10

A guidance signal from public completeness & health data โ€” not a user rating. New listings start lower and rise as they add docs, get verified, and grow adoption. Signals we can't observe for a listing are skipped, not counted against it.

โ˜… FeaturedMoxie Docs MCP logo

Moxie Docs MCP

MCP & Agent Skills for Automated Documentation, and codebase conventions + context

Explore Server โ†’

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge.

Free dofollow backlink: after claiming, verify your product site and place a dofollow AllMCPs badge โ€” we recheck it stays live.

Claim & get free dofollow

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.