Universal Screenshot MCP logo

Universal Screenshot MCP

Capture web pages with Puppeteer or desktop screens with native tools on macOS, Linux, and Windows.

Install Universal Screenshot MCP

Pick your client, then add it in one click or paste the config.

STDIONode.js
~/Library/Application Support/Claude/claude_desktop_config.json
claude_desktop_config.json
{
  "mcpServers": {
    "universal-screenshot-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "universal-screenshot-mcp"
      ]
    }
  }
}

Settings → Developer → Edit Config, merge this into mcpServers, then fully quit and reopen Claude Desktop.

We couldn’t confirm it starts correctly

The install command started, but didn't respond the way we expected when we tried to talk to it.

npx -y universal-screenshot-mcp

initialize succeeded but no response to tools/list.

This is an experimental automated check and can have false negatives — missing environment variables, a slow cold install, etc. It doesn’t necessarily mean something’s wrong. Last checked 7d ago.

Overview

Universal Screenshot MCP MCP server gives MCP clients tools for capturing web pages and desktop screens. It uses headless Puppeteer for public HTTP or HTTPS URLs and native operating-system screenshot utilities for fullscreen, window, and region captures. Reach for it when an agent needs visual evidence from a website, local desktop, application window, or screen area. Screenshots are saved to approved local directories, with SSRF, path, command, and concurrency protections.

Use cases

  • Capture a public web page at a specified viewport size
  • Inspect a rendered element after waiting for it to appear
  • Capture an application window from a desktop session
  • Save a selected screen region as PNG or JPG

Key features

  • Headless Chromium web capture
  • Full-page and CSS-selector screenshots
  • Fullscreen, window, and region desktop capture
  • macOS, Linux, and Windows support
  • Configurable output directories
  • SSRF and path traversal protections

Tools2

What Universal Screenshot MCP lets your agent do. Expand a tool for its parameters.

Self-reported~64 tokens of context

Security & health

What it can reach and how reliably it runs — from our own checks, not the maintainer’s claims.

ActiveLast checked 2d ago

Recent health check succeeded.

6/6 checks healthy over the last 50d

Supply-chain signal

No high-severity advisories surfaced by our automated scan.

Critical 0High 0Medium 0Low 0

Scanned 15d ago via OSV.dev · universal-screenshot-mcp (npm)

Adoption & maintenance

Factual signals from GitHub, npm, and our automated checks — not a rating.

GitHub stars35Stargazers on the source repository.
npm downloads373Package downloads in the last 30 days.
Last commit2d agoMost recent push to the default branch.
Install checkInconclusiveStarted but did not complete the MCP handshake in our test.
Tools exposed2Callable tools this server registers over MCP.
Directory activity2 viewsConfig copies, upvotes, and views on AllMCPs.

How Universal Screenshot MCP works

What Universal Screenshot MCP MCP server does

Universal Screenshot MCP MCP server exposes two MCP tools for image capture. take_screenshot opens a public HTTP or HTTPS URL in a headless Chromium browser managed by Puppeteer. It can capture the visible viewport, the complete scrollable page, or one element selected with CSS. Optional viewport dimensions, selector waits, and capture delays help with pages that need time to render.

take_system_screenshot captures the local desktop through operating-system tools. It supports fullscreen, application-window, and rectangular-region modes, along with display selection, cursor inclusion, output format, and a short delay. System capture is available on macOS, Linux, and Windows, although individual features depend on the platform and installed utilities.

How it works

The server communicates with an MCP client over its configured process. Web captures use Puppeteer and download Chromium automatically on the first run. System captures delegate to native facilities: screencapture on macOS, PowerShell and .NET on Windows, and one of several supported utilities on Linux, including maim, scrot, gnome-screenshot, spectacle, grim, or ImageMagick's import.

The web tool accepts a URL, dimensions, full-page mode, a CSS selector, rendering waits, and an output path. The system tool accepts a capture mode plus optional window, region, display, cursor, format, delay, and output-path settings. Both tools default to ~/Documents/screenshots.

Universal Screenshot MCP MCP server validates web destinations against blocked address ranges and checks redirects. It also uses DNS resolution and IP pinning, avoids shell execution for subprocesses, validates application names, checks output paths after symlink resolution, and limits concurrent Puppeteer instances to three.

Setup and configuration

Node.js 18 or newer is required. Install the npm package globally with npm install -g universal-screenshot-mcp, run it directly with npx universal-screenshot-mcp, or build it from the repository with npm install followed by npm run build. Puppeteer obtains Chromium automatically when needed.

macOS and Windows need their listed built-in capture facilities. Linux requires at least one supported screenshot utility; xdotool is additionally needed for window-by-name capture on the supported X11 setup. The command npx universal-screenshot-mcp --doctor checks the host and reports missing Linux tools with installation suggestions.

Add the executable to the MCP client's server configuration. Claude Desktop can launch it with npx -y universal-screenshot-mcp, while Claude Code can register the same command with claude mcp add. Cursor and other MCP clients use their own configuration formats.

SCREENSHOT_OUTPUT_DIR changes the default output directory. ALLOW_LOCAL=true permits captures of localhost, 127.x.x.x, and [::1]; local targets are otherwise blocked. Custom paths must resolve within the approved screenshot, Desktop, Downloads, Documents, or /tmp locations described by the project.

Tools and capabilities

  • Capture public web pages or selected elements.
  • Capture full scrollable pages with fullPage.
  • Wait for a selector or up to 30 seconds before a web capture.
  • Capture fullscreen, windows, or screen regions.
  • Select a display and optionally include the cursor.
  • Save system images as PNG or JPG.

Limitations and notes

Window-by-name capture on Linux requires X11 and xdotool, and several Linux features are tool-dependent. Windows window capture is best-effort, while Linux window-ID capture is limited to X11. Multi-display and cursor behavior can also vary by platform utility.

The web tool is intended for HTTP and HTTPS URLs. Local addresses require ALLOW_LOCAL=true. Output locations are restricted, and the server limits simultaneous Puppeteer instances to reduce resource exhaustion. Universal Screenshot MCP MCP server does not describe an image-analysis tool; it provides screenshot capture and writes the resulting files to disk.

Reviews

No reviews yet — be the first to share how it worked for you.

Frequently Asked Questions about Universal Screenshot MCP

Universal Screenshot MCP is an MCP server that connects AI assistants to Puppeteer and native operating-system screenshot tools. Its main tools are `take_screenshot` for public web pages or selected elements and `take_system_screenshot` for fullscreen, window, or region captures on macOS, Linux, and Windows.

Install it with `npm install -g universal-screenshot-mcp` or run it with `npx universal-screenshot-mcp`. You can also clone the repository, install dependencies, and build it. Node.js 18 or newer is required, and Puppeteer downloads Chromium on first use.

Yes, Universal Screenshot MCP works with Cursor because the README identifies Cursor as an MCP-compatible client. Add the server using Cursor's MCP configuration process; the project does not specify a Cursor-specific configuration format.

Set `ALLOW_LOCAL=true` before starting the server, then call `take_screenshot` with the localhost URL. Localhost, loopback IPv4 addresses, and `[::1]` are blocked by default, so this setting is required for local development servers.

Related MCP servers

Add a badge to your READMEShow it’s listed — live SVG, Markdown or HTML.

AllMCPs Directory Badge

Full Badge Customizer

Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.

Badge Style:
Live Dynamic SVG PreviewUniversal Screenshot MCP AllMCPs Directory Badge
Markdown (GitHub README)
[![AllMCPs](https://allmcps.com/api/badge/universal-screenshot-mcp?style=directory)](https://allmcps.com/mcp/universal-screenshot-mcp)
HTML Embed
<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>