Prototipo · Versión preliminar: todos los servidores del registro oficial, sincronizados cada 30 minutos. Las reseñas y las cuentas llegarán en una etapa posterior.
PopNx MCPServidores MCP para quienes usan IA · explicados con palabras sencillas

Ios Sim MCP

de rmathew1973versión 0.4.2i★ –iSe ejecuta en tu computadora
Nombre en el registroio.github.rmathew1973/ios-sim-mcp

Instalar

Resumen

Descripción del creador (original en inglés)

Drive the iOS Simulator via semantic accessibility-tree snapshots. Sub-200ms, no WebDriverAgent.

Los tres pilares de PopNx MCP

Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.

Qué puedes hacer con él

Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.

  • Conexión: Se ejecuta en tu computadora
  • Transporte: stdio
  • Categoría: Herramientas para desarrolladores

Instalación

Elige la app de IA que usas y copia la configuración.

Antes de instalar

Necesitas

  • npmNode.js instalado (para el comando npx)

¿Qué app usas?

Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.

Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json

{
  "mcpServers": {
    "ios-sim": {
      "command": "npx",
      "args": [
        "-y",
        "ios-sim-mcp"
      ]
    }
  }
}

Ejecuta esto en tu terminal

claude mcp add ios-sim -- npx -y ios-sim-mcp

Abrir en Cursor

O copia la configuración tú

Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json

{
  "mcpServers": {
    "ios-sim": {
      "command": "npx",
      "args": [
        "-y",
        "ios-sim-mcp"
      ]
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Abrir en VS Code

O copia la configuración tú

Pégalo en .vscode/mcp.json de tu proyecto

{
  "servers": {
    "ios-sim": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "ios-sim-mcp"
      ]
    }
  }
}

Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.

Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.

Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.

Esta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.

Qué puede hacer

Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.

Revisiones básicasi

Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 7 nov 2026

  • ✓ Superada

    El creador coincide con el repo

    El nombre en el registro se verificó con la cuenta de GitHub rmathew1973, dueña del repo

  • … Aún sin revisar

    Sigue en mantenimiento

    Todavía no hemos leído este repo en GitHub

  • … Aún sin revisar

    Tiene licencia

    Todavía no hemos leído este repo en GitHub

  • – No aplica

    El endpoint responde

    Este se ejecuta en tu computadora; no hay endpoint en internet

  • – No aplica

    Inicio de sesión con OAuth

    Se ejecuta en tu computadora y usa ajustes locales en su lugar

  • … Aún sin revisar

    Sin instrucciones ocultas en las descripciones de herramientas

    Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet

Comparado con otros en Herramientas para desarrolladoresi

  • Más estrellas que el 0% de los otros 4906 servidores de esta categoría
  • Publicado en el registro más recientemente que el 15% de los otros 4906 servidores de esta categoría
  • Revisiones básicas iguales o mejores que el 100% de los otros 4906 servidores de esta categoría

Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.

Preguntas frecuentes

¿Es seguro Ios Sim MCP?

Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.

¿Qué claves o códigos necesita?

El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.

¿Se ejecuta en mi computadora o en la nube?

Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).

¿Sigue en mantenimiento?

El repo de GitHub cambió por última vez –, y la última versión (0.4.2) llegó al registro hace 6 meses.

¿Qué apps pueden usarlo?

Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Node.js en tu computadora.

¿Qué puedo usar en su lugar?

En la misma categoría: GitHub, Desktop Commander, Cloudflare MCP

Alternativas

Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.

Cómo leer una tarjeta:★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi

GitHub

de github

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

Computadora o nube★ 34.245MITActualizado hace 4 días
Instalar

Desktop Commander

de wonderwhy-er

MCP server for terminal commands, file operations, and process management

Se ejecuta en tu computadora★ 10.225MITActualizado hace 16 días
Instalar

Cloudflare MCP

de cloudflare

Cloudflare MCP servers

Se ejecuta en la nube★ 4446Apache-2.0Actualizado hace 14 meses
Instalar

README del creador

Abrir el README

Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.

ios-sim-mcp

An MCP server that drives the iOS Simulator the way Chrome's DevTools MCP drives a browser: semantic accessibility-tree snapshots with stable element refs, sub-200ms operations, and no screenshot-and-eyeball-coordinates loops.

Built because every existing iOS-simulator automation tool either crawls (Appium, screenshot-based agents) or requires pre-written scripts. This one lets an LLM drive a simulator interactively — find an element by label or ID, tap it by ref, wait for the UI to settle, repeat — at roughly the speed a human would.

Why this exists

Most existing iOS-sim MCPs work by taking a screenshot, asking the model to identify coordinates, then tapping pixels. That's slow (image bytes in context), expensive (vision tokens), and fragile (any layout shift breaks it).

iOS apps already expose a structured accessibility tree — the same one VoiceOver uses. If you query that tree, you get every interactive element with its label, role, AX identifier, frame, and enabled state. You can find what you want semantically, refer to it by a stable ref, and act on it directly. That's what Chrome MCP does for the DOM, and it's what this does for UIView hierarchies in the iOS Simulator.

How it works

Three layers, two shipping today:

LayerStatusTechWhat it gives you
1 — AX tree + actions✅ shippingidb (Facebook's CoreSimulator bridge)snapshot, find, tap, type, swipe, scroll, launch, screenshot — all ~100ms
2a — Dylib proof-of-life✅ shippingDYLD_INSERT_LIBRARIES via SIMCTL_CHILD_*constructor runs in the target app before main(); logs lifecycle via os_log
2b — In-process RPC✅ shippingUnix socket + JSON-Linesround-trip into a running app at ~1ms per call
2c — View introspection✅ shippingMain-thread UIView walkview_tree, view_hit_test — class hierarchy, frames, responder chains, VC annotations
2d — Network interception✅ shippingURLProtocol + URLSessionConfiguration swizzlecapture every HTTP request/response (headers, bodies, timing) inside the app — no cert install, no mitmproxy
2e — JS eval✅ shippingJSContext + JSExport bridgeseval_js({code}) with app / key_window() / defaults / pasteboard / bundle / process / view-finder helpers — Chrome's Runtime.evaluate equivalent
2f — Network stubbing✅ shippingSame URLProtocol, synthesized responseregister canned responses by URL substring + optional method; supports custom status/headers/body + delay_ms for slow-network simulation
3 — System logs✅ shippingxcrun simctl spawn log streamstreaming os_log into a 5000-line ring buffer

idb talks directly to CoreSimulator's private framework — no WebDriverAgent, no HTTP hop into the simulator process — which is why the per-call latency is closer to a local subprocess than to a network round trip.

Requirements

  • macOS with Xcode + iOS Simulator
  • idb (brew tap facebook/fb && brew install idb-companion && pipx install fb-idb)
  • Bun (curl -fsSL https://bun.sh/install | bash)
  • A booted simulator (xcrun simctl boot or open it in Xcode)

Install

Quickest path (npm + npx)
# Register with Claude Code, one line:

claude mcp add -s user ios-sim -- npx -y ios-sim-mcp

npx will fetch the package on first run. Verify:

claude mcp list | grep ios-sim     # ios-sim: ... ✓ Connected

Layer 2 dylib ships prebuilt as a universal binary (arm64 + x86_64) — works on both Apple Silicon and Intel Macs out of the box.

From source
git clone https://github.com/rmathew1973/ios-sim-mcp.git

cd ios-sim-mcp bun install ./dylib/build.sh # builds the Layer 2 dylib (only needed if you'll use inject:true)

Then register:

# Prefer the absolute bun path — clients with a minimal PATH fail on bare `bun`:

claude mcp add -s user ios-sim -- "$HOME/.bun/bin/bun" run "$(pwd)/src/server.ts"

Register with Grok (CLI / Desktop)

Grok MCP spawn PATH is often just /usr/bin:/bin. Bare bun fails with:

Failed to spawn MCP server 'ios-sim': No such file or directory (os error 2)

Use the absolute bun binary in ~/.grok/config.toml:

[mcp_servers.ios-sim]

command = "/Users/YOU/.bun/bin/bun" args = ["run", "/Users/YOU/Projects/ios-sim-mcp/src/server.ts"] enabled = true startup_timeout_sec = 60

Or:

grok mcp add ios-sim -- "$HOME/.bun/bin/bun" run "$HOME/Projects/ios-sim-mcp/src/server.ts"

Restart the Grok session after changing MCP config. Verify: grok mcp list should show ios-sim connected (not failed).

Register with Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{

"mcpServers": { "ios-sim": { "command": "npx", "args": ["-y", "ios-sim-mcp"] } } }

Or, if installed from source, point at the local path:

{

"mcpServers": { "ios-sim": { "command": "/Users/YOU/.bun/bin/bun", "args": ["run", "/absolute/path/to/ios-sim-mcp/src/server.ts"] } } }

Quit and reopen Claude Desktop.

Register with anything else (generic MCP client)

It's a standard stdio MCP server. Run bun run src/server.ts and pipe JSON-RPC. See test/smoke.ts for a working client example.

Tools

ToolWhat it does
list_simulatorsList simulators with UDID, state, OS version
use_simulatorPick a specific UDID (auto-selected if only one is booted)
snapshotCapture the AX tree, assign refs e1..eN, return compact text rendering. Filters: interactive (default), actionable, all
findSearch the snapshot by id (AXUniqueId), label, labelContains, role, actionable
tapTap by {ref}, {id}, or {x,y}. Optional duration makes it a long-press
type_textType into the focused field. Optional {ref} or {id} taps-then-types. Auto-routes through paste when the dylib is loaded for byte-perfect input — no iOS autocorrect, no first-letter capitalization. via: "keystroke" forces the typing path; via: "paste" forces the paste path
paste_textByte-perfect text via UIPasteboard + first-responder paste:. Requires the dylib injected. The right answer for emails, passwords, OAuth tokens, anything case-sensitive
view_treeWalk the running app's UIView hierarchy on the main thread. Reports class names, frames in window coords, alpha/hidden/interactive, text content, and annotates view-controller boundaries. Strictly richer than snapshot — sees custom-drawn views, transient overlays, SwiftUI internals. Filter by class_filter / ax_id_contains / text_contains. Requires dylib injected
view_hit_test"What view actually receives a tap at (x,y)?" Returns the topmost view plus the full responder chain up to UIApplication. The right debugging tool when a tap isn't doing what you expect. Requires dylib injected
network_start / network_stop / network_statusInstall/remove an URLProtocol interceptor + swizzle URLSessionConfiguration so every URLSession-based HTTP request flowing through the app is recorded. Options: max_records, max_body_bytes, filter_url_substring. Requires dylib injected
network_tailReturn the most recent N captured records. Default: one line per request (id, method, status, timing, sizes, URL). full=true includes headers + body previews inline. Page forward via since_id
network_get_bodyFetch the full request or response body (up to max_body_bytes, default 256KB) for a specific record id. Returns base64 + UTF-8 decode for text bodies
network_clearDrop the ring buffer and all retained bodies
network_self_testFire an HTTP request from inside the app to verify the capture path end-to-end
network_stub / network_stubs / network_unstub / network_unstub_allRegister canned HTTP responses by URL substring (+ optional method). Synthesizes status/headers/body without forwarding; delay_ms simulates slow networks. Stubbed requests still appear in network_tail with stubbed:true
eval_jsRun arbitrary JavaScript in a persistent JSContext inside the injected app. Bridged globals: app, key_window(), all_windows(), defaults, pasteboard, bundle, process, notif_center, first_responder(), find_view_by_ax_id, find_view_by_class, find_vc_by_class, post_notification, cls, log. State persists across calls. Requires dylib injected
eval_js_resetDrop the JSContext and rebuild bridges on next eval — forgets your defined vars/fns
keyPress a key by name (RETURN, ESC, DELETE, TAB, SPACE, F1–F12, arrows) or raw HID code
buttonHardware button: HOME, LOCK, SIDE_BUTTON, SIRI, APPLE_PAY
swipeSwipe between two refs/ids/points. Optional duration and delta
scrollReader-perspective scroll: down reveals content below. Optional anchor element
launch_appLaunch by bundle id. Optional foreground_if_running terminates first
terminate_appTerminate by bundle id
screenshotPNG to disk or inline. Use sparingly — the AX tree is faster and richer
await_quiescentBlock until the AX-tree hash is identical for stable_ms (default 250) or timeout_ms (default 5000). Use after launches and navigation instead of sleep
log_start / log_tail / log_stop / log_clearStream os_log into a 5000-line ring buffer. Filter by bundle_id substring, level, or NSPredicate

Example session

> snapshot

Settings screen=402x874 v=5 elements=15

e3 Button "Apple Account" #com.apple.settings.primaryAppleAccount @(201,213) e5 Button "General" #com.apple.settings.general @(201,406) e6 Button "Accessibility" #com.apple.settings.accessibility @(201,458) e14 TextField "Search" ="Search" @(201,822) ...

tap {id: "com.apple.settings.general"}

tapped e5/com.apple.settings.general

await_quiescent {stable_ms: 250}

stable hash=8326196f25c8 samples=4 elapsed=1731ms

snapshot

Settings v=10 elements=13

e2 Button "Settings" #BackButton @(38,84) e6 Button "About" #About @(201,418) ...

type_text {ref: "e14", text: "wifi"}

typed 4 chars into e14

Measured on iPhone 17 Pro / iOS 26.5 / M-series Mac:

  • snapshot: 127–190 ms
  • tap: 100 ms
  • find: <1 ms (in-memory against cached snapshot)
  • await_quiescent: 400 ms – 2.5 s (real UI settle time)

Design notes

  • Snapshots are versioned and cached. Any action (tap, swipe, type_text, launch_app, button, key) invalidates the cache so stale refs can't survive a state change. find and ref resolution will tell you to re-snapshot rather than acting on old data.
  • Refs are stable within a snapshot, not across snapshots. e5 in v=10 is not the same element as e5 in v=11. AXUniqueIds (the iOS accessibilityIdentifier) are stable across snapshots and are the preferred way to target a control across UI changes.
  • `await_quiescent` ignores degenerate AX trees. For ~1s after launch_app, idb returns just the AXApplication root with no children. A naive hash-stability check would return instantly with an empty tree. The implementation resets the stability timer whenever it sees a degenerate snapshot.
  • `scroll` is reader-perspective. down means "see what's below" (finger drags up), matching mouse-wheel/page-down conventions, not finger-direction. Default 0.4s gesture duration prevents iOS from interpreting the release point as a tap on the underlying element.

Tip: add accessibility identifiers to your own apps

This MCP is fastest and most reliable when interactive controls have accessibilityIdentifier set:

Button("Sign In") { ... }

.accessibilityIdentifier("login_submit_button")

Then tap({id: "login_submit_button"})

Solo se muestra el principio; lee el resto en el repo

Pregunta a PopNx