playwright-mcp-guarded
playwright-mcp-guarded
Un envoltorio con dominio restringido y no vinculado a usuarios alrededor de
playwright-mcp de Microsoft — un
reemplazo general de fetch/navegación web para los asistentes de LibreChat (GitHub, Wikipedia,
Google, Google Scholar, ...), limitado a una lista de dominios permitidos, extensible
editando una variable de entorno. Desplegado como un servicio Docker HTTP streamable
(sin ports: expuestos, sin OAuth por usuario) junto a los proyectos hermanos
time-mcp-http y
el modo multiusuario de ews-mcp, que siguen la misma forma.
Por qué no ejecutar @playwright/mcp directamente
Ya tiene --allowed-origins/--blocked-origins exactamente para esto,
y este proyecto no reimplementa esa aplicación — sigue siendo
lo que realmente bloquea una navegación no permitida. Faltan dos cosas al ejecutarlo
desnudo:
Su propia documentación llama a
--allowed-origins"no es un límite de seguridad" — una brecha conocida es que el tráfico de Service Worker y WebSocket evita la intercepcióncontext.route()sobre la que se construye.--block-service-workers(también establecido aquí, incondicionalmente) cierra una de esas brechas; no hay una bandera para la otra.La lista de permitidos nunca aparece en ningún lugar que el modelo que llama pueda ver — ni en las
instructionsdeinitialize, ni en ladescriptionde ninguna herramienta. Un modelo no tiene forma de saber de antemano qué dominios son accesibles, así que lo descubre probando, una vez por dominio bloqueado, cada vez.
Related MCP server: Web Search MCP Server
Cómo funciona
Un contenedor, un árbol de procesos, un valor de configuración (ALLOWED_ORIGINS):
LibreChat --(streamable-http, /mcp)--> guardian (Python, PID 1)
|
| spawns as child process,
| on loopback only
v
@playwright/mcp (Node, --allowed-origins)guardian/app.py lanza el CLI real de @playwright/mcp, sin modificar, como un
proceso hijo vinculado solo a localhost, se conecta a él como un cliente MCP,
y lo re-expone como un servidor MCP en el puerto público del contenedor:
tools/list e initialize reciben la lista de dominios añadida para visibilidad,
tools/call se reenvía textualmente — sin lógica de herramientas propia,
sin comportamiento cambiado más allá de esas dos ediciones de texto. ALLOWED_ORIGINS se lee
una vez, al inicio, y se entrega a ambos: al proceso generado (como
--allowed-origins, la aplicación real) y a las dos reescrituras de respuesta
(solo visibilidad). Extender la lista más tarde es un cambio de una línea
en esa única variable de entorno, no dos configuraciones que mantener sincronizadas.
Ejecutar
docker build -t playwright-mcp-guarded .
docker run --rm -p 8080:8080 \
-e ALLOWED_ORIGINS="github.com;raw.githubusercontent.com;wikipedia.org;en.wikipedia.org;google.com;scholar.google.com" \
playwright-mcp-guardedALLOWED_ORIGINS está separada por punto y coma — el mismo formato que @playwright/mcp
usa para PLAYWRIGHT_MCP_ALLOWED_ORIGINS. Un valor vacío bloquea
todos los dominios (registrado como advertencia al inicio, no como un bypass silencioso).
EXTRA_INSTRUCTIONS (opcional, texto libre) se añade textualmente a las
instructions de initialize que el modelo ve. La lista de permitidos solo dice qué
dominios son accesibles, no cómo usar lo que hay detrás de ellos — por ejemplo, la
sintaxis de consulta de un motor de búsqueda autoalojado. Deliberadamente no está
codificado aquí: este envoltorio permanece agnóstico al dominio, y el desplegador
proporciona el conocimiento operativo que su lista específica necesite, en sus propias
palabras:
-e EXTRA_INSTRUCTIONS="Search: http://searxng:8080/search?q=<term> (general), add &categories=science for Google Scholar results."Sin MCP_API_KEY, sin puerta de autenticación en la conexión MCP en sí —
deliberadamente, mismo razonamiento que ews-mcp/time-mcp-http: un 401 de cualquier
puerta hace que el cliente MCP no-OAuth de LibreChat intente (y se atasque en) OAuth.
El aislamiento de red de Docker es el límite. Ninguna credencial de ningún tipo pasa
por este servidor; solo lee páginas públicas.
Compensación aceptada, no un descuido: esto mantiene la aplicación en la capa de
aplicación de Playwright (ahora con --block-service-workers), no un límite
independiente a nivel de red (por ejemplo, un proxy de salida). Esa es una
elección deliberada de simplicidad — una unidad desplegable, un valor de configuración — no
una afirmación de que esto sea hermético. Un respaldo a nivel de red puede superponerse
más tarde sin tocar ninguna de esta lógica.
Verificar
curl -s http://127.0.0.1:8080/readyz # "ok" once the upstream browser is upLos registros deberían mostrar la línea de inicio del upstream
(Listening on http://localhost:<internal-port>) seguida de
playwright-mcp-guarded up, allowed origins=... — esa segunda línea es la lista
realmente aplicada, no solo lo que se configuró.
Probar
pip install -e '.[dev]'
ALLOWED_ORIGINS="github.com;wikipedia.org" pytestSolo pruebas unitarias (reescritura de descripción/instrucciones, paso de argumentos) —
no inician Chromium ni Docker. La imagen Docker se verificó de extremo a extremo
manualmente: se construyó, se ejecutó, un cliente MCP real se conectó y listó
herramientas (la lista de permitidos visible tanto en initialize.instructions como en
la description de browser_navigate), navegó con éxito a un dominio
permitido (en.wikipedia.org), y obtuvo net::ERR_BLOCKED_BY_CLIENT en uno
no permitido (example.com) — tanto la aplicación como la visibilidad se
confirmaron en vivo, no solo se afirmaron.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseAqualityDmaintenanceProvides web search capabilities to Claude AI using the Anthropic API, allowing LLMs to access up-to-date information from the web with customizable domain filtering.148
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search the web, fetch news, and retrieve page content via DuckDuckGo or Brave Search, with domain whitelisting and audit logging.
- AlicenseAqualityDmaintenanceProvides web access capabilities for LLMs including search, fetching, content extraction, PDF reading, image viewing, and screenshots.346MIT
- FlicenseAqualityDmaintenanceProvides local LLMs with web search and page fetching capabilities via MCP, with a focus on OWASP security best practices.2
Related MCP Connectors
Reliable web access for AI agents: smart HTTP, rotating proxies, and full-browser rendering.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Live web access for agents: scrape, SERP search, crawl/map, 74 collectors, datasets, proxies.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/thekk1/playwright-mcp-guarded'
If you have feedback or need assistance with the MCP directory API, please join our Discord server