The MCP Screenshot Server allows you to capture screenshots of web pages and local HTML files through a simple MCP tool interface with customizable options:
Capture Screenshots: Take screenshots by providing a URL or path to a local HTML file
Configurable Viewport: Adjust the width and height dimensions for the screenshot
Full Page Capture: Optionally capture the entire scrollable page instead of just the viewport
Custom Output Path: Specify where to save the screenshot file
Automatic Directory Management: The server handles screenshot storage directory organization
Allows capturing screenshots of websites and local HTML files through Puppeteer with configurable viewport dimensions, full page capture support, and custom output paths.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Screenshot Servertake a screenshot of https://example.com with width 1200 and full page"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Universal Screenshot MCP
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.
Features
Web Page Screenshots — Capture any public URL using a headless Chromium browser
Cross-Platform System Screenshots — Fullscreen, window, or region capture using native OS tools (macOS
screencapture, Linuxmaim/scrot/gnome-screenshot/etc., Windows PowerShell+.NET)Security-First Design — SSRF prevention, path traversal protection, DNS rebinding defense, command injection prevention, and DoS limiting
MCP Native — Integrates directly with Claude Desktop, Cursor, and any MCP-compatible client
Related MCP server: Webpage Screenshot MCP Server
Requirements
Node.js >= 18.0.0
Chromium is downloaded automatically by Puppeteer on first run
Platform-Specific Requirements for take_system_screenshot
Platform | Required Tools | Notes |
macOS |
| No additional installation needed |
Linux | One of: |
|
Windows |
| Uses .NET |
Linux Installation Examples
Quick Start
Install from npm
Or run directly with npx:
Install from Source
Configure Your MCP Client
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 Cursor or other MCP clients, consult their documentation for the equivalent configuration.
Tools
The server exposes two MCP tools:
take_screenshot
Captures a web page (or a specific element) via a headless Puppeteer browser.
Parameter | Type | Required | Description |
| string | ✅ | URL to capture (http/https only) |
| number | — | Viewport width (1–3840) |
| number | — | Viewport height (1–2160) |
| boolean | — | Capture the full scrollable page |
| string | — | CSS selector to capture a specific element |
| string | — | Wait for this selector before capturing |
| number | — | Delay in milliseconds (0–30000) |
| string | — | Output file path (default: |
Example prompt:
Take a screenshot of https://example.com at 1920x1080
take_system_screenshot
Captures the desktop, a specific application window, or a screen region using native OS tools. Works on macOS, Linux, and Windows.
Parameter | Type | Required | Description |
| enum | ✅ |
|
| number | — | Window ID for window mode |
| string | — | App name (e.g. |
| object | — |
|
| number | — | Display number for multi-monitor setups |
| boolean | — | Include the mouse cursor in the capture |
| enum | — |
|
| number | — | Capture delay in seconds (0–10) |
| string | — | Output file path (default: |
Cross-Platform Feature Support
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
Output Directories
Screenshots are saved to ~/Desktop/Screenshots by default. Custom output paths must resolve to one of these allowed directories:
Directory | Description |
| Default output location |
| User downloads folder |
| User documents folder |
| System temp directory |
Security
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 |
SEC-003 | Command injection | All subprocesses use |
SEC-004 | Path traversal | Output paths validated with |
SEC-005 | Denial of service | Concurrent Puppeteer instances limited to 3 via semaphore |
For full details, see docs/security.md.
Development
Scripts
Command | Description |
| Compile TypeScript to |
| Recompile on file changes |
| Run tests with Vitest |
| Run tests in watch mode |
| Run tests with coverage report |
| Lint source with ESLint |
| Launch MCP Inspector for debugging |
Project Structure
Testing
Tests use Vitest with full dependency injection — no real network calls, filesystem access, or subprocess execution in tests.
Debugging with MCP Inspector
This launches the MCP Inspector connected to your built server, allowing you to invoke tools interactively.
License
Apache-2.0 — Copyright 2026 Seth Bang