无障碍UI控制服务

通过Model Context Protocol暴露AXUIElement API,允许LLMs通过原生无障碍树检查和交互任意运行中应用的UI界面,支持macOS和iOS模拟器。

  • by msorvig
  • Swift
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 msorvig/a11y-mcp

使用说明

11年mcp

macOS辅助功能MCP服务器,通过模型上下文协议公开AXUIElement API。这允许LLM通过本机可访问性树检查任何正在运行的应用程序的UI并与之交互。

也适用于iOS模拟器——模拟器将iOS可访问性元素桥接到其macOS AX树中,因此您可以检查iOS应用程序并与之交互。

需求

  • macOS 13+
  • Swift 6工具链
  • 在“系统设置”>“隐私与安全”>“辅助功能”中授予的辅助功能权限

构建

swift build

二进制文件位于 .build/debug/a11y-mcp.

使用Claude代码

claude mcp add a11y /path/to/a11y-mcp/.build/debug/a11y-mcp

工具

检查

工具 目的
check_accessibility_permission 检查进程是否具有AX信任
list_applications 列出带有PID的正在运行的应用程序
get_accessibility_tree 从给定的根转储元素树
get_element_attributes 获取单个元素的所有属性
find_elements 按角色、头衔、标签或标识符搜索
get_focused_element 获得系统范围内的焦点元素

行动

工具 目的
perform_action 按下按钮、升起车窗、增加滑块
set_attribute_value 设置文本字段值、焦点、位置、大小

元素寻址

AXUIElement引用不能跨工具调用序列化。相反,元素由角色注释路径寻址:

pid:1234                                — app root
pid:1234/0:AXWindow                     — first child (must be AXWindow)
pid:1234/0:AXWindow/3:AXGroup/1:AXButton — nested element

子索引导航;角色验证。如果角色不匹配(因为UI发生了变化),服务器将返回一个描述不匹配的错误,提示重新查询。

典型工作流程

  1. check_accessibility_permission --确认AX信任
  2. list_applications --查找目标应用程序的PID
  3. get_accessibility_tree 随着 pid:<PID> --查看UI结构
  4. find_elements --定位特定的按钮、文本字段等。
  5. perform_action / set_attribute_value --与元素交互

项目结构

Sources/
  AXWrapper/          # Library: AXUIElement wrappers, no MCP dependency
  a11y-mcp/           # Executable: MCP server, tool handlers
    Tools/            # One file per tool