使用说明
MCP macOS控制
Swift内置的本地macOS MCP(模型上下文协议)服务器,提供 74工具 用于全面的计算机控制——鼠标、键盘、屏幕捕获、OCR、窗口管理、视觉分析、CoreML智能、可访问性树读取、通过AXObserver的事件驱动UI等待、通过NSWorkspace的应用程序生命周期事件等待,以及 iPhone镜像自动化 通过macOS Sequoia。
概述
MCP macOS Control使AI代理能够感知macOS应用程序并与之交互,并通过iPhone镜像在连接的iPhone上感知iOS应用程序。所有处理都在使用本机Apple框架的设备上进行。
关键能力:
- 通过CoreGraphics事件实现完全的鼠标和键盘自动化
- 带有OCR文本提取的屏幕截图(Vision框架)
- 带归一化坐标的iPhone镜像控制(macOS 15+)
- 通过AXUIElement API读取辅助功能树
- 设备上CoreML LLM推理(零云令牌)
- 实时屏幕监控,可连续捕获
- 多显示器支持
- 速率限制、结构化日志记录和CI/CD
需求
- macOS 13.0(Ventura)或更高版本(适用于iPhone镜像的macOS 15)
- 苹果硅或英特尔Mac(推荐苹果硅)
- Swift 5.9+/Xcode 16+
- MCP SDK 0.12.0+
安装
git clone https://github.com/aerocristobal/MCP-MacOSControl.git
cd MCP-MacOSControl
swift build -c release
可执行文件位于 .build/release/mcp-macos-control.
Claude桌面配置
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"macos-control": {
"command": "/path/to/MCP-MacOSControl/.build/release/mcp-macos-control"
}
}
}
权限
macOS需要明确的权限:
- 无障碍 (系统设置>隐私和安全>辅助功能)--鼠标、键盘、窗口激活和辅助功能树都需要
- 屏幕录制 (系统设置>隐私和安全>屏幕录制)-截图、OCR和连续捕获所需
看 docs/PERMISSIONS.md 详细设置。
安全
威胁模型、AppleScript denylist、审计记录模式和NIST SP 800-53控制映射已上线 docs/SECURITY.md.漏洞应通过私人GitHub安全咨询报告——见该文档第6节。
协作工具调用取消(STORY-027)。 服务器向MCP致敬 notifications/cancelled 消息。五个长时间运行的工具将取消传播到其资源拆卸路径-- wait_for_ui_event (AXObserver注销), wait_for_element_state (轮询循环在一个周期内退出), wait_for_app_event (NSWorkspace观察者移除), smart_interact (在层中止、层跳过之间),以及 run_applescript (osascript SIGTERM,1000毫秒后SIGKILL升级)。SIGTERM到服务器通过相同的路径消耗每个正在进行的呼叫。看 文件/证券.md§5 对于整张桌子。
供应链控制(STORY-021,见§8)。 每次推拉请求:
- 生成一个CycloneDX 1.5+SBOM(通过Syft),覆盖每个可传递的Swift包。
- 运行Grype SBOM扫描+GitHub对SBOM的原生依赖性审查。
- 基于CVSS≥9.0(关键)的发现失败;CVSS 7.0–8.9(高)通过PR评论发出警告,但未被屏蔽。
- 执行许可证允许列表:MIT、Apache-2.0、BSD-2条款、BSD-3条款、ISC。
标记的发布将SBOM(以及VEX文档,如果存在声明)作为证据工件附加到GitHub发布中。Dependabot每月打开Swift包,每周在GitHub Actions上针对同一关卡升级PR。政策在 .github/sbom-policy.yml.
合规性工件
下游SSP作者、评估员和持续监控消费者的机器可读合规状态。所有三个工件都在中进行了版本控制 oscal/ 并在每次推送时根据NIST OSCAL模式进行验证。
| 人工制品 | OSCAL模型 | 目的 |
|---|---|---|
oscal/component-definition.json |
OSCAL 1.1.2组件定义 | 镜像 docs/SECURITY.md §7/§8控制实施,包括 rel:implementation 和 rel:verification 链接到源代码和测试。按照022层进行维护。 |
oscal/plan-of-action-and-milestones.json |
OSCAL 1.1.2 POA&M | 每个已接受的风险声明中有一个未结项目 docs/SECURITY.md §4,加上历史上已关闭的项目。每个项目都包含状态、所有者、相关控制和里程碑。UUID注册表: oscal/poam-id-allocations.md根据故事-037进行维护。 |
oscal/assessment-results.json |
OSCAL 1.1.2评估结果 | 从STORY-024审计记录流中得出的持续监测观察结果。每个审计记录一次观察。仅添加;nightly emission作业在不重写先前观测值的情况下修改新的观测值。审计记录↔ 观测测绘: oscal/assessment-results-mapping.md根据故事-037进行维护。 |
漂移之间 docs/SECURITY.md OSCAL伪影通过以下方式双向执行 swift run oscal-drift check --CI在以下任何一项上失败:没有OSCAL的§7/§8控制索赔 implemented-requirement,一个OSCAL implemented-requirement §7/§8未提及,§4接受的风险声明没有匹配的开放式POA&M项目 security-md-section 不再存在。
工具(共75个,16个模块)
鼠标控制(鼠标模块——9个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
click_screen |
单击坐标(左/右/中) | x,y |
double_click |
在坐标 | x,y处双击 |
move_mouse |
移动光标 | x,y |
mouse_down |
按住鼠标键 | -- |
mouse_up |
松开鼠标按钮 | -- |
drag_mouse |
在两点之间拖动 | 从_x、从_y、到_x、到_y |
scroll |
沿某个方向滚动 | |
get_screen_size |
获取屏幕分辨率 | -- |
list_displays |
列出所有连接的显示器 | -- |
键盘控制(键盘模块——4个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
type_text |
在光标处键入文本 | text |
press_keys |
按键组合(例如。, [["cmd", "c"]]) |
按键 |
key_down |
按住键 | 键 |
key_up |
释放一个键 |
屏幕捕获和OCR(屏幕捕获模块——2个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
take_screenshot |
将屏幕或窗口捕获为PNG | -- |
take_screenshot_with_ocr |
截图+文本提取 | -- |
窗口管理(WindowModule-2个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
list_windows |
列出所有打开的窗口 | -- |
activate_window |
将窗口置于前台 | title_pattern |
连续捕获(连续捕获模块——6个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
start_continuous_capture |
开始实时捕获 | capture_type |
stop_continuous_capture |
停止捕获会话 | -- |
get_capture_frame |
获取最新帧 | -- |
list_capturable_displays |
列出可用显示 | -- |
list_capturable_windows |
列出可捕获的窗口 | -- |
list_capturable_applications |
列出正在运行的应用 | -- |
视觉分析(视觉模块——5个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
classify_image |
场景/对象分类 | image_data |
detect_objects |
使用边界框进行对象检测 | image_data |
detect_rectangles |
矩形/UI元素检测 | image_data |
detect_saliency |
注意区域检测 | image_data |
detect_faces |
人脸检测 | image_data |
CoreML智能(CoreMLModule——8个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
list_coreml_models |
列出可用型号 | -- |
load_coreml_model |
推理加载模型 | 名称、路径 |
unload_coreml_model |
卸载型号 | 名称 |
get_model_info |
模型元数据 | 名称 |
generate_text_llm |
在设备文本生成 | model_name时,提示 |
analyze_screen_with_llm |
屏幕+视觉+LLM | 型号名称,说明 |
intelligent_screen_summary |
基于NLP的屏幕摘要 | -- |
extract_key_info |
从OCR | OCR_results中提取实体 |
实时分析(实时模块——4个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
analyze_screen_now |
快速捕捉+视觉分析 | -- |
start_screen_monitoring |
连续分析 | -- |
get_monitoring_results |
最新分析结果 | -- |
stop_screen_monitoring |
停止监视 | -- |
系统(系统模块——3个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
check_permissions |
检查辅助功能和屏幕录制 | -- |
wait_milliseconds |
暂停执行 | 毫秒 |
wait_for_text |
轮询OCR,直到出现文本 | 文本 |
可访问性(可访问性模块-5个工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
accessibility_tree |
阅读macOS应用程序的AXUIElement树 | -- |
click_element |
按语义AX属性单击元素 | -- |
perform_ax_action |
发送任何标准AX操作(AXPress、AXIncrement、AXShowMenu等) | -- |
find_elements |
查找与语义谓词匹配的元素 | -- |
element_at_position |
解析屏幕坐标 | x,y下的AX元素 |
返回结构化JSON,其中包含每个UI元素的角色、标题、值、位置、大小和子元素。可配置的 max_depth (默认值6)。注意:仅适用于macOS应用程序——iPhone镜像内容需要 iphone_screenshot_with_ocr.
事件驱动等待(WaitForUIEventModule-1工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
wait_for_ui_event |
订阅 AXObserver 通知并阻止,直到它触发 |
通知,应用程序 |
用精确的事件驱动同步取代固定的睡眠和屏幕截图轮询循环。支持的通知: AXWindowCreated, AXUIElementDestroyed, AXFocusedUIElementChanged, AXValueChanged, AXSelectedTextChanged, AXTitleChanged, AXMainWindowChanged, AXFocusedWindowChanged.同一电话上有多个并发呼叫 (application, notification) 配对共享一个基础 AXObserver默认超时30秒,硬上限300秒。请参阅 ax_observer_notifications MCP提示路由指引。
元素状态轮询(WaitForElementStateModule-1工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
wait_for_element_state |
轮询AX树,直到元素与状态条件 | 应用程序条件匹配 |
有记录的回退到 wait_for_ui_event 对于没有 AXObserver 通知(按钮启用,微调器消失,行被选中)。条件语法为 "<field> = <value>".Boolean字段: enabled, exists, focused, selected, expanded, visible_in_viewport, is_main, is_minimized, is_frontmost (例如。 enabled = true, exists = false).字符串字段: value (精确、区分大小写、引用——例如。 value = 'Connected').固定100ms轮询节奏(用覆盖 MCP_MACOS_CONTROL_POLL_INTERVAL_MS).默认超时30秒,硬上限120秒——更适合长时间事件驱动的等待 wait_for_ui_event.
应用程序生命周期事件(WaitForAppEventModule-1工具)
| 工具 | 描述 | 必需参数 |
|---|---|---|
wait_for_app_event |
订阅NSWorkspace应用程序生命周期通知并阻止,直到它触发 | 事件 |
事件驱动的排序方式“打开应用程序”→ 应用程序已准备就绪→ “交互”工作流。与 wait_for_ui_event (AXObserver,需要一个已经运行的AX可查询目标),这是预启动功能,不需要访问权限。支持的活动: launched, activated, terminated, deactivated, hidden, unhidden.可选 bundle_identifier (反向DNS,例如。 com.apple.TextEdit)过滤到一个应用程序;省略它以解决任何应用程序中的下一个匹配事件。仅解决 下一个 过渡,而非现状。同一设备上有多个并发呼叫 (event, bundle_identifier) 共享一个潜在的观察者。默认超时30秒,硬上限300秒。请参阅 interaction_hierarchy MCP提示何时更喜欢它 wait_for_ui_event.
交互路由器(SmartInteractionModule-1工具)-- 建议用于AI代理
| 工具 | 描述 | 必需参数 |
|---|---|---|
smart_interact |
陈述意图(click/type)以及一个目标;路由器自动选择并通过AX语义→ AppleScript→ 命中测试→ 坐标图层 |
意图 |
UI交互的推荐入口点。 而不是在两者之间做出选择 click_element, run_applescript, element_at_position,以及 click_screen 你自己,陈述你的 意图 并让路由器选择最可靠的可用层。它查询每个应用程序的功能注册表,跳过目标应用程序已知失败的层,并返回 decision_log 记录每一层尝试、跳过或失败的情况(并说明原因),以及 interaction_method 和 confidence当耗尽时,它返回结构化错误 all_layers_failed 带有重试建议。路由器只知道动作 派遣,而不是其效果——在采取行动后进行验证 wait_for_ui_event / wait_for_element_state。请参阅 interaction_hierarchy MCP提示。
iPhone镜像(iPhone镜像模块——21个工具)
需要配置了iPhone镜像的macOS 15(Sequoia)。所有坐标都使用相对于iPhone屏幕内容区域的归一化0.0-1.0范围。
| 工具 | 描述 | 必需参数 |
|---|---|---|
iphone_status |
检查镜像状态和连接 | -- |
iphone_launch |
启动/激活iPhone镜像 | -- |
iphone_calibrate |
力含量校正重新校准 | -- |
iphone_tap |
在归一化坐标 | x,y处点击 |
iphone_double_tap |
双击 | x,y |
iphone_long_press |
长按时间 | x,y |
iphone_swipe |
轻松地在曲线内向外滑动 | start_x、start_y、end_x、end_y |
iphone_scroll |
滚轮事件 | -- |
iphone_type_text |
通过剪贴板粘贴文本 | 文本 |
iphone_clear_text |
全选+删除 | -- |
iphone_press_key |
发送密钥事件 | 密钥 |
iphone_home |
转到主屏幕(Cmd+1) | -- |
iphone_app_switcher |
打开应用程序切换器(Cmd+2) | -- |
iphone_spotlight |
打开聚光灯(Cmd+3) | -- |
iphone_screenshot |
捕获iPhone屏幕内容 | -- |
iphone_screenshot_with_ocr |
截图+OCR(标准化坐标) | -- |
iphone_analyze_screen_now |
iPhone屏幕上的视觉分析 | -- |
iphone_analyze_with_llm |
iPhone屏幕+CoreML LLM | 型号名称,说明 |
iphone_open_app |
通过Spotlight按名称打开iOS应用程序 | app_name |
iphone_wait_for_text |
轮询iPhone OCR以获取文本 | 文本 |
iphone_reconnect |
等待镜像重新连接 | -- |
iPhone镜像的工作原理: 服务器检测iPhone镜像窗口,通过视觉矩形检测校准iPhone屏幕内容区域,并将归一化坐标转换为绝对屏幕坐标。滑动手势使用轻松输入输出,轻轻一推即可确保iOS手势识别。文本输入使用剪贴板粘贴来支持通用语言。
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
MCP_MACOS_CONTROL_LOG_LEVEL |
warn |
日志级别:错误、警告、信息、调试、跟踪 |
MCP_MACOS_CONTROL_MAX_INPUT_RATE |
10 |
每秒最大输入事件数 |
MCP_MACOS_CONTROL_OVERRIDES_PATH |
(见下文) | 每个应用程序功能覆盖文件的路径 |
MCP_MACOS_CONTROL_AUDIT_DIR |
~/Library/Logs/com.mcp.macos-control/audit/ |
STORY-024:审核日志目录 |
MCP_MACOS_CONTROL_AUDIT_RETENTION_DAYS |
365 |
STORY-024:记录转移到存档之前的保留窗口 |
MCP_MACOS_CONTROL_AUDIT_REMOTE |
oslog |
故事-024:主机外水槽-- oslog, http,或 syslog |
MCP_MACOS_CONTROL_AUDIT_REMOTE_URL |
(未设置) | 故事-024:需要时 REMOTE=http;必须是 http(s) URL |
MCP_MACOS_CONTROL_AUDIT_ACK_TIMEOUT_MS |
5000 |
STORY-024:每条记录远程确认超时 |
MCP_MACOS_CONTROL_AUDIT_ADMIN_ENABLED |
false |
故事-024:集 true 揭露 force_rotate_unacked MCP工具 |
看 docs/AUDIT-LOG-OPERATIONS.md 对于完整
审计子系统操作员指南(链验证、保留、事件
响应、接收器特定配置)。
每个应用程序的功能覆盖
服务器附带了每个应用程序交互层功能的注册表
(ax_supported, applescript_supported, hit_test_supported)所以智能路由
可以跳过给定应用程序的已知故障层(例如,无法使用的Electron应用程序
可达性树)。已发货的默认值存在于包捆绑包中
(Sources/MacOSControlLib/Router/Defaults/default-app-capabilities.json, ~27
众所周知的应用程序),并通过MCP资源以只读方式公开
mcp://capability-registry/contents (JSON: schema_version + entries[],每
携带a source 的 defaults 或 user_override).
高级用户可以在不重建的情况下对单个条目进行阴影处理。创建:
~/Library/Application Support/mcp-macos-control/app-overrides.json
(或点 MCP_MACOS_CONTROL_OVERRIDES_PATH 在任何路径上)使用相同的模式:
{
"schema_version": 1,
"entries": [
{ "bundle_id": "com.example.app", "ax_supported": true,
"applescript_supported": false, "hit_test_supported": true }
]
}
超控加载为 软故障:跳过格式错误的覆盖文件(
服务器记录结构化 invalid_capability_registry_override 错误并启动
通常使用出厂默认值)。未知的JSON字段被忽略,因此
模式向前兼容。覆盖更改在服务器重新启动时生效
(无热重新加载)。STORY-020使捆绑的默认文件保持最新状态
兼容性目录工作。
建筑
Sources/
MacOSControlLib/ # Library target
ToolModule.swift # ToolModule protocol
ToolRouter.swift # Module registry + dispatch
Errors.swift # MCPError structured errors
Logger.swift # Structured logging
RateLimiter.swift # Token bucket rate limiter
MouseControl.swift # CGEvent mouse automation
KeyboardControl.swift # CGEvent keyboard automation
ScreenCapture.swift # Screenshot capture
OCRProcessor.swift # Vision OCR
WindowManagement.swift # Window list/activate
VisionAnalyzer.swift # Vision framework analysis
CoreMLManager.swift # CoreML model management
ContinuousCaptureManager.swift # ScreenCaptureKit streams
RealtimeAnalyzer.swift # Continuous vision analysis
Accessibility/
AccessibilityTreeBuilder.swift # AXUIElement tree traversal
AXNodeSerializer.swift # JSON shaping + schema_version
AXNode.swift # Tree value type
IPhoneMirroring/
MirroringWindowDetector.swift # Window detection + focus guard
CoordinateTranslator.swift # Content rect calibration + coord translation
GestureEngine.swift # Tap, swipe, scroll gestures
IOSNavigation.swift # Home, Spotlight, App Switcher, open app
IPhoneTextInput.swift # Clipboard paste, key events
Modules/
MouseModule.swift # 9 mouse tools
KeyboardModule.swift # 4 keyboard tools
ScreenCaptureModule.swift # 2 capture tools
WindowModule.swift # 2 window tools
ContinuousCaptureModule.swift # 6 continuous capture tools
VisionModule.swift # 5 vision tools
CoreMLModule.swift # 8 CoreML tools
RealtimeModule.swift # 4 realtime tools
SystemModule.swift # 3 system tools
AccessibilityModule.swift # 1 accessibility tool
IPhoneMirroringModule.swift # 21 iPhone tools
MCP-MacOSControl/
Server.swift # Entry point (33 lines)
Tests/
MCP-MacOSControlTests/ # 178 unit tests
发展
swift build # Debug build
swift build -c release # Release build
swift test # Run the unit suite (integration suite auto-skips)
CI通过GitHub Actions(macOS 15,构建+测试)在每次推送时运行。
集成套件(STORY-012)
一个单独的、可选择的端到端套件(MCP-MacOSControlIntegrationTests)
执行完整的代理工作流程 真实的 macOS应用程序通过真实
ToolRouter --打开/键入/保存、NSWorkspace启动流程、, smart_interact
路由+回退,协调工具向后兼容性,结构化错误
在每个注册代码中签订合同,并进行iPhone镜像烟雾测试。它
需要登录的GUI会话和辅助功能权限,因此它是封闭的
后面 CI_MACOS_INTEGRATION 并在merge上运行 main +每晚,不是
per-PR。如果没有标记,每个场景都会跳过,所以很简单 swift test 停留
绿色。
# Grant Accessibility to the process running swift test first, then:
CI_MACOS_INTEGRATION=true swift test --filter MCP_MacOSControlIntegrationTests
文档
许可证
MIT许可证
致谢
- 与 模型上下文协议 Swift SDK
- 使用苹果的原生框架(CoreGraphics、Vision、CoreML、ScreenCaptureKit、AppKit)