Skip to main content
Glama

iOS Simulator MCP 서버

Install MCP Server NPM Version

iOS 시뮬레이터와 상호작용하기 위한 MCP(Model Context Protocol) 서버입니다. 이 서버를 사용하면 시뮬레이터에 대한 정보를 얻고, UI 상호작용을 제어하며, UI 요소를 검사하여 iOS 시뮬레이터와 상호작용할 수 있습니다.

보안 공지: 1.3.3 미만 버전에서 발견된 명령 주입(Command injection) 취약점이 수정되었습니다. v1.3.3 이상으로 업데이트하십시오. 자세한 내용은 SECURITY.md를 참조하십시오.

https://github.com/user-attachments/assets/453ebe7b-cc93-4ac2-b08d-0f8ac8339ad3

🌟 주요 소개

이 프로젝트는 다양한 간행물 및 리소스에서 소개 및 언급되었습니다:

Related MCP server: iOS Device Control MCP Server

도구

get_booted_sim_id

설명: 현재 부팅된 iOS 시뮬레이터의 ID를 가져옵니다.

매개변수: 매개변수 없음

open_simulator

설명: iOS 시뮬레이터 애플리케이션을 엽니다.

매개변수: 매개변수 없음

ui_describe_all

설명: iOS 시뮬레이터의 전체 화면에 대한 접근성 정보를 설명합니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
}

ui_tap

설명: iOS 시뮬레이터 화면을 탭합니다.

매개변수:

{
  /**
   * Press duration in seconds (decimal numbers allowed)
   */
  duration?: string;
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** The x-coordinate */
  x: number;
  /** The y-coordinate */
  y: number;
}

ui_type

설명: iOS 시뮬레이터에 텍스트를 입력합니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /**
   * Text to input
   * Format: ASCII printable characters only
   */
  text: string;
}

ui_swipe

설명: iOS 시뮬레이터 화면을 스와이프합니다.

매개변수:

{
  /**
   * Swipe duration in seconds (decimal numbers allowed)
   */
  duration?: string;
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** The starting x-coordinate */
  x_start: number;
  /** The starting y-coordinate */
  y_start: number;
  /** The ending x-coordinate */
  x_end: number;
  /** The ending y-coordinate */
  y_end: number;
  /** The size of each step in the swipe (default is 1) */
  delta?: number;
}

ui_describe_point

설명: iOS 시뮬레이터 화면의 지정된 좌표에 있는 접근성 요소를 반환합니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** The x-coordinate */
  x: number;
  /** The y-coordinate */
  y: number;
}

ui_find_element

설명: 접근성 트리를 검색하여 주어진 기준과 일치하는 요소를 반환합니다.

매개변수:

{
  /** Array of search strings. An element matches if ANY string matches against its AXLabel or AXUniqueId */
  search: string[];
  /** Filter by element type (e.g. 'Button', 'StaticText', 'Group'). Case-insensitive exact match */
  type?: string;
  /** Match mode: 'substring' (default) or 'exact' */
  matchMode?: "substring" | "exact";
  /** Whether search matching is case-sensitive (default: false) */
  caseSensitive?: boolean;
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
}

ui_view

설명: 현재 시뮬레이터 뷰의 압축된 스크린샷 이미지 콘텐츠를 가져옵니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
}

screenshot

설명: iOS 시뮬레이터의 스크린샷을 찍습니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** File path where the screenshot will be saved. If relative, it uses the directory specified by the `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` env var, or `~/Downloads` if not set. */
  output_path: string;
  /** Image format (png, tiff, bmp, gif, or jpeg). Default is png. */
  type?: "png" | "tiff" | "bmp" | "gif" | "jpeg";
  /** Display to capture (internal or external). Default depends on device type. */
  display?: "internal" | "external";
  /** For non-rectangular displays, handle the mask by policy (ignored, alpha, or black) */
  mask?: "ignored" | "alpha" | "black";
}

record_video

설명: simctl을 직접 사용하여 iOS 시뮬레이터의 비디오를 녹화합니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** Optional output path. If not provided, a default name will be used. The file will be saved in the directory specified by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` or in `~/Downloads` if the environment variable is not set. */
  output_path?: string;
  /** Specifies the codec type: "h264" or "hevc". Default is "hevc". */
  codec?: "h264" | "hevc";
  /** Display to capture: "internal" or "external". Default depends on device type. */
  display?: "internal" | "external";
  /** For non-rectangular displays, handle the mask by policy: "ignored", "alpha", or "black". */
  mask?: "ignored" | "alpha" | "black";
  /** Force the output file to be written to, even if the file already exists. */
  force?: boolean;
}

stop_recording

설명: killall을 사용하여 시뮬레이터 비디오 녹화를 중지합니다.

매개변수: 매개변수 없음

install_app

설명: iOS 시뮬레이터에 앱 번들(.app 또는 .ipa)을 설치합니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** Path to the app bundle (.app directory or .ipa file) to install */
  app_path: string;
}

launch_app

설명: 번들 식별자를 사용하여 iOS 시뮬레이터에서 앱을 실행합니다.

매개변수:

{
  /**
   * Udid of target, can also be set with the IDB_UDID env var
   * Format: UUID (8-4-4-4-12 hexadecimal characters)
   */
  udid?: string;
  /** Bundle identifier of the app to launch (e.g., com.apple.mobilesafari) */
  bundle_id: string;
  /** Terminate the app if it is already running before launching */
  terminate_running?: boolean;
  /** Optional environment variables passed via SIMCTL_CHILD_ to simctl launch */
  env?: Record<string, string>;
}

참고: simctl launch가 모든 Xcode 버전에서 --env/--envs를 지원하지 않기 때문에 환경 변수는 SIMCTL_CHILD_를 사용하여 전달됩니다.

예시:

{
  "bundle_id": "com.example.app",
  "terminate_running": true,
  "env": {
    "FOO": "bar",
    "BAZ": "qux"
  }
}

💡 사용 사례: MCP 도구 호출을 통한 QA 단계

이 MCP 서버를 사용하면 MCP(Model Context Protocol) 클라이언트와 통합된 AI 어시스턴트가 도구 호출을 통해 품질 보증(QA) 작업을 수행할 수 있습니다. 이는 UI 일관성과 올바른 동작을 보장하기 위해 기능을 구현한 직후에 유용합니다.

사용 방법

기능 구현 후, MCP 클라이언트 환경 내의 AI 어시스턴트에게 사용 가능한 도구를 사용하도록 지시하십시오. 예를 들어, Cursor의 에이전트 모드에서 아래 프롬프트를 사용하여 UI 상호작용을 빠르게 검증하고 문서화할 수 있습니다.

예시 프롬프트

  • UI 요소 확인:

    Verify all accessibility elements on the current screen
  • 텍스트 입력 확인:

    Enter "QA Test" into the text input field and confirm the input is correct
  • 탭 응답 확인:

    Tap on coordinates x=250, y=400 and verify the expected element is triggered
  • 스와이프 동작 검증:

    Swipe from x=150, y=600 to x=150, y=100 and confirm correct behavior
  • 상세 요소 확인:

    Describe the UI element at position x=300, y=350 to ensure proper labeling and functionality
  • AI 에이전트에게 시뮬레이터 화면 보여주기:

    View the current simulator screen
  • 스크린샷 찍기:

    Take a screenshot of the current simulator screen and save it to my_screenshot.png
  • 비디오 녹화:

    Start recording a video of the simulator screen (saves to the default output directory, which is `~/Downloads` unless overridden by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR`)
  • 녹화 중지:

    Stop the current simulator screen recording
  • 앱 설치:

    Install the app at path/to/MyApp.app on the simulator
  • 앱 실행:

    Launch the Safari app (com.apple.mobilesafari) on the simulator

사전 요구 사항

설치

이 섹션에서는 iOS 시뮬레이터 MCP 서버를 다양한 MCP 클라이언트와 통합하는 방법을 설명합니다.

Cursor와 함께 설치

Cursor는 ~/.cursor/mcp.json에 위치한 구성 파일을 통해 MCP 서버를 관리합니다.

옵션 1: NPX 사용 (권장)

  1. Cursor MCP 구성 파일을 편집합니다. Cursor에서 직접 열거나 다음 명령을 사용할 수 있습니다:

    # Open with your default editor (or use 'code', 'vim', etc.)
    open ~/.cursor/mcp.json
    # Or use Cursor's command if available
    # cursor ~/.cursor/mcp.json
  2. iOS 시뮬레이터 서버 구성을 사용하여 mcpServers 섹션을 추가하거나 업데이트합니다:

    {
      "mcpServers": {
        // ... other servers might be listed here ...
        "ios-simulator": {
          "command": "npx",
          "args": ["-y", "ios-simulator-mcp"]
        }
      }
    }

    mcpServers가 이미 존재하는 경우 JSON 구조가 유효한지 확인하십시오.

  3. 변경 사항을 적용하려면 Cursor를 다시 시작하십시오.

옵션 2: 로컬 개발

  1. 이 저장소를 복제합니다:

    git clone https://github.com/joshuayoes/ios-simulator-mcp
    cd ios-simulator-mcp
  2. 종속성을 설치합니다:

    npm install
  3. 프로젝트를 빌드합니다:

    npm run build
  4. Cursor MCP 구성 파일을 편집합니다(옵션 1 참조).

  5. 로컬 빌드를 가리키는 mcpServers 섹션을 추가하거나 업데이트합니다:

    {
      "mcpServers": {
        // ... other servers might be listed here ...
        "ios-simulator": {
          "command": "node",
          "args": ["/full/path/to/your/ios-simulator-mcp/build/index.js"]
        }
      }
    }

    중요: /full/path/to/your/ios-simulator-mcp 저장소를 복제한 절대 경로로 바꾸십시오.

  6. 변경 사항을 적용하려면 Cursor를 다시 시작하십시오.

Claude Code와 함께 설치

Claude Code CLI는 claude mcp 명령을 사용하거나 구성 파일을 직접 편집하여 MCP 서버를 관리할 수 있습니다. Claude Code MCP 구성에 대한 자세한 내용은 공식 문서를 참조하십시오.

옵션 1: NPX 사용 (권장)

  1. claude mcp add 명령을 사용하여 서버를 추가합니다:

    claude mcp add ios-simulator npx ios-simulator-mcp
  2. 필요한 경우 실행 중인 Claude Code 세션을 다시 시작하십시오.

옵션 2: 로컬 개발

  1. 이 저장소를 복제하고 종속성을 설치한 후 Cursor "로컬 개발" 단계 1-3에 설명된 대로 프로젝트를 빌드합니다.

  2. 로컬 빌드를 가리키는 claude mcp add 명령을 사용하여 서버를 추가합니다:

    claude mcp add ios-simulator -- node "/full/path/to/your/ios-simulator-mcp/build/index.js"

    중요: /full/path/to/your/ios-simulator-mcp 저장소를 복제한 절대 경로로 바꾸십시오.

  3. 필요한 경우 실행 중인 Claude Code 세션을 다시 시작하십시오.

구성

환경 변수

변수

설명

예시

IOS_SIMULATOR_MCP_FILTERED_TOOLS

등록에서 제외할 도구 이름의 쉼표로 구분된 목록입니다.

screenshot,record_video,stop_recording

IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR

스크린샷 및 비디오 녹화와 같은 출력 파일의 기본 디렉토리를 지정합니다. 설정하지 않으면 ~/Downloads가 사용됩니다. 에이전트의 파일 시스템 액세스가 제한된 경우 유용할 수 있습니다.

~/Code/awesome-project/tmp

IOS_SIMULATOR_MCP_IDB_PATH

IDB 실행 파일에 대한 사용자 지정 경로를 지정합니다. 설정하지 않으면 idb가 사용됩니다(PATH에 있다고 가정). IDB가 표준이 아닌 위치에 설치된 경우 유용합니다.

~/bin/idb 또는 /usr/local/bin/idb

구성 예시

{
  "mcpServers": {
    "ios-simulator": {
      "command": "npx",
      "args": ["-y", "ios-simulator-mcp"],
      "env": {
        "IOS_SIMULATOR_MCP_FILTERED_TOOLS": "screenshot,record_video,stop_recording",
        "IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR": "~/Code/awesome-project/tmp",
        "IOS_SIMULATOR_MCP_IDB_PATH": "~/bin/idb"
      }
    }
  }
}

MCP 레지스트리 서버 목록

라이선스

MIT

Available Tools

17 tools
get_booted_sim_idA
Read-only

Get the ID of the currently booted iOS simulator

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint: true and openWorldHint: true. The description adds no behavioral context beyond stating the purpose. It does not mention what happens if no simulator is booted or any 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.

Conciseness5/5

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

The description is a single sentence with no wasted words. It front-loads the key information efficiently.

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

Completeness5/5

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

Given the simplicity (no parameters, no output schema, no nested objects), the description is complete enough for the tool's purpose. It tells the agent what the tool does without requiring additional 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?

There are no parameters (schema coverage 100% trivially). The description does not need to explain parameters, and the baseline for 0 parameters is 4.

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 'Get' and the specific resource 'ID of the currently booted iOS simulator'. It distinguishes itself from sibling tools like install_app, launch_app, and UI tools 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 when the simulator ID is needed, but does not provide explicit guidance on when to use or not use this tool, nor does it mention alternatives. With no parameters and a clear purpose, the implied usage is adequate.

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

install_appA

Installs an app bundle (.app or .ipa) on the iOS Simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoUdid of target, can also be set with the IDB_UDID env var
app_pathYesPath to the app bundle (.app directory or .ipa file) to install

TDQS

A3.6/5.0
Behavior2/5

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

The description adds minimal behavioral context beyond the annotations. readOnlyHint=false already signals a write operation, but the description does not disclose prerequisites (e.g., whether the simulator must be booted), side effects (e.g., overwriting an existing installation), or return behavior. No annotation contradiction is present.

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

Conciseness5/5

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

The description is a single clear sentence with no unnecessary words or repetition. It efficiently conveys the tool's purpose without fluff.

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

Completeness4/5

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

For a simple tool with good schema coverage and annotations, the description is largely sufficient. It clearly states the action and target. The lack of information about side effects or prerequisites is a minor gap, but the annotations and schema cover the essential details for correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so both parameters (udid and app_path) are fully documented. The description does not add any parameter-specific meaning beyond what the schema already provides, thus earning the baseline score of 3.

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 function with a specific verb 'installs' and the resource ('app bundle (.app or .ipa) on the iOS Simulator'). It is distinct from sibling tools like launch_app or list_apps, as installation is a different operation.

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 usage context is implied by the verb 'installs' — an agent would know to use this when needing to install an app on the simulator. However, there is no explicit guidance on alternatives or when not to use it (e.g., for launching or listing apps).

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

launch_appA

Launches an app on the iOS Simulator by bundle identifier

ParametersJSON Schema
NameRequiredDescriptionDefault
envNoEnvironment variables to pass to simctl launch
udidNoUdid of target, can also be set with the IDB_UDID env var
bundle_idYesBundle identifier of the app to launch (e.g., com.apple.mobilesafari)
terminate_runningNoTerminate the app if it is already running before launching

TDQS

A3.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, signaling a mutating, side-effectful operation. The description adds no further behavioral context—no side effects, failure modes, prerequisites, or return value. 'Launches an app' largely restates the tool name and the annotation's implication.

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?

A single 11-word sentence is information-dense and free of fluff. It is perfectly front-loaded with the action and target.

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 schema thoroughly documents all parameters and the annotations cover the safety profile, but the description omits expected output (e.g., simctl launch returns a PID), error cases (app not installed, simulator not booted), and any guidance on the env or terminate_running parameters. Adequate for a simple launch action but not complete.

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

Parameters3/5

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

The input schema has 100% coverage with all four parameters described, so the baseline of 3 applies. The description's 'by bundle identifier' merely reinforces the required bundle_id parameter without adding semantics beyond what the schema already provides.

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 uses a specific verb ('Launches'), a clear resource ('an app on the iOS Simulator'), and an explicit method ('by bundle identifier'). This clearly distinguishes it from sibling tools like install_app, terminate_app, and open_url.

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

Usage Guidelines4/5

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

The description gives clear context: it launches an app on the iOS Simulator, so an agent knows when to reach for it. However, it does not explicitly mention alternatives or exclusions, such as needing to install the app first or ensuring the simulator is booted.

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

list_appsA
Read-only

Lists all installed apps on the iOS Simulator with their bundle identifiers and display names

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoUdid of target, can also be set with the IDB_UDID env var

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide readOnlyHint=true and openWorldHint=true, which convey the read-only and safe nature of this operation. The description adds context about the scope ('installed apps on the iOS Simulator') and return fields, but does not describe additional behavioral details beyond what annotations already provide.

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 one concise sentence, front-loaded with the action and resource, containing no extraneous information or repetition of the tool name.

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 read-only list operation with one optional parameter and no output schema, the description is adequately complete. It states what is listed and what details are included. Minor gaps like requiring a booted simulator are implied by the 'iOS Simulator' context but not explicitly stated, which is acceptable for such a lightweight tool.

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

Parameters3/5

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

The input schema has 100% coverage for the single optional 'udid' parameter with a clear description. The tool description does not mention the parameter, but the schema fully explains its meaning (target UDID with env var fallback), so no additional semantic value is added by the description.

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

Purpose5/5

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

The description clearly states the verb 'Lists' and specifies the resource: 'all installed apps on the iOS Simulator'. It also mentions the output fields ('bundle identifiers and display names'), which distinguishes it from sibling tools like install_app or launch_app that 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 its use for seeing installed apps, but does not explicitly state when to use it versus alternatives, nor does it mention any exclusion criteria. There is no direct sibling that also lists apps, so the usage context is somewhat implied but not explicitly guided.

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

open_simulatorA

Opens the iOS Simulator application

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and openWorldHint=true, so the description's statement 'Opens' is consistent but adds no new behavioral insight. With annotations covering the safety profile, a score of 3 is appropriate.

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

Conciseness5/5

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

The description is a single, clear sentence with no unnecessary words, perfectly suited for a simple action tool.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no output schema), the description completely informs the agent about its purpose and effect, making it sufficient for correct invocation.

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?

No parameters exist, and schema coverage is 100%. The description adds no parameter information but doesn't need to; baseline score of 4 is given due to zero parameters.

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 ('Opens') and the specific resource ('iOS Simulator application'), distinguishing it from sibling tools like launch_app (which launches a specific app) and other simulator operations.

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, such as when the simulator is already open or how it relates to other tools like install_app. This lack of context may lead to incorrect selection in a multi-tool scenario.

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

open_urlA

Opens a URL in the iOS Simulator, useful for testing deep links and universal links

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe URL or deep link to open (e.g., https://example.com or myapp://screen/detail)
udidNoUdid of target, can also be set with the IDB_UDID env var

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false, so the mutation aspect is known. The description only says 'opens a URL', which adds minimal behavioral context. It does not disclose potential side effects like launching an app or requiring a booted simulator, but with annotations covering the safety profile, the added value is limited yet not absent.

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

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the action and communicates the key use case. It contains no fluff or redundant information, making it exceptionally concise.

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

Completeness4/5

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

For a simple tool with two params and no output schema, the description is largely sufficient. It explains the purpose and use case, and the schema covers parameters. It lacks explicit mention of preconditions like a booted simulator, but given the surrounding tools (e.g., get_booted_sim_id) and simplicity, the omission is minor.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'url' and 'udid' already documented in the schema. The tool description does not add any additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Opens' and resource 'URL in the iOS Simulator', clearly differentiating from sibling tools like launch_app (which launches an app) and open_simulator (which opens the simulator app). It also states the intended use case (testing deep links and universal links), fully clarifying the tool's purpose.

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

Usage Guidelines4/5

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

The description provides clear context by mentioning it is useful for testing deep links and universal links, implying when to use it. However, it does not explicitly name alternatives or state when not to use it, stopping short of full exclusion guidance.

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

record_videoB

Records a video of the iOS Simulator using simctl directly

ParametersJSON Schema
NameRequiredDescriptionDefault
maskNoFor non-rectangular displays, handle the mask by policy: "ignored", "alpha", or "black".
udidNoUdid of target, can also be set with the IDB_UDID env var
codecNoSpecifies the codec type: "h264" or "hevc". Default is "hevc".
forceNoForce the output file to be written to, even if the file already exists.
displayNoDisplay to capture: "internal" or "external". Default depends on device type.
output_pathNoOptional output path. If not provided, a default name will be used. The file will be saved in the directory specified by `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` or in `~/Downloads` if the environment variable is not set.

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already signal a non-read-only, open-world operation, but the description adds no behavioral context beyond the literal action. It does not disclose that recording is an ongoing process requiring a separate stop call, nor does it mention output-file behavior or other side effects. There is no annotation contradiction, but the description fails to add meaningful transparency.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no filler or redundant detail. It states the action, resource, and implementation method efficiently.

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?

Despite the rich schema, the description omits critical operational context such as how long recording lasts, how to stop it, and what the tool returns. The existence of a stop_recording sibling makes this gap especially significant, as the agent cannot infer the full workflow from the description alone.

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

Parameters3/5

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

The input schema provides 100% description coverage with detailed explanations for all six parameters, including udid, codec, display, and output_path. The description itself adds no parameter-level semantics, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description uses the specific verb 'Records' and identifies the resource as 'a video of the iOS Simulator'. It clearly distinguishes the tool from sibling tools like screenshot (still image) and stop_recording (ending a recording).

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 the tool is used when a video of the simulator is needed, but it provides no explicit when-to-use or when-not-to-use guidance. It does not mention alternatives or prerequisites such as a booted simulator or how this relates to screenshot or stop_recording.

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

screenshotB

Takes a screenshot of the iOS Simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
maskNoFor non-rectangular displays, handle the mask by policy (ignored, alpha, or black)
typeNoImage format (png, tiff, bmp, gif, or jpeg). Default is png.
udidNoUdid of target, can also be set with the IDB_UDID env var
displayNoDisplay to capture (internal or external). Default depends on device type.
output_pathYesFile path where the screenshot will be saved. If relative, it uses the directory specified by the `IOS_SIMULATOR_MCP_DEFAULT_OUTPUT_DIR` env var, or `~/Downloads` if not set.

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already provide readOnlyHint=false and openWorldHint=true, and the description adds no further behavioral detail such as simulator boot requirement, file output location, or failure modes. It only restates the core action without enriching the annotations.

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

Conciseness5/5

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

Single sentence, front-loaded with the action, no filler words. Perfectly concise for the simple 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?

The schema and annotations cover most operational details, and the description states the core function. Missing usage alternatives and return behavior, but adequate for a simple screenshot tool with well-documented parameters.

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

Parameters3/5

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

Schema description coverage is 100%, so baseline is 3. The description itself contributes no parameter information, but the schema already documents all five parameters with defaults and env var fallback.

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

Purpose5/5

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

Description uses specific verb 'takes' and resource 'screenshot of the iOS Simulator', clearly stating the tool's function. This distinguishes it from sibling tools like record_video and ui_view.

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 vs alternatives; no exclusions or context provided. The description only states what it does, leaving the agent to infer usage from the name and sibling list.

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

stop_recordingA

Stops the simulator video recording using killall

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already indicate this is not read-only (readOnlyHint=false) and has open world effects (openWorldHint=true). The description adds the implementation method 'killall', which hints at forceful termination, but it doesn't disclose what happens if no recording is active, whether the recording file is saved, or any side effects. With annotations present, the description adds minimal extra behavioral context.

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

Conciseness5/5

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

The description is a single, concise sentence that states the action and method. Every word earns its place, with no fluff or 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 (no parameters, no output schema), the description is largely complete. It could mention behavior when no recording is in progress (e.g., no-op or error), but for a basic stop action, the current text suffices. A 5 would require that extra edge-case 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 tool has zero parameters and the schema coverage is 100% (trivially). The description correctly doesn't attempt to explain parameters. With 0 params, the baseline is 4, and there is no gap to compensate for.

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 uses a specific verb ('Stops') and a clear resource ('the simulator video recording'), which directly distinguishes it from the sibling tool 'record_video' that starts recording. It also includes the implementation detail 'using killall', making the action unambiguous.

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?

While the description doesn't explicitly mention when to use this tool or list alternatives, the context is clear: it complements 'record_video' and is specific to simulator video recording. The absence of an explicit exclusion (e.g., 'only when recording is active') prevents a 5, but the purpose is self-evident.

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

terminate_appA

Terminates a running app on the iOS Simulator by bundle identifier

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoUdid of target, can also be set with the IDB_UDID env var
bundle_idYesBundle identifier of the app to terminate (e.g., com.apple.mobilesafari)

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate a mutating operation (readOnlyHint=false). The description adds that the action targets a running app on the iOS Simulator, which is useful, but it does not disclose failure modes, side effects, or requirements like needing a booted simulator. It provides some value beyond annotations but lacks richer behavioral context.

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?

A single, grammatically clean sentence that promptly states the action, target, and method. No filler or repetition, earning it the highest score for conciseness.

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

Completeness4/5

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

For a simple two-parameter tool with no output schema, this description sufficiently covers the core action. It lacks mention of error handling, simulator state prerequisites, or inverse relationship with launch_app, but these are not essential for basic invocation. Minor gaps keep it from a 5.

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

Parameters3/5

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

The schema fully documents both parameters with descriptions (100% coverage), so the description's mention of 'by bundle identifier' adds no new semantic detail. The baseline of 3 applies since the schema does the heavy lifting for parameter understanding.

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 uses the specific verb 'Terminates' with a clear resource 'a running app on the iOS Simulator' and method 'by bundle identifier'. This precisely defines the tool's function and distinguishes it from sibling tools like launch_app and 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 description clearly implies the tool is for stopping a running app, which gives strong contextual use guidance. However, it does not explicitly mention alternatives or conditions when to avoid use, such as non-running apps or dependency on a booted simulator, missing the top benchmark.

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

ui_describe_allA
Read-only

Describes accessibility information for the entire screen in the iOS Simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoUdid of target, can also be set with the IDB_UDID env var

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds minimal extra context by specifying 'entire screen' versus a point, but does not elaborate on output format or behavior beyond that.

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

Conciseness5/5

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

The description is a single, clear sentence that front-loads the action and scope. No unnecessary words or repetition.

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 read-only tool with one optional parameter and no output schema, the description adequately conveys the tool's purpose. While it lacks explicit return-format details, the phrase 'accessibility information for the entire screen' gives sufficient context for selection and invocation.

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

Parameters3/5

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

The input schema has 100% coverage, documenting the udid parameter with pattern and env var note. The description adds no parameter-specific information, so it does not exceed the schema baseline.

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 function: 'Describes accessibility information for the entire screen in the iOS Simulator.' It uses a specific verb ('describes') and identifies the resource (accessibility information for the entire screen), which distinguishes it from sibling tools like ui_describe_point.

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 ui_describe_point or ui_find_element. The description only states what it does without any contextual usage hints or exclusions.

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

ui_describe_pointA
Read-only

Returns the accessibility element at given co-ordinates on the iOS Simulator's screen

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x-coordinate
yYesThe y-coordinate
udidNoUdid of target, can also be set with the IDB_UDID env var

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, providing safety context. The description adds that the tool returns an accessibility element, but it does not mention behavior for empty coordinates or coordinate system details. It does not contradict annotations.

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

Conciseness5/5

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

The description is a single concise sentence that fully conveys the tool's function without unnecessary words. It is front-loaded with the action and resource.

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 point-query tool with good annotations, the description is adequate but misses details like coordinate system (points vs pixels), behavior when no element exists, and return format. Since there is no output schema, additional context would be beneficial.

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

Parameters3/5

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

The schema describes all three parameters with 100% coverage, including x, y, and udid. The description adds no additional meaning beyond what the schema already provides, so a baseline of 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Returns' and clearly states the resource: the accessibility element at given coordinates on the iOS Simulator's screen. It distinguishes itself from sibling tools like ui_describe_all by specifying that it targets a single point.

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 when you need to inspect a specific point on screen, but it does not explicitly state when to prefer this over alternatives like ui_describe_all or ui_find_element. No exclusions or alternative references are provided.

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

ui_find_elementA
Read-only

Searches the accessibility tree and returns elements matching the given criteria

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFilter by element type (e.g. 'Button', 'StaticText', 'Group'). Case-insensitive exact match
udidNoUdid of target, can also be set with the IDB_UDID env var
searchYesArray of search strings. An element matches if ANY string matches against its AXLabel or AXUniqueId
matchModeNoMatch mode for search strings: 'substring' (default) or 'exact'substring
caseSensitiveNoWhether search matching is case-sensitive (default: false)

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds context that it inspects the accessibility tree, but does not disclose return format, behavior when no elements match, or any nuances. This is acceptable but not rich.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that wastes no words. It communicates the core action and expected result efficiently.

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?

With 5 parameters, no output schema, and multiple sibling tools, the description is minimal. It covers the basic purpose but lacks usage guidance, return details, or edge-case behavior, so it is adequate but not comprehensive.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter (search, type, udid, matchMode, caseSensitive) has a description in the schema. The tool description adds no additional parameter semantics, thus baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb ('searches') and a clear resource ('the accessibility tree'), and states the output ('returns elements matching criteria'). This clearly distinguishes it from sibling tools like ui_describe_all or ui_view.

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 given on when to use this tool versus alternatives like ui_describe_all or ui_tap. It does not mention conditions, exclusions, or preferred scenarios, leaving the agent to infer from the name and sibling list.

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

ui_swipeB

Swipe on the screen in the iOS Simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoUdid of target, can also be set with the IDB_UDID env var
deltaNoThe size of each step in the swipe (default is 1)
x_endYesThe ending x-coordinate
y_endYesThe ending y-coordinate
x_startYesThe starting x-coordinate
y_startYesThe starting y-coordinate
durationNoSwipe duration in seconds (e.g., 0.1)

TDQS

B3.1/5.0
Behavior2/5

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

Annotations only indicate readOnlyHint=false and openWorldHint=true, but the description adds no extra behavioral context. It does not disclose coordinate system, effect on the UI, whether the simulator must be foregrounded, or any side effects. The description is purely nominal.

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

Conciseness5/5

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

The description is a single, succinct sentence with no fluff or redundancy. It front-loads the action and resource, making it easy to scan. Every word earns its place.

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

Completeness3/5

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

Given the 7 parameters and no output schema, the description is minimal but not entirely insufficient because the schema covers parameter details. However, it lacks high-level behavioral context (e.g., swipe gesture semantics, coordinate units, delta meaning) that would help an agent know exactly what to expect. This is an adequate-but-gappy description.

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

Parameters3/5

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

Schema coverage is 100%, with all parameters (x_start, y_start, x_end, y_end, delta, duration, udid) documented in the input schema. The description adds no additional meaning beyond the schema, so the baseline of 3 is appropriate.

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 uses a specific verb ('Swipe') and resource ('screen in the iOS Simulator'), making the tool's core action clear. However, it does not differentiate from sibling gesture tools like ui_tap or ui_type beyond the action name, so it stops short of a 5.

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 over alternatives. There is no mention of scenarios, prerequisites (e.g., booted simulator), or exclusions. The description simply states the action without context.

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

ui_tapB

Tap on the screen in the iOS Simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesThe x-coordinate
yYesThe x-coordinate
udidNoUdid of target, can also be set with the IDB_UDID env var
durationNoPress duration

TDQS

B3.1/5.0
Behavior2/5

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

Annotations indicate a non-read-only, open-world operation, but the description adds no behavioral context such as the effect of tapping, coordinate system, or press-and-hold behavior. It merely restates the action without enriching the agent's understanding.

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

Conciseness5/5

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

The description is a single concise sentence with no filler or repetition. It is front-loaded and directly states the action and context.

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 tap tool with a good schema, the description is barely sufficient. It lacks coordinate system details, udid environment variable hints, and any mention of sibling tools. The openWorldHint annotation covers side effects, so the description need not repeat that, but it could benefit from usage context.

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

Parameters3/5

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

Schema descriptions cover all 4 parameters (x, y, udid, duration) with 100% coverage, so the baseline of 3 applies. The description itself adds nothing beyond the schema, and there's a minor schema typo (y described as 'x-coordinate') that is not the description's responsibility.

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 a specific verb ('Tap') and resource ('screen') within the iOS Simulator, clearly conveying the tool's core function. It is distinct from siblings like ui_swipe and ui_type, though it does not explicitly differentiate itself.

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 given on when to use this tool versus alternatives like ui_type or ui_swipe. The description only states what it does, leaving the agent to infer when tap is appropriate.

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

ui_typeA

Input text into the iOS Simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesText to input
udidNoUdid of target, can also be set with the IDB_UDID env var

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses the basic action of inputting text, and the annotations already indicate that this is a non-read-only operation (readOnlyHint false). However, the description adds no additional behavioral context, such as requiring a focused text field or what happens on failure.

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

Conciseness5/5

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

The description is a single, direct sentence that immediately states the tool's function. There is no filler or redundant information, making it highly concise and easy to parse.

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 low complexity, a clear schema, and existing annotations, the description is mostly complete. However, it lacks context about prerequisites (e.g., requiring a focused input) and does not mention return values or potential side effects beyond what annotations cover.

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

Parameters3/5

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

The input schema provides full descriptions for both parameters (text and udid), so schema coverage is 100%. The description itself adds no parameter-specific information, and the baseline score of 3 applies when the schema is sufficiently documented.

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 'Input text into the iOS Simulator' uses a specific verb and resource, clearly indicating the tool types text into the simulator. This distinguishes it from sibling tools like ui_tap and ui_swipe, which handle gestures.

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 for entering text into the simulator but provides no explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among the sibling tools. The usage context is clear from the action itself.

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

ui_viewA
Read-only

Get the image content of a compressed screenshot of the current simulator view

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNoUdid of target, can also be set with the IDB_UDID env var

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety contract is known. The description adds behavioral detail by noting the screenshot is compressed and returns image content, which is useful for understanding output expectations without overexplaining.

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

Conciseness5/5

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

The description is a single 11-word sentence that is front-loaded and to the point. No unnecessary words or 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 read-only tool with one optional parameter and no output schema, the description covers what it returns (image content) and its compression. It lacks explicit details about output encoding or prerequisites (e.g., simulator booted), but these are minor for an agent aware of simulator context.

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

Parameters3/5

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

The schema provides a full description for the single 'udid' parameter, including a pattern and env var alternative. With 100% schema coverage, the description adds no additional parameter information, which is acceptable but doesn't raise the score above baseline.

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

Purpose5/5

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

Description clearly states the tool retrieves image content of a compressed screenshot for the current simulator view, using a specific verb ('Get') and resource. It distinguishes itself from sibling tools like 'screenshot' by emphasizing 'compressed' and 'image content' rather than a file capture.

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 versus sibling tools like screenshot or record_video. The description doesn't mention scenarios or exclusions, leaving the agent to infer usage from context.

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 updatesv2.1.0
    • Changedinstall_app2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedlaunch_app3 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / env / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Addedlist_apps
    • Addedopen_url
    • Changedrecord_video2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscreenshot2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedstop_recording1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedterminate_app
    • Changedui_describe_all2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedui_describe_point2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedui_find_element2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedui_swipe2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedui_tap2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedui_type2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedui_view2 fields changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 4 tool updatesv1.6.0
    • Changedlaunch_app1 field changed
      • addedInput schema / properties / env
        Added value: +{
        +  "additionalProperties": {
        +    "type": "string"
        +  },
        +  "description": "Environment variables to pass to simctl launch",
        +  "type": "object"
        +}
    • Changedrecord_video1 field changed
      • addedInput schema / properties / udid
        Added value: +{
        +  "description": "Udid of target, can also be set with the IDB_UDID env var",
        +  "pattern": "^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$",
        +  "type": "string"
        +}
    • Changedstop_recording1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Addedui_find_element
  3. 4 tool updatesv1.0.0
    • Addedinstall_app
    • Addedlaunch_app
    • Addedopen_simulator
    • Changedui_swipe1 field changed
      • addedInput schema / properties / duration
        Added value: +{
        +  "description": "Swipe duration in seconds (e.g., 0.1)",
        +  "pattern": "^\\d+(\\.\\d+)?$",
        +  "type": "string"
        +}
  4. 10 tool updates
    • First observedget_booted_sim_id
    • First observedrecord_video
    • First observedscreenshot
    • First observedstop_recording
    • First observedui_describe_all
    • First observedui_describe_point
    • First observedui_swipe
    • First observedui_tap
    • First observedui_type
    • First observedui_view

TDQS

A3.6/5.0
Disambiguation4/5

Most tools are clearly distinct: UI interactions, app management, and media capture are well-separated. However, screenshot and ui_view both capture screen content, and ui_describe_all/ui_describe_point/ui_find_element overlap in describing UI elements, though at different granularities.

Naming Consistency5/5

All tools use snake_case with a verb_noun pattern (e.g., get_booted_sim_id, launch_app). UI actions are consistently prefixed with ui_, and paired operations like record_video/stop_recording follow parallel naming. No mixed conventions or vague verbs.

Tool Count4/5

17 tools is on the heavier side but justifiable for an iOS simulator server that covers device control, UI automation, app management, and media capture. Each tool addresses a specific need and no tool feels redundant enough to remove, though a few are niche, like open_simulator.

Completeness3/5

Core workflows are covered: app install/launch/terminate, UI interaction, screenshots, video, and deep links. However, there are notable gaps: no simulator shutdown/boot control (only open_simulator), no uninstall_app, and no way to list available simulators or manage the device state beyond booted ID.

Maintenance

ActivityNo data
ResponsivenessSlow

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

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/joshuayoes/ios-simulator-mcp'

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