Ciclo de vida: getTools, toolchange, AbortSignal e cancelamento
Ferramenta não é para sempre: a página registra quando a função existe e remove quando sai de cena. Na spec de 16/10/2026 não há unregisterTool; quem remove é o signal de um AbortController. E quem chama pode cancelar uma execução no meio. Nesta aula você vê o ciclo inteiro e os eventos que o navegador dispara.
== Chromium 156.0.8078.4 (Playwright) · modo: nativo
antes: 4 ferramentas
registrou tarefa_lenta: 5 ferramentas
nome repetido: recusado (InvalidStateError)
execução cancelada pelo chamador: AbortError
depois do abort(): 4 ferramentas
eventos: toolchange toolactivated:tarefa_lenta toolcancel:tarefa_lenta toolchange
saída: 0
== Chromium 156.0.8078.4 (Playwright) · modo: polyfill
antes: 4 ferramentas
registrou tarefa_lenta: 5 ferramentas
nome repetido: recusado (InvalidStateError)
execução cancelada pelo chamador: AbortError
depois do abort(): 4 ferramentas
eventos: toolchange toolchange
saída: 0
Mesma sequência nos dois. A diferença está na linha "eventos": só o nativo dispara toolactivated e toolcancel.
Se o execute não ouve signal, o cancelamento rejeita a chamada, mas o trabalho continua: o setTimeout dispara, o fetch completa, a reserva acontece. Em ferramenta com efeito, confira signal.aborted antes de gravar.
03 · Onde registrar e onde abortar
Mesma regra em qualquer framework: registrar no início, abortar no fim.
1. Página
Registre depois de a regra estar pronta e aborte no pagehide.
Ferramenta de uma tela só existe enquanto a tela está montada.
Trocou de rota: abort() e registre as da tela nova.
3. Componente
Em React, registre no efeito e aborte no cleanup; o modo estrito monta duas vezes e o nome repetido daria InvalidStateError.
O padrão vale para outros frameworks; a aula 7 mostra o modelo.
4. Lote
Se a terceira de quatro falha, as duas primeiras ficam penduradas.
O registrar() do kit usa um controller por lote e aborta tudo na falha.
04 · Prática
Ensaio nos dois modos com API. Cada exercício termina num pronto quando.
E1 · Ciclo no nativo
3 min
Rode o bloco do ciclo e leia linha a linha.
Pronto quando:node scripts/ciclo.mjs nativo → nome repetido: recusado (InvalidStateError), execução cancelada pelo chamador: AbortError, depois do abort(): 4 ferramentas e eventos: toolchange toolactivated:tarefa_lenta toolcancel:tarefa_lenta toolchange.
E2 · A diferença do polyfill
3 min
Rode o mesmo no polyfill e anote no seu status-webmcp.md (aula 1) o que o polyfill não faz.
Pronto quando:node scripts/ciclo.mjs polyfill → eventos: toolchange toolchange e saída: 0; a linha está no seu arquivo.
E3 · Tudo ou nada
5 min
Rode os testes de regra do kit: um deles simula a 2ª ferramenta falhando no registro.
Como se remove uma ferramenta na spec de 16/10/2026?
Correto
registerTool(def, { signal }) e depois abort(). unregisterTool, provideContext e clearContext não existem na spec atual.
Não é essa
registerTool(def, { signal }) e depois abort(). unregisterTool, provideContext e clearContext não existem na spec atual.Rever: O ciclo de uma ferramenta
Pergunta 2 de 4
Quem chama aborta a execução. O que acontece com o execute?
Correto
O execute recebe { signal } próprio da chamada. Se ele não ouvir, o trabalho segue apesar da rejeição: confira signal.aborted antes de gravar.
Não é essa
O execute recebe { signal } próprio da chamada. Se ele não ouvir, o trabalho segue apesar da rejeição: confira signal.aborted antes de gravar.Rever: O ciclo em código
Pergunta 3 de 4
Seu teste espera toolactivated e roda só no polyfill 6.0.3. O que acontece?
Correto
Medido em 19/10/2026: o polyfill dispara só toolchange. Por isso a bateria do kit testa nos dois modos e não depende de toolactivated.
Não é essa
Medido em 19/10/2026: o polyfill dispara só toolchange. Por isso a bateria do kit testa nos dois modos e não depende de toolactivated.Rever: O ciclo em código
Pergunta 4 de 4
Num componente React, onde vai o abort()?
Correto
Registrar no efeito e abortar no cleanup. Sem isso, a segunda montagem tenta o mesmo nome e recebe InvalidStateError.
Não é essa
Registrar no efeito e abortar no cleanup. Sem isso, a segunda montagem tenta o mesmo nome e recebe InvalidStateError.Rever: Onde registrar e onde abortar
Teste concluído
Você acertou {a} de {n}. Acertando todas, a aula é marcada como concluída.
Escolha uma alternativa. A explicação aparece depois da sua tentativa.
06 · Em três frases
RemoverSignal no registro e abort() quando a função sai de cena; não existe unregisterTool.
CancelarSignal no executeTool; o execute ouve o próprio signal e para.
Eventostoolchange, toolactivated e toolcancel no document.modelContext; o polyfill só dispara o primeiro.