Skip to main content
Glama
sethbang

MCP Screenshot Server

by sethbang

Universal Screenshot MCP

npm version MCP Registry License

Ein MCP (Model Context Protocol)-Server, der KI-Assistenten Screenshot-Funktionen bereitstellt – sowohl für die Aufnahme von Webseiten über Puppeteer als auch für plattformübergreifende System-Screenshots mithilfe nativer Betriebssystem-Tools.

Funktionen

  • Webseiten-Screenshots — Erfassen Sie jede öffentliche URL mit einem Headless-Chromium-Browser

  • Plattformübergreifende System-Screenshots — Vollbild-, Fenster- oder Bereichsaufnahmen mit nativen OS-Tools (macOS screencapture, Linux maim/scrot/gnome-screenshot/etc., Windows PowerShell+.NET)

  • Sicherheitsorientiertes Design — SSRF-Prävention, Schutz vor Pfad-Traversal, Abwehr von DNS-Rebinding, Schutz vor Befehlsinjektion und DoS-Begrenzung

  • MCP-nativ — Integriert sich direkt in Claude Desktop, Cursor und jeden MCP-kompatiblen Client

Related MCP server: Webpage Screenshot MCP Server

Anforderungen

  • Node.js >= 18.0.0

  • Chromium wird beim ersten Start automatisch von Puppeteer heruntergeladen

Plattformspezifische Anforderungen für take_system_screenshot

Plattform

Erforderliche Tools

Hinweise

macOS

screencapture (integriert)

Keine zusätzliche Installation erforderlich

Linux

Eines der folgenden: maim, scrot, gnome-screenshot, spectacle, grim oder import (ImageMagick)

maim oder scrot für volle Funktionsunterstützung empfohlen. Für die Aufnahme von Fenstern nach Namen zusätzlich xdotool installieren.

Windows

powershell (integriert)

Verwendet .NET System.Drawing — keine zusätzliche Installation erforderlich

Linux-Installationsbeispiele

# 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

Schnelleinstieg

Installation über npm

npm install -g universal-screenshot-mcp

Oder direkt mit npx ausführen:

npx universal-screenshot-mcp

Installation aus dem Quellcode

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

Konfigurieren Sie Ihren MCP-Client

Fügen Sie den Server zur Konfiguration Ihres MCP-Clients hinzu. Für Claude Desktop bearbeiten Sie ~/Library/Application Support/Claude/claude_desktop_config.json:

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

Oder falls aus dem Quellcode installiert:

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

Für Cursor oder andere MCP-Clients konsultieren Sie deren Dokumentation für die entsprechende Konfiguration.

Tools

Der Server stellt zwei MCP-Tools bereit:

take_screenshot

Erfasst eine Webseite (oder ein spezifisches Element) über einen Headless-Puppeteer-Browser.

Parameter

Typ

Erforderlich

Beschreibung

url

string

Zu erfassende URL (nur http/https)

width

number

Viewport-Breite (1–3840)

height

number

Viewport-Höhe (1–2160)

fullPage

boolean

Erfasst die gesamte scrollbare Seite

selector

string

CSS-Selektor zur Erfassung eines spezifischen Elements

waitForSelector

string

Vor der Aufnahme auf diesen Selektor warten

waitForTimeout

number

Verzögerung in Millisekunden (0–30000)

outputPath

string

Ausgabedateipfad (Standard: ~/Documents/screenshots)

Beispiel-Prompt:

Mache einen Screenshot von https://example.com mit 1920x1080

take_system_screenshot

Erfasst den Desktop, ein spezifisches Anwendungsfenster oder einen Bildschirmbereich mithilfe nativer OS-Tools. Funktioniert unter macOS, Linux und Windows.

Parameter

Typ

Erforderlich

Beschreibung

mode

enum

fullscreen, window oder region

windowId

number

Fenster-ID für den Fenstermodus

windowName

string

App-Name (z. B. "Safari", "Firefox") für den Fenstermodus

region

object

{ x, y, width, height } für den Bereichsmodus

display

number

Display-Nummer für Multi-Monitor-Setups

includeCursor

boolean

Mauszeiger in die Aufnahme einbeziehen

format

enum

png (Standard) oder jpg

delay

number

Aufnahmeverzögerung in Sekunden (0–10)

outputPath

string

Ausgabedateipfad (Standard: ~/Documents/screenshots)

Plattformübergreifende Funktionsunterstützung

Funktion

macOS

Linux

Windows

Vollbild

Bereich

✅ (maim, scrot, grim, import)

Fenster nach Name

⚠️ X11 + xdotool

⚠️ best-effort

Fenster nach ID

✅ nur X11

⚠️ HWND

Multi-Display

⚠️ tool-abhängig

Cursor einbeziehen

⚠️ tool-abhängig

⚠️

Verzögerung

Beispiel-Prompt:

Mache einen System-Screenshot des Safari-Fensters

Konfiguration

Umgebungsvariablen

Variable

Standard

Beschreibung

SCREENSHOT_OUTPUT_DIR

Documents/screenshots

Standard-Ausgabeverzeichnis relativ zu ~

ALLOW_LOCAL

false

Auf true setzen, um Screenshots von localhost/127.x.x.x/[::1] zu erlauben (nützlich für lokale Entwicklungsserver)

Ausgabeverzeichnisse

Screenshots werden standardmäßig unter ~/Documents/screenshots gespeichert (konfigurierbar über SCREENSHOT_OUTPUT_DIR). Benutzerdefinierte Ausgabepfade müssen in eines dieser erlaubten Verzeichnisse aufgelöst werden:

Verzeichnis

Beschreibung

~/Documents/screenshots

Standard-Ausgabeort (konfigurierbar)

~/Desktop/Screenshots

Ursprünglicher Standardort

~/Downloads

Benutzer-Download-Ordner

~/Documents

Benutzer-Dokumente-Ordner

/tmp

System-Temp-Verzeichnis

Sicherheit

Dieser Server implementiert mehrere Ebenen der Sicherheitsabsicherung:

ID

Bedrohung

Gegenmaßnahme

SEC-001

SSRF / DNS-Rebinding

URLs werden gegen blockierte IP-Bereiche validiert; DNS wird vor der Anfrage mit IP-Pinning über --host-resolver-rules aufgelöst; Navigations-Redirects werden erneut validiert

SEC-003

Befehlsinjektion

Alle Subprozesse verwenden execFile (keine Shell); App-Namen werden gegen SAFE_APP_NAME_PATTERN validiert

SEC-004

Pfad-Traversal

Ausgabepfade werden mit fs.realpath() Symlink-Auflösung validiert; auf erlaubte Verzeichnisse beschränkt

SEC-005

Denial of Service

Gleichzeitige Puppeteer-Instanzen auf 3 via Semaphor begrenzt

Für vollständige Details siehe docs/security.md.

Entwicklung

Skripte

Befehl

Beschreibung

npm run build

TypeScript nach build/ kompilieren

npm run watch

Bei Dateiänderungen neu kompilieren

npm test

Unit-Tests (schnell, vollständig gemockt)

npm run test:integration

Integrationstests (echtes DNS/Dateisystem)

npm run test:e2e

E2E-Tests (echtes Puppeteer/native Tools)

npm run test:all

Alle Testebenen zusammen

npm run test:linux

Linux E2E via Docker (erfordert Docker)

npm run test:watch

Tests im Watch-Modus ausführen

npm run test:coverage

Tests mit Coverage-Bericht ausführen

npm run lint

Quellcode mit ESLint linten

npm run inspector

MCP Inspector zum Debuggen starten

Projektstruktur

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/
│   └── index.ts             # Shared TypeScript interfaces
├── utils/
│   ├── helpers.ts           # Response builders, file utilities
│   ├── screenshot-provider.ts # Cross-platform provider interface + factory
│   ├── macos-provider.ts    # macOS: screencapture wrapper
│   ├── linux-provider.ts    # Linux: maim/scrot/gnome-screenshot/etc.
│   ├── windows-provider.ts  # Windows: PowerShell + .NET System.Drawing
│   ├── macos.ts             # Window ID lookup via CoreGraphics
│   └── semaphore.ts         # Async concurrency limiter
└── validators/
    ├── path.ts              # Output path validation (SEC-004)
    └── url.ts               # URL/SSRF validation (SEC-001)

Testen

Tests verwenden Vitest in drei Ebenen:

  • Unit (npm test) — Vollständige Dependency Injection, kein echtes I/O. Schnelle Feedbackschleife.

  • Integration (npm run test:integration) — Echte DNS-Auflösung, echtes Dateisystem mit Temp-Verzeichnissen, echtes Puppeteer gegen einen lokalen HTTP-Server.

  • E2E (npm run test:e2e) — Echte native Screenshot-Tools. macOS-Tests laufen nativ; Linux-Tests laufen in Docker via npm run test:linux.

npm test                 # Unit tests (~300ms)
npm run test:linux       # Linux provider tests in Docker
npm run test:all         # Everything

Debuggen mit dem MCP Inspector

npm run inspector

Dies startet den MCP Inspector, der mit Ihrem gebauten Server verbunden ist, sodass Sie Tools interaktiv aufrufen können.

Lizenz

Apache-2.0 — Copyright 2026 Seth Bang

Install Server
A
security – no known vulnerabilities
A
license - permissive license
B
quality - B tier

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sethbang/mcp-screenshot-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server