MCP server for web page and cross-platform system screenshots (macOS, Linux, Windows)
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP (Model Context Protocol) server that provides AI assistants with screenshot capabilities β both web page capture via Puppeteer and cross-platform system screenshots using native OS tools.
screencapture, Linux maim/scrot/gnome-screenshot/etc., Windows PowerShell+.NET)take_system_screenshot| Platform | Required Tools | Notes |
|---|---|---|
| macOS | screencapture (built-in) | No additional installation needed |
| Linux | One of: maim, scrot, gnome-screenshot, spectacle, grim, or import (ImageMagick) | maim or scrot recommended for full feature support. For window-by-name capture, also install xdotool. |
| Windows | powershell (built-in) | Uses .NET System.Drawing β no additional installation needed |
After installing, you can verify your setup with:
This probes the host and prints copy-pasteable install commands for any missing tools, tailored to your detected distro.
Or run directly with npx:
Add the server to your MCP client configuration. For Claude Desktop, edit ~/Library/Application Support/Claude/claude_desktop_config.json:
Or if installed from source:
For Claude Code, register the server with the claude mcp add command:
Or if installed from source:
Verify the server registered with claude mcp list, or check live status from inside a session with /mcp.
For Cursor or other MCP clients, consult their documentation for the equivalent configuration.
The server exposes two MCP tools:
take_screenshotCaptures a web page (or a specific element) via a headless Puppeteer browser.
| Parameter | Type | Required | Description |
|---|---|---|---|
url | string | β | URL to capture (http/https only) |
width | number | β | Viewport width (1β3840) |
height | number | β | Viewport height (1β2160) |
fullPage | boolean | β | Capture the full scrollable page |
selector | string | β | CSS selector to capture a specific element |
waitForSelector | string | β | Wait for this selector before capturing |
waitForTimeout | number | β | Delay in milliseconds (0β30000) |
outputPath | string | β | Output file path (default: ~/Documents/screenshots) |
Example prompt:
Take a screenshot of https://example.com at 1920x1080
take_system_screenshotCaptures the desktop, a specific application window, or a screen region using native OS tools. Works on macOS, Linux, and Windows.
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | enum | β | fullscreen, window, or region |
windowId | number | β | Window ID for window mode |
windowName | string | β | App name (e.g. "Safari", "Firefox") for window mode |
region | object | β | { x, y, width, height } for region mode |
display | number | β | Display number for multi-monitor setups |
includeCursor | boolean | β | Include the mouse cursor in the capture |
format | enum | β | png (default) or jpg |
delay | number | β | Capture delay in seconds (0β10) |
outputPath | string | β | Output file path (default: ~/Documents/screenshots) |
| Feature | macOS | Linux | Windows |
|---|---|---|---|
| Fullscreen | β | β | β |
| Region | β | β (maim, scrot, grim, import) | β |
| Window by name | β | β οΈ X11 + xdotool | β οΈ best-effort |
| Window by ID | β | β X11 only | β οΈ HWND |
| Multi-display | β | β οΈ tool-dependent | β |
| Include cursor | β | β οΈ tool-dependent | β οΈ |
| Delay | β | β | β |
Example prompt:
Take a system screenshot of the Safari window
| Variable | Default | Description |
|---|---|---|
SCREENSHOT_OUTPUT_DIR | Documents/screenshots | Default output directory relative to ~ |
ALLOW_LOCAL | false | Set to true to allow screenshotting localhost/127.x.x.x/[::1] (useful for local dev servers) |
Screenshots are saved to ~/Documents/screenshots by default (configurable via SCREENSHOT_OUTPUT_DIR). Custom output paths must resolve to one of these allowed directories:
| Directory | Description |
|---|---|
~/Documents/screenshots | Default output location (configurable) |
~/Desktop/Screenshots | Original default location |
~/Downloads | User downloads folder |
~/Documents | User documents folder |
/tmp | System temp directory |
This server implements multiple layers of security hardening:
| ID | Threat | Mitigation |
|---|---|---|
| SEC-001 | SSRF / DNS rebinding | URLs validated against blocked IP ranges; DNS resolved pre-request with IP pinning via --host-resolver-rules; navigation redirects re-validated |
| SEC-003 | Command injection | All subprocesses use execFile (no shell); app names validated against SAFE_APP_NAME_PATTERN |
| SEC-004 | Path traversal | Output paths validated with fs.realpath() symlink resolution; restricted to allowed directories |
| SEC-005 | Denial of service | Concurrent Puppeteer instances limited to 3 via semaphore |
For full details, see docs/security.md.
| Command | Description |
|---|---|
npm run build | Compile TypeScript to build/ |
npm run watch | Recompile on file changes |
npm test | Unit tests (fast, fully mocked) |
npm run test:integration | Integration tests (real DNS/filesystem) |
npm run test:e2e | E2E tests (real Puppeteer/native tools) |
npm run test:all | All test tiers together |
npm run test:linux | Linux e2e via Docker (requires Docker) |
npm run test:watch | Run tests in watch mode |
npm run test:coverage | Run tests with coverage report |
npm run lint | Lint source with ESLint |
npm run inspector | Launch MCP Inspector for debugging |
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/universal-screenshot-mcp)<a href="https://allmcps.com/mcp/universal-screenshot-mcp"><img src="https://allmcps.com/api/badge/universal-screenshot-mcp?style=directory" alt="Universal Screenshot MCP on AllMCPs" /></a>