macOS screenshot capture and visual Q&A for AI agents
Peekaboo is a macOS CLI and MCP server that lets AI agents capture screenshots of applications or the entire screen, with optional visual question-answering through local or remote AI models.
Useful for UI testing, visual debugging, monitoring app state, and building AI workflows that need to "see" what's on screen. Supports targeting specific apps by name or capturing the full display.
Verified popular macOS screenshot MCP server.
26 tools verified · Open access · No issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
Remote servers are capped at 8.0 because source code is not available for review. The score reflects endpoint verification only.
Add this to your MCP configuration file:
{}From the project's GitHub README.

Peekaboo brings high-fidelity screen capture, AI analysis, and complete GUI automation to macOS. Version 3 adds native agent flows and multi-screen automation across the CLI and MCP server.
set-value, perform-action).brew install steipete/tap/peekaboo
npx -y @steipete/peekaboo
# Capture full screen at Retina scale and save to Desktop
peekaboo image --mode screen --retina --path ~/Desktop/screen.png
# Click a button by label (captures, resolves, and clicks in one go)
peekaboo see --app Safari --json | jq -r '.data.snapshot_id' | read SNAPSHOT
peekaboo click --on "Reload this page" --snapshot "$SNAPSHOT"
# Directly set a text field value when the accessibility value is settable
peekaboo set-value --on T1 --value "hello" --snapshot "$SNAPSHOT"
# Invoke a named accessibility action on an element
peekaboo perform-action --on B1 --action AXPress --snapshot "$SNAPSHOT"
# Run a natural-language automation
peekaboo agent "Open Notes and create a TODO list with three items"
# Run as an MCP server (Codex, Claude Code, Cursor)
npx -y @steipete/peekaboo
# Minimal MCP client config snippet:
# {
# "mcpServers": {
# "peekaboo": {
# "command": "npx",
# "args": ["-y", "@steipete/peekaboo"],
# "env": {
# "PEEKABOO_AI_PROVIDERS": "openai/gpt-5.5,anthropic/claude-opus-4-8"
# }
# }
# }
# }
Peekaboo can generate shell-native completions directly from the same Commander metadata that powers CLI help and docs:
# Current shell (recommended)
eval "$(peekaboo completions $SHELL)"
# Explicit shells
eval "$(peekaboo completions zsh)"
eval "$(peekaboo completions bash)"
peekaboo completions fish | source
For persistent setup and troubleshooting, see docs/commands/completions.md.
click, type, press, hotkey, and paste default to background delivery when Peekaboo can resolve a target process from --app, --pid, --window-id, or snapshot metadata. Background delivery posts process-targeted input without making the target app frontmost, so scripts can interact with Safari, Notes, Terminal, etc. without stealing focus.
Use --foreground when the app only accepts input in its focused key window, when you need a real foreground mouse event, or when you are intentionally driving the current focus. Focus flags such as --space-switch and --bring-to-current-space also imply foreground delivery. Element/query clicks first use Accessibility actions; keyboard input, coordinate clicks, and synthetic click fallback require Event Synthesizing for the sending process. Run peekaboo permissions request-event-synthesizing if permissions status reports it missing.
# Background: target Safari without activating it
peekaboo click "Address and search bar" --app Safari
peekaboo type "github.com/openclaw/Peekaboo" --app Safari --return
# Foreground: focus Safari first for apps/fields that reject background input
peekaboo click "Address and search bar" --app Safari --foreground
peekaboo type "github.com/openclaw/Peekaboo" --app Safari --return --foreground
| Command | Key flags / subcommands | What it does |
|---|---|---|
| see | --app, --mode screen/window, --retina, --json | Capture and annotate UI, return snapshot + element IDs |
| click | --on <id/query>, --snapshot, --wait-for, --coords, --foreground | Click by element ID, label, or coordinates |
| type | --text, --clear, --profile, --delay, --foreground | Enter text with pacing options |
| set-value | --on <id/query>, --value, --snapshot | Directly set a settable accessibility value |
| perform-action | --on <id/query>, --action, --snapshot | Invoke a named accessibility action |
| press | key names, --count, --delay, --hold, --foreground | Special keys and sequences |
| hotkey | combos like cmd,shift,t, --foreground | Modifier combos (cmd/ctrl/alt/shift) |
| paste | text/file/image payloads, --restore-delay-ms, --foreground | Paste with clipboard restore |
| scroll | --on <id>, --direction up/down, --amount | Scroll views or elements |
| swipe | --from/--to, --duration, --steps | Smooth gesture-style drags |
| drag | --from/--to, modifiers, Dock/Trash targets | Drag-and-drop between elements/coords |
| move | --to <id/coords>, --screen-index | Position the cursor without clicking |
| window | list, move, resize, focus, set-bounds | Move/resize/focus windows and Spaces |
| app | launch, quit, relaunch, switch, list | Launch, quit, relaunch, switch apps |
| space | list, switch, move-window | List or switch macOS Spaces |
| menu | list, list-all, click, click-extra | List/click app menus and extras |
| menubar | list, click | Target status-bar items by name/index |
| dock | launch, right-click, hide, show, list | Interact with Dock items |
| dialog | list, click, input, file, dismiss | Drive system dialogs (open/save/etc.) |
| image | --mode screen/window/menu, --retina, --analyze | Screenshot screen/window/menu bar (+analyze) |
| list | apps, windows, screens, menubar, permissions | Enumerate apps, windows, screens, permissions |
| tools | --verbose, --json, --no-sort | Inspect native Peekaboo tools |
| completions | [shell] | Generate zsh/bash/fish completion scripts from Commander metadata |
| config | init, show, add, login, models | Manage credentials/providers/settings |
| permissions | status, grant, request-screen-recording, request-event-synthesizing | Check/grant required macOS permissions |
| run | .peekaboo.json, --output, --no-fail-fast | Execute .peekaboo.json automation scripts |
| sleep | --duration (ms) | Millisecond delays between steps |
| clean | --all-snapshots, --older-than, --snapshot | Prune snapshots and caches |
| agent | --model, --dry-run, --resume, --max-steps, audio | Natural-language multi-step automation |
| mcp | serve (default) | Run Peekaboo as an MCP server |
Peekaboo's provider list changes with Tachikoma and the tested model catalog. See docs/providers.md for the current provider reference, including OpenAI, Anthropic, xAI/Grok, Google Gemini, MiniMax, Ollama, LM Studio, and compatible custom endpoints.
Set providers via PEEKABOO_AI_PROVIDERS or peekaboo config add.
Agent generation settings live under agent.temperature and agent.maxTokens in ~/.peekaboo/config.json; the
macOS Settings UI reads and writes the same values.
pnpm install then pnpm run build:cli or pnpm run test:safe.pnpm run lint && pnpm run format.MIT
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.