Site-Shot
Servidor MCP oficial para la API de captura de pantalla de sitios web Site-Shot — capture_screenshot y capture_full_page con Chromium real, captura de página completa, proxies por país y eliminación de anuncios y banners de cookies.
Documentación
Servidor MCP de Site-Shot
Dale a Claude, Cursor y otros agentes de IA la capacidad de ver páginas web públicas — toma capturas de pantalla de sitios web con Site-Shot a través del Model Context Protocol.
Renderizado real con Chromium · captura de página completa · proxies por país · eliminación automática de anuncios y banners de cookies (imágenes más limpias, menos tokens de visión).
Se requiere una clave de API de Site-Shot, y se necesita un plan de API de Site-Shot de pago: las capturas consumen la cuota y los límites de API existentes de esa cuenta. La clave proviene de tu panel de Site-Shot; los precios listan los planes. La herramienta de navegador sin registro en https://www.site-shot.com/ es para comprobar la calidad de salida; no emite claves.
Claude Code (plugin)
Este repositorio funciona también como un mercado de plugins de Claude Code. El plugin ejecuta el
paquete publicado site-shot-mcp a través de stdio y declara la clave de API como un ajuste sensible obligatorio, de modo que
Claude Code te la solicita en lugar de pedirte que la pegues en este repositorio, un archivo de
configuración o un mensaje de chat.
Instalación
claude plugin marketplace add site-shot/site-shot-mcp
claude plugin install site-shot@site-shot
o desde dentro de una sesión:
/plugin marketplace add site-shot/site-shot-mcp
/plugin install site-shot@site-shot
Ambas formas resuelven el mercado desde GitHub, por lo que solo funcionan después de que estos manifiestos estén publicados en la rama pública predeterminada del repositorio — no desde una rama local ni desde un fork que no hayas enviado.
Pruébalo antes de eso
Carga el directorio del plugin para una sola sesión:
claude --plugin-dir /absolute/path/to/site-shot-mcp/plugins/site-shot
Aquí importan dos cosas. Pasa una ruta absoluta — --plugin-dir se resuelve contra el directorio de
trabajo de la sesión. E inicia esa sesión desde un directorio de proyecto ordinario, no desde este
checkout: este repositorio es el paquete site-shot-mcp, por lo que npm resuelve el nombre localmente, no encuentra
ningún binario enlazado y el servidor muere con sh: site-shot-mcp: command not found antes de que Claude Code
lo vea. Desde un directorio no relacionado, npx obtiene el paquete publicado y lo inicia
normalmente — comprobado en ambos sentidos: salida 127 en este checkout, inicio limpio de stdio desde uno vacío.
Para ejercitar la ruta de instalación real en su lugar — resolución del mercado, manifiestos y el ajuste obligatorio — añade el checkout en sí como un mercado:
claude plugin marketplace add /absolute/path/to/site-shot-mcp
claude plugin install site-shot@site-shot
Eso instala en tu ámbito de usuario; deshazlo con claude plugin uninstall site-shot@site-shot y
claude plugin marketplace remove site-shot.
La clave de API
El plugin declara SITESHOT_API_KEY como un ajuste obligatorio y sensible. Claude Code te solicita
la clave, la enmascara mientras escribes y la sustituye en el entorno del servidor como
${user_config.SITESHOT_API_KEY}. El almacenamiento del valor es responsabilidad de Claude Code.
Instalar sin una no es un error — Claude Code lo registra como pendiente
(1 userConfig option not yet set (1 required)). Proporciónala a través del mensaje enmascarado:
/plugin configure site-shot@site-shot
Configúrala antes de esperar una captura: ese ajuste es lo que alimenta al servidor con su clave. Lo que Claude Code hace mientras no está configurada — si el servidor se lanza o no, si las herramientas se ofrecen — es comportamiento propio de Claude Code y no se documenta aquí desde la observación.
El lado del servidor es independiente de eso. Cuando se ejecuta directamente a través de stdio sin clave, igualmente se inicia e imprime una advertencia en stderr. Las herramientas de captura devuelven un error claro de clave faltante en lugar de una imagen.
El plugin añade una habilidad (site-shot:website-screenshots) y las dos herramientas de captura
a continuación. No declara hooks, ni monitores, ni trabajos de captura programados; el único proceso
que lanza es el servidor MCP de stdio declarado.
Codex CLI (plugin)
Este repositorio es también un mercado de plugins de Codex. Instala el mismo directorio de plugin que Claude Code
— una habilidad compartida, el mismo site-shot-mcp@1.2.0 fijado a través de stdio — con su propio
manifiesto, porque los dos hosts conectan la credencial de manera diferente.
Instalación
codex plugin marketplace add site-shot/site-shot-mcp
codex plugin add site-shot@site-shot
Probado contra Codex CLI 0.147.0 en macOS (arm64). Al igual que con Claude Code, estos resuelven el
mercado desde GitHub, por lo que solo funcionan una vez que estos manifiestos están en la rama pública predeterminada;
antes de eso, apunta codex plugin marketplace add a una ruta de checkout local en su lugar.
Instalar no es lo mismo que estar configurado, y ninguno de los dos es lo mismo que una captura exitosa. La instalación solo coloca los manifiestos en su lugar. El servidor aún necesita la clave de abajo, y una captura aún necesita un plan de Site-Shot con saldo disponible.
La clave de API
Codex reenvía la variable nombrada en el descriptor del plugin:
{ "command": "npx", "args": ["-y", "site-shot-mcp@1.2.0"], "env_vars": ["SITESHOT_API_KEY"] }
env_vars es una lista de permitidos de nombres, no de valores: ninguna clave aparece en este descriptor, en el comando
de abajo, ni en la entrada manual de config.toml más adelante. Tú provisionas la clave en el entorno
de la sesión desde la que inicias Codex.
macOS usa zsh por defecto, donde read -p inicia un coproceso en lugar de imprimir un mensaje — y un
bloque de código etiquetado como bash no cambia el shell en el que pegas. Invoca bash explícitamente:
bash -c 'read -r -s -p "Site-Shot API key: " SITESHOT_API_KEY && printf "\n" && export SITESHOT_API_KEY && exec codex'
-s mantiene la clave fuera de la pantalla, nada aquí la pone en argv, y la exportación está limitada a esa
sesión hija en lugar de permanecer en el shell desde el que escribiste.
Lo que esto no hace es configurar un Codex que inicies de otra manera. Un lanzador de escritorio o una sesión remota comienza desde su propio entorno, por lo que ejecutará el servidor sin clave hasta que la provisiones también allí.
Configuración manual de MCP en su lugar
Si prefieres no instalar el plugin, el mismo servidor de stdio se puede configurar a mano. Esto es una alternativa al plugin, no una adición — ejecuta ambos y tendrás dos configuraciones de un servidor. Elige una.
[mcp_servers.site-shot]
command = "npx"
args = ["-y", "site-shot-mcp@1.2.0"]
env_vars = ["SITESHOT_API_KEY"]
codex mcp add site-shot -- npx -y site-shot-mcp@1.2.0 escribe esa entrada por ti; añade env_vars
después, ya que codex mcp add --env KEY=VALUE almacenaría la clave en el archivo en texto claro.
Compruébalo con codex mcp get site-shot. Si ya tienes una entrada como esta y ahora instalas el
plugin, elimina la manual deliberadamente con codex mcp remove site-shot — nada aquí edita
tu configuración por ti.
En cualquier caso, la advertencia de la sección de Claude Code aplica: a menos que la entrada establezca cwd, Codex
inicia el servidor desde donde ejecutaste Codex, por lo que ejecutarlo dentro de este repositorio encuentra la misma
colisión de nombre local.
Claude Desktop y otros clientes MCP
- Obtén una clave de API de Site-Shot en https://www.site-shot.com/start/.
- Añade esto a tu configuración de Claude Desktop (
claude_desktop_config.json):
{
"mcpServers": {
"site-shot": {
"command": "npx",
"args": ["-y", "site-shot-mcp"],
"env": { "SITESHOT_API_KEY": "YOUR_API_KEY" }
}
}
}
- Reinicia Claude Desktop. Pídele que "tome una captura de pantalla de página completa de https://news.ycombinator.com" y llamará al servidor y te mostrará la imagen.
Funciona igual en cualquier cliente MCP (Cursor, Cline, VS Code, LangChain, CrewAI) — apunta el cliente a
npx -y site-shot-mcp con SITESHOT_API_KEY en el entorno.
Cada integración anterior ejecuta el mismo servidor local de stdio, y ese paquete está publicado en npm y en el Registro MCP oficial. No está listado en el directorio público compartido de plugins de ChatGPT/Codex ni en el directorio de conectores remotos de Claude: ambas rutas requieren un endpoint MCP HTTPS alojado, que Site-Shot no ha desplegado. Hacerlo es una decisión separada.
Herramientas
Dos herramientas, ambas devuelven la captura de pantalla como una imagen MCP. No hay biblioteca guardada, ni listado, ni conversión a markdown, ni programación — este servidor captura imágenes y las devuelve.
capture_screenshot
Captura una página web (viewport por defecto).
| Parámetro | Tipo | Predeterminado | Notas |
|---|---|---|---|
url | string (obligatorio) | — | Página a capturar |
full_page | boolean | false | Captura toda la página desplazable |
width / height | number | Predeterminado de la API | Tamaño de viewport / dispositivo |
format | "png" | "jpeg" | "webp" | png | Formato de imagen. webp es sin pérdida, aproximadamente 35% más pequeño que png en la página mediana, máximo 16,383 px por lado |
block_ads | boolean | true | Eliminar anuncios |
block_cookie_banners | boolean | true | Eliminar ventanas emergentes de consentimiento de cookies |
country | string | — | País del proxy como código de dos letras ISO 3166-1 alpha-2, p. ej. "DE" (IP/idioma/zona horaria/geo automáticos) |
strict_country | boolean | true | Error si el país no tiene proxy, en lugar de recurrir a EE. UU. |
language / time_zone / geolocation | string | — | Anulaciones manuales |
wait_ms | number | Predeterminado de la API | Espera adicional antes de la captura (SPAs/animaciones) |
max_height | number | 20000 (página completa) | Límite de altura capturada |
Devuelve la captura de pantalla como una imagen MCP.
"Predeterminado de la API" no es un número que este paquete pueda declarar.
width,heightywait_msse reenvían solo cuando los pasas, por lo que lo que aplique cuando no lo haces lo decide la API de Site-Shot y puede cambiar sin una versión aquí. Las versiones hasta 1.1.0 imprimían tamaños de píxeles parawidth/heightque la API no usa — un agente que los omitiera para tomar "el predeterminado" obtenía un viewport diferente, sin nada en la imagen devuelta que lo revelara. Pasa valores explícitos siempre que el tamaño importe.
Los códigos de país son códigos ISO, nunca nombres. Pasa
"DE", no"Germany". La API coincide los códigos exactamente y de lo contrario renderizaría a través de un proxy de EE. UU. sin decírtelo, por lo que el servidor rechaza nombres completos antes de gastar un renderizado.strict_country(activado por defecto) igualmente convierte un país no disponible en un error en lugar de una captura silenciosa de EE. UU. — pasafalsepara volver a la alternativa. Países admitidos →
capture_full_page
Igual que capture_screenshot con la captura de página completa habilitada.
¿Por qué llamar a este servidor en lugar del navegador del propio agente?
Si tu agente maneja un navegador, puede capturar páginas él mismo — y para páginas que requieren iniciar sesión
o pasar por un flujo, esa es la herramienta adecuada. Para URLs públicas, delegar la captura a
este servidor suele ser mejor ingeniería: cada captura ejecuta el mismo pipeline (sin replanificación
entre ejecuciones), puede tomarse desde un país específico con configuración regional y zona horaria coincidentes
(country + strict_country), es evaluada por un clasificador de imágenes con una escalera de reintentos creciente
detrás antes de devolverse, y cuesta una fracción de centavo en lugar de una sesión de navegador más
tokens de visión por mirada. La comparación completa, con ambos lados argumentados honestamente:
Agente de IA vs. API de capturas — quién debería capturar la página.
Configuración
| Variable de entorno | Obligatoria | Descripción |
|---|---|---|
SITESHOT_API_KEY | sí | Tu clave de API de Site-Shot (usada como userkey). |
El servidor es un envoltorio delgado sobre la API HTTP existente de Site-Shot (https://api.site-shot.com/) — sin
backend separado.
Desarrollo local
npm install
npm run check # syntax check
npm run smoke # offline tests (stubbed fetch, no API key needed)
node test/integration.mjs # real stdio handshake against the local source
npm run test:plugin # plugin/marketplace metadata tests
npm run validate:plugin # claude plugin validate --strict (needs the claude CLI)
SITESHOT_API_KEY=yourkey npm start # run the server on stdio
Requisitos
Node.js ≥ 18 (usa el fetch integrado).
Licencia
MIT