Skip to main content
Glama
drewster99

xcode-mcp-server (drewster99)

by drewster99

Drew's Xcode MCP Server (drews-xcode-mcp)

PyPI Python Versions Downloads MCP macOS Only Xcode License: MIT

GitHub last commit

An MCP (Model Context Protocol) server that enables AI assistants to control and interact with Xcode for Apple platform development.

Renamed from xcode-mcp-server. With several unrelated projects sharing that name — and Xcode itself now shipping a built-in MCP server — this project is now drews-xcode-mcp. Existing setups keep working: the old PyPI name is a compatibility package that forwards to this one, and all settings carry over. When convenient, update your MCP configuration to run drews-xcode-mcp. If your server key/name is the old default xcode-mcp-server, we recommend renaming it to drews-xcode-mcp too — just remember to update any tool permission allowlists referencing the old tool names (mcp__xcode-mcp-server__* becomes mcp__drews-xcode-mcp__*). If you chose a custom key, keep it and tool permissions are unaffected.

What It Does

This server allows AI assistants (like Claude, Cursor, or other MCP clients) to:

  • Discover and navigate your Xcode projects and source files

  • Build and run iOS, macOS, tvOS, and watchOS applications

  • Execute and monitor tests with detailed results

  • Debug build failures by retrieving errors and warnings

  • Capture console output from running applications

  • Take screenshots of Xcode windows and iOS simulators

  • Manage simulators and view their status

The AI can perform complete development workflows - from finding a project, to building it, running tests, debugging failures, and capturing results.

Related MCP server: Xcode Diagnostics MCP Plugin

Requirements

  • macOS - This server only works on macOS

  • Xcode - Xcode must be installed

  • Python 3.10+ - For running the server (uvx will fetch a compatible Python automatically if your system Python is older)

Security

The server implements path-based security to control which directories are accessible:

  • With restrictions: Set XCODEMCP_ALLOWED_FOLDERS=/path1:/path2:/path3 to limit access to specific directories

  • Default: If not specified, allows access to your home directory ($HOME)

Security requirements:

  • All paths must be absolute (starting with /)

  • No .. path components allowed

  • All paths must exist and be directories

Setup

First, ensure uv is installed (required for all methods below):

which uv || brew install uv
claude mcp add --scope user --transport stdio -- drews-xcode-mcp `which uvx` drews-xcode-mcp

To run a specific version, use:

# Example: How to run v1.3.0b6
claude mcp add --scope user --transport stdio -- drews-xcode-mcp `which uvx` drews-xcode-mcp==1.3.0b6

That's it! Claude Code handles the rest automatically.

2. Claude Desktop

Edit your Claude Desktop config file (~/Library/Application Support/Claude/claude_desktop_config.json):

{
    "mcpServers": {
        "drews-xcode-mcp": {
            "command": "uvx",
            "args": [
                "drews-xcode-mcp"
            ]
        }
    }
}

If you'd like to allow only certain projects or folders to be accessible by drews-xcode-mcp, add the env option, with a colon-separated list of absolute folder paths, like this:

{
    "mcpServers": {
        "drews-xcode-mcp": {
            "command": "uvx",
            "args": [
                "drews-xcode-mcp"
            ],
            "env": {
                "XCODEMCP_ALLOWED_FOLDERS": "/Users/andrew/my_project:/Users/andrew/Documents/source"
            }
        }
    }
}

3. Cursor AI

In Cursor: Settings → Tools & Integrations → + New MCP Server

Or edit ~/.cursor/mcp.json directly:

{
    "mcpServers": {
        "drews-xcode-mcp": {
            "command": "uvx",
            "args": ["drews-xcode-mcp"]
        }
    }
}

Optional: Add folder restrictions with an env section (same format as Claude Desktop above).

Usage

Once configured, simply ask your AI assistant to help with Xcode tasks:

  • "Find all Xcode projects in my home directory"

  • "Build the project at /path/to/MyProject.xcodeproj"

  • "Run tests for this project and show me any failures"

  • "What are the build errors in this project?"

  • "Show me the directory structure of this project"

  • "Take a screenshot of the Xcode window"

Most tools work with paths to .xcodeproj or .xcworkspace files, or with regular directory paths for browsing and navigation.

Advanced Configuration

Command Line Arguments

When running the server directly (for development or custom setups), these options are available:

Build output control:

  • --no-build-warnings - Show only errors, exclude warnings

  • --always-include-build-warnings - Always show warnings (default)

Notifications:

  • --show-notifications - Enable macOS notifications for operations

  • --hide-notifications - Disable notifications (default)

Access control:

  • --allowed /path - Add allowed folder (can be repeated)

Example:

drews-xcode-mcp --no-build-warnings --show-notifications --allowed ~/Projects

Note: When using MCP clients (Claude, Cursor), configure these via the env section in your client's config file instead.

Development

The server is built with FastMCP and uses AppleScript to communicate with Xcode.

Local Testing

Test with MCP Inspector:

export XCODEMCP_ALLOWED_FOLDERS=~/Projects
mcp dev drews_xcode_mcp/__main__.py

This opens an inspector interface where you can test tools directly. Provide paths as quoted strings: "/Users/you/Projects/MyApp.xcodeproj"

Limitations

  • AppleScript syntax may need adjustments for specific Xcode versions

  • Some operations require the project to be open in Xcode first

Available Tools

29 tools
build_projectA
Destructive
Build the specified Xcode project or workspace.

Builds run for up to `timeout` seconds (default 600, i.e. 10 minutes) before
timing out, which guards against a build that hangs indefinitely. Raise it
for large projects whose cold build exceeds the default.

Args:
    project_path: Path to an Xcode project or workspace directory.
    scheme: Name of the scheme to build. If not provided, uses the active scheme.
    include_warnings: Include warnings in build output. If not provided, uses global setting.
    regex_filter: Optional regex to filter error/warning lines
    max_lines: Maximum number of error/warning lines to show (default 25)
    timeout: Maximum seconds to wait for the build to complete. If not
        provided, defaults to 600. Must be a positive integer.

Returns:
    Always returns JSON with format:
    {
        "full_log_path": "~/Library/Caches/xcode-mcp-server/logs/build-{hash}.txt",
        "summary": {"total_errors": N, "total_warnings": M, "showing_errors": X, "showing_warnings": Y},
        "errors_and_warnings": "Build failed with N errors...

error: ... ..." } The errors_and_warnings field contains a summary message followed by the actual errors/warnings. Errors are prioritized over warnings - errors are shown first, then warnings fill remaining slots.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
schemeNo
include_warningsNo
regex_filterNo
max_linesNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

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

The description aligns with the destructiveHint=true annotation, explaining that builds are potentially destructive. It discloses timeout behavior, default values, and the structure of the return value, including how errors and warnings are prioritized. No contradictions with annotations.

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

Conciseness5/5

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

The description is concise and well-structured, with a clear opening sentence, bullet points for arguments, and a detailed return format. Every sentence adds value without redundancy.

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

Completeness4/5

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

While the description covers the tool's operation, inputs, and output well, it omits environmental prerequisites (e.g., Xcode must be installed) and does not explicitly state that the tool is safe to run multiple times. However, given the complexity, it is nearly complete.

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

Parameters5/5

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

Despite 0% schema coverage, the description comprehensively explains each parameter beyond the schema types. For instance, it states that 'scheme' defaults to the active scheme, 'include_warnings' uses global setting, 'timeout' must be a positive integer with a default of 600 seconds. This adds significant meaning.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Build the specified Xcode project or workspace.' The verb 'build' is specific and directly contrasts with sibling tools like 'clean_project' or 'get_build_errors'. It leaves no ambiguity about the tool's core function.

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

Usage Guidelines3/5

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

The description provides context such as the timeout default and adjustment for large projects, but it does not explicitly guide when to use this tool versus alternatives. For example, it doesn't mention that 'get_build_results' might be used after a build to fetch results, nor does it state when 'clean_project' should be used instead. The guidance is present but incomplete.

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

clean_projectA
DestructiveIdempotent

Clean the specified Xcode project or workspace.

Args: project_path: Path to an Xcode project/workspace directory. timeout: Maximum seconds to wait for the clean to complete. If not provided, defaults to 600. Must be a positive integer.

Returns: Output message

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate destructive and idempotent behavior. Description adds timeout context but does not detail what 'clean' destroys (e.g., build artifacts).

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?

Concise with clear structure: purpose sentence, Args list, Returns line. No unnecessary text.

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

Completeness4/5

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

For a simple tool with annotations and an output schema, the description covers purpose, parameters, and return type. Could mention output message content, but overall adequate.

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

Parameters4/5

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

With 0% schema description coverage, the description explains both parameters: project_path as a path and timeout with default and validation, adding value beyond the schema.

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

Purpose5/5

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

Description clearly states the tool cleans an Xcode project/workspace. The verb 'clean' is specific and distinct from sibling tools like build_project, create_project, etc.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. For example, it does not explain when cleaning is needed before building or testing.

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

create_projectA

Create a new Xcode project with a SwiftUI app template.

Creates a complete, buildable Xcode project with a SwiftUI app entry point, ContentView, and asset catalog. The project uses the modern Xcode 16+ format (objectVersion 77) with automatic file discovery.

Args: parent_directory: Directory where the project folder will be created. Must be within the allowed folders configured for this server. project_name: Name of the project (e.g. "MyApp"). Used for the folder name, target name, and scheme name. platform: Target platform - "ios" or "macos" (case-insensitive). Defaults to "ios". bundle_identifier: Bundle identifier (e.g. "com.mycompany.MyApp"). Defaults to "com.example.{ProjectName}". deployment_target: Minimum deployment target version (e.g. "26.0"). Defaults to "26.0".

Returns: JSON string with project_path, project_directory, platform, bundle_identifier, and files_created.

ParametersJSON Schema
NameRequiredDescriptionDefault
parent_directoryYes
project_nameYes
platformNoios
bundle_identifierNo
deployment_targetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses behavioral traits such as requiring parent_directory within allowed folders and creating multiple files. Annotations are minimal, so description carries burden. It does not mention potential idempotency or overwrite behavior, but is reasonably transparent.

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

Conciseness4/5

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

The description is well-structured with clear sections for args and returns, and front-loaded with purpose. At about 150 words, it is slightly verbose but each sentence adds value.

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

Completeness5/5

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

The description adequately covers what the tool does, inputs, outputs (including return fields), and constraints. Given the complexity, it is complete and does not require additional context from siblings or output schema.

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

Parameters5/5

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

The input schema has 0% description coverage, but the description provides detailed explanations for each parameter, including constraints, defaults, and usage context (e.g., project_name used for folder/target/scheme, platform case-insensitive). This adds significant value beyond the schema.

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

Purpose5/5

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

The description clearly states the tool creates a new Xcode project with a SwiftUI app template, specifying verb, resource, and details like Xcode 16+ format. It is distinct from sibling tools that focus on building, cleaning, or running projects.

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

Usage Guidelines3/5

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

The description provides parameter details but does not explicitly state when to use this tool versus alternatives or when not to use it. The context of siblings implies it is for creation, but lacks explicit guidance on exclusions.

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

debug_list_notification_historyA
Read-onlyIdempotent

List all notifications that have been posted since the server started. This is a debugging tool to help understand notification behavior.

Returns: A formatted list of all notifications with timestamps, titles, messages, and subtitles.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations confirm read-only, non-destructive, idempotent behavior. Description adds crucial context: notifications are only from server start and returns specific fields, enhancing beyond annotations.

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

Conciseness5/5

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

Two sentences plus a returns line, clear and succinct with no wasteful content. Front-loaded with the main action.

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

Completeness5/5

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

Given no parameters, existing output schema, and thorough annotations, the description fully explains the tool's purpose and output, leaving no major gaps.

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

Parameters4/5

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

No parameters exist and schema coverage is 100%. Baseline of 4 applies; description does not need to add parameter info.

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

Purpose5/5

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

Description specifically states 'List all notifications that have been posted since the server started' with a clear verb and resource, and labels it as a debugging tool. No sibling tool serves the same purpose.

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?

Implied usage as a debugging tool, but no explicit when-to-use or when-not-to-use instructions or alternatives given. However, uniqueness among siblings mitigates confusion.

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

get_active_run_destinationA
Read-onlyIdempotent

Get the currently active run destination for a project.

Returns the device or simulator that Xcode will use for the next build or run operation. This reads from Xcode's workspace state file without opening the project in Xcode.

Note: After calling set_run_destination, Xcode may take several seconds to flush its state to disk. If called immediately after set_run_destination, this may return the previous destination.

Args: project_path: Path to an Xcode project (.xcodeproj) or workspace (.xcworkspace).

Returns: JSON with the active destination's name, platform, architecture, and id. Returns an error message if the active destination cannot be determined (e.g. the project has never been opened in Xcode).

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds value by stating it reads from Xcode's workspace state file without opening the project, and discloses the timing behavior (possible lag after set_run_destination). No contradiction with annotations.

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?

Concise with front-loaded purpose, followed by explanation of behavior, parameters, and return value. Each sentence adds value, no redundancy. Could be slightly tighter but well-structured.

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

Completeness4/5

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

Given the tool's simplicity (one parameter, read-only, good annotations), the description covers purpose, behavioral nuance, parameter specification, and return format (including error case). Adequately complete for an agent to use correctly.

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

Parameters4/5

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

Schema description coverage is 0% (no parameter description in schema). Description compensates by explaining project_path accepts .xcodeproj or .xcworkspace paths, adding meaning beyond the schema's type-only definition.

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?

Clearly states it gets the currently active run destination for a project. Differentiates from siblings by noting it reads from workspace state file without opening project, but does not explicitly contrast with list_run_destinations or set_run_destination.

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?

Provides explicit context on when to use (to get active destination for next build/run). Includes important timing guidance about potential staleness after set_run_destination, but does not explicitly mention when not to use or list alternatives.

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

get_build_errorsA
Read-onlyIdempotent
Get the build errors from the last build for the specified Xcode project or workspace.

Args:
    project_path: Path to an Xcode project or workspace directory.
    include_warnings: Include warnings in output. If not provided, uses global setting.
    regex_filter: Optional regex to filter error/warning lines
    max_lines: Maximum number of error/warning lines to show (default 25)

Returns:
    If no build has been performed: Returns plain text message.
    Otherwise, returns JSON string with format:
    {
        "full_log_path": "~/Library/Caches/xcode-mcp-server/logs/build-{hash}.txt",
        "summary": {"total_errors": N, "total_warnings": M, "showing_errors": X, "showing_warnings": Y},
        "errors_and_warnings": "Build succeeded/failed with N errors...

error: ... ..." } Output is filtered using regex patterns to match compiler errors/warnings, with errors prioritized over warnings. Includes full unfiltered log file for complete analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
include_warningsNo
regex_filterNo
max_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, which already indicate safe behavior. The description adds context such as conditional return formats (plain text vs JSON), error/warning prioritization, full log file path, and filtering behavior, providing valuable details beyond annotations.

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

Conciseness3/5

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

The description is moderately concise with a clear Args/Returns structure, but the Returns section is lengthy and could be trimmed for better conciseness without losing 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 4 parameters, existing output schema, and annotations, the description covers the return format comprehensively for both cases (no build vs build performed) and explains parameter behaviors like default for max_lines and global setting for include_warnings. Minor missing explanation of 'global setting' prevents a perfect score.

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 0% schema description coverage, the description provides brief but adequate semantics for all four parameters: project_path (path to directory), include_warnings (defaults to global setting), regex_filter (optional), max_lines (default 25). However, 'global setting' is not explained, and details are minimal.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'build errors from the last build for the specified Xcode project or workspace.', which is specific and distinct from sibling tools like 'get_build_results' or 'build_project'.

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 it should be used after a build to retrieve errors, and mentions behavior when no build exists, but does not explicitly compare to alternatives like 'get_build_results' or provide when-not-to-use guidance.

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

get_build_resultsA
Read-onlyIdempotent

Get aggregated build errors and warnings from all builds since the last clean operation.

This tool addresses the issue where incremental builds only show warnings for recompiled files. It parses the build log manifest (LogStoreManifest.plist) and aggregates warnings from all builds since the last clean, excluding warnings from files that were subsequently recompiled.

Strategy:

  1. Locate the project's DerivedData/Logs/Build directory

  2. Parse LogStoreManifest.plist to find all builds since last clean

  3. For each build, parse the .xcactivitylog file to extract:

    • Warnings and errors with file/line/column/message

    • List of files compiled in that build

  4. Aggregate warnings, keeping only the most recent warning for each file

  5. If a file was recompiled in a later build, use warnings from that later build

This ensures you see all current warnings even after incremental builds.

Args: project_path: Path to an Xcode project or workspace directory max_warnings: Maximum number of warnings to show in response (default 50)

Returns: JSON string with format: { "derived_data_path": "/path/to/DerivedData/...", "summary": { "total_builds": N, "builds_since_clean": M, "builds_analyzed": K, "clean_info": "...", "total_warnings": X, "warnings_by_type": {"warnings": W, "errors": E}, "unique_files_with_warnings": F, "files_recompiled_multiple_times": R }, "aggregated_warnings": [ { "file": "/path/to/File.swift", "line": 123, "column": 45, "message": "...", "type": "warning" } ], "files_with_multiple_builds": [ { "file": "/path/to/File.swift", "builds": 3, "warnings_excluded": 2 } ], "builds_analyzed": [ { "uuid": "...", "title": "Build FunVoice", "time": 782185536.0, "warnings_found": 4, "files_compiled": 26 } ] }

Note: Only the first max_warnings warnings are included in aggregated_warnings.
The summary counts reflect the total before limiting.
ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
max_warningsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds detailed behavioral context: algorithm to parse logs, aggregate warnings, exclude recompiled files, and notes on only returning first max_warnings. No contradictions with annotations.

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 long but well-structured with sections: purpose, problem, strategy, args, returns, note. Every sentence adds value, though could be slightly more concise.

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

Completeness5/5

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

Given the tool's complexity and lack of output schema in structured data, the description provides a complete picture: detailed algorithm, input parameters, and a full JSON return format example. It covers all necessary context.

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

Parameters5/5

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

Schema coverage is 0%, so description must compensate. It explains both parameters: project_path as path to Xcode project/workspace, and max_warnings with default and purpose. This adds full meaning beyond schema names and types.

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

Purpose5/5

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

The description clearly states it gets aggregated build errors and warnings from all builds since the last clean. It distinguishes itself from siblings like get_build_errors by explaining the specific problem of incremental builds only showing recompiled file warnings.

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 context on when to use the tool (to see all current warnings after incremental builds) but does not explicitly exclude alternatives or compare with siblings like get_build_errors. It implicitly guides usage through the problem statement.

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

get_directory_listingA
Read-onlyIdempotent

List contents of a directory with file metadata.

Args: directory_path: Path to directory to list regex_filter: Optional regex to filter filenames (applied to basename only) sort_by: Sort by "time" (modification time) or "name" (alphabetical). Default: "time" reverse: Reverse sort order. Default: True (most recent first / Z-A) max_results: Maximum entries to return (default 50, hard limit 100)

Returns: Formatted listing with: name, type (file/dir), size, modified time. Default behavior: 50 most recently modified files/folders. Format: "main.swift [file] 2.5 KB 2025-10-01 14:30"

ParametersJSON Schema
NameRequiredDescriptionDefault
directory_pathYes
regex_filterNo
sort_byNotime
reverseNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

The description adds context beyond annotations, such as default sorting by time, maximum results limit of 100, and output format. Annotations already cover safety (read-only, non-destructive), so the description enhances behavioral understanding.

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

Conciseness4/5

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

The description is well-structured with Args and Returns sections, but slightly verbose. It is front-loaded and each sentence adds value, though it could be more concise.

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

Completeness5/5

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

Given the tool has an output schema, the description adequately explains the output format and covers all parameters, defaults, limits, and filtering. It is complete for effective use.

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

Parameters5/5

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

The description explains all five parameters in detail, including defaults and behavior, fully compensating for the 0% schema coverage. It adds meaning beyond the bare schema.

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

Purpose4/5

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

The description clearly states 'List contents of a directory with file metadata,' providing a specific verb and resource. While it distinguishes from siblings like 'get_directory_tree' by implication, it does not explicitly differentiate.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus alternatives like 'get_directory_tree' or mention exclusions. It focuses solely on its own behavior.

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

get_directory_treeA
Read-onlyIdempotent

Get a visual tree of directories (folders only) in the specified path.

Shows the folder structure as a tree diagram with box-drawing characters. Does not include individual files - use get_directory_listing for file details.

Special behavior: If directory_path ends with .xcodeproj or .xcworkspace, the tree will show the parent directory structure (since these are typically at the root of a project folder).

Args: directory_path: Path to directory to scan. Can also be a .xcodeproj or .xcworkspace path (will scan parent directory in that case). max_depth: Maximum recursion depth (default 4, prevents excessive output). Depth 1 = immediate subdirectories only, Depth 4 = up to 4 levels deep.

Returns: A visual tree representation showing only directories/folders, with a note about using get_directory_listing for file-level details.

Example:
/Users/you/Projects/MyApp/
├── Sources/
│   ├── Models/
│   └── Views/
├── Tests/
└── Resources/
ParametersJSON Schema
NameRequiredDescriptionDefault
directory_pathYes
max_depthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds valuable behavioral context: the output format (tree diagram with box-drawing characters), the special handling of project files, and the default max_depth of 4 to prevent excessive output.

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

Conciseness4/5

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

The description is well-structured and front-loaded with the core purpose. It is slightly verbose with repetition about get_directory_listing, but every sentence adds value. Could be trimmed slightly, but overall efficient.

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 simple nature of the tool and good annotations, the description covers the purpose, parameters, special behavior, and return format. It lacks information about error handling (e.g., invalid paths), but for a read-only tool this is acceptable.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden. It fully explains both parameters: directory_path (including the .xcodeproj/.xcworkspace special case) and max_depth (default 4, with clear explanation of depth levels). No additional schema documentation is needed.

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

Purpose5/5

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

The description clearly states 'Get a visual tree of directories (folders only) in the specified path,' which is a specific verb+resource combination. It also distinguishes itself from the sibling tool get_directory_listing by explicitly noting that it does not include files.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool (to see folder structure) and when to use an alternative: 'Does not include individual files - use get_directory_listing for file details.' It also explains special behavior for .xcodeproj/.xcworkspace paths.

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

get_latest_test_resultsA
Read-onlyIdempotent

Get the test results from the most recent test run.

Args: project_path: Path to Xcode project/workspace directory

Returns: JSON with test results or plain text error message. Success format: { "xcresult_path": "...", "summary": {"total_tests": N, "passed": M, "failed": K, "skipped": L}, "failed_tests": [{"test_name": "...", "failure_message": "...", ...}] }

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint, idempotentHint), the description discloses the return format including success and error structures. It adds behavioral context such as returning plain text on error and the shape of the success JSON.

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 relatively concise, ending with an illustrative return format. While useful, the example could be shortened or placed in comments without losing clarity. It is front-loaded with the essential purpose.

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 simple input (one required parameter) and the presence of output schema-like details, the description is fairly complete. It lacks mention of edge cases (e.g., no test runs exist, multiple runs), but the error handling is implied. The annotations also support understanding.

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 single parameter 'project_path' is described as 'Path to Xcode project/workspace directory', providing meaning beyond the schema's type definition. Since the schema itself has no parameter descriptions, the description compensates fully, though it could be more specific about allowed paths.

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 it retrieves test results from the most recent test run. It uses the verb 'get' and specifies the resource 'test results', distinguishing it from sibling tools like 'run_project_tests' which actually execute tests.

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 does not provide explicit guidance on when to use this tool versus alternatives. It does not mention prerequisites (e.g., that a test run must have occurred) or contrast with other tools like 'get_build_results'.

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

get_project_schemesA
Read-onlyIdempotent

Get the available build schemes for the specified Xcode project or workspace.

Args: project_path: Path to an Xcode project/workspace directory, which must end in '.xcodeproj' or '.xcworkspace' and must exist.

Returns: A newline-separated list of scheme names, with the active scheme listed first. If no schemes are found, returns an empty string.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond annotations (readOnly, idempotent), description details return format (newline-separated, active first) and empty string behavior, adding value.

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

Conciseness5/5

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

Concise two-sentence description with clear sections for args and returns, no fluff.

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

Completeness5/5

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

All necessary information provided given simplicity, annotations, and output schema; no gaps.

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

Parameters5/5

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

Schema has 0% coverage; description fully compensates by specifying path must end in '.xcodeproj' or '.xcworkspace' and must exist.

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

Purpose5/5

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

Description clearly states the verb 'Get' and resource 'available build schemes' for a specified Xcode project/workspace, distinguishing it from sibling tools like building or testing.

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?

Clear context provided for when to use (to list schemes for a project), but no explicit exclusion of alternatives or when not to use.

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

get_runtime_outputA
Read-onlyIdempotent

Fetches and returns the most relevant runtime console output from the project's most recent run.

Output becomes available 2 seconds after the app terminates.

Args: project_path: Path to an Xcode project (*.xcproject) or workspace (*.xcworkspace) regex_filter: Optional regex pattern to find matching lines in the output max_lines: Maximum number of matching lines to return (default 20)

Returns: JSON string with structured console output including errors, warnings, context, and full_log_path pointing to the complete unfiltered plaintext log file.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
regex_filterNo
max_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by disclosing the 2-second post-termination delay and stating the return structure, which goes beyond annotations. No contradictions.

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?

Well-structured with Args and Returns sections. Information is front-loaded with the main purpose. No redundant sentences. Could be slightly more concise but overall efficient.

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 that an output schema exists, the description appropriately covers parameters and timing. For a read-only tool, it provides enough context for effective usage. The mention of full_log_path is a nice touch.

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

Parameters4/5

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

Schema description coverage is 0%, but the description provides clear explanations for all three parameters: project_path (Xcode project/workspace path), regex_filter (optional regex pattern), and max_lines (default 20). This adds substantial meaning beyond the schema.

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

Purpose5/5

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

Explicitly states it fetches runtime console output from the most recent run, distinguishing it from sibling tools like get_build_errors which focus on build logs. The verb 'fetches' and resource 'runtime console output' are specific.

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?

Provides a crucial timing constraint: output becomes available 2 seconds after app terminates. This helps the agent know when to call it. While it doesn't explicitly state when not to use, the context of sibling tools implies it's for runtime logs after execution.

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

get_xcode_projectsA
Read-onlyIdempotent

Search for .xcodeproj and .xcworkspace files, optionally including recent projects.

If search_path is empty, searches all paths to which this tool has been granted access. Uses mdfind (Spotlight indexing) to find files efficiently.

Args: search_path: Path to search. If empty, searches all allowed folders. include_recents: If True, include recently opened projects first (default: True) max_search_depth: Maximum directory depth from search path (default: 3) Depth 0 = directly in search path, depth 1 = one level down, etc. regex_filter: Optional regex pattern to filter results max_results: Maximum number of results to return (default: 10)

Returns: A newline-separated list of .xcodeproj and .xcworkspace paths. Recent projects appear first if include_recents=True. Returns empty string if none are found.

ParametersJSON Schema
NameRequiredDescriptionDefault
search_pathNo
include_recentsNo
max_search_depthNo
regex_filterNo
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds that it uses mdfind (Spotlight indexing), explains depth meaning, and return format. No contradictions.

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 front-loaded with the main purpose and structured with sections (general, mdfind, Args, Returns). It is efficient but could be slightly more concise; nevertheless, every sentence adds value.

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

Completeness5/5

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

Given 5 parameters (all optional) and an output schema, the description covers all parameters, return value, and algorithmic behavior (depth interpretation). It is complete for usage.

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

Parameters5/5

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

Schema description coverage is 0%, but the description includes a detailed 'Args:' section explaining each of the 5 parameters (search_path, include_recents, max_search_depth, regex_filter, max_results) with defaults and behaviors, fully compensating.

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 it searches for .xcodeproj and .xcworkspace files, which is a specific verb+resource. It distinguishes from sibling tools like build_project, clean_project, etc. that perform different actions.

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

Usage Guidelines4/5

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

The description explains that if search_path is empty, it searches all allowed folders, and it mentions the use of mdfind. However, it does not explicitly say when not to use this tool or provide alternatives, though sibling tools are all different in purpose.

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

list_booted_simulatorsA
Read-onlyIdempotent

List all currently booted iOS, iPadOS, tvOS, and watchOS simulators.

Returns: A formatted list of booted simulators with their names, UDIDs, and OS versions. Returns "No booted simulators found" if none are running.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent behavior. The description adds useful details about the return format (formatted list with name, UDID, OS version) and a special message when none are booted, enhancing transparency beyond annotations.

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

Conciseness5/5

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

The description is extremely concise with two sentences, front-loaded with the core purpose, and every word contributes value without redundancy.

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

Completeness5/5

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

Given no parameters and the presence of an output schema (implied), the description fully covers the tool's purpose, input, and output, including the special case of no booted simulators.

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

Parameters4/5

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

The input schema has zero parameters, so the baseline is 4. The description does not need to explain parameters, and it correctly avoids any misleading 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 explicitly states the tool lists all currently booted simulators across multiple OS types (iOS, iPadOS, tvOS, watchOS), distinguishing it clearly from sibling tools that focus on building, running, or debugging.

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 needing to check booted simulators, but does not provide explicit guidance on when not to use it or mention alternative tools for listing non-booted or available simulators.

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

list_mac_app_windowsA
Read-onlyIdempotent

List all on-screen macOS application windows with their CGWindow IDs. These window IDs can be used to capture screenshots of a given window or app with take_app_screenshot or take_window_screenshot.

Returns: A formatted list of windows grouped by application, including window IDs that can be used with take_window_screenshot.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint. Description adds that it returns grouped list with window IDs, aligning with read-only nature. No contradictions.

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?

Three concise sentences, front-loaded with the main action, followed by purpose and return format. No wasted words.

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

Completeness5/5

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

With no parameters, annotations covering safety, and an output schema, the description provides complete context about what the tool does and how its output is used.

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

Parameters4/5

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

No parameters, so baseline 4. Description does not need to add parameter details; it covers the tool's behavior sufficiently.

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

Purpose5/5

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

Clearly states it lists all on-screen macOS application windows with CGWindow IDs, and explains the purpose for screenshots. Distinguishes from sibling tools by referencing specific screenshot tools.

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?

Explicitly mentions using window IDs with take_app_screenshot or take_window_screenshot, providing clear context. Lacks explicit 'when not to use' but the purpose is well-defined.

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

list_project_testsA
Read-onlyIdempotent

List all available tests in the specified Xcode project or workspace.

Args: project_path: Path to Xcode project/workspace directory

Returns: A list of all test identifiers in the format: BundleName/ClassName/testMethodName

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description's statement of listing tests is consistent but adds no new behavioral insight beyond the return format. It does not contradict annotations.

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

Conciseness5/5

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

The description is concise: a single sentence for purpose, followed by clearly formatted arguments and returns. No extraneous text, and the purpose is front-loaded.

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

Completeness5/5

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

The tool has one simple parameter and an output schema (not shown but indicated). The description provides the purpose, parameter meaning, and return format, which is sufficient for an agent to use it correctly.

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

Parameters4/5

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

Schema description coverage is 0%, but the description explains that project_path is the 'Path to Xcode project/workspace directory', adding meaning beyond the parameter name. This clarifies the expected input effectively.

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

Purpose5/5

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

The description clearly states the verb 'List' and the resource 'all available tests in the specified Xcode project or workspace', which is specific and distinguishes it from sibling tools like run_project_tests or get_latest_test_results.

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 does not provide guidance on when to use this tool versus alternatives, such as when to list tests before running them or how it differs from get_latest_test_results. No explicit when-not or alternative tool references are present.

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

list_run_destinationsA
Read-onlyIdempotent

List available run destinations (devices and simulators) for a project scheme.

Returns destinations filtered to what's compatible with the given scheme. For example, an iOS scheme will show iOS simulators and devices but not Mac destinations (unless the app supports Mac Catalyst).

Use the 'id' field from the results with set_run_destination to change which device Xcode builds and runs for.

Args: project_path: Path to an Xcode project (.xcodeproj) or workspace (.xcworkspace). scheme: Scheme name to list destinations for. If not provided, uses the first scheme found via xcodebuild.

Returns: JSON array of destinations, each with: name, platform, id, and optionally arch, OS, and variant fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
schemeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint. The description adds valuable behavioral context: filtering based on scheme compatibility, with an example (iOS scheme excludes Mac unless Catalyst). No contradiction with annotations.

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

Conciseness5/5

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

The description is efficiently structured: a two-sentence summary, a usage note, then Args and Returns sections. Every sentence adds value, with no redundancy.

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

Completeness5/5

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

Given the tool's simplicity and the presence of an output schema, the description covers all necessary aspects: purpose, parameters, output format, and usage context. No gaps remain.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully explains each parameter: project_path includes file extensions, scheme defaults to first scheme if omitted. This compensates entirely for missing schema descriptions.

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

Purpose5/5

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

The description explicitly states the tool lists available run destinations for a project scheme, with a specific verb ('List') and resource ('run destinations'). It distinguishes from siblings like set_run_destination by noting the id field is for that purpose.

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

Usage Guidelines4/5

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

The description advises to use the id from results with set_run_destination, providing clear guidance on how to chain tools. It does not explicitly state when not to use, but the context is sufficient.

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

list_running_mac_appsA
Read-onlyIdempotent

List all currently running macOS applications.

Returns: A formatted list of running applications with their name, bundle ID, and status flags (frontmost/visible/hidden).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds value by specifying the return format: a formatted list with name, bundle ID, and status flags (frontmost/visible/hidden). This goes beyond annotations and provides useful behavioral context without contradiction.

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: two sentences covering purpose and return format. Every word adds value, and the structure is front-loaded with the core functionality. No unnecessary information.

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

Completeness5/5

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

Given zero parameters and the presence of an output schema (not shown but mentioned), the description fully explains what the tool does and what it returns. The context signals indicate no nested objects, and the description's return format details are adequate for an agent to understand the output.

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

Parameters5/5

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

The tool has zero parameters (schema coverage 100%). The description correctly does not attempt to describe parameters, and the return format explanation is sufficient. No additional parameter semantics needed.

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

Purpose5/5

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

The description clearly states the tool lists all currently running macOS applications. The verb 'list' and resource 'running macOS applications' are specific. Among siblings, this tool is distinct from others like 'list_booted_simulators' and 'list_mac_app_windows'.

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 implicitly indicates usage when an agent needs to know which macOS apps are running. While it does not explicitly state when not to use it or provide alternatives, the context of sibling tools (e.g., Xcode-specific operations) helps differentiate. Additional guidance would improve clarity but is not strictly necessary.

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

run_project_testsA
Destructive

Run tests for the specified Xcode project or workspace.

Tests run for up to timeout seconds (default 600, i.e. 10 minutes) before timing out, which guards against a test run hanging indefinitely. Raise it for large projects whose build-for-testing alone exceeds the default.

Args: project_path: Path to Xcode project/workspace directory scheme: Optional scheme to test (uses active scheme if not specified) timeout: Maximum seconds to wait for the build-for-testing plus test run to complete. If not provided, defaults to 600. Must be a positive integer.

Returns: JSON with test results if tests complete, otherwise plain text status message. Success format: { "xcresult_path": "...", "summary": {"total_tests": N, "passed": M, "failed": K, "skipped": L}, "failed_tests": [{"test_name": "...", "failure_message": "...", ...}] } Timeout: Plain text message indicating timeout

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
schemeNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

Discloses timeout behavior and output formats, but does not address the destructiveHint=true annotation (e.g., potential test artifacts) beyond the timeout guard.

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?

Well-organized with labeled sections (Args, Returns) and efficient sentences. No wasted words.

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

Completeness5/5

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

Provides complete coverage: input parameters, timeout behavior, and output structure (including sample JSON). Output schema presence further reduces gaps.

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

Parameters5/5

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

With 0% schema coverage, the description fully compensates by detailing each parameter's purpose, defaults, constraints (e.g., timeout must be positive integer, scheme optional).

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

Purpose5/5

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

Clearly states the tool runs tests for Xcode projects/workspaces. Distinguishes from siblings like 'list_project_tests' and 'get_latest_test_results' by focusing on execution, not listing or retrieval.

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?

Provides context on timeout adjustment for large projects but lacks explicit guidance on when to use vs. alternatives like 'get_latest_test_results' or which scheme to choose.

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

run_project_unmonitoredA
Destructive

Launch the app in Xcode and return immediately without waiting.

The app will continue running until you stop it manually in Xcode. No monitoring, no automatic termination, no log extraction.

Use get_runtime_output later (after manual termination) to retrieve logs.

Perfect for: Long-running apps, servers, apps needing extended manual testing

Args: project_path: Path to an Xcode project/workspace directory scheme: Optional scheme to run. If not provided, uses the active scheme.

Returns: Success message indicating the app has been launched

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
schemeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations indicate destructive and open-world; the description adds meaning by explaining the app continues running until manually stopped, with no monitoring or log extraction. Does not contradict annotations.

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

Conciseness5/5

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

Concise and front-loaded: first sentence states the core action. Every sentence adds value, no fluff. Clean structure with Args and Returns sections.

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?

Covers behavior, workflow, and use cases. Could mention prerequisites (e.g., project must be buildable) but overall sufficient given output schema exists for return details.

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

Parameters5/5

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

With 0% schema coverage, the description fully compensates by describing project_path as path to Xcode project/workspace and scheme as optional with default value, adding clear semantics beyond the schema.

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

Purpose5/5

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

The description clearly states the tool launches an app in Xcode and returns immediately, distinguishing it from siblings like run_project_until_terminated and run_project_with_user_interaction by emphasizing no monitoring, no automatic termination.

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?

Explicitly states it's perfect for long-running apps, servers, and extended manual testing. Provides workflow hint to use get_runtime_output later. Could be more explicit about when not to use, but the context is clear.

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

run_project_until_terminatedA
Destructive

Run the app and wait for it to terminate naturally (up to timeout seconds).

The app will run in Xcode/Simulator. If it doesn't terminate within timeout seconds (default 600, i.e. 10 minutes), it will be force-stopped and runtime logs will be extracted.

No user interaction required - fully automated.

Perfect for: Automated tests, CLI tools, apps with defined exit points

Args: project_path: Path to an Xcode project/workspace directory scheme: Optional scheme to run. If not provided, uses the active scheme. regex_filter: Optional regex pattern to find matching lines in the output max_lines: Maximum number of matching lines to return (default 20) timeout: Maximum seconds to wait for the app to terminate before force-stopping it. If not provided, defaults to 600. Must be a positive integer.

Returns: JSON string with structured console output

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
schemeNo
regex_filterNo
max_linesNo
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, and the description adds that the app can be force-stopped and logs extracted. However, it does not fully explain the destructive nature (e.g., potential data loss or state changes) beyond the force-stop 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 concise, well-structured, and front-loaded. It uses bullet points for args and separate lines for use cases, making it easy to scan. Every sentence adds value.

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?

The description covers the key behaviors (automated run, timeout, force-stop, log extraction) and return format. It could mention what happens when the app terminates naturally, but it is implicit. Overall, it is sufficiently complete given the annotations and output schema.

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?

All 5 parameters are described in the 'Args' section with clear explanations. The regex_filter description is slightly ambiguous but still understandable. Since schema coverage is 0%, the description compensates well.

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

Purpose5/5

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

The description clearly states the tool runs an app and waits for termination. It specifies the context (Xcode/Simulator) and use cases (automated tests, CLI tools), effectively distinguishing it from siblings like run_project_with_user_interaction.

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

Usage Guidelines4/5

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

The description provides explicit guidance on when to use this tool (automated tasks, apps with exit points) and implies when not to use (no user interaction required). It does not explicitly mention alternatives, but the context is clear enough.

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

run_project_with_user_interactionA
Destructive

Run the app and display an alert dialog for you to interact with it.

The app will run in Xcode/Simulator. Once confirmed running, an alert dialog will appear with an "I'm finished - Terminate App" button.

  • Click the button when you're done testing → app will be force-stopped

  • If the app terminates on its own → no force-stop needed

In either case, runtime logs are extracted and returned after a 2-second wait.

Perfect for: Interactive testing, manual QA, debugging UI flows

Args: project_path: Path to an Xcode project/workspace directory scheme: Optional scheme to run. If not provided, uses the active scheme. regex_filter: Optional regex pattern to find matching lines in the output max_lines: Maximum number of matching lines to return (default 20)

Returns: JSON string with structured console output

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
schemeNo
regex_filterNo
max_linesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true), the description details the force-stop behavior upon button click, automatic termination handling, and the 2-second wait for log extraction. This adds valuable behavioral context without contradicting the annotations.

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

Conciseness4/5

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

The description is well-structured with clear paragraphs and bullet points for use cases and parameters. It is slightly lengthy but front-loaded with the main action and retains only essential information.

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

Completeness5/5

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

The description covers the entire interactive workflow, termination scenarios, and log retrieval, providing enough detail for the agent to use the tool effectively. The presence of an output schema (mentioned but not shown) reduces the need to describe return values explicitly.

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

Parameters5/5

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

Despite 0% schema description coverage, the description thoroughly explains all four parameters: project_path (required path), scheme (optional, defaults to active), regex_filter (optional filter), and max_lines (default 20). This fully compensates for the missing schema descriptions.

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

Purpose5/5

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

The description clearly states the tool runs an app and displays an alert dialog for user interaction, distinguishing it from non-interactive run tools like run_project_unmonitored or run_project_until_terminated. The verb 'run' combined with 'interaction' accurately reflects 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 Guidelines4/5

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

The description specifies it is 'Perfect for: Interactive testing, manual QA, debugging UI flows', providing clear context for when to use it. However, it does not explicitly state when not to use it or mention alternatives for non-interactive runs, slightly reducing the score.

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

set_run_destinationA
Idempotent

Set the active run destination (device or simulator) in Xcode.

Use list_run_destinations to get available destination IDs, then pass the desired 'id' value here to select it. Subsequent build and run operations will target this destination.

Args: project_path: Path to an Xcode project (.xcodeproj) or workspace (.xcworkspace). destination_id: The destination identifier to select. This is the 'id' field from list_run_destinations output (e.g. a simulator UDID or device UDID).

Returns: JSON with the name and id of the destination that was set.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes
destination_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

Annotations confirm idempotentHint=true, and description adds effect on subsequent build/run. However, does not disclose error handling for invalid destination_id or project_path.

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?

Three sentences plus docstrings for args/returns; front-loaded purpose, no extra words.

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

Completeness5/5

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

Explains dependencies (list_run_destinations), effect on subsequent operations, and return format. Has output schema, so return explanation is adequate.

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

Parameters5/5

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

Schema coverage is 0%, but description provides full explanations for both parameters: project_path as path to .xcodeproj/.xcworkspace, destination_id as ID from list_run_destinations with UDID example.

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

Purpose5/5

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

Clearly states 'Set the active run destination' with specific verb and resource. Distinguishes from sibling tools like list_run_destinations and get_active_run_destination.

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?

Explicitly instructs to use list_run_destinations first to get destination IDs, then pass the id here. Implies usage context before build/run operations, but no explicit when-not-to-use.

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

stop_projectA
Idempotent

Stop the currently running build or run operation for the specified Xcode project or workspace.

Args: project_path: Path to an Xcode project/workspace directory, which must end in '.xcodeproj' or '.xcworkspace' and must exist.

Returns: A message indicating whether the stop was successful

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Annotations indicate idempotentHint=true and readOnlyHint=false, so the tool is idempotent and modifies state. The description adds that it stops a running operation, but does not disclose behavior if nothing is running or potential side effects. No contradiction with annotations.

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

Conciseness4/5

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

The description is concise with a clear Args/Returns structure. It is efficient, though could be slightly tighter. No wasted sentences.

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

Completeness4/5

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

For a simple tool with one parameter and an output schema (mentioned but not shown), the description adequately covers behavior and return value. It provides enough context for correct use.

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

Parameters5/5

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

The schema has 0% description coverage, but the description adds crucial constraints: the path must end in '.xcodeproj' or '.xcworkspace' and must exist. This provides semantic meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the action ('Stop the currently running build or run operation') and the resource ('the specified Xcode project or workspace'). It distinguishes from sibling tools like build_project or run_project_until_terminated by targeting the stop operation.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when there is a running build or run operation) but does not explicitly state when not to use it or mention alternatives. Given the many sibling run/build tools, explicit guidance would be helpful.

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

take_app_screenshotA
Read-onlyIdempotent

Take screenshots of all windows for an app (case-insensitive substring match). If the app has more than one window, screenshots will be taken for up to 5 of them.

Note: Only apps with at least one on-screen window can be found by this tool.

Args: app_name: Full or partial app name to match.

Returns: Path(s) to saved screenshot file(s), one per line (max 5 windows). If multiple apps match, returns an error with the full window list.

Raises: XCodeMCPError: If no matching app found, multiple apps match, or screenshot fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
app_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations indicate read-only, idempotent operation. Description adds valuable context: case-insensitive matching, 5-window limit, requirement for on-screen windows, and error conditions. No contradiction with annotations.

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

Conciseness5/5

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

Concise and well-structured: first sentence states core purpose, followed by limitations and note, then structured Args/Returns/Raises. No extraneous content.

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

Completeness5/5

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

For a simple tool with one parameter and no enums, the description covers purpose, limitations, return format, and common errors. The existence of an output schema is noted; the description sufficiently explains output.

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 only parameter, app_name, is described as 'Full or partial app name to match' with case-insensitive behavior. This adds meaning beyond the schema's type string, but could be more explicit about whether it's a substring or fuzzy match.

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

Purpose5/5

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

Clearly states the tool takes screenshots of all windows for an app using a case-insensitive substring match. Distinguishes from sibling tools like take_window_screenshot and take_simulator_screenshot by specifying scope (app vs window vs simulator).

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?

Provides context on when the tool works (only apps with on-screen windows) and behavior (up to 5 windows, multiple apps error). Does not explicitly compare to alternative screenshot tools, but the mention of 'case-insensitive substring match' and limitation of 5 windows offers sufficient guidance.

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

take_simulator_screenshotA
Read-onlyIdempotent

Take a screenshot of a booted iOS simulator.

Args: udid: Optional UDID (device identifier) of the simulator to screenshot. If not provided or empty, the first booted simulator found is used. A list of running simulators can be found with list_booted_simulators.

Returns: The file path to the saved screenshot.

Raises: XCodeMCPError: If no booted simulators found or screenshot fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
udidNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the idempotentHint and readOnlyHint annotations, the description discloses the return value (file path), error conditions (XCodeMCPError for no booted simulators or failure), and the fallback behavior when UDID is omitted. This adds significant behavioral context.

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

Conciseness5/5

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

The description is extremely concise: a one-line purpose followed by structured Args/Returns/Raises sections. Every sentence is informative and there is no fluff. The structure is front-loaded with the core action.

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

Completeness5/5

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

For a simple tool with one parameter and an output schema, the description covers purpose, parameter behavior, return value, and error handling. Annotations provide safety guarantees. It is fully complete without being verbose.

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

Parameters5/5

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

The input schema only defines udid as an optional string/null. The description adds meaning by explaining its purpose (device identifier), the fallback to first booted simulator, and how to find UDIDs with list_booted_simulators. With 0% schema coverage, this fully compensates.

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 'Take a screenshot of a booted iOS simulator', providing a specific verb and resource. It distinguishes from sibling tools like take_app_screenshot or take_window_screenshot which target different contexts.

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 explains that an optional UDID can be provided, and if omitted the first booted simulator is used, with a pointer to list_booted_simulators for discovery. It does not explicitly compare to alternative screenshot tools but the context makes the use case clear.

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

take_window_screenshotA
Read-onlyIdempotent

Take a screenshot of a window by ID or name (case-insensitive substring match). Window IDs can be obtained by calling list_mac_app_windows, or you can simply pass a partial (or complete) window title, like "News" for the News app. If multiple windows match the provided name, screenshots will be taken for up to the first 5 of them.

Note: Only on-screen windows can be found by name.

Args: window_id_or_name: Window ID number or partial window title to match.

Returns: Path(s) to saved screenshot file(s), one per line if multiple matches.

Raises: XCodeMCPError: If no matching windows found or screenshot fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
window_id_or_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate read-only, non-destructive, idempotent. The description adds important behavior: only on-screen windows by name, up to 5 matches, returns paths to files, raises XCodeMCPError on failure. No contradiction with annotations.

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

Conciseness5/5

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

The description is well-structured with a clear purpose, note, Args, Returns, and Raises sections. Every sentence adds value, and it is appropriately sized without unnecessary fluff.

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

Completeness5/5

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

Given a single parameter, rich annotations, and an existing output schema (not shown but referenced), the description covers all essential aspects: parameter meaning, return value, error conditions, and a behavioral constraint (on-screen requirement). It is complete for the tool's complexity.

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

Parameters5/5

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

The input schema provides only a type string with no description. The description fully compensates by explaining it accepts a window ID number or partial window title with case-insensitive substring matching, greatly aiding correct invocation.

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

Purpose5/5

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

The description clearly states the tool takes a screenshot of a window by ID or name (case-insensitive substring match). It distinguishes from sibling tools that capture different targets (app, simulator, Xcode) by specifying window-level capture.

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?

Provides guidance on obtaining window IDs via list_mac_app_windows, using partial titles, and notes that only on-screen windows can be found by name. It describes behavior when multiple windows match (up to 5 screenshots) and error cases. However, it does not explicitly state when to prefer this over sibling tools like take_app_screenshot.

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

take_xcode_screenshotA
Read-onlyIdempotent

Take a screenshot of the Xcode window for the specified project.

Args: project_path: Path to an Xcode project/workspace directory.

Returns: The file path to the saved screenshot.

Raises: XCodeMCPError: If Xcode window is not found or screenshot fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

The description adds value beyond annotations by detailing error conditions (XCodeMCPError when window not found or screenshot fails) and the return type (file path). Annotations already indicate readOnly and idempotent, which are consistent.

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

Conciseness5/5

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

The description is concise, with a clear main sentence followed by structured Args/Returns/Raises sections. No wasted words.

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

Completeness5/5

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

For a simple screenshot tool with one parameter and an output schema, the description covers the action, input, output, and error cases. It is sufficiently 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?

With 0% schema description coverage, the description compensates by explaining that project_path is 'Path to an Xcode project/workspace directory'. This adds necessary context beyond the schema's title and type.

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 'Take a screenshot of the Xcode window for the specified project', which is a specific verb-resource combination. It distinguishes itself from sibling tools like take_app_screenshot or take_simulator_screenshot by targeting the Xcode window.

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

Usage Guidelines3/5

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

The description does not provide explicit guidance on when to use this tool versus alternatives like take_app_screenshot, take_simulator_screenshot, or take_window_screenshot. The usage context is implied but not clarified with exclusions or selection criteria.

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

versionA
Read-onlyIdempotent

Get the current version of the Xcode MCP Server.

Returns: The version string of the server

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description adds the return value (version string), which is useful but not extensive beyond annotations.

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

Conciseness5/5

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

Two sentences, no wasted words, clearly front-loaded with the action and return value.

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

Completeness5/5

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

Given no parameters, satisfactory annotations, and an output schema, the description is complete and adequately informs the agent.

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

Parameters4/5

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

No parameters exist, and schema coverage is 100%, so the description has nothing to add. Baseline of 4 is appropriate.

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

Purpose5/5

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

The description clearly states it gets the current version of the Xcode MCP Server, using a specific verb and resource. It is easily distinguishable from sibling tools that perform complex project operations.

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

Usage Guidelines4/5

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

While no explicit usage guidelines are given, the tool's purpose is self-evident as a version query, and there is no ambiguity with siblings.

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. 29 tool updatesv0.1.0
    • First observedbuild_project
    • First observedclean_project
    • First observedcreate_project
    • First observeddebug_list_notification_history
    • First observedget_active_run_destination
    • First observedget_build_errors
    • First observedget_build_results
    • First observedget_directory_listing
    • First observedget_directory_tree
    • First observedget_latest_test_results
    • First observedget_project_schemes
    • First observedget_runtime_output
    • First observedget_xcode_projects
    • First observedlist_booted_simulators
    • First observedlist_mac_app_windows
    • First observedlist_project_tests
    • First observedlist_run_destinations
    • First observedlist_running_mac_apps
    • First observedrun_project_tests
    • First observedrun_project_unmonitored
    • First observedrun_project_until_terminated
    • First observedrun_project_with_user_interaction
    • First observedset_run_destination
    • First observedstop_project
    • First observedtake_app_screenshot
    • First observedtake_simulator_screenshot
    • First observedtake_window_screenshot
    • First observedtake_xcode_screenshot
    • First observedversion

TDQS

A4.1/5.0
Disambiguation4/5

Most tools target distinct operations (build, clean, test, screenshot), though the three run variants (unmonitored, until terminated, with user interaction) and multiple get_build* tools could cause minor confusion if descriptions are not read carefully. Overall, boundaries are clear.

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (e.g., build_project, get_build_errors, list_booted_simulators). Even multi-word verbs like debug_list_notification_history remain readable. No mixed conventions or ambiguous abbreviations.

Tool Count3/5

With 29 tools, the server is on the heavy side. While Xcode development is complex, some tools like version, debug_list_notification_history, and get_directory_listing feel peripheral. The count is justified but pushes the upper bound of reasonable scope.

Completeness4/5

Core workflows are well-covered: build, test, run, clean, destination management, screenshot capture, and error inspection. Minor gaps exist (e.g., no project archiving or code editing), but the surface is sufficient for most development tasks.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Provides programmatic access to Xcode functionality, enabling AI assistants to create, build, test, and manage iOS/macOS projects directly.
    33
    7
    5
    MIT
  • A
    license
    B
    quality
    D
    maintenance
    Enables AI assistants to build, test, run, and manage Apple platform projects (iOS, macOS, tvOS, watchOS, visionOS) directly through Xcode. Provides comprehensive control over Xcode projects, Swift packages, simulators, and development workflows without leaving your editor.
    5
    41
    1
    MIT

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/drewster99/drews-xcode-mcp'

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