xctools-mcp-server
Provides access to Xcode development tools including xcrun, xcodebuild, and xctrace for building, testing, and analyzing Xcode projects.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@xctools-mcp-serverBuild MyApp.xcodeproj for iOS simulator"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
XCTools MCP Server
A Model Context Protocol (MCP) server that provides structured access to Xcode development tools including xcrun, xcodebuild, and xctrace.
Installation
Method 1: Using uvx
Prerequisites:
Python 3.13+
Xcode with Command Line Tools installed
uvx:
curl -LsSf https://astral.sh/uv/install.sh | sh
Run directly with uvx:
uvx xctools-mcp-server
Method 2: Local Development Installation
Prerequisites:
Python 3.13+
Xcode with Command Line Tools installed
Clone and install:
git clone https://github.com/nzrsky/xctools-mcp-server cd xctools-mcp-server pip install .Run the server:
xctools-mcp-server
Method 3: Build from Source
Build the wheel:
python -m build --wheel pip install dist/xctools_mcp_server-0.1.0-py3-none-any.whl
Related MCP server: MCP Xcode
Configuration
For Claude Desktop
Add to your ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"xctools": {
"command": "xctools-mcp-server",
"args": [],
"env": {}
}
}
}Or if using uvx:
{
"mcpServers": {
"xctools": {
"command": "uvx",
"args": ["xctools-mcp-server"],
"env": {}
}
}
}For VS Code with MCP Extension
Install the MCP Extension from the VS Code marketplace
Add server configuration to your VS Code settings (
settings.json):
{
"mcp.servers": {
"xctools": {
"command": "xctools-mcp-server",
"args": [],
"env": {}
}
}
}Or if using uvx:
{
"mcp.servers": {
"xctools": {
"command": "uvx",
"args": ["xctools-mcp-server"],
"env": {}
}
}
}Restart VS Code to load the MCP server
Use the Command Palette (
Cmd+Shift+P) and search for "MCP" commands to interact with the Xcode development tools
For Other MCP Clients
The server runs on stdio, so you can invoke it directly:
With installed package:
xctools-mcp-serverWith uvx:
uvx xctools-mcp-serverFeatures
Complete Xcode toolchain access through
xcrunProject building and testing with
xcodebuildPerformance analysis using
xctrace(Instruments)SDK and destination management
Comprehensive error handling with detailed messages
Cross-platform compatibility (macOS with Xcode installed)
Available Tools
XCRUN Tools
xcrun_find_tool- Find the path to development tools (clang, swift, etc.)xcrun_show_sdk_path- Show the path to SDKsxcrun_show_sdk_version- Show SDK versionsxcrun_run_tool- Run any development tool via xcrun
XCODEBUILD Tools
xcodebuild_build- Build Xcode projects or workspacesxcodebuild_test- Run tests for projects/workspacesxcodebuild_archive- Archive projects for distributionxcodebuild_list- List targets, schemes, and configurationsxcodebuild_show_sdks- List all available SDKsxcodebuild_show_destinations- Show valid build destinations
XCTRACE Tools (Instruments)
xctrace_record- Record new Instruments tracesxctrace_import- Import supported files into trace formatxctrace_export- Export data from trace filesxctrace_list- List available devices, templates, or instrumentsxctrace_symbolicate- Symbolicate traces with debug symbols
Usage Examples
Finding Development Tools
# Find the path to a specific tool
"Find the path to clang compiler"
# Show SDK path for iOS
"Show the path to the iOS SDK"
# Get SDK version information
"Show the version of the iOS SDK"Building Projects
# Build an Xcode project
"Build the project MyApp.xcodeproj for iOS simulator"
# Run tests for a workspace
"Run tests for MyApp.xcworkspace on iPhone 15 Pro simulator"
# Archive for distribution
"Archive MyApp.xcworkspace for release"
# List project information
"List all schemes and targets in MyApp.xcodeproj"Performance Analysis with Instruments
# Record a trace for Time Profiler
"Record a Time Profiler trace for MyApp on iPhone 15 Pro for 30 seconds"
# List available instruments
"List all available Instruments templates"
# Export trace data
"Export data from trace file to XML format"
# Import a file for analysis
"Import a .dtps file into Instruments trace format"SDK and Destination Management
# List all available SDKs
"Show all available SDKs for building"
# Show build destinations
"List all available destinations for iOS builds"
# Run a tool via xcrun
"Run swift command with version flag via xcrun"Error Handling
The server includes comprehensive error handling:
Command failures: Returns detailed error messages from xcrun, xcodebuild, and xctrace
Missing Xcode: Detects when Xcode Command Line Tools are not available
Invalid parameters: Validates tool arguments and provides helpful error messages
Tool availability: Checks for required tools before execution
Troubleshooting
Common Issues
"xcrun: error: unable to find utility"
Ensure Xcode Command Line Tools are installed:
xcode-select --installVerify Xcode is properly configured:
xcode-select -p
"No developer directory found"
Install Xcode from the Mac App Store
Accept Xcode license:
sudo xcodebuild -license accept
Permission errors
Ensure the user has necessary permissions to access Xcode tools
Try running with proper macOS development permissions
Tool not found errors
Verify the specific tool is available in your Xcode installation
Some tools may require specific Xcode versions or additional components
Requirements
macOS: Required (Xcode development tools are macOS-only)
Xcode: Xcode Command Line Tools or full Xcode installation
Python: 3.13 or higher
MCP Client: Claude Desktop, VS Code with MCP extension, or any MCP-compatible client
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Invalid parameters: Validates input parameters before execution
File operations: Handles temporary files for push notifications safely
Security Considerations
The server only exposes read and simulator management operations
No access to host file system beyond specified app paths
Push notification payloads are validated for structure
Privacy permission changes are explicit and logged
Development Notes
Built specifically for iOS development workflows
Optimized for common simulator management tasks
Structured output parsing for JSON responses
Support for both individual and batch operations
Compatible with Xcode 15+ simulator features
Available Tools
15 toolsxcodebuild_archiveA
Archive an Xcode project or workspace.
Args: project: Path to .xcodeproj file workspace: Path to .xcworkspace file scheme: Scheme name to archive (required) archive_path: Path where to save the archive
Returns: Archive result
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| workspace | No | ||
| scheme | No | ||
| archive_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits, but it only lists arguments and a vague 'Returns Archive result.' No details about side effects, required input combinations, or error conditions are given. The description adds minimal behavioral context beyond the schema itself.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise, with only four lines for arguments and one for returns. It uses clear headings (Args, Returns) and front-loads the purpose. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and no annotations are present, the description provides a basic understanding of inputs and purpose but lacks behavioral details, such as handling of concurrent project and workspace inputs, error messages, or archive path format. It is adequate for a simple archive tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning by explaining each parameter: 'Path to .xcodeproj file' for project, 'Path to .xcworkspace file' for workspace, 'Scheme name to archive (required)' for scheme, and 'Path where to save the archive' for archive_path. It clarifies that scheme is required despite the schema not marking it as required, which is helpful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Archive an Xcode project or workspace,' which is a specific verb-resource pair. This distinguishes it from sibling tools like xcodebuild_build (build) and xcodebuild_test (test), all of which have distinct actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It does not specify prerequisites, such as requiring a project or workspace, nor does it mention scenarios where archive is preferred over build or test. The sibling tools are listed but not differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcodebuild_buildB
Build an Xcode project or workspace.
Args: project: Path to .xcodeproj file workspace: Path to .xcworkspace file scheme: Scheme name to build target: Target name to build configuration: Build configuration (Debug, Release, etc.) sdk: SDK to build against destination: Destination to build for clean: Whether to clean before building
Returns: Build output
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| workspace | No | ||
| scheme | No | ||
| target | No | ||
| configuration | No | ||
| sdk | No | ||
| destination | No | ||
| clean | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description only states 'Build' without disclosing behavioral traits like duration, side effects (e.g., generated artifacts), or failure conditions. Minimal transparency beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with well-structured bullet points for arguments. However, the 'Returns' line is redundant if an output schema exists, and space could be used for more value-added content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 8 parameters and no annotations, the description covers basic parameter names but lacks depth. No explanation on choosing between mutually exclusive options (project vs workspace) or environment prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides basic parameter explanations (e.g., 'Path to .xcodeproj file'). These add minimal meaning but lack details like allowed values, constraints, or relationships between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool builds an Xcode project or workspace, with a specific verb and resource. It distinguishes from siblings like xcodebuild_archive (archive) and xcodebuild_test (test).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives, nor on how to choose between project/workspace or scheme/target. Missing prerequisites or context for when building is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcodebuild_listA
List targets and configurations in a project, or schemes in a workspace.
Args: project: Path to .xcodeproj file workspace: Path to .xcworkspace file
Returns: List of targets/schemes and configurations
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| workspace | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to state that the operation is read-only or that inputs must exist, assuming typical inference but insufficient for robust agent use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences plus Args/Returns stanzas. Every part is valuable, and the key action (list) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description covers the return value type. It omits potential errors or prerequisites but is largely sufficient. An output schema exists, so return details are not needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds basic meaning by labeling each parameter as 'Path to .xcodeproj file' and 'Path to .xcworkspace file'. However, it does not explain constraints like mutual exclusivity or optionality beyond what schema defaults imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool lists targets and configurations for projects or schemes for workspaces, clearly distinguishing its purpose from sibling tools like xcodebuild_build or xcodebuild_test.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (listing), but lacks explicit guidance on when not to use or mention of alternatives. It does not clarify that project and workspace are mutually exclusive, leaving room for misuse.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcodebuild_show_destinationsB
List valid destinations for a project or workspace and scheme.
Args: project: Path to .xcodeproj file workspace: Path to .xcworkspace file scheme: Scheme name (required)
Returns: List of valid destinations
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| workspace | No | ||
| scheme | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states it lists destinations, but does not disclose any behavioral traits such as side effects, permissions required, or that it is a read-only operation. This lack of transparency is a gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and to the point, using a docstring-like format. It could be slightly more front-loaded by stating the core purpose upfront without the Args block, but overall it is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (3 params, 0 required, no enums, output schema exists), the description covers the basics but leaves ambiguity about whether project or workspace is required, and the contradiction regarding scheme being required vs optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It describes each parameter (project, workspace, scheme) with brief explanations, but it claims scheme is required while the schema marks it as optional with a default null. This inconsistency reduces clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists valid destinations for a project/workspace and scheme. It uses a specific verb and resource, and it distinguishes itself from sibling tools like xcodebuild_build or xcodebuild_test by focusing on destinations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but does not provide guidance on when to use it versus alternatives (e.g., xcodebuild_list). There is no explicit when-to-use or when-not-to-use context, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcodebuild_show_sdksB
List all available SDKs.
Returns: List of available SDKs
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral transparency. It only states the action and return value, without disclosing that it runs xcodebuild -showsdks, its nondestructive nature, or that Xcode must be installed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two sentences) but the second sentence 'Returns: List of available SDKs' is redundant with the first. Removing it would improve conciseness. Overall, it is still appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless tool with an output schema, the description is minimally adequate. However, it lacks context about prerequisites (Xcode installation), potential errors, or how the SDK list is obtained, making it only partially complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100%. Baseline for 0 parameters is 4; the description does not add any parameter information, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all available SDKs', using a specific verb and resource. It is unambiguous and distinguishes from sibling tools that build, test, or archive.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, when-not to use, or comparison with siblings like xcodebuild_list or xcrun_show_sdk_path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcodebuild_testA
Run tests for an Xcode project or workspace.
Args:
project: Path to .xcodeproj file
workspace: Path to .xcworkspace file
scheme: Scheme name to test (required)
destination: Destination to test on
test_plan: Name of test plan to use
only_testing: List of test identifiers to run exclusively
skip_testing: List of test identifiers to skip
Returns: Test results
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | ||
| workspace | No | ||
| scheme | No | ||
| destination | No | ||
| test_plan | No | ||
| only_testing | No | ||
| skip_testing | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry full burden. Only mentions 'Returns: Test results' without details on execution behavior, side effects, error handling, or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Structured with Args and Returns sections. Reasonably concise but includes minor redundancy ('required' already implied). Front-loaded with main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters and no annotations, description provides basic explanations but lacks interaction details (e.g., project vs workspace), default behaviors, or usage context. Output schema exists but not displayed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description adds meaning with one-line explanations for each parameter (e.g., 'project: Path to .xcodeproj file'). Adds value beyond schema's type/title.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Run tests for an Xcode project or workspace.' Distinguishes from sibling tools like xcodebuild_build or xcodebuild_archive which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides list of arguments with basic descriptions (e.g., scheme is required) but lacks explicit guidance on when to use this tool vs alternatives, or conditions like specifying a destination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcrun_find_toolA
Find the path to a development tool using xcrun.
Args: tool_name: Name of the tool to find (e.g., 'clang', 'swift', 'texturetool') sdk: SDK name to search in (e.g., 'iphoneos', 'macosx')
Returns: Absolute path to the tool
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | ||
| sdk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It mentions return of absolute path, but lacks details on error handling (e.g., tool not found) or performance implications. Adequate but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is brief, with separate sections for args and returns, and no wasted words. Efficient and clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, description explains return value (absolute path). Covers main functionality, but could include notes on error behavior when tool not found.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description defines tool_name as 'Name of the tool to find' and sdk as 'SDK name to search in', adding meaning beyond the schema's titles and types. Compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds the path to a development tool using xcrun, which is a specific verb-resource pair. It distinguishes from siblings like xcrun_run_tool (runs tool) and xcrun_show_sdk_path (shows SDK path).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (e.g., when you need a tool's path) with examples, but does not explicitly state when to use this tool vs alternatives like xcrun_run_tool, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcrun_run_toolC
Run a development tool via xcrun.
Args: tool_name: Name of the tool to run args: Arguments to pass to the tool sdk: SDK to use when running the tool verbose: Enable verbose output
Returns: Output from the tool
| Name | Required | Description | Default |
|---|---|---|---|
| tool_name | Yes | ||
| args | Yes | ||
| sdk | No | ||
| verbose | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It mentions running a tool and returning output but omits critical behavioral traits such as potential side effects, permissions, or error behavior, which is especially important for a command execution tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise and structured with Args and Returns sections. However, it may be too sparse, missing useful details like example usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool executes arbitrary commands, the description lacks important context such as common tools, error handling, and when to use it. The presence of an output schema slightly reduces the need to explain return values, but overall completeness is low.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must add meaning. It provides basic explanations for each parameter (e.g., 'Name of the tool to run'), which is minimal but does add value beyond the schema's type-only information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a development tool via xcrun, which is a specific verb and resource. However, it does not differentiate from sibling tools like xcrun_find_tool, which could cause confusion for an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. With siblings like xcrun_find_tool and xcrun_show_sdk_path, explicit usage context would help, but it is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcrun_show_sdk_pathA
Show the path to the SDK.
Args: sdk: SDK name (e.g., 'iphoneos', 'macosx'). Uses default if not specified.
Returns: Path to the SDK
| Name | Required | Description | Default |
|---|---|---|---|
| sdk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It explains the parameter's default behavior and return value, which adds value beyond the schema. However, it does not disclose any permissions or side effects, but for a read-only tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise with three sentences: one for purpose, one for parameter, and one for return. It front-loads the key information without unnecessary verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and an existing output schema, the description covers the parameter and return value sufficiently. No additional context is needed for this simple lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds examples ('iphoneos', 'macosx') and explains the default behavior, which compensates for the 0% schema description coverage. It provides meaningful guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Show the path to the SDK' with a specific verb and resource. It is distinct from siblings like xcrun_show_sdk_version, but it does not explicitly differentiate itself, which is acceptable for such a simple tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like xcrun_show_sdk_version or xcrun_find_tool. The description lacks context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xcrun_show_sdk_versionA
Show the version of the SDK.
Args: sdk: SDK name (e.g., 'iphoneos', 'macosx'). Uses default if not specified.
Returns: Version of the SDK
| Name | Required | Description | Default |
|---|---|---|---|
| sdk | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes a read-only operation without side effects, but does not mention prerequisites (e.g., Xcode required) or error handling. It is adequate but not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: three lines covering purpose, parameter, and return value. Every sentence is informative and there is no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and an output schema, the description covers the parameter and return. It could mention what the default SDK is (e.g., current Xcode's default), but overall it is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate. It provides examples ('iphoneos', 'macosx') and explains the default behavior ('uses default if not specified'), adding meaningful context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly says 'Show the version of the SDK' with a specific verb and resource. The name distinguishes it from siblings like xcrun_show_sdk_path, but the description does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like xcodebuild_show_sdks or xcrun_show_sdk_path. The description only states the parameter usage, not context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xctrace_exportB
Export data from an Instruments trace file.
Args: input_file: Path to the .trace file to export from output_path: Path to save the exported data toc: Export table of contents xpath: XPath expression to select specific data
Returns: Exported data or success message
| Name | Required | Description | Default |
|---|---|---|---|
| input_file | Yes | ||
| output_path | No | ||
| toc | No | ||
| xpath | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool exports data but does not disclose behavioral traits such as whether it is destructive, authorization requirements, or error handling. The return value is vaguely described as 'Exported data or success message.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear lead sentence followed by a parameter list. Each sentence serves a purpose, though the parameter descriptions are minimal. It is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters, required input_file, and no annotations, the description is incomplete. It lacks information on error conditions, environment prerequisites (e.g., Instruments installation), and behavioral details like file size limits. The presence of an output schema mitigates the need for return value details, but overall context is insufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description provides basic explanations for each parameter (e.g., 'Path to the .trace file to export from'). These add meaning beyond the schema's bare titles but lack details like format constraints or relationships.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Export data from an Instruments trace file,' specifying the verb (export) and the resource (Instruments trace file). This distinguishes it from sibling tools like xctrace_import, xctrace_list, and xctrace_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or context. Sibling tools exist (e.g., xctrace_import, xctrace_record), but no differentiation is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xctrace_importC
Import a supported file format into an Instruments trace file.
Args: input_file: Path to the input file to import (e.g., .logarchive, .ktrace) template: Template name or path to use for import output_path: Path to save the imported trace file instrument: Name of instrument to add to import configuration package: Path to Instruments Package to install temporarily
Returns: Import result
| Name | Required | Description | Default |
|---|---|---|---|
| input_file | Yes | ||
| template | Yes | ||
| output_path | No | ||
| instrument | No | ||
| package | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It only states 'Import a supported file format' without mentioning side effects (e.g., file overwrites), required permissions, or the nature of the return value. The return is vaguely described as 'Import result'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a front-loaded purpose followed by an Args block. Every sentence serves a purpose, though the Args section could be more compact. No unnecessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters (2 required), no annotations, and no output schema shown, the description covers the core action and parameters but lacks context on when to use, behavioral constraints, and return format. It is adequate but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates with brief parameter explanations (e.g., input_file examples, template as name/path). These add meaning beyond the schema but are shallow (e.g., no details on template sources or instrument constraints).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Import' and the resource 'Instruments trace file', distinguishing it from sibling tools like xctrace_export and xctrace_list. However, it lacks specificity on supported formats, only giving examples in the parameter description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidelines are provided. The description does not indicate when to use this tool versus alternatives (e.g., when to import vs. record or export), and there is no mention of prerequisites or limitations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xctrace_listA
List available devices, templates, or instruments.
Args: list_type: What to list ('devices', 'templates', 'instruments')
Returns: List of requested items
| Name | Required | Description | Default |
|---|---|---|---|
| list_type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must disclose behavior. It only states the function and return type, but does not mention idempotency, safety, authorization needs, or side effects. A read-only hint is implied but not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus an Args/Returns block. No extraneous text, front-loaded purpose, and efficiently structured. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one parameter and an existing output schema, the description explains the param and return type. It omits potential constraints like requiring Xcode or offline mode, but for a simple list tool this is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must explain the parameter. 'list_type' is described with allowed values ('devices', 'templates', 'instruments'), adding meaning beyond the schema's bare string type. Could optionally note the default if any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists 'devices', 'templates', or 'instruments', specifying the verb 'list' and the resource categories. It distinguishes from siblings like xctrace_record (recording) and xcodebuild_list (Xcode build lists) by explicitly naming the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., xcodebuild_list for Xcode-related listings). The description lacks explicit context for selection, such as prerequisites or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xctrace_recordA
Record a new Instruments trace using the specified template.
Args: template: Template name or path to use for recording output_path: Path to save the trace file device: Device name or UDID to record on time_limit: Time limit for recording (e.g., '5s', '1m') all_processes: Record all processes on the system attach_process: Process name or PID to attach to launch_command: Command and arguments to launch and record
Returns: Recording result
| Name | Required | Description | Default |
|---|---|---|---|
| template | Yes | ||
| output_path | No | ||
| device | No | ||
| time_limit | No | ||
| all_processes | No | ||
| attach_process | No | ||
| launch_command | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description fails to disclose behavioral traits such as whether recording starts immediately, required permissions, or side effects. Only a minimal return type 'Recording result' is mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear first sentence and a bullet list for parameters. Every sentence adds information without unnecessary text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters and no annotations, the description covers basic parameter meanings but lacks information on output schema details, error cases, and usage context. Incomplete given the complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description adds value by explaining each parameter (e.g., time_limit with examples). However, details like format constraints are missing for some parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool records an Instruments trace using a specified template. It distinguishes from sibling xctrace tools (export, import, list, symbolicate) by its unique action and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like xctrace_export or xctrace_list. No when-not or prerequisite information provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
xctrace_symbolicateB
Symbolicate a trace file using debug symbols.
Args: input_file: Path to the .trace file to symbolicate output_path: Path to save the symbolicated trace dsym_path: Path to dSYM file or directory containing dSYMs
Returns: Symbolication result
| Name | Required | Description | Default |
|---|---|---|---|
| input_file | Yes | ||
| output_path | No | ||
| dsym_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the use of debug symbols but fails to mention side effects (e.g., file creation), required permissions, or what happens if dSYM is missing. Limited behavioral context beyond the obvious.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise, one sentence for the main purpose plus a clear list of parameters. No unnecessary words, all information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return value need not be explained. However, the description lacks usage guidelines and behavioral details. It is minimally adequate for a simple tool but leaves gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds basic meaning to all three parameters (input_file, output_path, dsym_path). However, it could be more detailed (e.g., file format, how output_path defaults). It improves upon the schema but not substantially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Symbolicate' and resource 'trace file', clearly distinguishing it from sibling tools like xctrace_export or xctrace_record.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives, no prerequisites or context provided. The description simply states what it does without any usage restrictions or recommendations.
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.
15 tool updates
v0.1.0- First observed
xcodebuild_archive - First observed
xcodebuild_build - First observed
xcodebuild_list - First observed
xcodebuild_show_destinations - First observed
xcodebuild_show_sdks - First observed
xcodebuild_test - First observed
xcrun_find_tool - First observed
xcrun_run_tool - First observed
xcrun_show_sdk_path - First observed
xcrun_show_sdk_version - First observed
xctrace_export - First observed
xctrace_import - First observed
xctrace_list - First observed
xctrace_record - First observed
xctrace_symbolicate
TDQS
Scored across 15 tools
Tools are clearly separated by domain prefixes (xcodebuild_, xcrun_, xctrace_) and within each group have distinct, non-overlapping purposes. For example, xcodebuild_archive builds a standalone archive while xcodebuild_build compiles the project, and xcrun_find_tool locates a tool versus xcrun_run_tool executes it.
All tool names follow a consistent snake_case pattern with a category prefix and a descriptive verb (e.g., xcodebuild_archive, xcrun_find_tool, xctrace_record). Multi-word verbs are compound but still uniform. No mixing of conventions.
With 15 tools, the set covers the primary Xcode development workflows (building, archiving, testing, running command-line tools, and profiling) without being excessive. Each tool has a defined purpose and the count feels appropriate for the server's domain.
The tool surface covers major Xcode operations: building, archiving, testing, SDK queries, xcrun utilities, and Instruments recording. Minor gaps exist, such as missing xcodebuild clean or analyze, and limited xcrun actions (e.g., no simctl), but the core workflows are complete and agents can work around these omissions.
Maintenance
Related MCP Connectors
Build, run, and inspect iOS apps in disposable hosted Simulators from cloud coding agents.
Agentic CI operations for build inspection, failure diagnosis, and runner troubleshooting.
Run App Store Connect from your IDE: pricing, listings, screenshots, releases, AI visibility.
Proof and repair for Apple coding agents: validate Swift, run Xcode evidence, and repair failures.
Related MCP Servers
- AlicenseBqualityCmaintenanceProvides programmatic access to Xcode functionality, enabling AI assistants to create, build, test, and manage iOS/macOS projects directly.335 npm5MIT
- AlicenseBqualityDmaintenanceEnables 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.523 npm1MIT
- AlicenseAqualityFmaintenanceProvides structured access to iOS Simulator management via xcrun simctl commands, enabling device, app, media, and testing operations through natural language.151MIT
- AlicenseAqualityDmaintenanceProvides Xcode build, test, and package management operations through the Model Context Protocol.49 npmMIT