Skip to main content
Glama
andreahaku

Expo iOS Development MCP Server

by andreahaku

Expo iOS Development MCP Server

An MCP (Model Context Protocol) server that enables LLM tools like Claude Code, Cursor, and Codex to control iOS Simulator, Expo/Metro, and run UI automation via Detox.

Features

  • Simulator Control: Boot, shutdown, erase simulators via simctl

  • Screenshots & Video: Capture screenshots and record videos

  • Log Streaming: Real-time simulator log capture with ring buffer

  • Expo/Metro: Start/stop Expo development server

  • UI Automation: Execute Detox actions (tap, swipe, type, wait, assert)

  • Visual Regression: Screenshot comparison with pixelmatch

  • Acceptance Criteria Testing: Parse markdown criteria, run automated tests, report missing testIDs

  • Concurrency Control: Lock manager prevents conflicting operations

  • Retry with Backoff: Automatic retry for transient failures

Related MCP server: Shotter

Prerequisites

  • macOS with Xcode and Command Line Tools

  • Node.js 18+ (20+ recommended)

  • iOS Simulator available

  • An Expo/React Native project with Detox configured (for UI automation)

Quick Start

# Install dependencies
pnpm install

# Verify environment
pnpm verify

# Build TypeScript
pnpm build

# Run in development mode
pnpm dev

Configuration

Create mcp.config.json in the project root (see mcp.config.example.json):

{
  "projectPath": "/path/to/your/expo-app",
  "artifactsRoot": "./artifacts",
  "defaultDeviceName": "iPhone 15",
  "detox": {
    "configuration": "ios.sim.debug"
  }
}

MCP Client Configuration

Claude Code

Add to your Claude Code MCP settings:

{
  "mcpServers": {
    "expo-ios-detox": {
      "command": "node",
      "args": ["/path/to/expo_ios_development_mcp/dist/index.js"],
      "env": {
        "MCP_CONFIG": "/path/to/mcp.config.json"
      }
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json:

{
  "servers": {
    "expo-ios-detox": {
      "type": "stdio",
      "command": "node",
      "args": ["/path/to/expo_ios_development_mcp/dist/index.js"],
      "env": {
        "MCP_CONFIG": "/path/to/mcp.config.json"
      }
    }
  }
}

Available Tools

Simulator

Tool

Description

simulator.list_devices

List all available iOS simulators

simulator.boot

Boot a simulator device

simulator.shutdown

Shut down a simulator

simulator.erase

Factory reset a simulator

simulator.screenshot

Take a screenshot

simulator.record_video.start

Start video recording

simulator.record_video.stop

Stop video recording

simulator.log_stream.start

Start log streaming

simulator.log_stream.stop

Stop log streaming

Expo

Tool

Description

expo.start

Start Expo/Metro server

expo.stop

Stop Expo/Metro server

expo.status

Get Expo/Metro status

expo.logs.tail

Get recent Expo logs

expo.reload

Reload the app

Detox Session

Tool

Description

detox.session.start

Initialize Detox session

detox.session.stop

Terminate Detox session

detox.healthcheck

Verify Detox is ready

UI Automation

Tool

Description

ui.tap

Tap an element

ui.long_press

Long press an element

ui.type

Type text into an input

ui.swipe

Swipe gesture

ui.scroll

Scroll in a direction

ui.press_key

Press a keyboard key

ui.wait_for

Wait for element visibility

ui.assert_text

Assert element text content

ui.assert_visible

Assert element is visible

Visual Regression

Tool

Description

visual.baseline.save

Save baseline screenshot

visual.baseline.list

List saved baselines

visual.baseline.delete

Delete a baseline

visual.compare

Compare against baseline (uses pixelmatch)

visual.compare_to_design

Compare simulator screenshot against pasted Figma/design image

Acceptance Criteria Testing

Tool

Description

acceptance.parse

Parse acceptance criteria markdown file into structured data

acceptance.run

Run all acceptance tests with comprehensive reporting

acceptance.run_flow

Execute a specific test flow by name

acceptance.check

Check a single criterion by ID or description match

Flow

Tool

Description

flow.run

Execute a sequence of tool calls

Prompt Templates

The server provides discoverable prompt templates for common workflows:

Prompt

Description

repro_and_collect_evidence

Reproduce a bug and collect evidence

ui_regression_check

Perform visual regression testing

test_user_flow

Test a complete user flow

debug_app_crash

Debug an app crash

setup_test_session

Set up a fresh test session

Resources

The server exposes these MCP resources:

  • resource://state - Current server state (simulator, expo, detox)

  • resource://logs/simulator/latest - Recent simulator logs

  • resource://logs/expo/latest - Recent Expo logs

  • resource://logs/detox/latest - Recent Detox logs

  • resource://artifacts/latest - Artifact manifest


Usage Guide

Getting Started

Once the MCP server is configured in your LLM client (Claude Code, Cursor, etc.), you can interact with it using natural language. The LLM will automatically invoke the appropriate tools.

Step 1: Set Up Your Development Session

Before running UI automation, you need to:

  1. Boot the simulator - Start an iOS Simulator device

  2. Start Expo - Launch the Metro bundler and load your app

  3. Initialize Detox - Set up the Detox session for UI automation

Step 2: Develop and Test

With the session ready, you can:

  • Run UI interactions (tap, type, swipe)

  • Take screenshots at any point

  • Assert element states and text content

  • Record videos of interactions

  • Perform visual regression tests

Step 3: Debug Issues

When something goes wrong:

  • Check logs from Expo/Metro and simulator

  • Take screenshots to see current state

  • Use the debug prompts to investigate crashes


Example Prompts

Here are example prompts you can use with Claude Code, Cursor, or other MCP-enabled LLM tools during Expo app development:

Session Setup

Boot the iPhone 15 Pro simulator and start my Expo app
Set up a fresh test session - boot the simulator, start Expo, and initialize Detox
List all available iOS simulators and tell me which ones are booted

Taking Screenshots

Take a screenshot of the current screen and save it as "home-screen"
Take a screenshot after each step of the login flow
Start recording a video, then stop it after I tell you the flow is complete

UI Automation - Navigation

Tap the "Login" button on the home screen
Navigate to the Settings screen by tapping the settings icon (testID: settings-tab)
Scroll down on the main feed until you see the "Load More" button

UI Automation - Forms

Fill in the login form:
- Email: test@example.com
- Password: password123
Then tap the Submit button
Type "Hello World" into the search input (testID: search-input) and wait for results to appear
Clear the text in the email field and type a new email address

UI Automation - Gestures

Swipe left on the first item in the list to reveal delete button
Swipe down to refresh the feed and wait for new content to load
Long press on the profile picture to open the context menu

Assertions and Verification

Verify that the welcome message shows "Hello, John!"
Wait for the loading spinner to disappear and then check if the data loaded correctly
Assert that the error message "Invalid credentials" is visible after failed login

Visual Regression Testing

Save a baseline screenshot of the login screen for visual regression testing
Compare the current settings page against the baseline and tell me if there are any visual differences
Run visual regression on all saved baselines and report any failures

Design Comparison (Figma to Implementation)

The MCP server supports comparing Figma design screenshots directly against the iOS Simulator. Simply copy and paste a Figma screenshot into your prompt!

Here's the Figma design for the login screen. [paste screenshot]
Compare the current simulator view against this design and tell me the differences.
I've pasted the design mockup for the settings page. [paste screenshot]
Check if my implementation matches and list what needs to be fixed.
[paste Figma screenshot]
This is the target design. Please compare it against the simulator and fix any visual differences in the code.
Compare this design against my current implementation:
[paste screenshot]
Focus on the header section only (use region comparison).

Acceptance Criteria Testing

The acceptance criteria testing system allows you to write human-readable acceptance criteria in markdown and have them automatically tested against your app.

Writing Acceptance Criteria Files

Create a markdown file with checkbox items organized into sections:

# Login Screen Acceptance Criteria

## Visual Elements
- [ ] App logo is visible at the top of the screen
- [ ] Email input field is visible with placeholder "Enter email"
- [ ] Password input field is visible with placeholder "Enter password"
- [ ] "Sign In" button is visible and has text "Sign In"

## Interactions
- [ ] Tapping email field focuses the input
- [ ] Tapping "Sign In" button with valid credentials navigates to home screen
- [ ] Tapping "Forgot Password" link opens password reset modal

## Test Flows

### Happy Path Login
1. Wait for element `login-screen` to be visible
2. Type "test@example.com" into `email-input`
3. Type "password123" into `password-input`
4. Tap `sign-in-button`
5. Wait for element `home-screen` to be visible

Parsing Acceptance Criteria

Parse the acceptance criteria file at /path/to/login-criteria.md
Parse this acceptance criteria and tell me how many testable items there are:
[paste markdown content]

Running Acceptance Tests

Run the acceptance criteria tests from /path/to/login-criteria.md
Run acceptance tests for the login screen and generate a report
Execute only the "Visual Elements" section from the acceptance criteria

Running Specific Test Flows

Run the "Happy Path Login" test flow from the acceptance criteria file
Execute the signup flow from acceptance-criteria.md and take screenshots at each step

Checking Individual Criteria

Check if the criterion "App logo is visible" passes
Verify the single criterion with ID "visual-1" from the acceptance file

Understanding Test Results

The acceptance criteria runner produces detailed reports with:

  • Pass: Criterion was verified successfully

  • Fail: Criterion check failed (element not found, assertion failed)

  • Blocked: Cannot test because required testIDs are missing

When tests are blocked, the report includes a "Missing Requirements" section:

## Missing Requirements for Testability

| Element | Suggested testID | Type | Reason |
|---------|-----------------|------|--------|
| App logo | `app-logo` | testID | Required for "App logo is visible" |
| Sign In button | `sign-in-button` | testID | Required for "Tapping Sign In button" |

This helps developers add the necessary testIDs to make criteria testable.

Debugging and Logs

Show me the last 100 lines of Expo logs - I'm seeing a crash
The app crashed after tapping the submit button. Collect evidence: take a screenshot,
get the logs, and help me debug what went wrong
Start streaming simulator logs so we can monitor for errors during testing

Complex Flows

Test the complete signup flow:
1. Tap "Create Account"
2. Fill in name, email, password
3. Accept terms and conditions
4. Tap "Sign Up"
5. Verify the welcome screen appears
Take screenshots at each step
Run through the checkout flow and compare each screen against baselines:
1. Add item to cart
2. Go to cart
3. Proceed to checkout
4. Enter shipping info
5. Confirm order
Reproduce bug #123:
The app crashes when tapping the profile button while on the settings page.
Collect all evidence including screenshots and logs.

Using Flow Runner

Execute this test flow:
- Wait for element "welcome-screen"
- Tap "get-started-button"
- Wait for element "onboarding-step-1"
- Swipe left
- Wait for element "onboarding-step-2"
- Swipe left
- Tap "finish-button"

Expo Development

Check the status of Metro - is it running and what's the bundle URL?
Reload the app to pick up my latest code changes
Stop Expo, clear the cache, and restart it fresh

Cleanup

Stop the Detox session and shut down the simulator
Erase the simulator to start with a clean slate

Common Workflows

Workflow 1: Daily Development Cycle

1. "Boot iPhone 15 and start Expo for my app"
2. Make code changes...
3. "Reload the app"
4. "Take a screenshot of the updated UI"
5. "Tap the new button I added and verify it works"
6. Repeat...

Workflow 2: Bug Reproduction

1. "Set up a test session with iPhone 15 Pro"
2. "Start recording a video"
3. "Navigate to the screen where the bug occurs"
4. "Perform the actions that trigger the bug"
5. "Stop recording and collect logs"
6. "Take a final screenshot and summarize what happened"

Workflow 3: Visual Regression Suite

1. "Boot simulator and start Expo"
2. "Initialize Detox session"
3. "List all saved baselines"
4. "Compare each major screen against its baseline"
5. "Generate a report of any visual differences"

Workflow 4: End-to-End Testing

1. "Set up fresh test session - erase simulator first for clean state"
2. "Run the complete user registration flow with test data"
3. "Verify the user lands on the dashboard"
4. "Save baseline screenshots for key screens"
5. "Stop session and generate test summary"

Workflow 5: Design-Driven Development

1. Copy a Figma design screenshot
2. "Boot simulator and start Expo"
3. Paste the design: "Implement this login screen design: [paste]"
4. Claude Code implements the UI components
5. "Compare my implementation against the design"
6. Review the diff overlay and feedback
7. "Fix the spacing issues shown in the comparison"
8. Repeat comparison until design match is satisfactory

Workflow 6: Acceptance Criteria Testing

1. Write acceptance criteria in markdown (login-criteria.md)
2. "Boot simulator and start Expo"
3. "Initialize Detox session"
4. "Parse the acceptance criteria file at login-criteria.md"
5. "Run all acceptance tests and generate a report"
6. Review the report - fix any failing tests
7. Add missing testIDs reported in the "Missing Requirements" section
8. "Re-run the acceptance tests"
9. Repeat until all criteria pass

Workflow 7: Continuous Acceptance Testing During Development

1. "Set up test session with iPhone 15"
2. Make code changes to your app...
3. "Reload the app"
4. "Run the acceptance criteria for the feature I'm working on"
5. Review pass/fail/blocked status
6. Fix issues and add missing testIDs
7. Repeat steps 2-6 until acceptance criteria pass

Tips for Effective Prompts

  1. Use testIDs: Reference elements by their testID prop for reliable targeting

    Tap the button with testID "submit-button"
  2. Be specific about selectors: Specify whether you're using id, text, or label

    Tap the element with text "Continue" (not the testID)
  3. Chain actions clearly: Break complex flows into clear steps

    First wait for the login screen, then fill the form, then tap submit
  4. Request evidence: Ask for screenshots and logs when debugging

    Take a screenshot before and after tapping the button
  5. Use flow.run for sequences: For repeatable test flows, use the flow runner

    Execute this as a flow: tap login, type email, type password, tap submit
  6. Write acceptance criteria in markdown: Use checkbox format for testable criteria

    - [ ] Button with testID "submit-btn" is visible
    - [ ] Tapping "Login" navigates to home screen
  7. Include test flows in acceptance criteria: Define step-by-step flows under ## Test Flows

    ### Login Flow
    1. Type "user@example.com" into `email-input`
    2. Tap `submit-button`

Development

# Run with hot reload
pnpm dev

# Build for production
pnpm build

# Run production build
pnpm start

# Enable debug logging
MCP_DEBUG=true pnpm dev

Architecture

The server is organized into modular subsystems:

src/
  index.ts          # MCP stdio entrypoint
  config/           # Configuration loading and validation
  core/             # State machine, errors, logger, artifacts, lock, retry
  mcp/              # MCP server, schemas, prompt templates
  simulator/        # simctl wrapper (devices, screenshots, video, logs)
  expo/             # Expo/Metro control (start, stop, logs, flow runner)
  detox/            # Detox micro-test runner (actions, selectors, output parsing)
  visual/           # Visual regression (baseline management, pixelmatch diff)
  acceptance/       # Acceptance criteria testing (parser, mapper, checker, reporter)

Key Patterns

  • State Machine: Tracks simulator, Expo, and Detox states; UI commands require simulator.booted + detox.ready

  • Detox Micro-Tests: UI actions generate temporary Jest tests, run via Detox CLI, parse [MCP_RESULT] markers

  • Error Taxonomy: LLM-friendly error codes with auto-populated remediation hints

  • Ring Buffer Logging: Per-source log retention (20,000 entries each)

Code Metrics

Metric

Value

Total Files

41

Total Lines

8,574

Avg Complexity

12.9

Code Consistency

99%

Circular Deps

0

Documentation

Author

Andrea Salvatore andreahaku@gmail.com

License

MIT

Available Tools

27 tools
detox.healthcheckB

Check if Detox session is ready

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool checks readiness but doesn't explain what 'ready' means, whether it's a read-only operation, what happens if the session isn't ready, or any error conditions. This leaves significant gaps in understanding the tool's behavior.

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 wasted words. It's front-loaded with the core purpose and efficiently communicates the essential function without unnecessary elaboration, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the complexity of session management and lack of annotations or output schema, the description is incomplete. It doesn't explain what 'ready' entails, what the return value indicates, or how it integrates with sibling tools like 'detox.session.start' and 'detox.session.stop', leaving the agent with insufficient context for effective use.

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 0 parameters with 100% schema description coverage, so no parameter documentation is needed. The description appropriately doesn't mention parameters, and since there are none, it doesn't need to compensate for any gaps, earning a baseline score above 3.

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

Purpose4/5

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

The description clearly states the tool's purpose as 'Check if Detox session is ready' with a specific verb ('Check') and resource ('Detox session'), making it immediately understandable. However, it doesn't distinguish itself from potential alternatives like 'expo.status' or clarify what constitutes 'ready' versus other session states.

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. It doesn't mention prerequisites (e.g., after starting a session), exclusions, or how it differs from sibling tools like 'detox.session.start' or 'expo.status', leaving the agent to infer usage context.

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

detox.session.startA

Start a Detox testing session. Required before running UI actions.

ParametersJSON Schema
NameRequiredDescriptionDefault
configurationNoDetox configuration name. Defaults to config value.
reuseNoReuse existing session if available.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool starts a session and that it's required before UI actions, which implies it's a setup/mutation operation. However, it doesn't disclose other behavioral traits like what happens if a session already exists, error conditions, or what 'starting' entails beyond the schema's reuse parameter.

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

Conciseness5/5

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

The description is extremely concise with just two sentences, both of which earn their place. The first sentence states the core purpose, and the second provides critical usage context. There's no wasted language or redundancy.

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

Completeness3/5

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

Given the tool has 2 parameters with full schema coverage but no annotations or output schema, the description provides adequate basic context about purpose and prerequisites. However, for a session management tool that likely involves state changes and has implications for other tools, more behavioral context would be helpful to understand what 'starting' entails and how it integrates with the sibling UI tools.

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 the schema already documents both parameters thoroughly. The description doesn't add any parameter-specific information beyond what's in the schema, maintaining the baseline score of 3. It doesn't compensate with additional context about parameter interactions or usage examples.

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 specific action ('Start a Detox testing session') and resource ('session'), distinguishing it from siblings like detox.session.stop. It also mentions the prerequisite nature ('Required before running UI actions'), which adds important context about its role in the workflow.

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 on when to use this tool ('Required before running UI actions'), indicating it's a prerequisite for UI interaction tools. However, it doesn't explicitly state when not to use it or name specific alternatives among siblings, though the context implies it's foundational for subsequent UI operations.

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

detox.session.stopB

Stop the current Detox testing session

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the action without behavioral details. It doesn't disclose effects (e.g., whether it terminates processes gracefully, cleans up resources, or requires specific permissions), rate limits, or error conditions, which are critical for a session-stopping operation.

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 with zero waste—it states exactly what the tool does without fluff. It's front-loaded and efficiently communicates the core purpose, making it easy for an agent to parse quickly.

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

Completeness2/5

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

Given the complexity of stopping a testing session (a mutation with potential side-effects), the description is incomplete. With no annotations, no output schema, and minimal behavioral disclosure, it lacks details on outcomes, errors, or dependencies, leaving significant gaps for agent decision-making.

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 0 parameters with 100% schema coverage, so no parameter documentation is needed. The description appropriately avoids redundant parameter info, earning a high baseline score for not cluttering with unnecessary details.

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

Purpose4/5

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

The description clearly states the action ('Stop') and target resource ('the current Detox testing session'), making the purpose immediately understandable. However, it doesn't differentiate from sibling tools like 'expo.stop' or 'simulator.shutdown' that might also stop related processes, which prevents a perfect score.

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. It doesn't mention prerequisites (e.g., requires an active session started with 'detox.session.start'), exclusions, or relationships with sibling tools, leaving the agent to infer context from tool names alone.

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

expo.logs.tailC

Get recent Expo/Metro logs

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoNumber of log lines to return.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Get recent Expo/Metro logs' implies a read-only operation, but it doesn't specify whether this is real-time streaming, historical retrieval, or if it requires specific permissions. It also doesn't mention rate limits, error conditions, or what 'recent' means in practice. The description is too vague for a tool with no annotation support.

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, efficient sentence with no wasted words. It's front-loaded with the core action and resource, making it easy to scan and understand quickly. Every word earns its place, and there's no unnecessary elaboration or redundancy.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the tool returns (e.g., log format, timestamps, error messages) or behavioral aspects like whether it streams logs or returns a static snapshot. For a logging tool with no structured support, the description should provide more context about output and usage patterns to be fully helpful.

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% description coverage, with the 'lines' parameter fully documented in the schema. The description doesn't add any parameter-specific information beyond what's in the schema, such as typical values or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't need to given the schema's completeness.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('recent Expo/Metro logs'), making the tool's purpose understandable. However, it doesn't explicitly differentiate from sibling tools like 'simulator.log_stream.start' or 'simulator.log_stream.stop', which also handle logs but for different systems. The description is specific enough to understand what the tool does but lacks sibling differentiation.

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. It doesn't mention prerequisites, timing considerations, or comparisons to sibling tools like 'simulator.log_stream.start' or 'expo.status'. Without any usage context, the agent must infer when this tool is appropriate based on the name and description alone.

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

expo.reloadB

Reload the app in the simulator

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the action ('Reload') but doesn't explain what reloading entails (e.g., whether it restarts the app, refreshes content, or resets state), potential side effects, or error conditions. This leaves significant gaps in understanding the tool's behavior.

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, efficient sentence with no wasted words. It's front-loaded with the core action and target, making it easy to parse quickly. Every word earns its place in conveying the essential information.

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

Completeness2/5

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

Given the complexity of a reload operation (which could involve app state changes or errors), the description is incomplete. With no annotations, no output schema, and minimal behavioral details, it fails to provide enough context for safe or effective use, especially compared to more detailed sibling tools like 'expo.logs.tail' or 'simulator.screenshot'.

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 0 parameters, and the input schema has 100% description coverage (though empty). The description doesn't need to add parameter details, so it meets the baseline of 4 for tools with no parameters, as there's nothing to compensate for.

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

Purpose4/5

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

The description clearly states the action ('Reload') and target ('the app in the simulator'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'expo.start' or 'expo.stop', which limits its score to 4 rather than 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?

The description provides no guidance on when to use this tool versus alternatives like 'expo.start' or 'expo.stop', nor does it mention prerequisites (e.g., whether the app must already be running). It only states what the tool does, not when to invoke it.

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

expo.startC

Start the Expo/Metro development server

ParametersJSON Schema
NameRequiredDescriptionDefault
clearCacheNoClear Metro cache before starting.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Start' implies an action that initiates a server, it doesn't describe what happens after starting (e.g., server runs in background, outputs logs, requires manual stop), potential side effects, or any constraints like permissions or rate limits. This leaves significant gaps for a tool that likely has ongoing effects.

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

Conciseness5/5

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

The description is a single, focused sentence that directly communicates the tool's purpose without any unnecessary words. It's front-loaded and efficiently conveys the essential information, making it highly concise and well-structured.

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

Completeness2/5

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

Given the complexity of starting a development server (which likely has behavioral nuances and ongoing effects), the absence of annotations, and no output schema, the description is insufficient. It doesn't explain what the tool returns, how to verify success, or any operational details, leaving the agent with incomplete context for proper use.

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% description coverage, with the single parameter 'clearCache' fully documented in the schema. The description adds no additional parameter information beyond what's already in the structured data, so it meets the baseline score of 3 for adequate but not enhanced parameter semantics.

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

Purpose4/5

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

The description clearly states the action ('Start') and the target resource ('Expo/Metro development server'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'expo.status' or 'expo.stop', which would be needed for a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'expo.reload' or 'expo.stop', nor does it mention prerequisites or appropriate contexts. It merely states what the tool does without indicating when it should be invoked.

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

expo.statusB

Get the current status of Expo/Metro

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the action but lacks behavioral details like whether this is a read-only operation, if it requires specific permissions, what the response format might be (e.g., JSON with status codes), or any rate limits. This leaves gaps in understanding how the tool behaves.

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, efficient sentence that directly states the tool's purpose without any wasted words. It's front-loaded and appropriately sized for a simple, parameterless tool.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is minimally adequate. However, it could be more complete by specifying the return type (e.g., status indicators like 'running' or 'stopped') or clarifying its role among sibling tools, which would help in a richer context.

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

Parameters4/5

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

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate, earning a baseline score of 4 as it doesn't need to compensate for any schema gaps.

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

Purpose4/5

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

The description clearly states the verb 'Get' and the resource 'current status of Expo/Metro', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'expo.logs.tail' or 'expo.start', which could provide overlapping status information in different ways.

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. With siblings like 'expo.logs.tail' for real-time logs or 'expo.start' for initiating Expo, there's no indication of when 'expo.status' is preferred, such as for a quick health check without detailed logs.

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

expo.stopA

Stop the Expo/Metro development server

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates a destructive action ('Stop') that will terminate the server, which is useful context. However, it doesn't mention potential side effects (e.g., stopping related processes, impact on connected devices) or error conditions, leaving some behavioral aspects unclear.

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 states the tool's purpose without any fluff. It's front-loaded with the core action and resource, making it highly efficient and easy to parse. Every word earns its place in conveying essential information.

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 (0 parameters, no output schema, no annotations), the description is complete enough for a basic stop operation. It clearly states what the tool does. However, it could be more complete by mentioning what happens after stopping (e.g., no return value, confirmation message) or linking to sibling tools for related actions, but this is a minor gap.

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 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description doesn't mention parameters, which is appropriate. A baseline of 4 is applied as it correctly handles the absence of parameters without adding unnecessary information.

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 ('Stop') and the target resource ('Expo/Metro development server') with a specific verb+resource combination. It distinguishes from siblings like 'expo.start' (which starts the server) and 'expo.status' (which checks status), making the purpose unambiguous.

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

Usage Guidelines3/5

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

The description implies usage when the server is running and needs to be stopped, but doesn't explicitly state when to use it versus alternatives (e.g., 'expo.reload' for restarting without full stop, or 'expo.status' to check if it's running first). It provides basic context but lacks explicit guidance on prerequisites or exclusions.

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

flow.runC

Execute a sequence of tool calls (macro flow)

ParametersJSON Schema
NameRequiredDescriptionDefault
stepsYesSteps to execute in sequence.
stopOnErrorNoStop flow on first error.

TDQS

C2.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions execution but lacks critical details: whether it's read-only or destructive (e.g., could modify system state via nested tools), error handling beyond the 'stopOnError' parameter, or performance implications like rate limits. This leaves significant gaps for a tool that orchestrates other tools.

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

Conciseness5/5

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

The description is extremely concise with a single, front-loaded sentence: 'Execute a sequence of tool calls (macro flow)'. Every word earns its place by defining the core action and scope without redundancy or fluff, making it efficient for quick understanding.

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

Completeness2/5

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

Given the complexity of executing multiple tool calls and the lack of annotations and output schema, the description is incomplete. It doesn't address behavioral risks (e.g., nested destructive operations), return values, or error formats, which are crucial for safe and effective use in an automated workflow 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 description coverage is 100%, so the schema fully documents the two parameters ('steps' and 'stopOnError'). The description adds no meaning beyond this, such as explaining the structure of 'steps' or practical examples. However, with high schema coverage, the baseline score of 3 is appropriate as the schema does the heavy lifting.

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

Purpose3/5

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

The description states the tool 'Execute[s] a sequence of tool calls (macro flow)', which provides a clear verb ('Execute') and resource ('sequence of tool calls'). However, it doesn't distinguish this from sibling tools, which are all individual action tools (e.g., ui.tap, simulator.boot) rather than flow execution tools, so the differentiation is implicit rather than explicit.

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 offers no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing valid tool names from the sibling list, or specify use cases like automating multi-step workflows. Without this context, an agent might misuse it for single-step operations.

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

simulator.bootC

Boot an iOS simulator device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice name or UDID. Defaults to config defaultDeviceName.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden for behavioral disclosure. It states the action ('Boot') but doesn't describe what happens during booting (e.g., startup time, state changes), potential errors (e.g., device not found), side effects, or output format. For a mutation tool with zero annotation coverage, this is a significant gap in 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, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it immediately scannable and appropriately sized for the tool's apparent simplicity.

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

Completeness2/5

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

Given the tool's mutation nature (boot implies state change), lack of annotations, no output schema, and incomplete behavioral disclosure, the description is insufficient. It doesn't cover what 'boot' entails operationally, success/failure indicators, or interaction with sibling tools like simulator.shutdown. For a tool that likely affects system state, more context is needed.

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 the single parameter 'device' documented in the schema as 'Device name or UDID. Defaults to config defaultDeviceName.' The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 for high schema coverage without compensating value.

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

Purpose4/5

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

The description clearly states the action ('Boot') and target resource ('an iOS simulator device'), making the purpose immediately understandable. It distinguishes from siblings like simulator.shutdown (opposite action) and simulator.list_devices (different operation). However, it doesn't specify what 'boot' entails operationally beyond starting the device.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives is provided. The description doesn't mention prerequisites (e.g., device must exist/be available), when-not-to-use scenarios, or direct alternatives like simulator.list_devices for checking device status first. Usage is implied from the action alone.

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

simulator.eraseB

Erase all content and settings from a simulator (factory reset)

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceYesDevice name or UDID to erase.

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the destructive action ('factory reset') but fails to detail critical aspects like whether this requires elevated permissions, the time it takes, confirmation prompts, or error handling. For a high-impact mutation tool, this leaves significant behavioral gaps.

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 efficiently conveys the core action without unnecessary elaboration. Every word earns its place, making it easy for an agent to parse and understand the tool's primary function immediately.

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

Completeness2/5

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

Given the tool's high complexity (destructive factory reset), lack of annotations, and no output schema, the description is insufficient. It omits critical context such as the irreversible nature of the operation, potential side effects (e.g., data loss), success/failure indicators, or recovery steps, leaving the agent under-informed for safe 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% description coverage, with the 'device' parameter fully documented. The description does not add any semantic details beyond the schema (e.g., examples of device names, UDID format, or validation rules), so it meets the baseline of 3 where the schema does the heavy lifting.

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 specific action ('Erase all content and settings') and the target resource ('from a simulator'), using the precise verb 'factory reset' to distinguish it from other simulator operations like boot, shutdown, or screenshot. It effectively communicates the tool's destructive nature and scope.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives (e.g., simulator.shutdown for temporary deactivation or simulator.list_devices for device selection). It lacks context about prerequisites (e.g., simulator must be booted) or exclusions (e.g., irreversible effects), leaving the agent to infer usage scenarios.

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

simulator.list_devicesA

List all available iOS simulator devices and their states

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While it indicates this is a read operation (listing), it doesn't describe what 'states' means, whether the list includes offline/online devices, if there are permission requirements, or how results are formatted. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a simple enumeration tool and front-loads the essential information.

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

Completeness3/5

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

Given the tool's simplicity (no parameters, no output schema, no annotations), the description provides adequate basic information about what the tool does. However, without annotations or output schema, it should ideally provide more behavioral context about what 'states' includes and the format of returned data to be fully complete.

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

Parameters4/5

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

The tool has zero parameters with 100% schema description coverage, so the schema already fully documents the empty parameter set. The description appropriately doesn't add parameter information beyond what the schema provides, which is correct for a parameterless tool. 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 specific verb ('List') and resource ('all available iOS simulator devices and their states'), making the purpose immediately understandable. It distinguishes this tool from siblings like simulator.boot or simulator.shutdown by focusing on enumeration rather than device control operations.

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 context (when you need to see available devices and their states) but doesn't explicitly state when to use this versus alternatives. No guidance is provided about prerequisites, timing considerations, or comparisons with other device-related tools in the sibling list.

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

simulator.log_stream.startB

Start streaming simulator system logs

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but lacks critical details: it doesn't specify if this starts a continuous stream (implying ongoing resource use), what format/log-level the logs are in, whether authentication or specific simulator states are required, or how to access the streamed data. For a streaming operation with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it immediately understandable. Every word earns its place without redundancy or unnecessary elaboration.

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

Completeness2/5

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

Given the complexity of a streaming operation (which implies ongoing processes and potential resource consumption), the description is incomplete. With no annotations and no output schema, it fails to explain what 'start streaming' entails behaviorally—such as how logs are delivered, if there are side effects, or what the agent should expect after invocation. This is inadequate for guiding proper tool use.

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 0 parameters, and schema description coverage is 100% (though trivial since there are no parameters). The description doesn't need to add parameter semantics, so it meets the baseline expectation. No additional value is required or provided beyond the empty schema.

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

Purpose4/5

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

The description clearly states the action ('Start streaming') and resource ('simulator system logs'), providing a specific verb+resource combination. However, it doesn't distinguish itself from its sibling 'simulator.log_stream.stop' beyond the obvious action difference, nor does it differentiate from other logging tools like 'expo.logs.tail' in terms of scope or purpose.

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. It doesn't mention prerequisites (e.g., needing a running simulator), when-not-to-use scenarios, or comparisons with sibling tools like 'expo.logs.tail' or 'simulator.log_stream.stop'. The agent must infer usage from the tool name alone.

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

simulator.log_stream.stopA

Stop streaming simulator system logs

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It states the action but lacks details on behavioral traits such as whether it requires specific permissions, what happens if no stream is active, or if it returns confirmation. This leaves significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded and wastes no space, making it highly concise and well-structured.

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

Completeness3/5

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

Given the tool's simplicity (0 parameters, no output schema), the description is adequate but incomplete. It lacks behavioral context needed for a mutation tool with no annotations, such as error conditions or side effects, leaving room for improvement in completeness.

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

Parameters4/5

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

With 0 parameters and 100% schema description coverage, the schema fully documents the input structure. The description adds no parameter details, which is acceptable here as there are no parameters to explain, aligning with the baseline expectation for zero-parameter tools.

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 ('Stop streaming') and the resource ('simulator system logs'), making the purpose immediately apparent. It distinguishes from its sibling 'simulator.log_stream.start' by specifying the opposite operation, providing clear differentiation.

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 implies usage context by referencing 'streaming' logs, suggesting it should be used after starting a log stream. However, it does not explicitly state when to use it versus alternatives or mention prerequisites like needing an active stream first.

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

simulator.record_video.startB

Start recording video of the simulator screen

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName prefix for the video file.recording

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Start recording') but lacks details on permissions, file storage location, format, duration limits, or error conditions. This is a significant gap for a tool that initiates a recording process.

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 efficiently conveys the core action without unnecessary words. It's front-loaded with the key information, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity of starting a video recording (a stateful operation with potential side effects), no annotations, and no output schema, the description is incomplete. It doesn't cover what happens after starting (e.g., how to stop, file output details), making it inadequate for full contextual understanding.

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

Parameters3/5

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

Schema description coverage is 100%, with the single parameter 'name' documented in the schema as 'Name prefix for the video file.' The description doesn't add any additional meaning beyond this, such as examples or constraints, so it meets the baseline for high schema coverage without extra value.

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 specific action ('Start recording') and the target resource ('video of the simulator screen'), making the purpose immediately understandable. It distinguishes itself from sibling tools like 'simulator.record_video.stop' by specifying the initiation of recording rather than termination.

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 context by specifying 'simulator screen,' suggesting it's for recording simulator activities, but it doesn't explicitly state when to use this tool versus alternatives like 'simulator.screenshot' or 'ui.screenshot' for different capture needs. No guidance on prerequisites or exclusions is provided.

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

simulator.record_video.stopA

Stop video recording and save the file

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions the action ('stop') and outcome ('save the file'), but lacks details like where the file is saved, format, permissions needed, or error conditions. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence with zero waste—every word contributes to understanding the tool's purpose. It's front-loaded with the core action and outcome, making it easy to parse quickly.

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

Completeness3/5

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

Given the tool's complexity (simple stop action), no output schema, and zero parameters, the description is minimally adequate. However, as a mutation tool with no annotations, it should ideally include more behavioral context (e.g., file location, errors) to be fully complete for agent use.

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 0 parameters with 100% schema description coverage, so the schema fully documents the lack of inputs. The description doesn't need to add parameter details, and it appropriately focuses on the action without unnecessary parameter explanation, meeting the baseline for zero-parameter tools.

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 specific action ('Stop video recording') and outcome ('save the file'), distinguishing it from sibling tools like 'simulator.record_video.start' and 'simulator.screenshot'. It uses precise verbs and identifies the resource being acted upon.

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 implies usage context by referencing 'video recording', suggesting it should be used after starting a recording with 'simulator.record_video.start'. However, it doesn't explicitly state when-not to use it or name alternatives, leaving some guidance implicit rather than explicit.

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

simulator.screenshotB

Take a screenshot of the booted simulator

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName prefix for the screenshot file.screenshot

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states what the tool does but doesn't describe important behavioral aspects: where the screenshot is saved, what format it's in, whether it requires specific simulator states, or what happens if the simulator isn't booted. For a tool with no annotation coverage, this leaves significant behavioral gaps.

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

Conciseness5/5

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

The description is extremely concise - a single sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized for a simple screenshot tool and front-loads the essential information.

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

Completeness3/5

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

Given the tool's simplicity (1 parameter, no output schema, no annotations), the description is minimally adequate but has clear gaps. It doesn't explain where screenshots are saved, what happens if the simulator isn't booted, or how this differs from 'ui.screenshot'. For a tool with no output schema and no annotations, more contextual information would be helpful.

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% description coverage, with the single parameter 'name' clearly documented as 'Name prefix for the screenshot file.' The description doesn't add any parameter information beyond what the schema provides, which is acceptable given the high schema coverage. The baseline of 3 is appropriate when the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the action ('Take a screenshot') and target ('of the booted simulator'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from 'ui.screenshot' in the sibling list, which appears to be a similar screenshot tool but for UI elements rather than the simulator 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?

The description provides minimal guidance - it implies the simulator must be booted (from 'booted simulator'), but doesn't explicitly state prerequisites or when to use this vs. alternatives like 'ui.screenshot'. No explicit when/when-not guidance or alternative recommendations are provided.

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

simulator.shutdownC

Shut down an iOS simulator device

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNoDevice name or UDID. If not specified, shuts down the booted device.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('Shut down') but doesn't clarify what this entails—whether it's a graceful shutdown, immediate termination, reversible, or has side effects (e.g., losing state). For a mutation tool with zero annotation coverage, this is a significant gap in 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, direct sentence with zero wasted words. It's front-loaded with the core action and resource, making it highly efficient and easy to parse. Every word earns its place.

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

Completeness2/5

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

Given the tool's complexity (a mutation with potential side effects), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral details, error conditions, or what happens post-shutdown (e.g., device state). For a tool that alters system state, more context is needed for safe and effective use.

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 the parameter 'device' fully documented in the schema (including default behavior if unspecified). The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline for high coverage without adding value.

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

Purpose4/5

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

The description clearly states the action ('Shut down') and target resource ('an iOS simulator device'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'simulator.erase' (which might also stop a device) or 'detox.session.stop' (which might involve simulator shutdown), so it doesn't reach the highest score.

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. It doesn't mention prerequisites (e.g., whether the device must be booted first), exclusions, or relationships to siblings like 'simulator.boot' or 'simulator.erase'. The agent must infer usage from context alone.

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

ui.assert_textC

Assert that an element has specific text content

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesElement selector.
textYesExpected text content.
exactNoExact match (true) or contains (false).

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. It mentions 'assert' which implies a verification/validation behavior, but doesn't disclose what happens on failure (does it throw an error? return boolean?), timeout behavior, or whether it modifies UI state. For a verification tool with zero annotation coverage, this is insufficient behavioral disclosure.

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

Conciseness5/5

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

Perfectly concise single sentence that states the core functionality. No wasted words, front-loaded with the main purpose. Every word earns its place in this minimal description.

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?

For a UI testing assertion tool with no annotations and no output schema, the description is incomplete. It doesn't explain what 'assert' means operationally (pass/fail behavior), doesn't mention typical testing contexts, and provides no guidance on selector strategies despite the complex nested selector parameter. Should do more given the testing domain complexity.

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 the schema already documents all parameters thoroughly. The description doesn't add any parameter semantics beyond what's in the schema - it doesn't explain selector strategies, text matching nuances, or provide examples. Baseline 3 is appropriate when schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Assert that an element has specific text content'. It uses a specific verb ('assert') and resource ('element'), but doesn't differentiate from siblings like ui.wait_for (which might also involve text verification). The purpose is unambiguous but lacks sibling distinction.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like ui.wait_for or ui.tap. The description doesn't mention prerequisites, error conditions, or typical testing scenarios. It provides no context about when this assertion should be preferred over other UI interaction tools.

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

ui.long_pressC

Long press on an element

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesElement selector.
durationNoPress duration in milliseconds.

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action but doesn't mention side effects (e.g., triggering context menus), error handling, or performance implications. This is inadequate for a UI interaction tool with potential side effects.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded and appropriately sized for the tool's complexity, making it easy to parse quickly.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete. It doesn't explain what happens after the long press (e.g., UI changes, return values) or address potential complexities like element visibility or timing issues, which are critical for UI testing tools.

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 clear documentation for 'selector' and 'duration'. The description adds no extra meaning beyond the schema, such as examples or edge cases, but the schema is comprehensive, so a baseline score of 3 is appropriate.

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

Purpose3/5

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

The description 'Long press on an element' clearly states the action (long press) and target (an element), but it's vague about the context (e.g., mobile UI testing) and doesn't differentiate from siblings like 'ui.tap' or 'ui.swipe'. It provides a basic purpose but lacks specificity.

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.tap' for short taps or 'ui.swipe' for swipes. The description offers no context, prerequisites, or exclusions, leaving usage unclear.

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

ui.press_keyC

Press a special key (return, backspace, delete)

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to press.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the action ('press') but doesn't describe what 'press' entails (e.g., duration, effect on UI, whether it's a single key event), potential side effects, or error conditions. This leaves significant gaps for a tool that interacts with UI elements.

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

Conciseness5/5

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

The description is extremely concise—a single, efficient sentence that directly states the tool's purpose with zero wasted words. It's front-loaded with the core action and immediately specifies the allowed keys.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete for a UI interaction tool. It lacks details on behavioral traits (e.g., what 'press' means operationally), expected outcomes, error handling, and how it fits within the broader UI testing context alongside siblings like ui.tap or ui.type.

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% description coverage, with the 'key' parameter fully documented via enum and description. The description adds no additional parameter semantics beyond what the schema provides (it merely repeats the allowed keys). Baseline 3 is appropriate when the schema does all the work.

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

Purpose4/5

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

The description clearly states the action ('press') and resource ('special key'), specifying the allowed keys (return, backspace, delete). It distinguishes from sibling tools like ui.tap or ui.type by focusing on special keys rather than taps or text input. However, it doesn't explicitly differentiate from all siblings (e.g., ui.long_press also involves key/button actions).

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. It doesn't mention when pressing a special key is appropriate compared to other UI interaction tools like ui.tap, ui.type, or ui.long_press, nor does it specify any prerequisites or exclusions for usage.

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

ui.screenshotB

Take a screenshot of the current UI state (via simctl)

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName prefix for the screenshot file.screenshot

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the action ('Take a screenshot') but doesn't describe what happens after capture (e.g., where files are saved, format, permissions needed, or error conditions). For a tool that presumably creates files, this lack of behavioral context is a significant gap.

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, efficient sentence that communicates the core purpose without unnecessary words. It's front-loaded with the main action and includes implementation detail only where relevant. Every word earns its place in this compact formulation.

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

Completeness2/5

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

Given the tool's complexity (file creation with no output schema) and absence of annotations, the description is insufficient. It doesn't explain what the tool returns, where screenshots are saved, what format they're in, or error handling. For a tool that presumably produces output files, this leaves critical gaps for agent understanding.

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

Parameters3/5

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

The schema has 100% description coverage for its single parameter, so the baseline is 3. The description adds no additional parameter information beyond what's in the schema (which already explains 'name' is a file prefix with default 'screenshot'). No syntax, format, or constraint details are provided in 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 specific action ('Take a screenshot') and target resource ('current UI state'), with additional implementation detail ('via simctl') that distinguishes it from sibling tools like 'simulator.screenshot'. It uses a precise verb-noun structure that leaves no ambiguity about the tool's function.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'simulator.screenshot' or other UI interaction tools. It doesn't mention prerequisites (e.g., requires a running simulator), appropriate contexts, or limitations. The agent must infer usage from the tool name and context alone.

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

ui.scrollB

Scroll within a scrollable element

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesScrollable element selector.
directionYesScroll direction.
amountNoScroll amount in pixels.

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions scrolling but doesn't specify whether this is a simulated user action, how it interacts with UI elements, error conditions, or what happens if the element isn't scrollable. This leaves significant gaps in understanding the tool's behavior.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded with the essential information.

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

Completeness3/5

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

For a UI interaction tool with 3 parameters and no annotations or output schema, the description is minimally adequate but lacks important context about behavioral expectations, error handling, and differentiation from similar tools. It meets basic requirements but leaves significant gaps.

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 the schema already documents all parameters thoroughly. The description adds no additional meaning about parameters beyond what's in the schema, maintaining the baseline score for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('scroll') and target ('within a scrollable element'), providing a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'ui.swipe' which might have overlapping functionality for scrolling, preventing a perfect score.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'ui.swipe' for scrolling, nor does it mention prerequisites or context for usage. It simply states what the tool does without indicating appropriate scenarios.

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

ui.swipeC

Swipe on an element in a direction

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesElement selector to swipe on.
directionYesSwipe direction.
speedNoSwipe speed.fast
percentageNoSwipe distance as percentage of element.

TDQS

C2.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden but provides minimal behavioral insight. It doesn't disclose that this is a UI interaction tool likely for mobile testing, potential side effects (e.g., triggering navigation), or error conditions (e.g., if the element isn't found). It mentions direction but omits details like swipe distance or speed defaults.

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

Conciseness4/5

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

The description is a single, efficient sentence with no wasted words. However, it's under-specified rather than concise—it could benefit from a bit more context without losing brevity. It's front-loaded but lacks depth.

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

Completeness2/5

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

Given the complexity (4 parameters, nested objects, no output schema) and lack of annotations, the description is incomplete. It doesn't cover the tool's role in UI testing, expected outcomes, or error handling. Sibling tools suggest a mobile testing context, but this isn't addressed, leaving gaps for an AI agent.

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 the schema fully documents parameters like selector, direction, speed, and percentage. The description adds no meaning beyond the schema, as it doesn't explain parameter interactions or provide examples. Baseline is 3 since the schema does the heavy lifting.

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

Purpose3/5

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

The description 'Swipe on an element in a direction' states the basic action (swipe) and target (element), but is vague about the context (e.g., mobile UI testing) and doesn't differentiate from sibling tools like ui.scroll or ui.long_press. It lacks specificity about what 'swipe' means operationally.

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 like ui.scroll for scrolling or ui.tap for tapping. The description doesn't mention prerequisites, such as needing an active UI session or element visibility, nor does it suggest scenarios where swiping is appropriate (e.g., navigating carousels).

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

ui.tapC

Tap on an element identified by selector

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesElement selector.
xNoX offset from element center.
yNoY offset from element center.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the action ('Tap') but doesn't explain what happens after tapping (e.g., triggers a UI event, may navigate, could fail if element not found), nor does it cover error handling, timing, or side effects. This is inadequate for a UI interaction tool with zero annotation coverage.

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, efficient sentence that directly states the tool's function without unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly.

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

Completeness2/5

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

Given the complexity of a UI interaction tool with no annotations and no output schema, the description is insufficient. It doesn't explain the result of tapping (e.g., success/failure indicators, return values), error conditions, or integration with sibling tools, leaving significant gaps for agent understanding.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters (selector, x, y) with details like enums for 'by'. The description adds no additional meaning beyond implying a selector is used, which is already clear from the schema. This meets the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states the action ('Tap') and target ('on an element identified by selector'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'ui.long_press' or 'ui.press_key' which are also UI interaction tools, so it misses the highest score for sibling differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives like 'ui.long_press' or 'ui.swipe'. It lacks context about typical use cases, prerequisites, or exclusions, leaving the agent with minimal direction.

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

ui.typeC

Type text into an input element

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesInput element selector.
textYesText to type.
replaceNoClear existing text before typing.

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the basic action but doesn't mention important behavioral aspects like whether this requires UI focus, what happens if the selector doesn't match, whether it waits for the element to appear, or any error conditions. This leaves significant gaps for a mutation tool.

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

Conciseness5/5

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

The description is extremely concise - a single 5-word sentence that directly states the tool's purpose. There's zero wasted language, and it's perfectly front-loaded with the essential information.

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?

For a mutation tool with no annotations and no output schema, the description is inadequate. It doesn't explain what happens on success/failure, doesn't mention dependencies (like needing an active UI session), and provides no behavioral context beyond the basic action. Given the complexity of UI automation, this leaves too many unanswered questions.

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?

With 100% schema description coverage, the baseline is 3. The description doesn't add any parameter-specific information beyond what's already documented in the schema (selector object structure, text parameter, replace default behavior). It simply restates the core action without enhancing parameter understanding.

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

Purpose4/5

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

The description clearly states the action ('type text') and target ('into an input element'), providing a specific verb+resource combination. However, it doesn't distinguish this tool from similar UI interaction siblings like ui.tap or ui.press_key, which prevents a perfect score.

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. There's no mention of prerequisites (e.g., needing an active session), when not to use it, or how it differs from other text input methods like ui.press_key for keyboard input.

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

ui.wait_forC

Wait for an element to be visible or exist

ParametersJSON Schema
NameRequiredDescriptionDefault
selectorYesElement selector to wait for.
visibleNoWait for visibility (true) or existence (false).
timeoutNoTimeout in milliseconds.

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It mentions waiting for visibility or existence but lacks details on behavior: e.g., whether it polls continuously, returns on success/failure, throws errors on timeout, or interacts with the UI state. This is a significant gap for a tool with potential side effects.

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

Conciseness5/5

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

The description is a single, efficient sentence with zero waste. It's front-loaded and directly conveys the core functionality without unnecessary elaboration, making it easy to parse quickly.

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

Completeness2/5

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

Given no annotations and no output schema, the description is incomplete. It doesn't explain return values (e.g., success/failure indicators), error handling, or dependencies (e.g., requiring a UI session). For a tool that interacts with dynamic UI elements, this leaves critical gaps for an agent.

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 the schema fully documents the parameters (selector, visible, timeout). The description adds no additional meaning beyond what's in the schema, such as examples or edge cases. Baseline 3 is appropriate since the schema does the heavy lifting.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('wait for') and resource ('an element'), specifying the condition ('to be visible or exist'). It doesn't distinguish from siblings like ui.assert_text or ui.tap, which have different purposes, but the core functionality is well-defined.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives is provided. The description implies usage for waiting on UI elements, but it doesn't mention prerequisites (e.g., needing an active session) or compare it to siblings like ui.assert_text (which might assert without waiting).

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. 27 tool updatesv1.0.0
    • First observeddetox.healthcheck
    • First observeddetox.session.start
    • First observeddetox.session.stop
    • First observedexpo.logs.tail
    • First observedexpo.reload
    • First observedexpo.start
    • First observedexpo.status
    • First observedexpo.stop
    • First observedflow.run
    • First observedsimulator.boot
    • First observedsimulator.erase
    • First observedsimulator.list_devices
    • First observedsimulator.log_stream.start
    • First observedsimulator.log_stream.stop
    • First observedsimulator.record_video.start
    • First observedsimulator.record_video.stop
    • First observedsimulator.screenshot
    • First observedsimulator.shutdown
    • First observedui.assert_text
    • First observedui.long_press
    • First observedui.press_key
    • First observedui.screenshot
    • First observedui.scroll
    • First observedui.swipe
    • First observedui.tap
    • First observedui.type
    • First observedui.wait_for

TDQS

B3.4/5.0
Disambiguation4/5

Most tools have distinct purposes, but there is some overlap between ui.screenshot and simulator.screenshot, and between detox.session.start/stop and simulator.boot/shutdown which could cause confusion in session management. The UI action tools (tap, swipe, etc.) are well-differentiated.

Naming Consistency5/5

Tool names follow a highly consistent pattern with clear prefixes (detox., expo., simulator., ui., flow.) and descriptive action_noun or verb_noun formats. All use snake_case consistently throughout the set.

Tool Count3/5

27 tools is borderline high for a development server, feeling somewhat heavy. While the tools cover comprehensive testing and simulation workflows, the count might overwhelm agents with many specialized actions.

Completeness5/5

The toolset provides complete coverage for iOS development with Expo and Detox, including server management, simulator control, UI testing actions, and logging. No obvious gaps exist for the intended domain.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

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/andreahaku/expo_ios_development_mcp'

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