Skip to main content
ClaudeWave
sethbang avatar
sethbang

mcp-screenshot-server

Ver en GitHub

An MCP server that provides AI assistants with screenshot capabilities — both web page capture via Puppeteer and cross-platform system screenshots using native OS tools.

MCP ServersRegistry oficial29 estrellas15 forksTypeScriptApache-2.0Actualizado today
ClaudeWave Trust Score
100/100
Verified
Passed
  • Open-source license (Apache-2.0)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Mature repo (>1y old)
  • Documented (README)
Last scanned: 8/25/2026
Install in Claude Code / Claude Desktop
Method: NPX · universal-screenshot-mcp
Claude Code CLI
claude mcp add mcp-screenshot-server -- npx -y universal-screenshot-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "mcp-screenshot-server": {
      "command": "npx",
      "args": ["-y", "universal-screenshot-mcp"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Casos de uso

Resumen de MCP Servers

# Universal Screenshot MCP

[![npm version](https://img.shields.io/npm/v/universal-screenshot-mcp.svg)](https://www.npmjs.com/package/universal-screenshot-mcp)
[![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.sethbang%2Fscreenshot--server-blue)](https://registry.modelcontextprotocol.io)
[![License](https://img.shields.io/badge/license-Apache--2.0-green.svg)](LICENSE)

An [MCP (Model Context Protocol)](https://modelcontextprotocol.io/) server that provides AI assistants with screenshot capabilities — both web page capture via [Puppeteer](https://pptr.dev/) 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`, Linux `maim`/`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

## 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** | `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 |

#### Linux Installation Examples

```bash
# Ubuntu/Debian (recommended)
sudo apt install maim xdotool

# Fedora
sudo dnf install maim xdotool

# Arch Linux
sudo pacman -S maim xdotool

# Wayland (Sway, etc.)
sudo apt install grim
```

After installing, you can verify your setup with:

```bash
npx universal-screenshot-mcp --doctor
```

This probes the host and prints copy-pasteable install commands for any missing tools, tailored to your detected distro.

## Quick Start

### Install from npm

```bash
npm install -g universal-screenshot-mcp
```

Or run directly with `npx`:

```bash
npx universal-screenshot-mcp
```

### Install from Source

```bash
git clone https://github.com/sethbang/mcp-screenshot-server.git
cd mcp-screenshot-server
npm install
npm run build
```

### Configure Your MCP Client

Add the server to your MCP client configuration. For **Claude Desktop**, edit `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "screenshot-server": {
      "command": "npx",
      "args": ["-y", "universal-screenshot-mcp"]
    }
  }
}
```

Or if installed from source:

```json
{
  "mcpServers": {
    "screenshot-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-screenshot-server/build/index.js"]
    }
  }
}
```

For **Claude Code**, register the server with the `claude mcp add` command:

```bash
# Project scope (current directory only)
claude mcp add screenshot-server -- npx -y universal-screenshot-mcp

# User scope (available across all projects)
claude mcp add --scope user screenshot-server -- npx -y universal-screenshot-mcp
```

Or if installed from source:

```bash
claude mcp add screenshot-server -- node /absolute/path/to/mcp-screenshot-server/build/index.js
```

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.

## 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                                      |
|-------------------|---------|----------|--------------------------------------------------|
| `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_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                                              |
|-----------------|---------|----------|----------------------------------------------------------|
| `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`)    |

#### 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

## Configuration

### Environment Variables

| 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) |

### Output Directories

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    |

## 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 `--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`](docs/security.md).

## Development

### Scripts

| 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     |

### Project Structure

```
src/
├── index.ts                 # Entry point — stdio transport
├── server.ts                # MCP server factory
├── config/
│   ├── index.ts             # Static constants (limits, allowed dirs)
│   └── runtime.ts           # Singleton semaphore, default directory
├── tools/
│   ├── take-screenshot.ts   # Web page capture tool
│   └── take-system-screenshot.ts  # macOS system capture tool
├── types/
│   └──
aiai-agentslinuxmacosmcpmcp-serverpuppeteerscreenshotscreenshot-toolwindows

Lo que la gente pregunta sobre mcp-screenshot-server

¿Qué es sethbang/mcp-screenshot-server?

+

sethbang/mcp-screenshot-server es mcp servers para el ecosistema de Claude AI. An MCP server that provides AI assistants with screenshot capabilities — both web page capture via Puppeteer and cross-platform system screenshots using native OS tools. Tiene 29 estrellas en GitHub y su última actualización registrada es del 2026-08-24.

¿Cómo se instala mcp-screenshot-server?

+

Puedes instalar mcp-screenshot-server clonando el repositorio (https://github.com/sethbang/mcp-screenshot-server) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.

¿Es seguro usar sethbang/mcp-screenshot-server?

+

Nuestro agente de seguridad ha analizado sethbang/mcp-screenshot-server y le ha asignado un Trust Score de 100/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.

¿Quién mantiene sethbang/mcp-screenshot-server?

+

sethbang/mcp-screenshot-server es mantenido por sethbang. La última actividad registrada en GitHub es del 2026-08-24, con 0 issues abiertos.

¿Hay alternativas a mcp-screenshot-server?

+

Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.

Despliega mcp-screenshot-server en tu cloud

Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.

¿Mantienes este repo? Añade un badge a tu README

Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.

Featured on ClaudeWave: sethbang/mcp-screenshot-server
[![Featured on ClaudeWave](https://claudewave.com/api/badge/sethbang-mcp-screenshot-server)](https://claudewave.com/repo/sethbang-mcp-screenshot-server)
<a href="https://claudewave.com/repo/sethbang-mcp-screenshot-server"><img src="https://claudewave.com/api/badge/sethbang-mcp-screenshot-server" alt="Featured on ClaudeWave: sethbang/mcp-screenshot-server" width="320" height="64" /></a>

Más MCP Servers

Alternativas a mcp-screenshot-server