MCP Screenshot Server
Universal Screenshot MCP
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, Linuxmaim/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 |
| Keine zusätzliche Installation erforderlich |
Linux | Eines der folgenden: |
|
Windows |
| Verwendet .NET |
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 grimSchnelleinstieg
Installation über npm
npm install -g universal-screenshot-mcpOder direkt mit npx ausführen:
npx universal-screenshot-mcpInstallation aus dem Quellcode
git clone https://github.com/sethbang/mcp-screenshot-server.git
cd mcp-screenshot-server
npm install
npm run buildKonfigurieren 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 |
| string | ✅ | Zu erfassende URL (nur http/https) |
| number | — | Viewport-Breite (1–3840) |
| number | — | Viewport-Höhe (1–2160) |
| boolean | — | Erfasst die gesamte scrollbare Seite |
| string | — | CSS-Selektor zur Erfassung eines spezifischen Elements |
| string | — | Vor der Aufnahme auf diesen Selektor warten |
| number | — | Verzögerung in Millisekunden (0–30000) |
| string | — | Ausgabedateipfad (Standard: |
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 |
| enum | ✅ |
|
| number | — | Fenster-ID für den Fenstermodus |
| string | — | App-Name (z. B. |
| object | — |
|
| number | — | Display-Nummer für Multi-Monitor-Setups |
| boolean | — | Mauszeiger in die Aufnahme einbeziehen |
| enum | — |
|
| number | — | Aufnahmeverzögerung in Sekunden (0–10) |
| string | — | Ausgabedateipfad (Standard: |
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 |
|
| Standard-Ausgabeverzeichnis relativ zu |
|
| Auf |
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 |
| Standard-Ausgabeort (konfigurierbar) |
| Ursprünglicher Standardort |
| Benutzer-Download-Ordner |
| Benutzer-Dokumente-Ordner |
| 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 |
SEC-003 | Befehlsinjektion | Alle Subprozesse verwenden |
SEC-004 | Pfad-Traversal | Ausgabepfade werden mit |
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 |
| TypeScript nach |
| Bei Dateiänderungen neu kompilieren |
| Unit-Tests (schnell, vollständig gemockt) |
| Integrationstests (echtes DNS/Dateisystem) |
| E2E-Tests (echtes Puppeteer/native Tools) |
| Alle Testebenen zusammen |
| Linux E2E via Docker (erfordert Docker) |
| Tests im Watch-Modus ausführen |
| Tests mit Coverage-Bericht ausführen |
| Quellcode mit ESLint linten |
| 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 vianpm run test:linux.
npm test # Unit tests (~300ms)
npm run test:linux # Linux provider tests in Docker
npm run test:all # EverythingDebuggen mit dem MCP Inspector
npm run inspectorDies 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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
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