Skip to content

jev-sim-wingman

Single-file MCP server giving coding agents typed, budgeted Jev control over the iOS Simulator with gated destructive actions.

MCP serverprototype

Overview

jev-sim-wingman is a single-file MCP server that gives coding agents typed, budgeted control over the iOS Simulator, described as the mobile sibling of a Jev browser wingman. It wraps existing tools, idb, xcrun simctl, cwebp and sips, and adds typed Jev decisions over UI state, loud failures instead of silent idb no-ops, a shared call budget per session, gated destructive actions and inline screenshots so the agent can see the screen.

Its tools are sim_observe for apps and labelled accessibility elements, sim_check for one budgeted typed question about the screen with optional vision escalation, sim_step for a single tap, type, swipe, deeplink, launch, paste or confirmed terminate, sim_do for a bounded goal loop where Jev picks tap, swipe, done or stuck up to a step limit, and doctor for preflight checks. Typed calls go through the author's jev-fabric tool via OpenRouter or TypeSafe, and a separate vision endpoint such as Clef Flash can handle ambiguous results. Only simctl and idb are needed for observe and step; Jev tools need a model key.

What the decision model decides

TypeQuestionAnswers
Yes / noDoes the screen show the expected element or state?yes · no
ChoiceNext action toward the goaltap · swipe · done · stuck

How it works

  1. Agent observes the booted simulator
  2. Ask budgeted typed questions with sim_check
  3. Take single actions or run a bounded sim_do loop
  4. Escalate to vision only on ambiguous results
  5. Destructive actions need explicit confirmation

Strengths

  • Shared call budget limits spend
  • Loud failures instead of silent no-ops
  • Destructive actions gated

Caveats

  • iOS Simulator on macOS only
  • Several external tools to install
  • Vision escalation needs a separate endpoint

Getting started

git clone --recurse-submodules the repo, npm install, set OPENROUTER_API_KEY or TYPESAFE_API_KEY, then point your MCP host at node server.js

At a glance

Type
MCP server
Status
prototype
Language
JavaScript
Runtime
Node MCP server (stdio)
Has code
yes

Use cases and integrations

How curated lists describe it

Frequently asked questions

What does Jev decide?

Typed checks about what the screen shows and the next tap, swipe, done or stuck step in a goal loop.

Can it delete apps or data?

sim_do is never destructive, and terminate requires confirm:=true.

Does it need a model key for everything?

No. Observe and step work with simctl and idb alone.

Related projects

  • Fork of mobile-mcp that adds OCR and lets Jev pick which recognised text element to tap on Android and iOS devices.

    MCP serverbetaTypeScript
  • Rust MCP server for desktop control via accessibility trees, with an optional decision model (Jev or compatible) for small choices.

    MCP serverproductionRust
  • Rust CLI for desktop computer use via accessibility trees, with optional jev-desktop scripts letting Jev pick the control and action.

    Agent skillbetaRust
  • macOS computer-use package: a background app driver for any agent, plus a loop where Jev picks each UI action for a bounded subtask.

    ProjectbetaPython
  • CodexQA browser skill that indexes in-page controls and has Jev pick the operation and target each step, with no screenshots needed.

    Agent skillbeta
  • Local stdio MCP server that executes whole browser and macOS goals with a Jev-driven observe-decide-act loop.

    MCP serverbetaTypeScript