Skip to main content
Glama

ios-agent-driver

An MCP server that lets an AI agent drive the iOS Simulator in a loop — so an agent can actually use your app: tap, type, swipe, read the screen, and verify what happened.

It bridges the gap between iOS development and agentic testing. The primitives to control a simulator exist (xcrun simctl, Meta's idb), but nothing packages them into tools an agent can call to close the perceive → decide → act → observe loop. This does.

  • Accessibility-tree-first perception. The agent reasons over labeled UI elements (describe_ui) and taps by label, not by guessing pixel coordinates — far more robust to layout changes.

  • Screenshot fallback. For custom-drawn views that don't expose accessibility, screenshot gives a vision fallback and a way to verify state.

  • Loud failures. A tap on a missing label returns the nearest labels on screen, not a silent no-op.

How it works

Agent (Claude / any MCP client)
   goal: "log a leg workout, confirm it appears in History"
        observe → decide → act → observe  (loop)
        │  MCP (stdio)
   ios-agent-driver
        │                         │
   xcrun simctl              idb (+ companion)
   lifecycle, screenshots    accessibility tree,
   deeplinks, permissions    tap / type / swipe by element

Related MCP server: app-screen-mcp

Requirements

  • macOS with Xcode (provides xcrun simctl)

  • idb for UI perception and actions:

    brew tap facebook/fb && brew trust facebook/fb
    brew install facebook/fb/idb-companion   # source build — needs current Xcode Command Line Tools
    pip3 install fb-idb                       # the `idb` CLI; use pipx/venv if pip is externally-managed
    idb list-targets                          # confirm it sees your booted sim

    If the companion build errors with “Command Line Tools are too outdated”, update them (System Settings › Software Update, or xcode-select --install). Lifecycle tools work without idb; describe_ui / tap / type_text / swipe require it and will tell you how to install it if it's missing.

  • Node.js ≥ 18

Install

git clone https://github.com/CodeJonesW/ios-agent-driver.git
cd ios-agent-driver
npm install      # builds via the prepare script

Register with Claude Code

Add to your MCP config (user-level ~/.claude.json, or a project .mcp.json):

{
  "mcpServers": {
    "ios-agent-driver": {
      "command": "node",
      "args": ["/absolute/path/to/ios-agent-driver/dist/server.js"]
    }
  }
}

Or with the Claude Code CLI:

claude mcp add ios-agent-driver -- node /absolute/path/to/ios-agent-driver/dist/server.js

Tools

Tool

Backend

Purpose

list_sims

simctl

List devices (udid, name, state, runtime).

boot_sim

simctl

Boot a sim (defaults to booted, else first iPhone).

install_app

simctl

Install a built .app bundle.

launch

simctl

Launch an app by bundle id.

terminate

simctl

Terminate a running app.

reset_app

simctl

Uninstall + reinstall for a clean state.

deeplink

simctl

Open a URL / universal link.

set_permission

simctl

Grant/revoke/reset a privacy permission.

describe_ui

idb

Primary perception — accessibility tree as JSON.

screenshot

simctl

PNG of the current screen (vision fallback).

tap

idb

Tap by accessibility label (preferred) or x,y.

type_text

idb

Type into the focused field.

swipe

idb

Swipe/scroll by direction or coordinates.

press_button

idb

Hardware buttons (HOME, LOCK, …).

The loop, by example

A typical agent goal runs as a bounded loop:

GOAL: "open Settings and confirm Notifications is enabled"
1. boot_sim
2. launch { bundle_id: "com.apple.Preferences" }
3. describe_ui            → see "Notifications" cell
4. tap { label: "Notifications" }
5. describe_ui            → assert the toggle state
   (re-read after each action; stop when the goal predicate holds
    or a step budget is exhausted)

The agent owns the loop and the success predicate; this server provides the primitives. That keeps the tool simple and the test logic where it belongs.

Development

npm run build     # compile TypeScript → dist/
npm start         # run the server on stdio

License

MIT © Will Jones (CodeJonesW)

Available Tools

14 tools
boot_simB

Boot a simulator. Defaults to the already-booted sim, else the first available iPhone.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It does not disclose whether it waits for boot completion, what happens if the simulator is already booted, or any side effects. The behavioral transparency is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, no redundant information, and front-loaded with the action. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers the basic purpose and default behavior. However, it lacks details on error conditions, prerequisites, or the state after booting, making it minimally sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds no new information beyond what is in the schema for the single parameter. Baseline is 3, as the description does not enhance understanding of the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Boot' and resource 'simulator', and provides default behavior. It distinguishes from sibling tools like 'launch' which target apps. However, it could be more specific about the exact action of booting a simulator.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives context by stating the default selection behavior, but does not explicitly say when not to use this tool or mention alternatives. It implicitly suggests use when wanting to start a simulator, but lacks exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_uiA

PRIMARY PERCEPTION. Return the accessibility tree of the current screen as a list of elements (label, type, value, enabled, frame). Reason over this and tap by label.

ParametersJSON Schema
NameRequiredDescriptionDefault
interactive_onlyNoIf true, return only elements that have a label.
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It states the output format (label, type, value, enabled, frame) but lacks details on behavior like error handling, performance, or prerequisites (e.g., foreground app needed).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with 'PRIMARY PERCEPTION' for emphasis. The structure is clean and efficient, though it could be slightly more organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and simple parameters, the description adequately explains what is returned. However, it omits context about error conditions or prerequisites. The sibling tools list provides useful context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description does not mention or elaborate on the parameters (interactive_only, udid); it relies entirely on the schema for their meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool returns the accessibility tree as a list of elements, which is a specific verb+resource. It distinguishes itself from sibling tools (tap, swipe, etc.) by focusing on perception rather than actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes 'Reason over this and tap by label,' implying that the tool is used to gather information before performing a tap. However, it does not explicitly exclude other uses or provide conditions for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

install_appB

Install a built .app bundle onto the simulator.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_pathYesAbsolute path to the .app bundle.
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, and description does not disclose behavioral traits like overwrite behavior, dependency on booted simulator, or failure modes. Only states the action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single, focused sentence with no unnecessary words. Effective and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and sibling tools, description lacks essential context like prerequisites (simulator must be booted) and post-install steps (use 'launch'). Not complete for a deployment tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter descriptions. The description adds minimal but confirms the context of .app bundle and simulator, which is already implied by schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the verb 'install' and the resource 'built .app bundle onto the simulator'. It distinguishes from sibling tools like boot_sim, launch, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use vs alternatives, no prerequisites or exclusions. Agent may not know that simulator must be booted or that 'launch' is separate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launchA

Launch an installed app by bundle id. Returns the launch output (pid).

ParametersJSON Schema
NameRequiredDescriptionDefault
bundle_idYes
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must cover behavior. It mentions returning the pid but omits side effects (e.g., app entering foreground, state changes) and error conditions (e.g., app not found).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with action and resource, no wasted words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple tool with two parameters, but lacks context on preconditions (e.g., simulator must be booted, app must be installed) and failure modes. Output schema is absent, but return value is mentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Description adds minimal extra meaning beyond schema: 'bundle id' is identified as app identifier. The udid's default behavior is explained. With only 50% schema coverage, the description partially compensates but does not fully detail parameter constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the action ('launch'), resource ('installed app by bundle id'), and output ('pid'). Distinguishes from siblings like 'install_app' and 'deeplink' by specifying the launch mechanism.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implies the app must be installed first but does not explicitly guide when to use this tool versus alternatives. No mention of prerequisites like a booted simulator.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_simsA

List available simulator devices (udid, name, state, runtime).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool lists devices returning udid, name, state, runtime. It does not explicitly state that the operation is read-only or non-destructive, but given the nature of listing, it is likely safe. Missing details on scope (e.g., all simulators) prevent a higher score.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that directly states the tool's function and output fields. No unnecessary words, and it is front-loaded with the verb 'List'. Perfect conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and is a simple listing operation, the description is mostly complete. It explains what is returned (udid, name, state, runtime). A higher score would require mention of whether all simulators are returned or only those meeting certain criteria, but it is sufficient for a basic listing tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters with 100% description coverage (empty description). The description adds no parameter details, but since there are none to explain, the baseline is 4. The tool's simplicity means no further parameter semantics are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'List available simulator devices'. It specifies the exact fields returned (udid, name, state, runtime), which is a specific verb+resource. It distinguishes itself from sibling tools like boot_sim or install_app by focusing on listing, not manipulation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: use this to see available simulators. However, there is no explicit guidance on when to use this versus other tools, such as when you need to boot a sim. Since the tool is straightforward with zero parameters, the lack of explicit guidelines is acceptable but not ideal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

press_buttonC

Press a hardware button (HOME backgrounds the app; LOCK locks the screen).

ParametersJSON Schema
NameRequiredDescriptionDefault
buttonYes
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explains effects for HOME and LOCK but omits behavior for SIDE_BUTTON, SIRI, and APPLE_PAY. No mention of whether these actions are reversible or require special permissions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that is concise and front-loaded. However, it could be expanded to cover all button options without becoming overly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 5 enum values and no output schema or annotations, the description is incomplete. It only partially explains effects and lacks details on return values or side effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only udid described). The description adds meaning for two button enum values (HOME and LOCK) but not the other three. It provides some value beyond the schema but does not fully compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool presses a hardware button and gives specific examples for HOME and LOCK. While it doesn't explicitly distinguish from sibling tools like tap or swipe, the verb 'press' and reference to 'hardware button' make the purpose reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like tap or deeplink. No mention of prerequisites or context, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reset_appC

Uninstall then reinstall an app for a clean state.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundle_idYes
app_pathYes
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states the tool does uninstall then reinstall, which is destructive, but does not mention side effects like data loss, permission resets, or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words. It is front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature (reset) and lack of annotations or output schema, the description is incomplete. It does not explain what 'clean state' entails, return values, or behavioral details beyond the basic action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only 1 of 3 parameters (udid) has a description in the schema, and the tool description does not add meaning for bundle_id or app_path. The description's 'uninstall then reinstall' does not clarify parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: uninstall then reinstall an app for a clean state. It distinguishes from similar tools like install_app (which only installs) and terminate (only stops), though not explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives like install_app or terminate. The phrase 'for a clean state' implies a use case but lacks comparison or exclusion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotA

Capture a PNG screenshot of the current screen. Use as the vision fallback when an element is not exposed in the accessibility tree, or to verify state.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It correctly indicates it captures a PNG screenshot, but it does not disclose the return format (e.g., base64 string, binary, file path) or any side effects. This is a notable gap for an output-less schema tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long with no filler. Every word adds value, providing both the action and usage context efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers purpose, usage, and parameter. The only missing detail is the return format, but it is a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter (udid) has 100% schema coverage, and the description adds no additional meaning beyond what the schema already provides. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Capture a PNG screenshot') and the resource ('current screen'). It distinguishes this tool from siblings like describe_ui (accessibility tree) and tap/swipe (interaction).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: 'Use as the vision fallback when an element is not exposed in the accessibility tree, or to verify state.' This tells the agent when to use the tool, though it does not name specific alternative tools or explicitly state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_permissionB

Grant/revoke/reset a privacy permission for an app (e.g. photos, camera, location, notifications).

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYes
serviceYese.g. all, photos, camera, location, notifications, contacts, microphone
bundle_idYes
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description does not disclose side effects, whether changes are immediate, scope of reset, or error states. Does not clarify behavior when app is not installed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, clear and front-loaded. No redundant information, though could expand slightly without waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Missing context about simulator environment (udid), return behavior, and implications of changes. For a tool with 4 parameters and no output schema, description is too sparse.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%. Description adds example services (photos, camera) already in schema. No extra meaning for bundle_id or udid beyond schema. Acceptable but not compensative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool grants, revokes, or resets privacy permissions for apps, listing example services. It uses specific verbs and distinguishes from sibling tools like deeplink or install_app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use grant vs revoke vs reset, or prerequisites for the app or simulator. Does not mention alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

swipeA

Swipe/scroll from one point to another. Either give a direction (auto-computed from screen center) or explicit from/to coordinates.

ParametersJSON Schema
NameRequiredDescriptionDefault
directionNo
from_xNo
from_yNo
to_xNo
to_yNo
duration_secNo
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It reveals that direction auto-computes from screen center, but does not mention duration behavior, return values, or whether the action blocks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that front-load the core action and explain the two usage modes. No redundant words; every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the two main swipe modes but does not explain the duration_sec parameter or return behavior. Given no output schema and no annotations, some gaps remain for a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (14%). The description adds meaning by explaining the relationship between direction and from/to coordinates, but omits details about duration_sec and udid (though udid has schema description).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool performs a swipe/scroll gesture, distinguishing between direction-based (auto-computed from screen center) and explicit coordinate-based modes. This separates it from sibling tools like tap or press_button.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description specifies when to use direction vs explicit coordinates, providing clear context for usage. However, it does not explicitly compare to alternatives like tap for single-point gestures or press_button for long presses.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tapA

Tap an element by accessibility label (preferred) or by raw x,y coordinate (fallback). Provide either label or both x and y.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelNoAccessibility label to match (exact, then case-insensitive, then substring).
xNo
yNo
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavior. It mentions the matching order for label (exact, case-insensitive, substring) but does not describe side effects, error handling (e.g., element not found, out-of-bounds coordinates), or the nature of the interaction beyond 'tap'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that are front-loaded with the core purpose and provide essential parameter guidance without extraneous information. Every sentence is necessary and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple action tool with no output schema and four parameters, the description is largely sufficient. It covers the main usage scenarios and parameter constraints. Minor gaps include not explaining the return value or failure modes, but these are less critical for a tap action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds value beyond the schema by clarifying the mutual exclusivity of label vs x/y and the preferred/fallback order. The schema covers 50% of parameters with descriptions (label and udid), and the description compensates for the undocumented x and y by stating they must be used together.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool taps an element, specifying two methods: by accessibility label (preferred) or by raw x,y coordinate (fallback). It distinguishes from sibling tools like press_button, swipe, and type_text which are different interactions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use each method ('preferred' vs 'fallback') and that either label or both x and y should be provided. However, it does not explicitly state when not to use this tool or compare it to alternatives like press_button.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

terminateC

Terminate a running app by bundle id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bundle_idYes
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It only states 'terminate a running app' without explaining effects (e.g., process termination, cleanup actions, error behavior if app not found).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundancy. However, it is borderline under-specified; a slightly longer description with key behavioral details would improve without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and minimal param descriptions, the description fails to cover essential context such as return values, error conditions, or what happens when the app is already terminated. It is not complete enough for a tool with two parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (only udid has a description). The description adds no extra meaning beyond the schema; it does not explain what a bundle_id is or how the udid default works in detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('terminate'), the resource ('running app'), and the identifier ('by bundle id'). It distinguishes the tool from siblings like launch or install_app.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives. For example, it does not mention when not to use it (e.g., if the app is already terminated) or note that reset_app might be an alternative for clearing app state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

type_textB

Type text into the currently focused field. Tap the field first to focus it.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
udidNoTarget simulator UDID. Defaults to the booted sim.

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the need for focus but does not describe what happens if the field is not focused, how text is input (e.g., character-by-character, paste), or any error handling. This is minimal disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two sentences, front-loading the primary action. Every word serves a purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity and the presence of an input schema, the description covers the core action and a key precondition. However, it lacks details on behavior in edge cases (e.g., unfocused field, special characters) and does not explain return values or udid defaults beyond what the schema provides.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only indirectly references the 'text' parameter by stating 'Type text'. The 'udid' parameter is not mentioned at all. Since schema description coverage is 50% and the tool description adds no additional meaning beyond the schema, it provides insufficient parameter context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Type text') and the target resource ('currently focused field'). It distinguishes the tool from siblings like tap or swipe by specifying text input into a focused field.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a precondition ('Tap the field first to focus it'), which offers implicit guidance on when to use this tool in sequence. However, it does not explicitly state when to use this tool over alternatives or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 14 tool updatesv0.1.0
    • First observedboot_sim
    • First observeddeeplink
    • First observeddescribe_ui
    • First observedinstall_app
    • First observedlaunch
    • First observedlist_sims
    • First observedpress_button
    • First observedreset_app
    • First observedscreenshot
    • First observedset_permission
    • First observedswipe
    • First observedtap
    • First observedterminate
    • First observedtype_text

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: simulator management (boot_sim, list_sims), app lifecycle (install_app, launch, terminate, reset_app), interaction (tap, swipe, type_text, press_button), perception (describe_ui, screenshot), and configuration (set_permission, deeplink). No two tools overlap in functionality.

Naming Consistency5/5

All tool names follow a consistent lowercase underscore convention (snake_case) with imperative verbs (e.g., boot_sim, install_app, describe_ui). The pattern is uniform across all 14 tools, enhancing predictability.

Tool Count5/5

14 tools is well-scoped for an iOS simulator driver, covering essential operations: setup, app management, interaction, perception, and configuration. The count is neither excessive nor insufficient for the domain.

Completeness4/5

The toolset covers core simulator workflows: app install/launch/terminate/reset, UI interaction (tap, swipe, type), perception (accessibility tree, screenshot), and permissions. Minor gaps exist (e.g., no dedicated uninstall or app state query), but agents can work around them.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    An MCP server for reliable iOS Simulator automation that enables agents to control devices, read accessibility UI trees, and capture screenshots. It supports deterministic grounded actions like tapping, typing, and swiping to create a closed-loop observe-reason-act cycle.
    15
    14
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that lets AI agents control iOS and Android devices (tap, scroll, type, take screenshots, read UI trees, and run code). Works with multiple devices at the same time.
    123
    44
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server for iOS Simulator automation. Enables AI assistants to visually interact with iOS apps running in the simulator.
    41
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/CodeJonesW/ios-agent-driver'

If you have feedback or need assistance with the MCP directory API, please join our Discord server