Model Context Protocol server for Xcode build automation and log parsing
XcodeMCP provides 20 well-structured tools with complete JSON schemas and descriptions. However, the server exhibits significant issues that prevent a higher score: (1) Tool naming lacks consistency, some tools use verb_noun pattern (xcode_open_project, xcode_build) but many lack clear action verbs or use redundant prefixes (xcresult_* tools repeat the resource type). (2) Descriptions are generally adequate (80-160 chars) but lack guidance on when to use which tool, prerequisites, and recovery paths. For example, xcode_test has a complex schema with interdependent parameters (selected_tests, selected_test_classes, test_plan_path) but the description does not explain the relationships or when each option applies. (3) Output schemas are completely undocumented, we can see input schemas clearly, but return types and field structures are never specified in the source code, making it impossible for LLMs to plan downstream calls or extract the right data. (4) Error handling is minimal, no error classification, no actionable recovery guidance, no suggestions for alternatives when operations fail. (5) Composition suffers: tools like xcode_build_and_run combine multiple concerns (build + run) that should be separate for agent flexibility. (6) Parameter dependencies are undocumented, xcode_test requires test_plan_path when using selected_tests or selected_test_classes, but this constraint is buried in the description, not explicitly marked as a relationship.
Build a specific Xcode project or workspace with the specified scheme. If destination is not provided, uses the currently active destination. ⏱️ Can take minutes to hours - do not timeout.
Build and run a specific project with the specified scheme. ⏱️ Can run indefinitely - do not timeout.
Clean the build folder for a specific project
Close the currently active Xcode project or workspace (automatically stops any running actions first)
Start debugging session for a specific project. ⏱️ Can run indefinitely - do not timeout.
Get list of projects in the current workspace
Output schemas completely undocumented. Input schemas are well-defined (JSON Schema with types and descriptions), but NO tool documents what it returns. LLMs cannot plan downstream calls or extract the right fields without knowing the response structure.
Undocumented parameter dependencies. xcode_test has mutually exclusive and interdependent parameters (selected_tests, selected_test_classes both require test_plan_path), but these constraints are not explicitly stated. LLMs will pass invalid combinations.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 28 | 2024-11-05+ | v1 |
Get list of available run destinations for a specific project
Get list of available schemes for a specific project
Get information about the currently active Xcode workspace
Open a specific file in Xcode
Open an Xcode project or workspace
Set the active scheme for a specific project
Stop the current scheme action for a specific project
Run tests for a specific project. Optionally run only specific tests or test classes by temporarily modifying the test plan (automatically restored after completion). ⏱️ Can take minutes to hours - do not timeout.
Browse xcresult file - list tests or show specific test details
Get console output for a specific test
Get a screenshot attachment from a test at a specific timestamp
Get the UI hierarchy snapshot for a test at a specific timestamp
List all attachments for a test
Get a quick summary of an xcresult file
Composite tools violate single-responsibility principle. xcode_build_and_run combines build and run operations. Agents need granular control, split into separate tools so agents can compose them as needed.
Naming inconsistency for xcresult tools. Tools like xcresult_browser_get_console and xcresult_list_attachments use verbose prefixes that repeat the resource type. Consider flatter naming: xcode_get_test_console, xcode_list_test_attachments. Current naming forces LLMs to reason about which xcresult_* tool to pick from a crowd.
Descriptions lack context and prerequisites. Many descriptions are functional but do not explain WHEN to use the tool or what must happen first. For example, xcode_open_file does not mention that a project must be open first. xcode_test does not mention test environment requirements or how to find test identifiers.
No error handling guidance. Tools declare risk levels (WRITE, DESTRUCTIVE, READ_ONLY) but provide no actionable error messages, error codes, recovery paths, or suggestions for what to do if a call fails. An agent hitting 'build failed' has no idea what went wrong.
Missing tool annotations. Tools include risk metadata (WRITE, READ_ONLY, DESTRUCTIVE) in comments but do NOT use MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). These hints help agents understand side effects and make safer plans.