E1 · Os dois formulários
4 minRode o bloco e compare as linhas de busca e de reserva.
Pronto quando: node scripts/declarativa.mjs nativo → enviado? não, esperando a pessoa e pessoa clicou em Reservar → {"reservado":true, e saída: 0.
Aula 6 · 14 min
O Chrome deixa um formulário virar ferramenta com três atributos HTML. É o caminho mais curto para quem já tem formulário bem rotulado, mas ficou fora da spec de 16/10/2026: existe no origin trial do Chrome e numa camada temporária do polyfill. Nesta aula você usa com essa etiqueta e decide quando o formulário pode se enviar sozinho.
Começar a aula
Objetivo: transformar um formulário em ferramenta com toolname, sabendo que é experimental e fora da spec, e decidir quando usar toolautosubmit.
Experimental em 19/10/2026, fora da spec. Clique em cada passo.
README do WebMCP: "Future Exploration… not part of the specification at this time". O Chrome documenta e implementa no trial (página atualizada em 25/09/2026).
Trecho de kit/pagina/declarativa.html. A busca só lê e pode usar toolautosubmit; a reserva tem efeito e espera o clique.
<!-- 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: 0A busca volta direto (toolautosubmit). A reserva fica preenchida e parada até o clique: o declarativa.mjs faz o papel da pessoa.
Com toolautosubmit no formulário de reserva, o agente preenche e envia sem a pessoa ver. Reserve o envio automático para o que só lê. E lembre: respondWith exige preventDefault() antes, senão o navegador segue com o envio normal.
Nativo e polyfill. Cada exercício termina num pronto quando.
Rode o bloco e compare as linhas de busca e de reserva.
Pronto quando: node scripts/declarativa.mjs nativo → enviado? não, esperando a pessoa e pessoa clicou em Reservar → {"reservado":true, e saída: 0.
Pegue um formulário de busca do seu site (só leitura), acrescente toolname, tooldescription e toolparamdescription numa cópia local. Deixe um comentário no HTML: experimental, fora da spec, data.
Pronto quando: PAGINA=[sua pasta] node scripts/listar.mjs nativo [arquivo].html → a linha com o seu toolname; no modo sem, o formulário envia como antes. O comentário com a data está no HTML.
A explicação aparece depois da resposta.
Pergunta 1 de 4
Qual a situação da API declarativa (toolname) em 19/10/2026?
Pergunta 2 de 4
Quando usar toolautosubmit?
Pergunta 3 de 4
Como o submit sabe que foi o agente que preencheu?
Pergunta 4 de 4
Sem toolparamdescription num campo, de onde o Chrome tira a descrição?
Escolha uma alternativa. A explicação aparece depois da sua tentativa.