Skip to main content
Glama
README.md
# MCP Xcode Server

An MCP (Model Context Protocol) server that provides tools for interacting with Xcode projects programmatically.

## Installation

Clone this repository:

```bash
git clone https://github.com/chacebot/mcp-xcode-server.git
cd mcp-xcode-server
npm install
```

Or install from a local directory:

```bash
cd /path/to/mcp-xcode-server
npm install
```

## Features

This server provides the following tools for Xcode project management:

- **xcode_read_project** - Read and parse Xcode project files
- **xcode_list_schemes** - List all build schemes in a project
- **xcode_list_targets** - List all targets in a project
- **xcode_add_test_target** - Add a test target to a project
- **xcode_configure_test_target** - Configure a test target for a project
- **xcode_add_file_to_target** - Add files to project targets
- **xcode_remove_file_from_target** - Remove files from project targets
- **xcode_list_files_in_target** - List all files in a target
- **xcode_build** - Build Xcode projects
- **xcode_test** - Run tests in Xcode projects
- **xcode_get_build_settings** - Get build settings
- **xcode_get_build_errors** - Get and parse build errors
- **xcode_clean** - Clean build artifacts
- **xcode_validate_project** - Validate project structure and check for issues

## Quick Start

1. **Install dependencies:**
   ```bash
   npm install
   ```

2. **Configure your MCP client** (Claude Desktop, Cursor, etc.):
   ```json
   {
     "mcpServers": {
       "xcode": {
         "command": "node",
         "args": ["/absolute/path/to/mcp-xcode-server/src/index.js"],
         "env": {}
       }
     }
   }
   ```

3. **Restart your MCP client** to load the server

4. **Start using Xcode tools** through your AI assistant!

See [QUICKSTART.md](./QUICKSTART.md) for a 5-minute setup guide, or [SETUP.md](./SETUP.md) for detailed instructions.

## Usage

### As an MCP Server

Configure this server in your MCP client configuration. For example, in Claude Desktop or Cursor:

```json
{
  "mcpServers": {
    "xcode": {
      "command": "node",
      "args": ["/path/to/mcp-xcode-server/src/index.js"],
      "env": {}
    }
  }
}
```

### Standalone Testing

You can test the server directly:

```bash
npm start
```

The server communicates via stdio using the MCP protocol.

## Requirements

- Node.js 18+
- Xcode command-line tools installed
- Access to Xcode projects

## Tools Reference

### xcode_read_project

Read and parse an Xcode project file to extract its structure.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file

**Example:**
```json
{
  "name": "xcode_read_project",
  "arguments": {
    "projectPath": "/path/to/Project.xcodeproj"
  }
}
```

### xcode_list_schemes

List all build schemes available in the project.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file

### xcode_list_targets

List all targets in the project.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file

### xcode_add_test_target

Add a new test target to the project. Note: This currently provides instructions rather than directly modifying the pbxproj file, as that requires careful parsing and manipulation.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `targetName` (optional): Name for the test target (defaults to ProjectNameTests)

### xcode_add_file_to_target

Add a file to a specific target in the project.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `filePath` (required): Relative path to the file from project root
- `targetName` (required): Name of the target

### xcode_build

Build the Xcode project using xcodebuild.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `scheme` (optional): Build scheme name
- `configuration` (optional): Debug or Release (default: Debug)

### xcode_test

Run tests in the Xcode project.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `scheme` (optional): Test scheme name

### xcode_get_build_settings

Get build settings for the project or a specific scheme.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `scheme` (optional): Scheme name
- `configuration` (optional): Debug or Release (default: Debug)

### xcode_clean

Clean build artifacts from the project.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `scheme` (optional): Build scheme name

### xcode_remove_file_from_target

Remove a file from an Xcode project target.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `filePath` (required): Relative path to the file from project root
- `targetName` (required): Name of the target

### xcode_get_build_errors

Get build errors from the last build attempt. Parses xcodebuild output to extract error messages.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `scheme` (optional): Build scheme name

### xcode_list_files_in_target

List all files in a specific target.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file
- `targetName` (required): Name of the target

### xcode_validate_project

Validate Xcode project structure and check for common issues like missing targets, schemes, or configuration problems.

**Parameters:**
- `projectPath` (required): Path to the .xcodeproj file

## Limitations

- The pbxproj parser is simplified and may not handle all edge cases
- Adding targets/files requires careful manipulation of the pbxproj format
- Some operations may require Xcode to be installed and properly configured

## Future Improvements

- Full pbxproj parser using a proper library (e.g., `xcode` npm package)
- Better error handling and validation
- Support for Xcode workspaces (.xcworkspace)
- Support for Swift Package Manager integration
- Support for modifying build settings
- Support for managing code signing

## Contributing

1. Fork the repository
2. Create a feature branch: `git checkout -b feature/my-feature`
3. Commit your changes: `git commit -am 'Add some feature'`
4. Push to the branch: `git push origin feature/my-feature`
5. Submit a pull request

## License

MIT - see [LICENSE](./LICENSE) file for details