xc-mcp
Mac上Swift开发的详尽MCP服务器。在模拟器、物理设备和Mac本身上构建、测试、运行和调试iOS和macOS应用程序,使用200个工具进行项目操作、LLDB调试、UI自动化、仪器分析、内存诊断、崩溃符号化、公证、本地化、图标组合和SwiftUI预览捕获。
我开始研究这个问题是因为我尝试过的每一个类似的MCP都崩溃了,或者更糟糕的是,破坏了复杂项目的配置(多个目标、多个平台、依赖类型的混合)。我还认为,如果它是用Swift而不是TypeScript或Python编写的,那就太好了。
小心点
这个项目 快速迭代要达到这一点,必须解决相当复杂的问题,这既令人放心,也令人不安。有很好的linting和强大的测试,包括实际的开源Swift项目的夹具,但没有真正的QA过程。与任何代理工作一样,在发布kraken之前,确保您的文件已提交或以其他方式备份。
建立在
- \_显示提示 --项目文件操作
- modelcontextprotocol/swift-sdk --MCP实施
- 本土的
xcodebuild,simctl,devicectl,lldb,以及xctrace--常见的嫌疑人
______________________________________________________________________
里面有什么
九种工具类别。使用单片服务器来处理所有事情,或者混合使用集中式服务器来降低令牌开销。
| 类别 | 工具 | 它的作用 | |
|---|---|---|---|
| 1 | 调试 | 24 | LLDB会话、内存诊断、崩溃符号、视图边界 |
| 2 | macOS构建 | 14 | 构建、测试、运行、截图、覆盖率、分析 |
| 3 | 模拟器 | 25 | 构建、运行、截图、触摸/手势自动化、日志 |
| 4 | 设备 | 9 | 在物理iOS设备上构建、部署和测试 |
| 5 | 项目管理 | 58 | 完整的.xcodeproj操作——目标、组、包、方案、测试计划 |
| 6 | 图标组成 | 9 | 创建和编辑图标编辑器 .icon 捆绑包,通过渲染 ictool |
| 8 | 本地化 | 24 | 完全CRUD .xcstrings 文件——密钥、翻译、覆盖率 |
| 9 | 会话和实用程序 | 12 | 自动检测、环境、Xcode同步、公证、版本管理 |
再加上中描述的一些跨领域功能 显著权力.
______________________________________________________________________
安装
自制(推荐)
brew tap toba/tap
brew install xc-mcp来源
git clone https://github.com/toba/xc-mcp.git
cd xc-mcp
swift build -c release配置
克劳德代码:
# With Homebrew
claude mcp add xc-mcp -- $(brew --prefix)/bin/xc-mcp
# From source
claude mcp add xc-mcp -- /path/to/xc-mcp/.build/release/xc-mcp克劳德桌面版 --添加到 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"xc-mcp": {
"command": "/opt/homebrew/bin/xc-mcp"
}
}
}对于Intel Mac,请使用 /usr/local/bin/xc-mcp 相反。
需求
- macOS 15+
- Xcode(for
xcodebuild,simctl,devicectl) - 某些工具需要macOS隐私权限——请参阅 权限
______________________________________________________________________
多服务器架构
使用所有工具运行单个服务器,或使用集中服务器来减少令牌开销。每个工具都在 xc-mcp;聚焦服务器是严格的子集。
| 服务器 | 工具 | 令牌 | 其中包含什么 |
|---|---|---|---|
xc-mcp | 187 | ~30K | 一切 |
xc-project | 61 | ~9K | .xcodeproj操作 |
xc-build | 44 | ~7K | macOS构建、分析、发现、诊断、图标、版本控制、公证 |
xc-simulator | 29 | ~5K | 模拟器+UI自动化+模拟器日志 |
xc-debug | 28 | ~4K | LLDB、内存诊断、崩溃符号、屏幕截图 |
xc-strings | 24 | ~3K | .xcstring本地化 |
xc-swift | 15 | ~3K | SPM、swiftformat、swiftlint、诊断、覆盖率 |
xc-device | 14 | ~3K | 物理iOS设备 |
Configuration presets
// Minimal (~9K tokens) — project editing only
{
"mcpServers": {
"xc-project": { "command": "/opt/homebrew/bin/xc-project" }
}
}
// Standard (~19K tokens) — project + simulator + build
{
"mcpServers": {
"xc-project": { "command": "/opt/homebrew/bin/xc-project" },
"xc-simulator": { "command": "/opt/homebrew/bin/xc-simulator" },
"xc-build": { "command": "/opt/homebrew/bin/xc-build" }
}
}
// Full (~27K tokens) — all capabilities
{
"mcpServers": {
"xc-project": { "command": "/opt/homebrew/bin/xc-project" },
"xc-simulator": { "command": "/opt/homebrew/bin/xc-simulator" },
"xc-device": { "command": "/opt/homebrew/bin/xc-device" },
"xc-debug": { "command": "/opt/homebrew/bin/xc-debug" },
"xc-swift": { "command": "/opt/homebrew/bin/xc-swift" },
"xc-build": { "command": "/opt/homebrew/bin/xc-build" }
}
}______________________________________________________________________
显著权力
有几件事值得一提,因为它们不寻常、不明显,或者是这个项目存在的原因。
截图任何macOS应用程序窗口 — screenshot_mac_window 使用ScreenCaptureKit按应用程序名称、捆绑包ID或标题捕获任何窗口。无需模拟器。配对 debug_view_borders 查看布局问题。
语义化macOS UI自动化 --The interact_* 工具使用辅助功能API单击“保存”而不是像素坐标。转储UI树、单击按钮、读取值、导航菜单、键入文本。适用于任何正在运行的macOS应用程序。
SwiftUI预览截图 — preview_capture 提取物 #Preview 拦截、生成临时主机应用程序、构建并启动它、截图和清理。处理可合并库、SPM传递依赖关系、中的本地包 Packages/,以及导致编译器崩溃的嵌套结构预览。
MCP上的完整LLDB --由伪TTY支持的持久会话。断点在工具调用中仍然存在。完整调试器减去GUI。
在运行中的应用程序上绘制视图边框 — debug_view_borders 注入彩色 CALayer 通过LLDB将边界添加到每个视图中。无代码更改,无重启。
存储器诊断 --包装材料 leaks, heap, vmmap, stringdups,以及 malloc_history --埋在Developer目录中的那些大多数人都不知道存在。LLM是 *特别* 擅长这些,因为输出是密集的、重复的,并且需要有人(某事?)来总结。
一个呼叫设备部署 — build_deploy_device 构建→ stop → 安装→ 在一次工具调用中启动。没有四步舞。
Xcode状态同步 — sync_xcode_defaults 从Xcode的用户状态读取您的活动方案并运行目标。打开一个项目,选择你的方案,让代理继承它。
图标编辑器捆绑包 --满 .icon 无需打开Icon Composer即可创建和编辑捆绑包——图层、填充、玻璃效果、暗模式。通过渲染 ictool.
未使用代码检测 --包装材料 外围。返回一个持久的清单,代理可以在清理时标记出来。
动态工具工作流程 — manage_workflows 在运行时启用或禁用工具类别,这样当您只需要六个工具时,187个工具就不会都放在上下文中。
______________________________________________________________________
类别详细信息
下面的每一节都描述了一个突出显示的工具类别,然后扩展到完整的工具参考。
______________________________________________________________________
调试
24个工具。由伪TTY支持的LLDB会话——断点在工具调用中存活,快速连接/分离不会挂起。加上独立的内存诊断和崩溃符号,适用于任何正在运行的进程。
Build & attach
| 工具 | 说明 |
|---|---|
build_debug_macos | 在LLDB下构建并启动macOS应用程序。处理沙盒和强化运行时应用程序:符号链接框架和重写安装名称 |
debug_attach_sim | 将LLDB附加到模拟器上的应用程序 |
debug_detach | 分离调试器并结束会话 |
debug_process_status | 获取当前进程状态 |
Breakpoints, watchpoints & execution
| 工具 | 说明 |
|---|---|
debug_breakpoint_add | 添加断点(按符号或文件:行) |
debug_breakpoint_remove | 按ID删除断点 |
debug_watchpoint | 添加、删除或列出观察点 |
debug_continue | 继续执行 |
debug_step | 介入、结束、退出或按指示行事 |
Inspection
| 工具 | 说明 |
|---|---|
debug_stack | 打印堆栈跟踪 |
debug_variables | 打印局部变量 |
debug_threads | 列出线程,可选择切换 |
debug_evaluate | 计算表达式-- po, pSwift或ObjC |
debug_memory | 以十六进制、字节、ASCII或反汇编读取内存 |
debug_symbol_lookup | 按地址、名称或类型查找符号 |
debug_view_hierarchy | 转储实时UI视图层次结构,检查自动布局约束 |
debug_view_borders | 通过LLDB在所有视图上切换彩色边框 |
debug_lldb_command | 执行任意LLDB命令 |
Memory diagnostics
独立的CLI包装器——通过PID或捆绑包ID处理任何正在运行的进程。
| 工具 | 说明 |
|---|---|
memory_leaks | 通过以下方式检测泄漏 leaks --计数、大小、回溯 |
memory_heap | 通过以下方式检查堆 heap --按类别、大小或计数排序的对象 |
memory_vmmap | 通过虚拟内存映射 vmmap --脏/干净/按区域交换 |
memory_stringdups | 通过以下方式复制字符串 stringdups --浪费的字节 |
memory_malloc_history | 地址的分配回溯(需要 MallocStackLogging=1) |
symbolicate_address | 通过以下方式将地址转换为符号 atos --批量支持 |
______________________________________________________________________
macOS构建和屏幕截图
14个工具。构建、测试、运行、截图macOS应用程序。覆盖率报告、性能基线、启动分析和构建诊断。
All tools
| 工具 | 说明 |
|---|---|
screenshot_mac_window | 通过ScreenCaptureKit捕获任何macOS窗口——按应用程序名称、捆绑包ID或标题匹配 |
build_macos | 构建macOS应用程序 |
build_run_macos | 构建并运行 |
launch_mac_app | 启动macOS应用程序 |
stop_mac_app | 停止macOS应用程序 |
get_mac_app_path | 获取构建应用程序的路径 |
test_macos | 运行测试 |
start_mac_log_cap | 通过统一日志记录开始捕获日志 |
stop_mac_log_cap | 停止并返回日志结果 |
get_test_attachments | 从中提取测试附件 .xcresult 捆包 |
sample_mac_app | 通过以下方式示例调用堆栈 /usr/bin/sample |
profile_app_launch | 构建、启动、示例启动调用堆栈 |
get_coverage_report | 按目标代码覆盖率 .xcresult 捆包 |
get_file_coverage | 按功能覆盖率深入分析 |
get_performance_metrics | 提取物 measure(metrics:) 定时数据 |
set_performance_baseline | 创建 .xcbaseline 用于回归检测的plists |
show_performance_baselines | 以人类可读的形式读取现有基线 |
diagnostics | 清理构建并收集所有警告、错误和lint违规行为 |
SwiftUI预览捕获 (1个工具):
| 工具 | 说明 |
|---|---|
preview_capture | 提取物 #Preview,构建临时主机应用程序,启动,截图,清理。处理可合并库、跨项目deps、本地Swift包、嵌套结构预览 |
______________________________________________________________________
模拟器
25个工具。模拟器管理、构建和运行以及基于协调的触摸自动化 simctl io.
Simulator management
| 工具 | 说明 |
|---|---|
list_sims | 列出可用模拟器 |
boot_sim | 启动模拟器 |
open_sim | 打开模拟器.app |
build_sim | 为模拟器构建 |
build_run_sim | 构建并运行 |
install_app_sim | 安装应用程序 |
launch_app_sim | 启动应用程序 |
stop_app_sim | 停止应用程序 |
get_sim_app_path | 获取已安装的应用程序路径 |
test_sim | 运行测试 |
record_sim_video | 录制视频 |
launch_app_logs_sim | 启动和捕获日志 |
erase_sims | 重置模拟器 |
set_sim_location | 设置模拟位置 |
reset_sim_location | 重置位置 |
set_sim_appearance | 亮/暗模式 |
sim_statusbar | 覆盖状态栏 |
Touch & gesture automation
| 工具 | 说明 |
|---|---|
tap | 点击坐标 |
long_press | 长按坐标 |
swipe | 在点之间滑动 |
gesture | 命名预设-- scroll_up, pull_to_refresh, swipe_from_left_edge等等。根据屏幕尺寸计算的坐标 |
type_text | 键入文本 |
key_press | 按硬件键 |
button | 按下硬件按钮 |
screenshot | 拍摄模拟器截图 |
______________________________________________________________________
设备
9个工具。物理iOS设备管理,包括一个呼叫部署管道。
All tools
| 工具 | 说明 |
|---|---|
list_devices | 列出已连接的设备 |
build_device | 为设备构建 |
install_app_device | 在设备上安装 |
launch_app_device | 在设备上启动 |
stop_app_device | 停止应用程序--通过以下方式将捆绑包ID解析为PID devicectl |
get_device_app_path | 获取已安装的应用程序路径 |
test_device | 在设备上运行测试 |
deploy_device | 停下→ 安装→ 发布(构建后) |
build_deploy_device | 构建→ stop → 安装→ 发射(完整管道) |
______________________________________________________________________
项目管理
58个工具。满的 .xcodeproj 操作——目标、组、文件、方案、测试计划、Swift包、同步文件夹、构建阶段、文档类型、URL类型。在XcodeProj库中,没有 xcodebuild 需要。
Files & groups
| 工具 | 说明 |
|---|---|
add_file | 添加文件--句柄 .icon, .xcassets,以及xcodeproj目录上方的文件 |
remove_file | 删除文件 |
move_file | 移动或重命名 |
list_files | 列出目标中的文件--枚举已同步的文件夹,尊重成员资格例外 |
create_group | 创建组 |
remove_group | 删除组 |
rename_group | 按斜线分隔的路径重命名 |
list_groups | 列出所有组 |
Targets
| 工具 | 说明 |
|---|---|
create_xcodeproj | 创建新项目 |
scaffold_ios_project | 具有工作区+SPM架构的iOS项目 |
scaffold_macos_project | 具有工作区+SPM架构的macOS项目 |
list_targets | 列出所有目标 |
add_target | 创建目标 |
remove_target | 删除目标 |
rename_target | 就地重命名--更新产品名称、设置、deps、方案 |
duplicate_target | 复制目标 |
add_dependency | 添加目标间依赖关系 |
add_app_extension | 添加应用扩展目标 |
remove_app_extension | 删除应用程序扩展目标 |
scaffold_module | 一次调用创建框架模块——目标+测试目标+同步文件夹+dep+嵌入+测试计划 |
Build settings & phases
| 工具 | 说明 |
|---|---|
list_build_configurations | 列出配置 |
get_build_settings | 获取目标的构建设置 |
set_build_setting | 修改构建设置 |
add_framework | 添加框架依赖关系 |
remove_framework | 删除框架--清理链接+嵌入阶段 |
add_build_phase | 添加自定义构建阶段 |
add_copy_files_phase | 创建副本文件构建阶段 |
add_to_copy_files_phase | 将文件添加到“复制文件”阶段 |
list_copy_files_phases | 列出复制文件阶段 |
remove_copy_files_phase | 删除复制文件阶段 |
validate_project | 检查嵌入设置、重复嵌入、缺少deps |
Schemes & test plans
| 工具 | 说明 |
|---|---|
create_scheme | 创建 .xcscheme 具有构建、测试和启动操作 |
rename_scheme | 重命名 .xcscheme 文件 |
validate_scheme | 检查目标参考、测试计划、配置 |
create_test_plan | 生成 .xctestplan 从目标 |
add_target_to_test_plan | 将测试目标添加到计划中 |
remove_target_from_test_plan | 从计划中删除 |
set_test_plan_target_enabled | 启用/禁用而不删除 |
set_test_plan_skipped_tags | 设置跳过的测试标签 |
add_test_plan_to_scheme | 将计划添加到方案的TestAction中 |
remove_test_plan_from_scheme | 从方案中删除计划 |
list_test_plans | 查找全部 .xctestplan 文件 |
set_test_target_application | 设置UI测试的目标应用程序 |
Swift packages
| 工具 | 说明 |
|---|---|
add_swift_package | 添加远程(URL+版本)或本地包 |
list_swift_packages | 列出包依赖关系 |
remove_swift_package | 移除包装+可选的产品目录 |
add_package_product | 将包装产品添加到目标 |
remove_package_product | 移除包装产品 |
list_package_products | 列出产品 |
Synchronized folders
| 工具 | 说明 |
|---|---|
add_synchronized_folder | 添加文件夹引用 |
remove_synchronized_folder | 删除文件夹引用 |
add_target_to_synchronized_folder | 与其他目标共享文件夹 |
remove_target_from_synchronized_folder | 取消文件夹与目标的链接 |
add_synchronized_folder_exception | 从目标中排除文件 |
remove_synchronized_folder_exception | 删除排除 |
list_synchronized_folder_exceptions | 列出所有排除项 |
Document types & URL schemes
| 工具 | 说明 |
|---|---|
list_document_types | 列表 CFBundleDocumentTypes |
manage_document_type | 添加、更新或删除文档类型 |
list_type_identifiers | 列出UTI声明 |
manage_type_identifier | 添加、更新或删除UTI |
list_url_types | 列出URL方案 |
manage_url_type | 添加、更新或删除URL方案 |
______________________________________________________________________
图标组成
9个工具。创建和编辑苹果图标编辑器 .icon 捆绑——具有填充、玻璃效果、阴影、半透明和暗模式变体的多层图标。通过以下方式渲染为PNG ictool.使用正确的代码添加到Xcode项目中 lastKnownFileType.
All tools
| 工具 | 说明 |
|---|---|
create_icon | 创建 .icon 来自PNG的bundle——填充、效果、暗模式、可选的Xcode项目连接 |
export_icon | 渲染 .icon 通过PNG ictool --平台、再现、大小、比例、色调 |
read_icon | 检查捆绑包——清单摘要、资产列表、原始JSON |
add_icon_layer | 将图像层添加到现有捆绑包中——新建组或附加到现有组中 |
remove_icon_layer | 删除层或组--自动清除未引用的资产 |
set_icon_fill | 设置背景--实心、自动渐变、线性渐变或透明 |
set_icon_effects | 配置组效果——镜面反射、阴影、半透明、模糊、照明 |
set_icon_layer_position | 调整图层或组的比例和偏移 |
set_icon_appearances | 深色/有色模式填充专业化 |
______________________________________________________________________
Swift软件包
12个工具。SPM操作、格式化、linting和未使用代码检测。
All tools
| 工具 | 说明 |
|---|---|
swift_package_build | 构建Swift包 |
swift_package_test | 运行测试 |
swift_package_run | 运行可执行文件 |
swift_package_clean | 清理构建工件 |
swift_package_list | 列出依赖关系 |
swift_package_stop | 停止运行可执行文件 |
swift_format | 快速运行格式--支持dry_Run |
swift_lint | 运行swiftlint--支持修复模式 |
swift_diagnostics | 清理构建并收集所有编译器警告和lint违规 |
detect_unused_code | 通过查找未使用的代码 外围 --摘要、细节或检查表格式 |
get_coverage_report | 按目标覆盖率 .xcresult |
get_file_coverage | 按功能覆盖率深入分析 |
swift_symbols | 搜索Swift符号 |
______________________________________________________________________
本地化
24个工具。苹果的完整CRUD .xcstrings 格式——密钥、翻译、覆盖率统计、过时密钥检测。批处理操作是原子操作。
Read operations
| 工具 | 说明 |
|---|---|
xcstrings_list_keys | 列出所有密钥 |
xcstrings_list_languages | 列出所有语言 |
xcstrings_list_untranslated | 语言的未翻译密钥 |
xcstrings_list_stale | 提取状态为“陈旧”的密钥 |
xcstrings_get_source_language | 获取源语言 |
xcstrings_get_key | 获取密钥的翻译 |
xcstrings_check_key | 检查密钥是否存在 |
xcstrings_check_coverage | 特定密钥的覆盖范围 |
xcstrings_batch_check_keys | 检查多个钥匙 |
xcstrings_stats_coverage | 总体覆盖统计 |
xcstrings_stats_progress | 语言的进步 |
xcstrings_batch_stats_coverage | 覆盖多个文件 |
xcstrings_batch_list_stale | 多个文件中的过期密钥 |
Write operations
| 工具 | 说明 |
|---|---|
xcstrings_create_file | 新建 .xcstrings 文件 |
xcstrings_add_translation | 添加单个翻译 |
xcstrings_add_translations | 为一个键添加多个翻译 |
xcstrings_batch_add_translations | 以原子方式为多个键添加翻译 |
xcstrings_update_translation | 更新单个翻译 |
xcstrings_update_translations | 为一个密钥更新多个 |
xcstrings_batch_update_translations | 以原子方式更新多个密钥 |
xcstrings_rename_key | 重命名密钥 |
xcstrings_delete_key | 删除密钥和所有翻译 |
xcstrings_delete_translation | 删除单个翻译 |
xcstrings_delete_translations | 删除多个翻译 |
______________________________________________________________________
会话和实用程序
12个工具。从工作目录中自动检测项目路径——服务器从 cwd 寻找 Package.swift, .xcodeproj,或 .xcworkspace.
Session management
| 工具 | 说明 |
|---|---|
set_session_defaults | 设置默认项目、方案、模拟器、设备、配置、环境变量。Env-vars深度合并并应用于所有命令 |
show_session_defaults | 显示当前默认值 |
clear_session_defaults | 清除所有默认值 |
sync_xcode_defaults | 从Xcode的IDE状态读取活动方案并运行目标 |
manage_workflows | 在运行时启用/禁用工具类别 |
Discovery
| 工具 | 说明 |
|---|---|
discover_projs | 发现项目和工作空间 |
list_schemes | 列出所有方案 |
show_build_settings | 显示方案的生成设置 |
get_app_bundle_id | iOS/watchOS/tvOS应用程序的捆绑ID |
get_mac_bundle_id | macOS应用程序的捆绑ID |
list_test_plan_targets | 方案测试计划中的测试目标 |
Distribution & diagnostics
| 工具 | 说明 |
|---|---|
clean | 清洁制造产品 |
doctor | 诊断Xcode环境——Xcode、CLT、SDK、DeriveData、会话 |
search_crash_reports | 搜索 ~/Library/Logs/DiagnosticReports/ 最近的撞车事故 |
version_management | 通过以下方式读取/设置/碰撞营销版本和构建数字 agvtool |
notarize | 完整的公证流程——提交、等待、检查、记录、装订 |
validate_asset_catalog | 验证 .xcassets 通过 actool |
open_in_xcode | 在Xcode中打开文件或项目,可以选择行号 |
Instruments
| 工具 | 说明 |
|---|---|
xctrace_list | 列出仪器模板、仪器或设备 |
xctrace_record | 启动/停止仪器跟踪记录 |
xctrace_export | 出口 .trace 数据为XML |
Logging
| 工具 | 说明 |
|---|---|
start_sim_log_cap | 开始捕获模拟器日志 |
stop_sim_log_cap | 停止并返回结果 |
start_device_log_cap | 开始捕获设备日志 |
stop_device_log_cap | 停止并返回结果 |
______________________________________________________________________
macOS权限
某些工具需要通过以下方式授予macOS隐私权限 系统设置>隐私和安全:
| 权限 | 工具 | 注释 |
|---|---|---|
| 无障碍 | interact_* 工具 | AXUIElement API必需 |
| 屏幕录制 | screenshot_mac_window | ScreenCaptureKit需要 |
macOS将这些授权给 负责任的过程 --位于流程树顶部的GUI应用程序,而不是 xc-mcp 本身。所以 克劳德桌面版, VS代码/光标,或你的 终端模拟器 需要许可。这 xc-mcp 二进制文件不会出现在系统设置中——TCC总是解析到父GUI应用程序。
生成输出解析
测试工具解析两者 XCTest 和 快速测试 输出格式,提取具有测试名称、持续时间和失败详细信息的结构化通过/失败结果。处理并行输出、回溯转义函数名、SF符号前缀和故障摘要。
测试
826个测试——使用内存夹具和模拟运行器进行快速单元测试,以及构建和截图真实开源项目的集成测试。
# Unit tests (fast, no Xcode projects needed)
swift test
# Integration tests (requires fixture repos)
./scripts/fetch-fixtures.sh # ~1 minute, idempotent
swift test --filter Integration路径安全
当提供基路径作为命令行参数时,所有文件操作都仅限于该目录。
许可证
MIT许可证。看 许可证 了解详情。
