# Screenshot MCP (macOS) Minimal MCP server for macOS screenshots with a Swift CLI backend. Supports: - display screenshots - window screenshots - window recording (duration or start/stop) - listing displays/windows ## Requirements - macOS 12+ (CoreGraphics APIs) - Swift (Xcode CLI tools) - Node.js 18+ - Screen Recording permission granted to the terminal or host app ## Quickstart ```bash npm install swift build node server.js ``` ## SwiftUI UI (no Xcode) ```bash swift build swift run screenshot_mcp_app ``` ### Debug logs The SwiftUI app writes logs to `~/Documents/screenshot_mcp/debug.log` by default. ## MCP Tools - `list_displays` - `list_windows` - `screenshot_display` `{ display_id, output_path? }` - `screenshot_window` `{ window_id, output_path? }` - `record_window_duration` `{ window_id, duration_seconds, fps?, system_audio?, output_path? }` - `record_window_start` `{ window_id, fps?, system_audio?, output_path? }` - `record_window_stop` `{ recording_id }` ## CLI Usage ```bash swift run screenshot_mcp list-displays swift run screenshot_mcp list-windows swift run screenshot_mcp screenshot-display ./captures/display.png swift run screenshot_mcp screenshot-window ./captures/window.png swift run screenshot_mcp record-window-duration ./captures/window.mp4 5 10 true swift run screenshot_mcp record-window-start ./captures/window.mp4 10 true # stop with Ctrl+C or SIGINT ``` ## Configuration - `SCREENSHOT_MCP_BIN`: path to the compiled Swift binary - `SCREENSHOT_MCP_OUTPUT_DIR`: default output directory for screenshots ## Notes - The Swift CLI uses `CGDisplayCreateImage` and `CGWindowListCreateImage`. - Window recording samples window frames (default 10 fps) and writes MP4 via `AVAssetWriter`. - System audio capture requires macOS 13+ and records all system audio, not just the window. - If screenshots are blank, ensure Screen Recording permission is granted. ## License MIT