Xcode MCP Server
# Xcode MCP Server
<p align="center">
<strong>A Model Context Protocol server for building Xcode projects directly from LLM applications</strong>
</p>
The Xcode MCP Server provides a Model Context Protocol interface for building and testing Xcode projects. It enables AI assistants to directly trigger builds, run tests, monitor progress, and access logs through a standardized interface.
## Features
- Build Xcode projects with custom schemes and configurations
- Run unit tests with granular control (run specific tests or skip tests)
- Generate code coverage reports
- Stream build and test logs in real-time
- Access detailed build and test reports
- JSON-formatted output
- Automatic log persistence
## Requirements
- Node.js 16+
- Xcode Command Line Tools
- TypeScript
- MCP-compatible client (e.g., Claude Desktop)
## Installation
```bash
# Clone the repository
git clone https://github.com/PolarVista/Xcode-mcp-server.git
cd xcode-mcp-server
# Install dependencies
npm install
# Build the server
npm run build
```
## Usage with Claude Desktop
1. Start the server:
```bash
npm run start /path/to/build/logs/directory
```
2. In Claude Desktop settings:
``` "xcode-build": {
"command": "node",
"args": ["/path/to/the/xcode-mcp-server/build/index.js",
"/path/to/your/project/folder"],
"env": {
"PATH": "/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin"
}
```
## Available Tools
### build_project
Builds an Xcode project with specified parameters.
Parameters:
- `projectPath` (required): Path to the .xcodeproj or .xcworkspace
- `scheme` (required): Build scheme name
- `configuration` (optional): Build configuration (Debug/Release, defaults to Debug)
- `destination` (optional): Build destination (defaults to "platform=iOS Simulator,name=iPhone 15 Pro")
Example usage in Claude:
```typescript
build_project({
projectPath: "/path/to/Project.xcodeproj",
scheme: "MyApp",
configuration: "Debug"
})
```
### run_tests
Runs unit tests with optional filtering.
Parameters:
- `projectPath` (required): Path to the .xcodeproj or .xcworkspace
- `scheme` (required): Test scheme name
- `testIdentifier` (optional): Specific test to run (e.g., 'MyTests/testExample')
- `skipTests` (optional): Array of test identifiers to skip
- `configuration` (optional): Build configuration (Debug/Release, defaults to Debug)
- `destination` (optional): Test destination (defaults to "platform=iOS Simulator,name=iPhone 15 Pro")
Example usage in Claude:
```typescript
run_tests({
projectPath: "/path/to/Project.xcodeproj",
scheme: "MyAppTests",
testIdentifier: "LoginTests/testSuccessfulLogin",
skipTests: ["PerformanceTests/testLargeDataLoad"],
configuration: "Debug"
})
```
## Logs
- All logs are stored in the specified base directory under `build-logs/`
- Build operations create:
- Plain text log (`build-[timestamp].log`)
- JSON-formatted log (`build-[timestamp].log.json`)
- Xcode report (`report-[timestamp].txt`)
- Test operations create:
- Test log (`test-[timestamp].log`)
- JSON-formatted log (`test-[timestamp].log.json`)
- Test report (`test-report-[timestamp].txt`)
- Code coverage report (`coverage-[timestamp].txt`)
- Latest log (build or test) is accessible via the `xcode-build://latest-log` resource
TDQS
Scored across 18 tools
Most tools have distinct purposes, but there is some overlap between list_directory and list_project_files, as both list files, though one is general and the other project-specific. Tools like analyze_file and trace_app are clearly differentiated for static analysis vs. performance tracing.
All tool names follow a consistent verb_noun pattern using snake_case, such as analyze_file, boot_simulator, and build_project. There are no deviations in naming style, making the set predictable and easy to parse.
With 18 tools, the count is slightly high but reasonable for an Xcode server covering project management, building, testing, debugging, and simulator operations. It might feel a bit heavy, but each tool appears to serve a specific function in the domain.
The toolset provides good coverage for Xcode workflows, including project setup, building, testing, debugging, and simulator control. Minor gaps might include tools for code signing or managing provisioning profiles, but core operations are well-represented.