LabscoMCP early access ↗
openclawMCP SERVER · OFFICIAL PROJECT

Peekaboo

macOS automation that sees the screen and does the clicks — structured UI maps with element ids, native actions, and bounded state verification.

by openclaw ↗Desktop & OS Automation✓ Official

LABSCO SUMMARY

Public MCP servers here are background-only, and refusals happen before dispatch.

Foreground actions, shared desktop input and ambient browser auto-connect are rejected before anything runs, so an MCP client cannot quietly take over your screen — establishing a browser connection is a separate, explicit foreground step. verify_state is the other design decision worth copying: it polls real accessibility state and returns unknown rather than guessing when the evidence is ambiguous. The capture tool writes video and frames, so use tool filters before exposing this to a client you do not control.

What it is

A macOS CLI and menu-bar app for screen capture, accessibility inspection and native UI automation, with peekaboo mcp running the same toolset as an MCP server over stdio. The core loop is observe, pick an element from the result, act on it — the map comes back with opaque element ids rather than raw coordinates.

What you get

  • A structured UI map of a running app or the whole screen, with element ids to act on — see, backed by screen list and window list
  • Native interaction: clicking that tries accessibility actions before synthetic input, plus typing, key presses, scrolling and dragging — click, and the CLI's type, press, scroll, drag
  • Action-first additions that skip synthetic input entirely: setting an accessibility value directly, and invoking a named accessibility action on an element — set_value, action
  • Waiting that replaces fixed sleeps: 1 to 8 predicates about window existence, bounds, or element existence, value, enabled and selected state, polled every 100 ms for at most 10 seconds, reported as satisfied, unsatisfied or a conservative unknown — verify_state
  • Bounded recording of a screen, window or region that writes retained frames, contact.png, metadata.json and optional MP4 — capture
  • A natural-language agent run over the same tools — agent from the CLI, and a nested background-only agent tool over MCP
  • Window-pinned automation: list Safari's windows, take the window_id, and keep every subsequent call bound to that exact window

Requirements

macOS 15 or later. The CLI installs with brew install steipete/tap/peekaboo; the npm package @steipete/peekaboo 4.2.3 needs Node.js 22 or later and includes the CLI plus the MCP launcher. Screen Recording permission is required for capture and Accessibility permission for inspection and control — check both with peekaboo permissions status. The MCP server runs over stdio; HTTP and SSE transports are reserved and currently fail with an explicit error. Agent runs need a model provider configured under ~/.peekaboo. MIT licensed.

Setup effort

One command — brew install steipete/tap/peekaboo