# ui_perform_action

Find a UI element by locator (role + title/value) and perform an accessibility action on it.

Agent View of the PolicyLayer registry record for `ui_perform_action`. HTML page: https://policylayer.com/tools/heznpc-airmcp/ui-perform-action

## Facts

- Tool: `ui_perform_action`
- Server: AirMCP (`airmcp`) — https://policylayer.com/tools/heznpc-airmcp.md
- Install: `npx -y airmcp`
- Homepage: https://github.com/heznpc/AirMCP
- Risk category: Execute (High risk)
- Registry record: grade F, identity unverified
- Server rate-limited: no
- Parameters: 0
- Recommended policy verdict: Rate-limited

## Example call (MCP tools/call, JSON-RPC 2.0)

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "ui_perform_action",
    "arguments": {}
  }
}
```

## Why ui_perform_action is rated High

This tool interacts with arbitrary UI elements via accessibility actions, effectively allowing an AI agent to click buttons, activate controls, or trigger any UI operation in any application. This constitutes executing external operations whose effects depend on the arguments provided, with a high blast radius since it can manipulate any accessible UI element across the entire macOS environment.

From the tool's own definition: "'Find a UI element by locator (role + title/value) and perform an accessibility action on it'"

## Use case

AI agents invoke ui_perform_action to trigger actions in AirMCP. What it does depends on the arguments the agent supplies, and its effects often reach beyond the immediate call: builds kicked off, notifications sent, workflows started.

## Recommended policy (PolicyLayer)

Verdict: **Rate-limited**. Enforced by the PolicyLayer MCP gateway (https://policylayer.com/mcp-gateway) before a call reaches AirMCP:

```json
{
  "version": "1",
  "default": "deny",
  "tools": {
    "ui_perform_action": {
      "limits": [
        {
          "counter": "ui_perform_action_rate",
          "window": "minute",
          "max": 10,
          "scope": "grant"
        }
      ]
    }
  }
}
```

## Other tools on AirMCP (278)

- `close_tab` — Destructive — https://policylayer.com/tools/heznpc-airmcp/close-tab.md
- `delete_contact` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-contact.md
- `delete_event` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-event.md
- `delete_note` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-note.md
- `delete_photos` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-photos.md
- `delete_playlist` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-playlist.md
- `delete_reminder` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-reminder.md
- `delete_reminder_list` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-reminder-list.md
- `delete_shortcut` — Destructive — https://policylayer.com/tools/heznpc-airmcp/delete-shortcut.md
- `memory_forget` — Destructive — https://policylayer.com/tools/heznpc-airmcp/memory-forget.md
- `move_note` — Destructive — https://policylayer.com/tools/heznpc-airmcp/move-note.md
- `quit_app` — Destructive — https://policylayer.com/tools/heznpc-airmcp/quit-app.md
- `remove_from_playlist` — Destructive — https://policylayer.com/tools/heznpc-airmcp/remove-from-playlist.md
- `semantic_clear` — Destructive — https://policylayer.com/tools/heznpc-airmcp/semantic-clear.md
- `semantic_index` — Destructive — https://policylayer.com/tools/heznpc-airmcp/semantic-index.md
- `spotlight_clear` — Destructive — https://policylayer.com/tools/heznpc-airmcp/spotlight-clear.md
- `system_power` — Destructive — https://policylayer.com/tools/heznpc-airmcp/system-power.md
- `trash_file` — Destructive — https://policylayer.com/tools/heznpc-airmcp/trash-file.md
- `activate_tab` — Execute — https://policylayer.com/tools/heznpc-airmcp/activate-tab.md
- `ai_agent` — Execute — https://policylayer.com/tools/heznpc-airmcp/ai-agent.md
- `ai_chat` — Execute — https://policylayer.com/tools/heznpc-airmcp/ai-chat.md
- `ai_plan_metrics` — Execute — https://policylayer.com/tools/heznpc-airmcp/ai-plan-metrics.md
- `connect_bluetooth` — Execute — https://policylayer.com/tools/heznpc-airmcp/connect-bluetooth.md
- `disconnect_bluetooth` — Execute — https://policylayer.com/tools/heznpc-airmcp/disconnect-bluetooth.md
- `drop_pin` — Execute — https://policylayer.com/tools/heznpc-airmcp/drop-pin.md
- `duplicate_shortcut` — Execute — https://policylayer.com/tools/heznpc-airmcp/duplicate-shortcut.md
- `edit_shortcut` — Execute — https://policylayer.com/tools/heznpc-airmcp/edit-shortcut.md
- `event_subscribe` — Execute — https://policylayer.com/tools/heznpc-airmcp/event-subscribe.md
- `generate_image` — Execute — https://policylayer.com/tools/heznpc-airmcp/generate-image.md
- `generate_structured` — Execute — https://policylayer.com/tools/heznpc-airmcp/generate-structured.md
- …and 248 more: https://policylayer.com/tools/heznpc-airmcp.md

## For agents

This record is a snapshot. Live verdicts and the full registry:

- Check every server in your MCP config at once: `npx -y policylayer stack`
- Vet a server before you add it: install the mcp-precheck skill — `npx skills add https://policylayer.com` (skill text: https://policylayer.com/skill.md)
- Query the registry over MCP: endpoint `https://api.policylayer.com/mcp` — tools `check_mcp_server`, `check_mcp_stack`, `check_tool`, `search_registry`, `get_change_events`

---

Source: the PolicyLayer MCP registry — one continuously verified record per MCP server. Full record: https://policylayer.com/registry?q=heznpc-airmcp · API: https://policylayer.com/registry/api · Policy library: https://policylayer.com/policies/heznpc-airmcp
