Skip to main content
Glama
README.md
# 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 <display_id> ./captures/display.png
swift run screenshot_mcp screenshot-window <window_id> ./captures/window.png
swift run screenshot_mcp record-window-duration <window_id> ./captures/window.mp4 5 10 true
swift run screenshot_mcp record-window-start <window_id> ./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

TDQS

A3.5/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing displays vs. windows, recording windows with duration vs. start/stop control, and screenshotting displays vs. windows. The descriptions make it easy to differentiate between similar tools like record_window_duration and record_window_start, as one specifies a fixed duration while the other allows manual control.

Naming Consistency5/5

All tool names follow a consistent snake_case pattern with clear verb_noun structure (e.g., list_displays, record_window_duration, screenshot_display). The naming is predictable and readable throughout the set, making it easy for agents to understand the action and target.

Tool Count5/5

With 7 tools, the server is well-scoped for screenshot and recording functionality on macOS. Each tool earns its place by covering essential operations: listing resources, recording windows with different control methods, and capturing screenshots of displays and windows, without unnecessary bloat.

Completeness5/5

The tool surface provides complete coverage for the domain of macOS screen capture and recording. It includes listing (displays and windows), recording (with both fixed-duration and start/stop control), and screenshotting (displays and windows), ensuring agents can handle all core workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues