WebMCP en esta web
Un agente que entra hoy en una web tiene que apañárselas mirando la pantalla y simulando clics, como una persona pero a ciegas. WebMCP es una propuesta para que la propia página le diga qué sabe hacer y cómo pedírselo. Esta página lo hace de verdad, no es un dibujo.
Comprobando si tu navegador expone document.modelContext…
Para verlo funcionando necesitas Chrome 149 o superior y un minuto:
-
Copia
chrome://flags/#enable-webmcp-testingen la barra de direcciones y cambia WebMCP for testing a Enabled.
-
Pulsa Reiniciar en la barra que sale abajo. Cerrar la
ventana a veces no basta, porque Chrome puede seguir abierto por detrás y
el flag no se aplica hasta que arranca de nuevo.
- Vuelve a esta página. El aviso de arriba tiene que cambiar y decir que tu navegador soporta WebMCP.
Cuando acabes, puedes dejar el flag otra vez en Default. Es una API experimental y no hace falta tenerla puesta para nada más.
1. La página, como siempre
Esto es un buscador normal sobre mis entradas del blog: escribes y la lista de abajo se filtra. HTML y JavaScript de toda la vida, pensado para que lo use una persona con los ojos y el teclado.
2. Lo mismo, pero con nombre y manual de uso
Aquí está el cambio. Cojo la función que ya usa el buscador de arriba y la registro como herramienta: le pongo un nombre, una descripción en castellano y un esquema que dice qué parámetros acepta. Eso es todo lo que necesita un agente para llamarla sin adivinar nada.
await document.modelContext.registerTool({
name: "buscar-notas",
description: "Busca entradas del blog de Guille por texto en el título, el resumen o el cuerpo.",
inputSchema: {
type: "object",
properties: {
consulta: { type: "string", description: "Palabras a buscar." }
}
},
execute({ consulta }) {
const encontradas = buscarNotas(consulta); // la misma función del buscador
return { content: [{ type: "text", text: JSON.stringify(encontradas) }] };
}
});
Lo importante es la línea del execute: no he escrito una
segunda versión de la búsqueda para el agente. Llama exactamente a la misma
función que el buscador, así que la página no se queda por detrás de lo que
el agente acaba de hacer.
3. Un agente de prueba, aquí mismo
WebMCP deja que un guion de la propia página haga de agente con
getTools() y executeTool(). Eso es lo que hay
debajo. El panel no sabe nada de mi web: le pregunta al
navegador qué herramientas hay y construye los campos leyendo el esquema que
le devuelven. Por eso los nombres de los campos salen solos.
Al pulsar el botón no llamo yo a la función. Se la pido al navegador, que hace de intermediario y la ejecuta. Mira la lista de la sección 1 mientras tanto: cambia sola.
Registro de llamadas
buscar-notas que busque «markitdown».
Dónde está esto a día de hoy
Es una propuesta, no un estándar. Se incuba en el Web Machine Learning
Community Group y las revisiones de TAG, seguridad y privacidad están las
tres pendientes. Chrome tiene un origin trial desde la 149 y Edge desde la
150; para probarlo en local basta con activar el flag
about:flags#enable-webmcp-testing. Firefox y Safari, de momento,
no han dicho ni que sí ni que no.
Y se mueve rápido. En Chrome 153 executeTool() solo acepta los
argumentos como texto JSON, aunque la documentación pida un objeto, y esa misma
documentación ya avisa de que el texto queda obsoleto en la 155. Lo conté en
la entrada sobre esta demo.
Las dos herramientas de esta página solo leen contenido que ya es público y no hay sesión ni datos de nadie por medio. Lo digo porque la seguridad es la parte incómoda de todo esto: una web que expone herramientas está exponiendo algo más que texto, y la inyección de prompt aparece en la propia ficha de Chrome como riesgo conocido.
Explainer de WebMCP · Ficha en Chrome Status · Documentación de Chrome