emulator-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| EMULATOR_MCP_HEADED | No | Si está definida, muestra las ventanas del navegador | |
| EMULATOR_MCP_BROWSER | No | Orden de navegadores: `chrome,msedge,chromium` | |
| EMULATOR_MCP_CAPTURE_DIR | No | Directorio personalizado para PNG |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_devicesA | Devuelve los ids de pantallas que aceptan las demas tools (telefonos, tablets, laptops, desktops, con viewport, DPR, mobile y touch reales). Usa primero esta tool si no sabes que dispositivo pedir. Cualquier nombre del catalogo interno de Playwright (por ejemplo "iPhone 12", "Pixel 5", "Desktop Chrome") tambien funciona, y podes forzar apaisado agregando " landscape" al id. |
| screenshot_onA | Abre una URL dentro del navegador local emulando UNA pantalla concreto (viewport, DPR, mobile flag, touch y user-agent reales) y guarda un PNG. Tambien corre una auditoria responsive en ese viewport y devuelve los hallazgos junto al path de la imagen. Pedido tipico: { url, device: "iphone-15-max" }. Para cambiar tamano sin dispositivo: { url, viewport: { width: 380, height: 800 } }. Devolve el path en captures/; pide returnImage=true solo si necesitas ver la imagen, porque consume muchos tokens. |
| preview_devicesA | Captura la MISMA URL en varias pantallas a la vez (hasta 4 en paralelo) y devuelve un PNG por dispositivo con el desborde horizontal de cada uno. Es la tool para responder "como se ve esto en movil, tablet y desktop". Sin "devices" usa el set standard: iphone-15-max, galaxy-s24, ipad-pro-11, laptop, desktop-hd. Si solo necesitas saber donde se rompe el layout, usa check_responsive: hace las mismas aperturas y no baja imagenes. |
| check_responsiveA | Abre la URL en varias pantallas y reporta SOLO problemas de responsive, sin imagenes: desborde horizontal con el selector exacto que lo causa, texto recortado, targets tocables chicos, imágenes fuera de viewport, meta viewport faltante o que bloquea el zoom, y que media queries activan en cada ancho. Severidades: high = se rompe el layout, medium = se pierde contenido o baja performance, low = incomodo en tactil, info = contexto. Cada pantalla reporta viewport.deviceWidthPx (la pantalla real) y viewport.layoutWidthPx (lo que mide window.innerWidth); si layoutWidthPx > deviceWidthPx la pagina no es responsive ahi. Usa esta tool para verificar un rediseño o para encontrar breakpoints rotos; despues captura con screenshot_on el dispositivo que falla para verlo. |
| interact_onA | Ejecuta una secuencia de pasos en UNA pantalla emulada dentro de la misma sesion de navegador: navegar, tocar, escribir, esperar, scrollear, medir con JS y capturar. Es la tool para probar flujos (login, checkout, menu hamburguesa, scroll) y verificar que el resultado se vea bien en ese dispositivo. Cada paso es { action, ...args }. Localizadores aceptados por paso: selector (CSS o Playwright), text, role+name, label, placeholder, alt, testId. Acciones: navigate, click, tap, dblclick, hover, type, press, scroll, wait_for, set_viewport, screenshot, get_text, count, eval, assert, back, reload. Ejemplo: [{action:"navigate",url}, {action:"click",text:"Menu"}, {action:"assert",text:"Reservar"}, {action:"screenshot",fullPage:false}]. Se detiene en el primer paso que falla (salvo continueOnError). No podras mantener una sesion entre llamadas: meté todo el flujo en una sola invocacion. Si la pagina desborda el ancho del dispositivo, click/tap se resuelven por coordenada (touchscreen.tap o mouse.click) porque el chequeo de hit-target de Playwright falla con el layout expandido; el paso devuelve "via" con lo que usó. |
| emulator_statusA | Dice que navegador local usa la emulacion, donde caen las capturas y cuantas pantallas hay disponibles. Usala para diagnosticar antes de culpar a la pagina. |
| open_responsive_sessionB | Abre la MISMA URL en varios tamaños y mantiene las paginas entre llamadas MCP. Devuelve sessionId, screenIds y dashboardUrl: abre ese enlace para ver capturas lado a lado actualizadas cada 3 segundos. Cada pantalla mantiene su propio estado web. No requiere iframes ni quitar cabeceras de seguridad. |
| list_responsive_sessionsA | Lista las comparaciones responsive abiertas en este proceso MCP, con sus sessionIds, screenIds, tamaños, URLs actuales y enlace al panel visual. Las sesiones conservan su estado entre llamadas y desaparecen al detener el servidor. |
| observe_responsive_sessionA | Observa las pantallas abiertas sin recargarlas: guarda un PNG por tamaño y devuelve estado, URLs y eventos recientes de consola/red. Pide dom para obtener el arbol accesible, audit para revisar el layout y returnImages para que el agente vea las capturas dentro de la respuesta MCP. |
| navigate_responsive_sessionA | Navega TODAS las pantallas de una comparacion a la misma URL, conservando sus contextos, cookies y tamaños. Para recargar todas tras modificar el codigo, vuelve a pasar la URL. Devuelve resultado por pantalla y errores sin ocultar fallos parciales. |
| interact_responsive_sessionA | Ejecuta pasos en una pantalla o repite la secuencia en todas (screenId="all", predeterminado). Mantiene el estado para la proxima llamada. Usa localizadores semanticos porque el DOM puede variar segun el tamaño. Si un menu solo existe en movil, actua sobre ese screenId. Devuelve cada fallo por pantalla; despues usa observe_responsive_session para ver el resultado. |
| close_responsive_sessionA | Cierra una comparacion responsive completa: libera sus paginas, contextos y servidor del panel visual. Usa esta herramienta al terminar para no acumular navegadores. Las capturas guardadas permanecen disponibles en disco. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
There is real overlap: preview_devices, check_responsive, and open_responsive_session all 'open one URL across multiple screens', and interact_on mirrors interact_responsive_session. However, the descriptions sharply differentiate them (images vs. problems-only vs. persistent session; single-shot vs. stateful), so an agent can tell them apart with care.
Two recognizable families exist (_on: screenshot_on, interact_on; _responsive_session: open/list/observe/navigate/interact/close), but conventions are mixed across the set (screenshot_on, preview_devices, check_responsive, list_devices, emulator_status) with inconsistent verb/noun ordering and suffixes.
12 tools is well within a reasonable range for a device-emulation/QA server. Six of them are session lifecycle management, which is somewhat heavy but justified by the persistent-session feature.
Coverage spans device listing, single/multi screenshots, responsive auditing, scripted interaction, persistent sessions, navigation, observation, and cleanup, with diagnostics (emulator_status). Missing niceties like visual diffing or video capture, but core workflows are complete.