Un handler que tira excepciones es un handler que rompe la conversación. El agente recibe un crash y no sabe si:
La diferencia entre un MCP que se usa y uno que se descarta es cómo maneja los casos malos. La regla:
Los errores se devuelven como datos estructurados, no como excepciones. El agente puede leer datos. No puede recuperarse de un crash.
A la derecha tenés el schema de transfer_credits ya hecho, y un starter del handler que funciona en el happy path pero explota en todo lo demás.
Tu trabajo: agregar las validaciones para que cuatro escenarios diferentes terminen con un resultado limpio:
ok: true.ok: false con error identificable.ok: false con error identificable.ok: false, incluyendo cuánto hay disponible.{
ok: false,
error: {
code: "insufficient_funds",
message: "Em tiene 200 créditos, intentó transferir 999.",
balance: 200
}
}code. string corto, identificable. El agente lo lee para decidir qué hacer.message. texto humano. Lo puede mostrar al usuario o usar como contexto.balance ayuda al agente a sugerir un monto válido.Este ejercicio NO ejecuta tu código. Un LLM-judge lee tu implementación y razona sobre si manejaría correctamente los cuatro escenarios. Eso significa que tu código tiene que ser leíble. variables con nombres claros, control flow obvio. El judge no ejecuta, infiere.
Tip: estructurá
if-returnearly. Cada validación es un check + early return. Sin nesting, sin else.