关于 xcodeproj-mcp-server
xcodeproj-mcp-server 是一个 MCP 服务,用 Swift 读写 Xcode 项目文件(.xcodeproj)。它面向 AI 助手和其他 MCP 客户端,可在不打开 Xcode 的情况下完成项目的创建与修改。底层基于 tuist/xcodeproj 库处理项目文件。
主要功能
- 01创建新的 Xcode 项目
- 02管理 target、文件与构建配置
- 03查看项目结构与 group 层级
- 04修改构建设置并添加依赖与框架
- 05添加 App Extension 并嵌入宿主应用
适用场景
- 01脚本化生成包含多个 target 的项目骨架
- 02将新建的 Swift 文件加入指定 target 的编译源
- 03为 target 添加 SwiftLint 等构建阶段
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露一组用于操作 .xcodeproj 的工具,如 create_xcodeproj、add_file 和 add_target。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm ghcr.io/giginet/xcodeproj-mcp-server本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/giginet/xcodeproj-mcp-serverstdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
xcodeproj-mcp-server
一个使用 Swift 操作 Xcode 项目文件(.xcodeproj)的 Model Context Protocol(MCP)服务。

概述
xcodeproj-mcp-server 是一个 MCP 服务,提供以编程方式操作 Xcode 项目文件的工具。它利用 tuist/xcodeproj 库可靠地操作项目文件,并使用 swift-sdk 实现 Model Context Protocol。
此服务使 AI 助手和其他 MCP 客户端能够:
- 创建新的 Xcode 项目
- 管理目标、文件和构建配置
- 检查项目结构,包括组和层级
- 修改构建设置
- 添加依赖项和框架
- 自动执行常见的 Xcode 项目任务
使用场景
项目创建和设置
- 从头创建项目:生成具有自定义配置、捆绑包标识符和组织设置的新 Xcode 项目,无需打开 Xcode
- 多目标项目脚手架:通过单个自动化工作流,设置包含多个应用、框架、测试和扩展的复杂项目
开发工作流自动化
- 向目标添加新文件:创建新的 Swift 文件后,自动将其添加到相应目标的源文件中以供编译
- 添加文件夹引用:将外部资源文件夹或资源目录作为同步文件夹引用添加到项目中,自动反映文件系统中的任何更改
- 添加构建阶段:将代码格式化工具、代码检查工具或自定义构建脚本集成到目标中(例如,执行 SwiftLint、SwiftFormat 的阶段)
- 创建框架和应用扩展:快速搭建新的框架目标或应用扩展,以实现代码库模块化
- 添加 Widget 扩展:自动创建并嵌入 Widget Extension 目标,并进行适当配置,以支持 iOS 主屏幕小组件
项目配置管理
- 自动配置 Info.plist:以编程方式为不同目标配置 Info.plist 设置、权利和配置描述文件
- 构建配置管理:设置不同的构建配置,并配置适当的编译器标志、捆绑包标识符和部署目标
- 依赖项管理:添加系统框架、链接库并配置目标依赖项,无需手动在 Xcode 中导航
如何为 Claude Desktop 和 Claude Code 进行设置
前提条件
- macOS(用于运行 Xcode 项目)
- 容器运行时 — 可选择 Apple 的
container(推荐)或 Docker
此服务以 linux/arm64 容器镜像的形式分发,可在任一运行时中运行。
使用 Apple 的 container 进行设置(推荐)
container 是 Apple 自家的工具,可在 macOS 上以轻量级虚拟机的形式运行 Linux 容器。它是此服务推荐使用的运行时:由 Apple 提供,无需第三方桌面应用,并可在 Apple 芯片上原生运行已发布的 linux/arm64 镜像。
要求
- 配备 Apple silicon 的 Mac
- macOS 26 或更高版本(
container不支持更早的版本)
安装
从官方发布页面安装 container CLI。
container 需要后台服务处于运行状态。安装后启动一次,每次重启后也要再次启动:
container system start
然后从 GitHub Container Registry 拉取预构建镜像:
container image pull ghcr.io/giginet/xcodeproj-mcp-server:latest
container run 没有 --pull 选项,因此每次想更新到最新镜像时,都要再次运行 container image pull。
Claude Code 配置
claude mcp add xcodeproj -- container run --rm -i -v '${CLAUDE_PROJECT_DIR:-.}:/workspace' ghcr.io/giginet/xcodeproj-mcp-server:latest /workspace
这会将项目目录挂载到容器内的 /workspace,让服务能够访问你的 Xcode 项目。请保留单引号:这样可以避免 shell 在注册时展开挂载路径,让 Claude Code 每次启动服务时再解析该路径,而不是固定到你运行 claude mcp add 时所在的目录。若无法解析,它会回退到 .,即 Claude Code 启动服务时所在的工作目录,也就是项目根目录。
Claude Desktop 配置
将以下内容添加到 Claude Desktop 配置文件:
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"xcodeproj": {
"command": "/usr/local/bin/container",
"args": [
"run",
"--rm",
"-i",
"-v",
"${workspaceFolder}:/workspace",
"ghcr.io/giginet/xcodeproj-mcp-server",
"/workspace"
]
}
}
}
安装程序会将二进制文件放在 /usr/local/bin/container。此处使用绝对路径,因为 GUI 应用的 PATH 不一定包含该目录。
在本地构建镜像
container build 会读取同一个 Dockerfile:
container build -t xcodeproj-mcp-server:local .
构建器容器默认使用 2 个 CPU 和 2 GB 内存。为其分配更多资源可以加快发布构建:
container build -c 8 -m 8g -t xcodeproj-mcp-server:local .
使用 Docker 进行设置
如果你使用的是 macOS 15 或更早版本,或者 Docker 已经是你工作流的一部分,请使用 Docker。
从 GitHub Container Registry 拉取预构建的 Docker 镜像:
docker pull ghcr.io/giginet/xcodeproj-mcp-server
Claude Code 配置
claude mcp add xcodeproj -- docker run --pull=always --rm -i -v '${CLAUDE_PROJECT_DIR:-.}:/workspace' ghcr.io/giginet/xcodeproj-mcp-server:latest /workspace
与 container 一样,项目目录会挂载到容器内的 /workspace,以便服务访问你的 Xcode 项目;单引号则可确保挂载路径在 Claude Code 启动服务前不会展开。
Claude Desktop 配置
将以下内容添加到 Claude Desktop 配置文件:
macOS:~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"xcodeproj": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-v",
"${workspaceFolder}:/workspace",
"ghcr.io/giginet/xcodeproj-mcp-server",
"/workspace"
]
}
}
}
在 Xcode 中通过 Claude Code 或 Codex 使用该服务
Xcode 可以将 Claude Code 和 Codex 作为编码 Agent 运行,并从 ~/Library/Developer/Xcode/CodingAssistant 下按 Agent 区分的子文件夹读取它们的配置。Xcode 专门使用此文件夹。放在这里的配置仅在你通过 Xcode 启动 Agent 时生效,因此不会影响常规的 ~/.claude 或 ~/.codex 设置。详情请参阅 Apple 的扩展和自定义 Agent。
与命令行设置相比,有两点不同:
- Xcode 会以项目目录作为工作目录启动 MCP 服务,因此直接挂载
.。Codex 没有与 Claude Code 的${CLAUDE_PROJECT_DIR:-.}等效的展开方式,因此这样可以让两个 Agent 使用相同的挂载路径。 command需要使用绝对路径,因为 Agent 的环境不一定会将/usr/local/bin包含在PATH中。
在 Xcode 中使用 Claude Code
~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig 充当 Claude Code 的配置目录。将 CLAUDE_CONFIG_DIR 指向该目录,然后使用 claude mcp add:
CLAUDE_CONFIG_DIR=~/Library/Developer/Xcode/CodingAssistant/ClaudeAgentConfig \
claude mcp add xcodeproj -s user -- \
/usr/local/bin/container run --rm -i -v .:/workspace ghcr.io/giginet/xcodeproj-mcp-server:latest /workspace
这会将服务写入 ClaudeAgentConfig/.claude.json。如果要手动添加,请在 mcpServers 下添加一项:
{
"mcpServers": {
"xcodeproj": {
"type": "stdio",
"command": "/usr/local/bin/container",
"args": [
"run",
"--rm",
"-i",
"-v",
".:/workspace",
"ghcr.io/giginet/xcodeproj-mcp-server:latest",
"/workspace"
]
}
}
}
Xcode 中的 Codex
~/Library/Developer/Xcode/CodingAssistant/codex 充当 Codex 的 CODEX_HOME:
CODEX_HOME=~/Library/Developer/Xcode/CodingAssistant/codex \
codex mcp add xcodeproj -- \
/usr/local/bin/container run --rm -i -v .:/workspace ghcr.io/giginet/xcodeproj-mcp-server:latest /workspace
这会将服务写入 codex/config.toml。若要手动添加:
[mcp_servers.xcodeproj]
command = "/usr/local/bin/container"
args = ["run", "--rm", "-i", "-v", ".:/workspace", "ghcr.io/giginet/xcodeproj-mcp-server:latest", "/workspace"]
如果使用 Docker 进行设置,请使用 docker 二进制文件的绝对路径替代 /usr/local/bin/container。更改配置后,请在 Xcode 中重启 Agent。
Claude Code 推荐设置
在 .claude/settings.json 中启用 ENABLE_TOOL_SEARCH 可激活动态 MCP 工具加载。这样可以避免未使用的 MCP 工具占用上下文。
{
"env": {
"ENABLE_TOOL_SEARCH": "1"
}
}
路径安全
MCP 服务现在支持将文件操作限制在特定的基础目录中。提供基础路径作为命令行参数时:
- 所有
project_path和文件路径参数都会相对于此基础路径解析 - 系统会验证绝对路径,确保其位于基础目录内
- 任何访问基础目录之外文件的尝试都会报错
这在容器或其他沙箱环境中运行服务时尤其有用。
可用工具
项目管理
-
create_xcodeproj- 创建新的 Xcode 项目- 参数:
project_name、path、organization_name、bundle_identifier
- 参数:
-
list_targets- 列出项目中的所有目标- 参数:
project_path
- 参数:
-
list_build_configurations- 列出所有构建配置- 参数:
project_path
- 参数:
-
list_files- 列出特定目标中的所有文件- 参数:
project_path、target_name
- 参数:
-
list_groups- 列出项目中的所有组及其层级路径,可按目标筛选- 参数:
project_path、target_name(可选)
- 参数:
文件操作
-
add_file- 将文件添加到项目- 参数:
project_path、file_path、target_name、group_path
- 参数:
-
remove_file- 从项目中移除文件- 参数:
project_path、file_path
- 参数:
-
move_file- 在项目中移动或重命名文件- 参数:
project_path、source_path、destination_path
- 参数:
-
add_synchronized_folder- 向项目添加同步文件夹引用- 参数:
project_path、folder_path、group_name、target_name
- 参数:
-
create_group- 在项目导航器中创建新组- 参数:
project_path、group_name、parent_group_path
- 参数:
目标管理
-
add_target- 创建新目标- 参数:
project_path、target_name、type、platform、bundle_identifier
- 参数:
-
remove_target- 移除现有目标- 参数:
project_path、target_name
- 参数:
-
duplicate_target- 复制现有目标- 参数:
project_path、source_target_name、new_target_name
- 参数:
-
add_dependency- 在目标之间添加依赖关系- 参数:
project_path、target_name、dependency_name
- 参数:
App Extension 管理
-
add_app_extension- 添加 App Extension 目标,并将其嵌入宿主应用- 参数:
project_path、extension_name、extension_type、host_target_name、bundle_identifier、platform(可选)、deployment_target(可选) - 支持的扩展类型:
widget、notification_service、notification_content、share、today、action、file_provider、intents、intents_ui、keyboard、photo_editing、document_provider、custom
- 参数:
-
remove_app_extension- 移除 App Extension 目标及其在宿主应用中的嵌入- 参数:
project_path、extension_name
- 参数:
构建配置
-
get_build_settings- 获取目标的构建设置- 参数:
project_path、target_name、configuration_name
- 参数:
-
set_build_setting- 修改构建设置- 参数:
project_path、target_name、setting_name、value、configuration_name
- 参数:
-
add_framework- 添加框架依赖项- 参数:
project_path、target_name、framework_name、embed
- 参数:
-
add_build_phase- 添加自定义构建阶段- 参数:
project_path、target_name、phase_type、name、script
- 参数:
Swift 包管理
-
add_swift_package- 向项目添加 Swift Package 依赖项- 参数:
project_path、package_url、requirement、target_name、product_name
- 参数:
-
list_swift_packages- 列出项目中的所有 Swift Package 依赖项- 参数:
project_path
- 参数:
-
remove_swift_package- 从项目中移除 Swift Package 依赖项- 参数:
project_path、package_url、remove_from_targets
- 参数:
许可证
本项目采用 MIT 许可证。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。