MCP Screenshot Server
MCP de captura de pantalla universal
Un servidor MCP (Model Context Protocol) que proporciona a los asistentes de IA capacidades de captura de pantalla, tanto de páginas web mediante Puppeteer como de capturas de pantalla del sistema multiplataforma utilizando herramientas nativas del SO.
Características
Capturas de pantalla de páginas web — Capture cualquier URL pública utilizando un navegador Chromium sin interfaz gráfica (headless).
Capturas de pantalla del sistema multiplataforma — Captura de pantalla completa, ventana o región utilizando herramientas nativas del SO (macOS
screencapture, Linuxmaim/scrot/gnome-screenshot/etc., Windows PowerShell+.NET).Diseño centrado en la seguridad — Prevención de SSRF, protección contra recorrido de rutas (path traversal), defensa contra rebinding de DNS, prevención de inyección de comandos y limitación de DoS.
Nativo de MCP — Se integra directamente con Claude Desktop, Cursor y cualquier cliente compatible con MCP.
Related MCP server: Webpage Screenshot MCP Server
Requisitos
Node.js >= 18.0.0
Chromium se descarga automáticamente mediante Puppeteer en la primera ejecución.
Requisitos específicos de la plataforma para take_system_screenshot
Plataforma | Herramientas requeridas | Notas |
macOS |
| No requiere instalación adicional |
Linux | Una de las siguientes: | Se recomienda |
Windows |
| Utiliza .NET |
Ejemplos de instalación en Linux
# 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 grimInicio rápido
Instalar desde npm
npm install -g universal-screenshot-mcpO ejecútelo directamente con npx:
npx universal-screenshot-mcpInstalar desde el código fuente
git clone https://github.com/sethbang/mcp-screenshot-server.git
cd mcp-screenshot-server
npm install
npm run buildConfigurar su cliente MCP
Añada el servidor a la configuración de su cliente MCP. Para Claude Desktop, edite ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"screenshot-server": {
"command": "npx",
"args": ["-y", "universal-screenshot-mcp"]
}
}
}O si se instaló desde el código fuente:
{
"mcpServers": {
"screenshot-server": {
"command": "node",
"args": ["/absolute/path/to/mcp-screenshot-server/build/index.js"]
}
}
}Para Cursor u otros clientes MCP, consulte su documentación para obtener la configuración equivalente.
Herramientas
El servidor expone dos herramientas MCP:
take_screenshot
Captura una página web (o un elemento específico) a través de un navegador Puppeteer sin interfaz gráfica.
Parámetro | Tipo | Requerido | Descripción |
| string | ✅ | URL a capturar (solo http/https) |
| number | — | Ancho del viewport (1–3840) |
| number | — | Alto del viewport (1–2160) |
| boolean | — | Capturar la página completa desplazable |
| string | — | Selector CSS para capturar un elemento específico |
| string | — | Esperar a este selector antes de capturar |
| number | — | Retraso en milisegundos (0–30000) |
| string | — | Ruta del archivo de salida (predeterminado: |
Ejemplo de prompt:
Toma una captura de pantalla de https://example.com a 1920x1080
take_system_screenshot
Captura el escritorio, una ventana de aplicación específica o una región de la pantalla utilizando herramientas nativas del SO. Funciona en macOS, Linux y Windows.
Parámetro | Tipo | Requerido | Descripción |
| enum | ✅ |
|
| number | — | ID de ventana para el modo ventana |
| string | — | Nombre de la aplicación (ej. |
| object | — |
|
| number | — | Número de pantalla para configuraciones multipantalla |
| boolean | — | Incluir el cursor del ratón en la captura |
| enum | — |
|
| number | — | Retraso de captura en segundos (0–10) |
| string | — | Ruta del archivo de salida (predeterminado: |
Compatibilidad de funciones multiplataforma
Función | macOS | Linux | Windows |
Pantalla completa | ✅ | ✅ | ✅ |
Región | ✅ | ✅ (maim, scrot, grim, import) | ✅ |
Ventana por nombre | ✅ | ⚠️ X11 + xdotool | ⚠️ mejor esfuerzo |
Ventana por ID | ✅ | ✅ solo X11 | ⚠️ HWND |
Multipantalla | ✅ | ⚠️ depende de la herramienta | ✅ |
Incluir cursor | ✅ | ⚠️ depende de la herramienta | ⚠️ |
Retraso | ✅ | ✅ | ✅ |
Ejemplo de prompt:
Toma una captura de pantalla del sistema de la ventana de Safari
Configuración
Variables de entorno
Variable | Predeterminado | Descripción |
|
| Directorio de salida predeterminado relativo a |
|
| Establecer en |
Directorios de salida
Las capturas de pantalla se guardan en ~/Documents/screenshots de forma predeterminada (configurable mediante SCREENSHOT_OUTPUT_DIR). Las rutas de salida personalizadas deben resolverse en uno de estos directorios permitidos:
Directorio | Descripción |
| Ubicación de salida predeterminada (configurable) |
| Ubicación predeterminada original |
| Carpeta de descargas del usuario |
| Carpeta de documentos del usuario |
| Directorio temporal del sistema |
Seguridad
Este servidor implementa múltiples capas de refuerzo de seguridad:
ID | Amenaza | Mitigación |
SEC-001 | SSRF / Rebinding de DNS | URLs validadas contra rangos de IP bloqueados; DNS resuelto antes de la solicitud con fijación de IP mediante |
SEC-003 | Inyección de comandos | Todos los subprocesos utilizan |
SEC-004 | Recorrido de rutas | Rutas de salida validadas con resolución de enlaces simbólicos |
SEC-005 | Denegación de servicio | Instancias concurrentes de Puppeteer limitadas a 3 mediante semáforo |
Para obtener todos los detalles, consulte docs/security.md.
Desarrollo
Scripts
Comando | Descripción |
| Compilar TypeScript a |
| Recompilar ante cambios de archivos |
| Pruebas unitarias (rápidas, totalmente simuladas) |
| Pruebas de integración (DNS/sistema de archivos real) |
| Pruebas E2E (Puppeteer/herramientas nativas reales) |
| Todos los niveles de prueba juntos |
| E2E de Linux mediante Docker (requiere Docker) |
| Ejecutar pruebas en modo watch |
| Ejecutar pruebas con informe de cobertura |
| Analizar código fuente con ESLint |
| Iniciar el Inspector MCP para depuración |
Estructura del proyecto
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)Pruebas
Las pruebas utilizan Vitest en tres niveles:
Unitarias (
npm test) — Inyección de dependencias completa, sin E/S real. Bucle de retroalimentación rápido.Integración (
npm run test:integration) — Resolución de DNS real, sistema de archivos real con directorios temporales, Puppeteer real contra un servidor HTTP local.E2E (
npm run test:e2e) — Herramientas de captura de pantalla nativas reales. Las pruebas de macOS se ejecutan de forma nativa; las pruebas de Linux se ejecutan en Docker mediantenpm run test:linux.
npm test # Unit tests (~300ms)
npm run test:linux # Linux provider tests in Docker
npm run test:all # EverythingDepuración con el Inspector MCP
npm run inspectorEsto inicia el Inspector MCP conectado a su servidor compilado, lo que le permite invocar herramientas de forma interactiva.
Licencia
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