simctl-mcp-server
Provides tools for managing iOS simulators, including device management (boot, shutdown, create, delete), app installation and launching, media capture, notifications, permissions, location settings, and UI appearance controls via Xcode's simctl command line tool.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@simctl-mcp-serverList all available iOS simulators"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Prerequisites:
Python 3.13+
Xcode with Command Line Tools installed
uvx:
curl -LsSf https://astral.sh/uv/install.sh | sh
Run directly with uvx:
uvx simctl-mcp-server
Method 2: Local Development Installation
Prerequisites:
Python 3.13+
Xcode with Command Line Tools installed
Clone and install:
git clone https://github.com/nzrsky/simctl-mcp-server cd simctl-mcp-server pip install .Run the server:
simctl-mcp-server
Method 3: Build from Source
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
Install the MCP Extension from the VS Code marketplace
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": {}
}
}
}Restart VS Code to load the MCP server
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-serverWith uvx:
uvx simctl-mcp-serverAvailable Tools
Device Management
simctl_list_devices- List all simulators and their statessimctl_boot_device- Boot a simulatorsimctl_shutdown_device- Shutdown a simulatorsimctl_create_device- Create a new simulatorsimctl_delete_device- Delete simulators
App Management
simctl_install_app- Install an app (.app bundle or .ipa)simctl_launch_app- Launch an app with optionssimctl_terminate_app- Terminate a running app
Media & Screenshots
simctl_screenshot- Take screenshotssimctl_record_video- Record video (start recording)
Testing & Development
simctl_push_notification- Send push notificationssimctl_privacy_control- Manage app permissionssimctl_set_location- Set device location/GPSsimctl_status_bar_override- Override status bar appearancesimctl_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 toolssimctl_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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| arch | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| device_type | Yes | ||
| runtime | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| devices | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| app_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| bundle_id | Yes | ||
| wait_for_debugger | No | ||
| console_mode | No | none | |
| args | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| filter | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| action | Yes | ||
| service | Yes | ||
| bundle_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| payload | Yes | ||
| bundle_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| output_path | Yes | ||
| codec | No | hevc | |
| display | No | internal |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| output_path | Yes | ||
| format | No | png | |
| display | No | internal |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| action | Yes | ||
| latitude | No | ||
| longitude | No | ||
| scenario | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| action | Yes | ||
| time | No | ||
| data_network | No | ||
| wifi_bars | No | ||
| cellular_bars | No | ||
| battery_level | No | ||
| battery_state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| bundle_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | ||
| appearance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
15 tool updates
v0.1.0- First observed
simctl_boot_device - First observed
simctl_create_device - First observed
simctl_delete_device - First observed
simctl_install_app - First observed
simctl_launch_app - First observed
simctl_list_devices - First observed
simctl_privacy_control - First observed
simctl_push_notification - First observed
simctl_record_video - First observed
simctl_screenshot - First observed
simctl_set_location - First observed
simctl_shutdown_device - First observed
simctl_status_bar_override - First observed
simctl_terminate_app - First observed
simctl_ui_appearance
TDQS
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.
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.
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.
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
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
Build, run, and inspect iOS apps in disposable hosted Simulators from cloud coding agents.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
- LimrunOAuthcom.limrun
Cloud iOS simulators and Android emulators your agent can create, drive, and throw away.
Control real Android and iOS devices with LLM agents — tap, swipe, type, automate flows.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables interaction with iOS simulators by providing tools to inspect UI elements, control UI interactions, and manage simulators through natural language commands.175,4712,159MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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.12MIT
- AlicenseNot gradedqualityDmaintenanceEnables comprehensive control of iOS simulators and real devices through AI assistants, supporting app management, UI automation, screenshots, media operations, and location simulation for iOS development and testing workflows.6MIT
- FlicenseAqualityCmaintenanceEnables 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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