Herramientas del Agente
En HeroMate, las tools son endpoints. Cualquier endpoint que ya tengas — una query SQL, un workflow que cobra una tarjeta, una función que envía un email — lo puedes activar como tool. El agente lee su descripción, decide cuándo llamarlo y recibe lo que el endpoint devuelva.
Esto significa que no escribes "tools del agente" aparte de tu app. El mismo endpoint list_products que tu frontend en React llama con useEndpoint() puede ser llamado por el agente dentro de una conversación.
Convertir un endpoint en tool
Abre el endpoint
Ve a la página de detalle del endpoint en el dashboard.
Activa el toggle Tool
En la cabecera, haz clic en el toggle Tool para activarlo. Aparecerá un badge junto al nombre del endpoint.
Escribe una descripción para la tool
Esto es lo que ve el agente. Hazla clara y específica — es cómo el agente decide cuándo llamar a la tool.
Bien: "Busca productos por nombre, categoría o rango de precio. Devuelve hasta 50 productos coincidentes con id, name, price y stock."
Mal: "Endpoint de productos"
Define el schema de entrada
Haz clic en Edit input schema y describe qué parámetros acepta la tool. Esto se convierte en el JSON Schema que el LLM usa para generar argumentos.
Engánchala al agente
Abre el endpoint del agente, busca el campo Tools y selecciona la tool. Guarda.
Hazlo pidiéndolo
El MCP permite a tu asistente IA hacer todo esto. Solo dile "Convierte list_products y create_order en tools y asígnalas a mi agente sales_assistant." El MCP cloud expone 41 tools para agentes — mira la referencia de MCP.
Definirlo vía YAML / MCP
Cuando tú (o tu asistente IA) defines un agente en YAML o a través del MCP, referencias las tools por su nombre de endpoint, no por UUID:
agent:
provider: DYPAI Managed
model: gpt-5-nano
tools: [list_tasks, create_task]
El codec mapea esos nombres a los tool_ids (UUIDs) subyacentes automáticamente, y los vuelve a mapear a nombres cuando lee el workflow. No escribas tool_ids a mano con nombres dentro — pon los nombres de endpoint bajo tools y deja que HeroMate resuelva los IDs.
Schemas de entrada
El schema de entrada le dice al LLM qué argumentos puede pasar. HeroMate usa JSON Schema estándar.
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Término de búsqueda para el nombre del producto"
},
"category": {
"type": "string",
"enum": ["electronics", "clothing", "books"],
"description": "Filtro opcional por categoría"
},
"max_price": {
"type": "number",
"description": "Precio máximo en EUR"
}
},
"required": ["query"]
}
Consejos para buenos schemas:
- Usa
descriptionen cada campo. El LLM los lee. - Usa
enumpara restringir opciones cuando hay una lista fija — el LLM no inventará valores. - Marca los campos obligatorios para que el LLM sepa qué debe proporcionar.
- Simple. Un schema con 20 campos opcionales suele indicar que la tool debería partirse en dos.
Cómo usa el agente una tool
Cuando el agente decide llamar a una tool:
- El LLM genera los argumentos que encajan con el schema de entrada.
- HeroMate ejecuta el flujo de la tool dentro del mismo proyecto con el contexto del usuario que llamó al agente. No hace una nueva petición HTTP ni vuelve a aplicar la autenticación o los roles del endpoint de la tool.
- El endpoint devuelve su respuesta normal.
- Esa respuesta se devuelve al LLM como resultado de tool.
- El agente decide si llamar a otra tool o producir la respuesta final.
Todo esto ocurre dentro de una sola ejecución. Tu frontend ve una única respuesta en streaming, no cinco peticiones separadas.
Guardrails
Los agentes pueden causar mucho daño si entran en bucle infinito o llaman a tools sin límite. HeroMate incluye varios guardrails, configurables por agente:
| Parameter | Type | Description |
|---|---|---|
max_iterations | número (defecto 5) | Cuántas rondas de tool-call puede ejecutar el agente antes de rendirse y devolver lo que tenga. Evita bucles infinitos. |
tool_timeout | segundos (defecto 30) | Timeout por tool. Si una tool tarda más, se aborta y el agente recibe un error del que puede recuperarse. |
Límite de profundidad | automático | Una tool que es agente no puede ser llamada por otro agente a más de 3 niveles. Evita que cadenas recursivas de tools se disparen. |
Tracking del stack de workflows | automático | Si una tool ya está en el stack de ejecución, no puede volver a llamarse en la misma request. Evita bucles A → B → A. |
Auth dentro de las tools
Exige autenticación JWT en el endpoint del agente cuando las tools necesiten una identidad verificada y limita sus roles permitidos si corresponde. Las tools heredan el contexto de ese usuario: ${current_user_id} en SQL resuelve a su ID. Sin embargo, la llamada ejecuta directamente el flujo de la tool, sin volver a aplicar el modo de autenticación HTTP ni los roles permitidos del endpoint de la tool. HeroMate tampoco dispone de seguridad a nivel de fila (RLS).
Cada flujo usado como tool debe comprobar el rol del usuario y limitar las lecturas y escrituras a sus registros autorizados. Puedes reutilizar GET /my-orders desde la app y el agente, pero la protección JWT de su ruta HTTP por sí sola no protege la llamada interna: aplica esos controles dentro del flujo.
¿Qué endpoints son buenas tools?
Bien
Endpoints de consulta que devuelven datos estructurados (list, search, get). Mutaciones simples (create, update) con inputs claros. Acciones idempotentes que el agente puede reintentar sin riesgo.
Evita
Endpoints con efectos secundarios complejos (enviar emails, cobrar tarjetas) salvo que realmente quieras que el agente lo haga autónomamente. Endpoints sin schemas claros de input/output.
Las tools destructivas requieren confirmación
Para acciones importantes — borrar, enviar pagos, enviar mensajes — pide aprobación explícita en la app y verifícala en el servidor antes de que actúe el flujo. El modelo puede generar confirm: true por sí mismo; ese campo no demuestra la aprobación del usuario. También puedes excluir esos endpoints de las tools del agente.
Límites
| Tools por agente | Sin límite estricto, pero >10 empieza a afectar la precisión del modelo |
| Longitud de descripción | 1024 caracteres |
| Timeout de tool | 1–120 segundos |
| Iteraciones máximas | 1–20 |
| Profundidad recursiva | 3 niveles |