E1 · Los dos formularios
4 minEjecuta el bloque y compara las líneas de búsqueda y de reserva.
Listo cuando: node scripts/declarativa.mjs nativo → enviado? não, esperando a pessoa y pessoa clicou em Reservar → {"reservado":true, y saída: 0.
Clase 6 · 14 min
Chrome deja que un formulario se convierta en herramienta con tres atributos HTML. Es el camino más corto para quien ya tiene un formulario bien etiquetado, pero quedó fuera de la spec del 16/10/2026: existe en el origin trial de Chrome y en una capa temporal del polyfill. En esta clase lo usas con esa etiqueta y decides cuándo el formulario puede enviarse solo.
Empezar la lección
Objetivo: convertir un formulario en herramienta con toolname, sabiendo que es experimental y está fuera de la spec, y decidir cuándo usar toolautosubmit.
Experimental al 19/10/2026, fuera de la spec. Haz clic en cada paso.
README de WebMCP: "Future Exploration… not part of the specification at this time". Chrome lo documenta y lo implementa en el trial (página actualizada el 25/09/2026).
Fragmento de kit/pagina/declarativa.html. La búsqueda solo lee y puede usar toolautosubmit; la reserva tiene efecto y espera el clic.
<!-- Só lê: pode enviar sozinho (toolautosubmit). -->
<form id="f-busca" toolname="buscar_oficinas_form" tooldescription="Busca oficinas da agenda por tema. Só lê." toolautosubmit>
<label for="d-tema">Tema</label>
<select id="d-tema" name="tema" required toolparamdescription="Tema da oficina.">
<option value="html">HTML</option><option value="javascript">JavaScript</option>
<option value="webmcp">WebMCP</option><option value="mcp">MCP</option>
</select>
<button type="submit">Buscar</button>
</form>
<!-- Tem efeito: SEM toolautosubmit. O agente preenche, a pessoa clica em Reservar. -->
<form id="f-reserva" toolname="reservar_vaga_form" tooldescription="Preenche a reserva de uma vaga. Quem envia é a pessoa, clicando em Reservar.">
<label for="d-id">Oficina (id)</label>
<input id="d-id" name="id" required pattern="of-[0-9]{3}" toolparamdescription="Id da oficina, ex.: of-301.">
<label for="d-nome">Seu nome</label>
<input id="d-nome" name="nome" required minlength="2">
<button type="submit">Reservar</button>
</form>$('#f-busca').addEventListener('submit', e => {
e.preventDefault();
const lista = agenda.buscar({ tema: $('#d-tema').value });
$('#d-resultados').replaceChildren(...lista.map(o => Object.assign(document.createElement('li'), { textContent: `${o.id} · ${o.titulo}` })));
if (e.agentInvoked) e.respondWith(Promise.resolve({ total: lista.length, ids: lista.map(o => o.id) }));
});cd ~/projetos/formacao-webmcp-site-v72/kit node scripts/declarativa.mjs nativo; echo "saída: $?" node scripts/declarativa.mjs polyfill; echo "saída: $?"
== Chromium 156.0.8078.4 (Playwright) · modo: nativo
ferramenta do formulário: buscar_oficinas_form · campos: tema
ferramenta do formulário: reservar_vaga_form · campos: id, nome
buscar_oficinas_form (toolautosubmit): {"total":1,"ids":["of-301"]}
reservar_vaga_form preencheu: id=of-301 nome=Rita · enviado? não, esperando a pessoa
pessoa clicou em Reservar → {"reservado":true,"reserva":{"id":"of-301","nome":"Rita","titulo":"Primeira ferramenta WebMCP"}}
saída: 0
== Chromium 156.0.8078.4 (Playwright) · modo: polyfill
ferramenta do formulário: buscar_oficinas_form · campos: tema
ferramenta do formulário: reservar_vaga_form · campos: id, nome
buscar_oficinas_form (toolautosubmit): {"total":1,"ids":["of-301"]}
reservar_vaga_form preencheu: id=of-301 nome=Rita · enviado? não, esperando a pessoa
pessoa clicou em Reservar → {"reservado":true,"reserva":{"id":"of-301","nome":"Rita","titulo":"Primeira ferramenta WebMCP"}}
saída: 0La búsqueda vuelve directo (toolautosubmit). La reserva queda rellenada y detenida hasta el clic: declarativa.mjs hace el papel de la persona.
Con toolautosubmit en el formulario de reserva, el agente rellena y envía sin que la persona lo vea. Reserva el envío automático para lo que solo lee. Y recuerda: respondWith exige preventDefault() antes, si no, el navegador sigue con el envío normal.
Nativo y polyfill. Cada ejercicio termina con un listo cuando.
Ejecuta el bloque y compara las líneas de búsqueda y de reserva.
Listo cuando: node scripts/declarativa.mjs nativo → enviado? não, esperando a pessoa y pessoa clicou em Reservar → {"reservado":true, y saída: 0.
Toma un formulario de búsqueda de tu sitio (solo lectura) y agrega toolname, tooldescription y toolparamdescription en una copia local. Deja un comentario en el HTML: experimental, fuera de la spec, fecha.
Listo cuando: PAGINA=[tu carpeta] node scripts/listar.mjs nativo [archivo].html → la línea con tu toolname; en el modo sem, el formulario envía como antes. El comentario con la fecha está en el HTML.
La explicación aparece después de la respuesta.
Pregunta 1 de 4
¿Cuál es la situación de la API declarativa (toolname) al 19/10/2026?
Pregunta 2 de 4
¿Cuándo usar toolautosubmit?
Pregunta 3 de 4
¿Cómo sabe el submit que fue el agente quien llenó el formulario?
Pregunta 4 de 4
Sin toolparamdescription en un campo, ¿de dónde saca Chrome la descripción?
Elige una alternativa. La explicación aparece después de tu intento.