gdols.dev

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…

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.

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