Skip to main content
Glama

SimCtl MCP Server

A Model Context Protocol (MCP) server that provides structured access to iOS Simulator management via xcrun simctl commands.

Installation

Method 1: Using uvx

  1. Prerequisites:

    • Python 3.13+

    • Xcode with Command Line Tools installed

    • uvx: curl -LsSf https://astral.sh/uv/install.sh | sh

  2. Run directly with uvx:

    uvx simctl-mcp-server

Method 2: Local Development Installation

  1. Prerequisites:

    • Python 3.13+

    • Xcode with Command Line Tools installed

  2. Clone and install:

    git clone https://github.com/nzrsky/simctl-mcp-server
    cd simctl-mcp-server
    pip install .
  3. Run the server:

    simctl-mcp-server

Method 3: Build from Source

  1. Build the wheel:

    python -m build --wheel
    pip install dist/simctl_mcp_server-0.1.0-py3-none-any.whl

Related MCP server: Shotter

Configuration

For Claude Desktop

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

{
  "mcpServers": {
    "simctl": {
      "command": "simctl-mcp-server",
      "args": [],
      "env": {}
    }
  }
}

Or if using uvx:

{
  "mcpServers": {
    "simctl": {
      "command": "uvx",
      "args": ["simctl-mcp-server"],
      "env": {}
    }
  }
}

For VS Code with MCP Extension

  1. Install the MCP Extension from the VS Code marketplace

  2. Add server configuration to your VS Code settings (settings.json):

{
  "mcp.servers": {
    "simctl": {
      "command": "simctl-mcp-server",
      "args": [],
      "env": {}
    }
  }
}

Or if using uvx:

{
  "mcp.servers": {
    "simctl": {
      "command": "uvx",
      "args": ["simctl-mcp-server"],
      "env": {}
    }
  }
}
  1. Restart VS Code to load the MCP server

  2. Use the Command Palette (Cmd+Shift+P) and search for "MCP" commands to interact with the simulator tools

For Other MCP Clients

The server runs on stdio, so you can invoke it directly:

With installed package:

simctl-mcp-server

With uvx:

uvx simctl-mcp-server

Available Tools

Device Management

  • simctl_list_devices - List all simulators and their states

  • simctl_boot_device - Boot a simulator

  • simctl_shutdown_device - Shutdown a simulator

  • simctl_create_device - Create a new simulator

  • simctl_delete_device - Delete simulators

App Management

  • simctl_install_app - Install an app (.app bundle or .ipa)

  • simctl_launch_app - Launch an app with options

  • simctl_terminate_app - Terminate a running app

Media & Screenshots

  • simctl_screenshot - Take screenshots

  • simctl_record_video - Record video (start recording)

Testing & Development

  • simctl_push_notification - Send push notifications

  • simctl_privacy_control - Manage app permissions

  • simctl_set_location - Set device location/GPS

  • simctl_status_bar_override - Override status bar appearance

  • simctl_ui_appearance - Control light/dark mode

Usage Examples

Basic Device Operations

# List all devices
"List all available iOS simulators"

# Boot a specific device
"Boot the iPhone 15 Pro simulator"

# Create a new simulator
"Create a new iPhone 14 simulator named 'Test Device' with iOS 17.0"

App Testing

# Install and launch an app
"Install MyApp.app on the booted simulator and launch it"

# Take a screenshot
"Take a screenshot of the current simulator and save it to ~/Desktop/screenshot.png"

# Send a push notification
"Send a push notification with title 'Hello' and body 'Test message' to com.example.myapp"

UI Testing Setup

# Set up a controlled testing environment
"Set the simulator to dark mode, override the status bar to show full battery and strong WiFi, and set the time to 9:41 AM"

# Grant permissions for testing
"Grant photo library access to com.example.myapp on the booted simulator"

Location Testing

# Set specific location
"Set the simulator location to Apple Park (37.334606, -122.009102)"

# Clear location
"Clear the simulated location on the booted device"

Error Handling

The server includes comprehensive error handling:

  • Command failures: Returns detailed error messages from simctl

  • Missing Xcode: Detects when xcrun simctl is not available

  • Invalid parameters: Validates input parameters before execution

  • File operations: Handles temporary files for push notifications safely

Security Considerations

  • The server only exposes read and simulator management operations

  • No access to host file system beyond specified app paths

  • Push notification payloads are validated for structure

  • Privacy permission changes are explicit and logged

Development Notes

  • Built specifically for iOS development workflows

  • Optimized for common simulator management tasks

  • Structured output parsing for JSON responses

  • Support for both individual and batch operations

  • Compatible with Xcode 15+ simulator features

Available Tools

15 tools
simctl_boot_deviceA

Boot a simulator device.

Args: device: Device UDID, name, or 'booted' for current device arch: Architecture to use when booting (arm64 or x86_64)

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
archNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It only states the action and returns a 'Success message', omitting side effects, potential failures (e.g., device not found, architecture mismatch), or state changes. This is insufficient for an AI agent to understand tool behavior.

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 concise, with the purpose stated first and parameters listed clearly. It avoids unnecessary words, though a slightly more structured format (e.g., separating usage notes) could improve readability without adding length.

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 complexity of booting a simulator and the absence of annotations, the description is incomplete. It does not mention prerequisites (e.g., device must exist, Xcode required), error conditions, or the significance of the arch parameter. The return value is vague; even with an output schema, the description should provide more context.

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 0% description coverage, so the description must add meaning. It explains device as 'UDID, name, or ''booted'' for current device' and arch as 'arm64 or x86_64', which clarifies acceptable values. However, it does not specify the default behavior for arch when omitted, limiting completeness.

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 'Boot a simulator device', using a specific verb and resource. It effectively distinguishes from sibling tools like simctl_create_device or simctl_shutdown_device.

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 does not provide explicit guidance on when to use this tool versus alternatives. It lacks context such as prerequisites (e.g., device existence) or exclusion criteria. However, the name and purpose are sufficiently clear for basic selection.

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

simctl_create_deviceA

Create a new simulator device.

Args: name: Name for the new device device_type: Device type identifier (e.g., 'iPhone 15 Pro') runtime: Runtime identifier (e.g., 'iOS 17.0')

Returns: Created device information

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
device_typeYes
runtimeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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 only says 'Create a new simulator device' without disclosing side effects, error conditions, required permissions, or behavioral details like whether creation overwrites existing devices or requires runtime availability.

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 very short (three lines) and front-loaded with the main action. It separates Args and Returns, which is clear. However, it could be more concise by integrating parameter descriptions into the main line, and it still leaves room for improvement in structure.

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 presence of an output schema (not visible but noted), the description need not detail return values. However, the description lacks completeness for a creation tool: no mention of uniqueness constraints, whether the device is created in a specific directory, or what happens if a device with the same name exists. It feels incomplete for its complexity.

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?

Schema coverage is 0%, but the description adds brief explanations for each parameter, including examples for device_type and runtime (e.g., 'iPhone 15 Pro', 'iOS 17.0'). This provides context beyond the schema's type-only definitions, though it could include more format constraints or valid values.

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 'Create a new simulator device,' specifying the verb 'create' and resource 'simulator device.' It distinguishes from sibling tools like simctl_boot_device, simctl_delete_device, and simctl_list_devices, which perform different actions.

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 implies usage by listing required arguments but does not explicitly state when to use this tool vs alternatives. No guidance is provided on when not to use it or which sibling might be more appropriate for specific scenarios.

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

simctl_delete_deviceB

Delete simulator devices.

Args: devices: List of device UDIDs, names, or 'unavailable' to delete all unavailable devices

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
devicesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It mentions deleting devices and the special 'unavailable' value, but does not discuss irreversibility, permissions, or side effects. Limited transparency.

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?

Very concise, one-line purpose followed by parameter and return description. No wasted words, though slightly terse.

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 simple tool with one parameter and output schema, the description covers the parameter's allowed values. However, it omits details like batching behavior or success message format. Adequate but could be more complete.

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?

Schema coverage is 0%, so the description adds crucial meaning: it explains that the string array can contain UDIDs, names, or the keyword 'unavailable'. This is valuable beyond the bare schema.

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 'Delete simulator devices', specifying the action and resource. It is distinct from sibling tools like simctl_boot_device or simctl_create_device, though it does not explicitly differentiate.

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 or when not to use this tool. No mention of alternatives or prerequisites. The description is purely operational without context.

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

simctl_install_appA

Install an app on a simulator device.

Args: device: Device UDID, name, or 'booted' for current device app_path: Path to .app bundle or .ipa file

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
app_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits. It indicates a write operation ('Install') but lacks details on side effects, required states (e.g., device booted), error conditions, or idempotency. The minimal description does not sufficiently inform the agent.

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: one sentence for purpose, two lines for parameter descriptions, and one line for the return value. No unnecessary words; front-loaded with the core action.

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?

While the description covers basic usage and parameter meanings, it omits important context such as preconditions (device must be booted), potential errors, or validation constraints. Given the low complexity (2 simple params, no nested objects), it is adequate but leaves room for improvement.

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 0% description coverage, but the description provides meaningful context for both parameters: 'device' accepts UDID, name, or 'booted'; 'app_path' is a path to .app or .ipa. This adds significant value beyond the raw schema, fully compensating for the lack of schema descriptions.

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 verb 'Install' and resource 'app on a simulator device', distinguishing it from sibling tools like simctl_launch_app (launch) and simctl_terminate_app (terminate). The purpose is immediately 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 is provided on when to use this tool versus alternatives, such as prerequisites (e.g., device must be booted) or conditions to avoid (e.g., app already installed). The description only states the basic function.

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

simctl_launch_appB

Launch an app on a simulator device.

Args: device: Device UDID, name, or 'booted' for current device bundle_id: App bundle identifier wait_for_debugger: Wait for debugger to attach before launching console_mode: Console output mode (none, console, console-pty) args: Additional launch arguments

Returns: Launch result

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
bundle_idYes
wait_for_debuggerNo
console_modeNonone
argsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description must disclose behavior fully. It mentions wait_for_debugger and console_mode, but does not explain side effects (e.g., app state after launch), error scenarios, or whether the device must be booted. Major behavioral traits like these are missing.

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 well-structured docstring with a clear one-line purpose, followed by Args and Returns sections. Each sentence provides necessary information without redundancy, making it efficient and easy to parse.

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 purpose and parameter semantics adequately, but lacks important context: prerequisites (e.g., device booted, app installed), error handling, and detailed return value. Given the tool's complexity and no output schema, more context would be beneficial.

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

Parameters5/5

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

Schema description coverage is 0%, yet the description provides meaningful explanations for all 5 parameters: device accepts UDID/name/'booted', bundle_id is an identifier, wait_for_debugger is a boolean, console_mode options are listed, and args are additional arguments. This significantly enriches the schema.

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 states 'Launch an app on a simulator device', which clearly identifies the verb and resource. It differentiates from siblings like install or terminate apps, though it does not explicitly contrast them. The parameter list further clarifies the tool's scope.

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?

The description provides no guidance on when to use this tool versus alternatives like simctl_install_app or simctl_terminate_app. It does not specify prerequisites (e.g., device must be booted) or contexts where launching is appropriate.

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

simctl_list_devicesA

List available iOS simulators and their states.

Args: format: Output format (json or text). Defaults to json. filter: Optional filter term (e.g., 'available', 'iPhone', 'iOS 17')

Returns: List of available simulators

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson
filterNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 the full burden. It states 'list' and 'states', implying a read-only operation, but does not explicitly confirm non-destructiveness or mention side effects. The term 'available' is ambiguous without clarification of scope (all devices vs booted only).

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: a one-sentence purpose followed by clearly labeled Args and Returns sections. Every sentence adds value, and the purpose is front-loaded.

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 presence of an output schema, the description need not detail return structure, but it still mentions 'List of available simulators'. It lacks context about prerequisites (e.g., Xcode runtime) and what states entail, but is sufficient for an agent to understand the tool's role among action-oriented siblings.

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?

Schema coverage is 0%, so the description compensates by explaining format (json/text default) and filter (with examples). This adds useful meaning beyond the schema's type and defaults, though the exact allowed values for format could be more precise.

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 lists iOS simulators and their states, using a specific verb and resource. It is distinct from sibling tools which are all actions (boot, create, delete, etc.), making selection unambiguous.

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 implies usage (e.g., before acting on a device) but does not explicitly state when to use or when not to use this tool. No alternatives or exclusions are mentioned, leaving guidance only implicit.

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

simctl_privacy_controlA

Control app privacy permissions on a simulator device.

Args: device: Device UDID, name, or 'booted' for current device action: Privacy action (grant, revoke, reset) service: Privacy service (photos, camera, microphone, location, etc.) bundle_id: App bundle identifier (optional)

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
actionYes
serviceYes
bundle_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only mentions that the tool returns a success message, omitting important details like whether the simulator must be booted, whether the action triggers a system prompt, or the scope of the 'reset' 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?

The description is terse and well-structured: a one-line purpose followed by an Args section with each parameter and a Returns line. Every sentence adds value 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?

While the tool is relatively simple, the description could be more complete. It does not explain what constitutes a valid service (e.g., a list or pattern), how the bundle_id affects behavior, or the response format beyond 'success message'. An output schema exists but is not shown; the description's return note is minimal.

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 schema has 0% description coverage, but the description adds significant meaning: it specifies the format of device (UDID, name, 'booted'), enumerates actions (grant, revoke, reset), lists example services (photos, camera, etc.), and indicates bundle_id is optional. This goes well beyond the bare schema definitions.

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 'Control app privacy permissions on a simulator device' clearly specifies the verb (control) and resource (privacy permissions on a simulator). It is distinct from sibling tools like simctl_boot_device or simctl_install_app, which cover different functionalities.

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 lists parameters but does not explicitly state when to use this tool versus alternatives. It implies usage for granting, revoking, or resetting privacy permissions, but lacks guidance on prerequisites (e.g., app must be installed) or exclusions (e.g., not for physical devices).

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

simctl_push_notificationA

Send a push notification to a simulator device.

Args: device: Device UDID, name, or 'booted' for current device payload: Push notification payload as JSON object bundle_id: Target app bundle identifier (optional if specified in payload)

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
payloadYes
bundle_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It correctly identifies the tool as a write operation (sending a notification) and notes that bundle_id is optional. However, it does not disclose potential side effects, whether the device must be booted, or any security implications.

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 very concise: a single-sentence purpose, followed by a clear argument list and return type. Every sentence adds value; no redundant or filler content.

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 three parameters and an output schema, the description covers the basics. However, it omits important details like required payload format (Apple Push Notification service) and the fact that the simulator must be booted. The output schema may provide some return info, but the description only says 'Success message'.

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 meaning beyond the schema: it specifies that device accepts 'UDID, name, or 'booted'', payload is a 'JSON object', and bundle_id is 'target app bundle identifier (optional)'. This clarifies intent beyond the schema's titles and types.

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: 'Send a push notification to a simulator device.' It uses a specific verb ('Send') and resource ('push notification to simulator device'), which distinguishes it from sibling tools that handle device management, app installation, or launching.

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 is provided on when to use this tool versus alternatives, nor any prerequisites or conditions such as requiring a booted simulator or specific permissions. The description only lists parameters without context on appropriate use.

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

simctl_record_videoA

Start recording video of a simulator device.

Args: device: Device UDID, name, or 'booted' for current device output_path: Path where to save the video codec: Video codec (hevc, h264) display: Display to record (internal, external)

Returns: Recording start message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
output_pathYes
codecNohevc
displayNointernal

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

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

No annotations are provided, and the description does not disclose behavioral traits such as whether recording runs asynchronously, how to stop it, or any side effects. It only mentions a 'Recording start message' as return value.

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 highly concise: a single purpose sentence, an Args block, and a Returns line. No wasted words, and structure is front-loaded with key information.

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 tool with 4 parameters, 2 required, and no output schema, the description explains all parameters but lacks guidance on how to stop recording, prerequisites (e.g., device must be booted), and handling of the recording process.

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?

Schema description coverage is 0%, but the description adds explanations for all parameters: device UDID/name/booted, output path, codec options (hevc, h264), and display options (internal, external). This adds significant value beyond the raw 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?

The description clearly states 'Start recording video of a simulator device', specifying the verb 'record' and resource 'simulator device'. It distinguishes from sibling 'simctl_screenshot' which captures a still image.

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?

The description provides no explicit guidance on when to use this tool versus alternatives like 'simctl_screenshot'. It does not mention prerequisites or context (e.g., device must be booted).

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

simctl_screenshotA

Take a screenshot of a simulator device.

Args: device: Device UDID, name, or 'booted' for current device output_path: Path where to save the screenshot format: Image format (png, jpeg) display: Display to capture (internal, external)

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
output_pathYes
formatNopng
displayNointernal

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 states the return is a success message but doesn't disclose whether the screenshot overwrites existing files, what happens if the device is not booted, or any side effects.

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 concise with clear 'Args' and 'Returns' sections. Every sentence serves a purpose, and there is no redundancy.

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 screenshot tool, the description covers the essential aspects. It explains parameters and return value. It could mention output file behavior or that the device must be booted, but overall it is adequate.

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?

Schema coverage is 0%, so the description provides the only parameter explanations. It describes each parameter (device, output_path, format, display) and indicates defaults (png, internal), adding value beyond the bare 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?

The description clearly states the tool's purpose: 'Take a screenshot of a simulator device.' It uses a specific verb-resource combination and distinguishes from sibling tools like simctl_boot_device or simctl_record_video.

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?

No explicit guidance on when to use this tool vs alternatives or prerequisites. The description is straightforward but lacks context like requiring a booted device or mentioning that output_path must be writable.

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

simctl_set_locationA

Set or clear device location on a simulator.

Args: device: Device UDID, name, or 'booted' for current device action: Location action (set, clear, run) latitude: Latitude coordinate (required for 'set' action) longitude: Longitude coordinate (required for 'set' action) scenario: Location scenario (required for 'run' action)

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
actionYes
latitudeNo
longitudeNo
scenarioNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.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 behavioral traits. It describes the actions but omits important context such as whether the simulator must be booted, what happens if the device is invalid, or if setting location affects running apps. The description lacks transparency about side effects or error conditions.

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 well-structured with clear Args and Returns sections. It is slightly verbose but each sentence adds value. It could be more concise by combining some parameter explanations, but overall it is efficient and easy to scan.

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's complexity (5 parameters with conditional requirements) and lack of annotations, the description covers parameter behavior and return value adequately. However, it lacks completeness on error handling, prerequisites (e.g., device must be booted), and an explanation of the 'run' action beyond scenario requirement. An output schema exists but is not described.

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

Parameters5/5

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

The schema has 0% description coverage, so the description must compensate. It does so excellently by explaining each parameter's meaning (e.g., 'device: Device UDID, name, or 'booted' for current device') and specifying which parameters are required for each action (e.g., 'latitude: required for set action'). This adds essential semantics beyond the raw 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?

The description clearly states the tool's purpose: 'Set or clear device location on a simulator.' It uses a specific verb ('set or clear') and resource ('device location on a simulator'), which distinguishes it from sibling tools that perform other simulator actions like booting, creating, or installing apps.

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 lists possible actions (set, clear, run) but provides no explicit guidance on when to use this tool versus alternatives. While the sibling tools are distinctly different, the description could clarify when to use each action or mention prerequisites like needing a booted device. Usage is only implied through parameter descriptions.

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

simctl_shutdown_deviceB

Shutdown a simulator device.

Args: device: Device UDID, name, or 'booted' for current device

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits. It only states the action and return value ('Success message'), but does not describe side effects (e.g., state saving) or error conditions for already shutdown devices.

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 concise (two sentences) and uses an Args/Returns structure. It is front-loaded with the action. Minor improvement could be to separate the parameter description into a bullet for clarity.

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 parameter and an output schema, the description is minimally adequate. It explains the parameter and return value but lacks error handling details and use-case differentiation.

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 no description for the 'device' parameter. The description adds valuable context by specifying that it accepts a UDID, name, or 'booted'. Since schema coverage is 0%, this compensates well.

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 ('Shutdown') and the resource ('simulator device'). It distinguishes from sibling tools like simctl_boot_device and simctl_delete_device by focusing specifically on shutdown.

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 is provided on when to use shutdown versus other lifecycle operations. It does not mention prerequisites (e.g., device must be booted) or what to do if the device is already shut down.

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

simctl_status_bar_overrideB

Override status bar appearance on a simulator device.

Args: device: Device UDID, name, or 'booted' for current device action: Status bar action (override, clear) time: Time to display (e.g., "9:41") data_network: Data network type (wifi, 3g, 4g, lte, lte-a, lte+, 5g, 5g+, 5g-uw) wifi_bars: WiFi signal strength (0-3) cellular_bars: Cellular signal strength (0-4) battery_level: Battery level percentage (0-100) battery_state: Battery state (charging, charged, discharging)

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
actionYes
timeNo
data_networkNo
wifi_barsNo
cellular_barsNo
battery_levelNo
battery_stateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations provided, so description carries burden. It lists parameters and implies a modification, but fails to mention persistence, side effects on screenshots, or how clearing works. Returns 'Success message' is vague.

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 structured with Args and Returns, concise at about 10 lines, and front-loaded with the main purpose.

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 8 parameters and no annotations, the description covers basic semantics but lacks details on default behavior, error handling, or constraints. Output schema exists but is not explained.

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?

With 0% schema coverage, the description adds meaning for each parameter (e.g., 'Time to display (e.g., '9:41')', 'WiFi signal strength (0-3)'). This is helpful beyond the schema's title-only fields.

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 'Override status bar appearance on a simulator device', which is a specific verb+resource. While it doesn't explicitly differentiate from siblings, the purpose is unambiguous.

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 other simulator tools like simctl_screenshot or simctl_ui_appearance. No context on when to use 'override' vs 'clear' action.

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

simctl_terminate_appA

Terminate an app on a simulator device.

Args: device: Device UDID, name, or 'booted' for current device bundle_id: App bundle identifier

Returns: Success message

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
bundle_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/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 basic action and return value but lacks details like termination behavior (forceful, loss of unsaved data) or prerequisites (app must be running).

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 concise (6 lines), front-loaded with purpose, and every sentence adds value without redundancy.

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's simplicity (2 params, no nested objects), the description covers core aspects: purpose, parameters, and return. It could mention that the device must be booted and app installed, but overall it is adequate.

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 Args section explains that 'device' can be UDID/name/'booted' and 'bundle_id' is the app identifier, adding meaning beyond the schema's type-only definitions. However, no further specifics (e.g., how to obtain bundle_id) are provided.

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 starts with a clear verb 'Terminate' and specifies the resource 'app on a simulator device', differentiating it from sibling tools like simctl_launch_app and simctl_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 Guidelines4/5

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

The context is clear: use this tool to stop a running app. However, no explicit when-not-to-use or alternative tools are mentioned, which would have improved guidance.

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

simctl_ui_appearanceA

Get or set UI appearance (light/dark mode) on a simulator device.

Args: device: Device UDID, name, or 'booted' for current device appearance: UI appearance (light, dark). If not provided, returns current appearance.

Returns: Current or updated appearance

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYes
appearanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 describes the tool as a getter/setter but does not disclose any behavioral details like side effects, error conditions, or requirements (e.g., whether the simulator must be booted). The description is adequate for a simple tool but not comprehensive.

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 very concise: three sentences with an 'Args' section and a 'Returns' line. It is front-loaded with the core action and avoids any superfluous information. Every sentence earns its place.

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's simplicity (2 parameters, output schema exists), the description is fairly complete. It covers parameter semantics and return value. However, it could be slightly more explicit about the output format (e.g., 'Current or updated appearance as a string') and any constraints (e.g., 'only works on booted simulators').

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?

Schema description coverage is 0%, so the description must add meaning. It does so by explaining that 'device' can be a UDID, name, or 'booted', and that 'appearance' can be 'light' or 'dark' (or null for get). This adds significant context beyond the bare type definitions in the input 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?

The description clearly states 'Get or set UI appearance (light/dark mode) on a simulator device,' providing a specific verb ('get or set') and resource ('UI appearance on simulator device'). It distinguishes itself from sibling tools like simctl_screenshot or simctl_status_bar_override, which deal with different aspects of the 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 explains basic usage: providing 'device' is required, and 'appearance' is optional (if omitted, returns current appearance). However, it lacks explicit guidance on when to use this tool versus alternatives, and does not mention any preconditions 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. 15 tool updatesv0.1.0
    • First observedsimctl_boot_device
    • First observedsimctl_create_device
    • First observedsimctl_delete_device
    • First observedsimctl_install_app
    • First observedsimctl_launch_app
    • First observedsimctl_list_devices
    • First observedsimctl_privacy_control
    • First observedsimctl_push_notification
    • First observedsimctl_record_video
    • First observedsimctl_screenshot
    • First observedsimctl_set_location
    • First observedsimctl_shutdown_device
    • First observedsimctl_status_bar_override
    • First observedsimctl_terminate_app
    • First observedsimctl_ui_appearance

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct simulator operation—device lifecycle, app management, interaction, and settings—with no overlap. Even similar actions like install, launch, and terminate are clearly differentiated.

Naming Consistency5/5

All tool names follow the 'simctl_verb_noun' pattern consistently (e.g., boot_device, install_app, set_location), using lowercase with underscores. The naming is predictable and readable.

Tool Count5/5

With 15 tools, the server is well-scoped for simulator control. Each tool covers a necessary operation without being excessive or sparse, fitting the typical 3-15 range for a focused domain.

Completeness4/5

The tool set covers core device and app lifecycle, plus common interactions like screenshots, push notifications, and privacy control. Missing advanced operations (e.g., device reset, file copy) are minor gaps.

Maintenance

ActivityInactive
ResponsivenessNo issues

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
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to automate iOS Simulator interactions including device management, UI element interaction (tap, swipe, type), screenshot capture, and execution of YAML-defined navigation workflows.
    12
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Enables control of the iOS Simulator using the xcrun simctl command-line utility. It allows users to manage devices, install and launch apps, send push notifications, and simulate device features like GPS location.
    12
    -

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/nzrsky/simctl-mcp-server'

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