Public leaderboard

Public assessment

r-huijts/xcode-mcp-server (xcode-mcp-server)

xcode-mcp-server · v1.0.0 · scanned

What changed in the harness

Selection accuracy 100→100, token cost up 17%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

21.7 / 30

21.7 out of 30
03Economics

19.7 / 20

19.7 out of 20
04Discoverability

11.1 / 20

11.1 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

18 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
set_projects_base_dir
name_restates_behavior no_return_description
Configures the root directory under which the server stores and looks up Xcode projects, affecting where later project operations search. Returns a confirmation that the base directory was set, or an error if the path is invalid.
set_project_path
name_restates_behavior no_return_description
Switches the active Xcode project used for subsequent operations to the project at the given .xcodeproj path. Returns a confirmation that the project was activated, or an error if the path is invalid.
get_active_project
no_return_description
Returns detailed information about the currently active Xcode project so callers can confirm which project later operations will target.
read_file
name_restates_behavior no_return_description
Returns the contents of the file at the given path within the active Xcode project, allowing callers to inspect project sources before editing. Accepts a path relative to the project or an absolute path.
write_file
no_return_description
Writes the provided content to a file in the active Xcode project, creating it first when createIfMissing is true and the file does not yet exist. Returns a confirmation that the file was written, or an error if the write failed.
list_project_files
name_restates_behavior no_return_description
Returns the list of files contained in the Xcode project at the given .xcodeproj path, optionally filtered to those matching the specified fileType extension, so callers can discover the project's source files.
analyze_file
name_restates_behavior no_return_description
Runs Xcode's static analyzer on the source file at the given path to detect potential bugs and issues before building. Returns the analysis results, including any warnings or errors found.
build_project
name_restates_behavior no_return_description
Compiles the active Xcode project with the given configuration and scheme, surfacing any build errors. Returns the build result, including warnings and errors, so callers know whether the build succeeded.
run_tests
no_return_description
Runs the tests of the active Xcode project, optionally limited to the named test plan. Returns the test results, including passed, failed, and skipped tests.
run_xcrun
no_return_description
Invokes the named Xcode tool via xcrun, forwarding the optional arguments. Returns the tool's standard output and exit status so callers can act on the result.
list_simulators
name_restates_behavior no_return_description
Returns all iOS simulators available on this machine with their details, including UDIDs and states, by invoking xcrun simctl list --json. Use the returned UDIDs with the simulator boot and shutdown operations.
boot_simulator
name_restates_behavior no_return_description
Starts the iOS simulator with the given UDID so it is running and available for app installs and launches. Returns a confirmation that the simulator booted, or an error if it could not be booted.
shutdown_simulator
no_return_description
Stops the active iOS simulator with the given UDID. Returns a confirmation that the simulator was shut down, or an error if the shutdown failed.
compile_asset_catalog
name_restates_behavior no_return_description
Compiles the asset catalog at catalogPath into compiled assets saved to outputDir, ready to be bundled into an app. Returns the result of the compilation, including any errors, so callers know whether it succeeded.
run_lldb
params_unexplained no_return_description
Starts the LLDB debugger, passing the optional lldbArgs, which are command-line flags and options that control the debugging session (such as attaching to a process or executing commands). Returns the debugger's output and session result.
trace_app
no_return_description
Records a performance trace of the application binary at appPath for the specified duration in seconds using xctrace, so callers can analyze runtime behavior. Returns the trace data or the location of the generated trace.
swift_package_update
name_restates_behavior no_return_description
Refreshes the dependencies of the current Swift package to their latest allowed versions by invoking swift package update. Returns the update output, indicating which packages were updated and any errors.
list_directory
name_restates_behavior no_return_description
Returns the files and subdirectories contained in the directory at the given path, so callers can explore the filesystem.

Selection evidence

Confusable tool pairs.

3 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
set_projects_base_dir set_project_path medium Both tools configure a project location and take only a path/directory argument. A natural task like "set the directory for my Xcode projects" or "update the project path settings" is ambiguous about whether the user means the container base directory for all projects or the specific .xcodeproj path, so the agent could pick the wrong one.
read_file analyze_file medium Both operate on a single file inside the project. Vague task verbs like "inspect", "review", or "check this file" do not reveal whether the user wants the file contents (read_file) or a static-analysis pass for issues (analyze_file), so an agent reading only the descriptions could select the wrong tool.
run_xcrun run_lldb medium Both are generic executors with overlapping "run" semantics. A task like "run LLDB" or "execute the debugger" could be satisfied either by run_lldb directly or by run_xcrun with tool="lldb", since lldb is an Xcode command-line tool; the agent cannot reliably disambiguate which wrapper the user intends without more context.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard