Ciclo de vida: getTools, toolchange, AbortSignal y cancelación
Una tool no es para siempre: la página la registra cuando la función existe y la quita cuando sale de escena. En la spec del 16/10/2026 no existe unregisterTool; quien la quita es el signal de un AbortController. Y quien llama puede cancelar una ejecución a la mitad. En esta clase ves el ciclo completo y los eventos que dispara el navegador.
== 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
Misma secuencia en los dos. La diferencia está en la línea "eventos": solo el nativo dispara toolactivated y toolcancel.
Si el execute no escucha signal, la cancelación rechaza la llamada, pero el trabajo continúa: el setTimeout se dispara, el fetch se completa, la reserva ocurre. En una tool con efecto, revisa signal.aborted antes de guardar.
03 · Dónde registrar y dónde abortar
Misma regla en cualquier framework: registrar al inicio, abortar al final.
1. Página
Registra cuando la regla ya esté lista y aborta en pagehide.
Una tool de una sola pantalla existe solo mientras la pantalla está montada.
Cambió la ruta: abort() y registra las de la pantalla nueva.
3. Componente
En React, registra en el efecto y aborta en el cleanup; el modo estricto monta dos veces y el nombre repetido daría InvalidStateError.
El patrón sirve para otros frameworks; la clase 7 muestra el modelo.
4. Lote
Si la tercera de cuatro falla, las dos primeras quedan colgadas.
El registrar() del kit usa un controller por lote y aborta todo si hay una falla.
04 · Práctica
Ensayo en los dos modos con API. Cada ejercicio termina con un listo cuando.
E1 · Ciclo en el nativo
3 min
Ejecuta el bloque del ciclo y léelo línea por línea.
Listo cuando:node scripts/ciclo.mjs nativo → nome repetido: recusado (InvalidStateError), execução cancelada pelo chamador: AbortError, depois do abort(): 4 ferramentas y eventos: toolchange toolactivated:tarefa_lenta toolcancel:tarefa_lenta toolchange.
E2 · La diferencia del polyfill
3 min
Ejecuta lo mismo en el polyfill y anota en tu status-webmcp.md (clase 1) lo que el polyfill no hace.
Listo cuando:node scripts/ciclo.mjs polyfill → eventos: toolchange toolchange y saída: 0; la línea está en tu archivo.
E3 · Todo o nada
5 min
Ejecuta las pruebas de regla del kit: una de ellas simula que la 2.ª tool falla en el registro.
¿Cómo se quita una tool en la spec del 16/10/2026?
Correcto
registerTool(def, { signal }) y luego abort(). unregisterTool, provideContext y clearContext no existen en la spec actual.
No es esa
registerTool(def, { signal }) y luego abort(). unregisterTool, provideContext y clearContext no existen en la spec actual.Repasar: El ciclo de una tool
Pregunta 2 de 4
Quien llama aborta la ejecución. ¿Qué pasa con el execute?
Correcto
El execute recibe un { signal } propio de la llamada. Si no lo escucha, el trabajo sigue a pesar del rechazo: revisa signal.aborted antes de guardar.
No es esa
El execute recibe un { signal } propio de la llamada. Si no lo escucha, el trabajo sigue a pesar del rechazo: revisa signal.aborted antes de guardar.Repasar: El ciclo en código
Pregunta 3 de 4
Tu prueba espera toolactivated y corre solo en el polyfill 6.0.3. ¿Qué pasa?
Correcto
Medido el 19/10/2026: el polyfill dispara solo toolchange. Por eso la batería del kit prueba en los dos modos y no depende de toolactivated.
No es esa
Medido el 19/10/2026: el polyfill dispara solo toolchange. Por eso la batería del kit prueba en los dos modos y no depende de toolactivated.Repasar: El ciclo en código
Pregunta 4 de 4
En un componente React, ¿dónde va el abort()?
Correcto
Registra en el efecto y aborta en el cleanup. Sin eso, el segundo montaje intenta el mismo nombre y recibe InvalidStateError.
No es esa
Registra en el efecto y aborta en el cleanup. Sin eso, el segundo montaje intenta el mismo nombre y recibe InvalidStateError.Repasar: Dónde registrar y dónde abortar
Prueba completada
Acertaste {a} de {n}. Si aciertas todas, la clase se marca como completada.
Elige una alternativa. La explicación aparece después de tu intento.
06 · En tres frases
QuitarSignal en el registro y abort() cuando la función sale de escena; no existe unregisterTool.
CancelarSignal en el executeTool; el execute escucha su propio signal y se detiene.
Eventostoolchange, toolactivated y toolcancel en el document.modelContext; el polyfill solo dispara el primero.