Skip to main content
Con app() agrupas varias operaciones relacionadas en un solo despliegue. Tus agentes IA descubren cada tool individualmente vía MCP, y cada uno tiene su propia ruta HTTP. Patrón: app() + múltiples define() + .describe() en cada campo + config compartida + ctx.env.get() para secrets.
index.ts

Prueba local

Inicia el servidor con jelou functions dev y prueba cada tool:
Si envías un input inválido, recibes un 400 con el detalle del error:

Por qué funciona así

  • Rutas automáticas — las keys crearContacto, buscarContactos, eliminarContacto generan /crear-contacto, /buscar-contactos, /eliminar-contacto.
  • GET vs POSTbuscarContactos usa config: { methods: ["GET"] } para recibir parámetros como query string. Los demás usan POST por defecto.
  • description importa — cada tool tiene una descripción específica que le dice al agente IA exactamente qué hace y qué retorna. “Busca contactos por nombre o email” es mucho mejor que “Busca contactos”.
  • Config compartidacors y timeout se definen una vez en app() y aplican a todos los tools. Cada tool puede sobreescribirlos si necesita.
  • Secrets centralizados — los 3 tools usan ctx.env.get("CRM_API_KEY"). Configuras el secret una vez con jelou secrets set.
  • MCP unificadocurl http://localhost:3000/mcp retorna los 3 tools como herramientas independientes que el agente puede invocar.