Con config dentro de define() controlas el comportamiento de runtime de tu función.
export default define({
config: {
path: "/clientes/:id",
methods: ["GET", "POST"],
timeout: 60000,
mcp: true,
cors: {
origin: "https://app.jelou.ai",
credentials: true,
},
cron: [
{ expression: "0 9 * * *", timezone: "America/Guayaquil" },
],
},
handler: async (input, ctx) => { /* ... */ },
});
Opciones generales
| Opción | Tipo | Predeterminado | Descripción |
|---|
path | string | "*" | Patrón de ruta. Soporta segmentos :param. |
methods | string[] | ["GET","POST","PUT","PATCH","DELETE"] | Métodos HTTP permitidos |
timeout | number | 30000 | Timeout del handler en ms. Retorna 504 si se excede. |
mcp | boolean | true | Exponer como herramienta MCP en /mcp |
Rutas personalizadas
Usa :param para capturar segmentos de la URL en ctx.params:
config: { path: "/users/:id/emails" }
// GET /users/42/emails → ctx.params.id === "42"
El path por defecto es "*", que coincide con cualquier ruta.
CORS
| Opción | Tipo | Predeterminado | Descripción |
|---|
cors.origin | string | string[] | "*" | Origen(es) permitido(s) |
cors.methods | string[] | Todos los métodos estándar | Métodos de preflight CORS |
cors.headers | string[] | Headers comunes | Headers de petición permitidos |
cors.credentials | boolean | false | Permitir credenciales en CORS |
cors.maxAge | number | 86400 | Tiempo de caché de preflight en segundos |
config: {
cors: {
origin: ["https://app.example.com", "https://web.example.com"],
credentials: true,
maxAge: 3600,
}
}
Por defecto todos los orígenes están permitidos ("*"). Restringe cors.origin si tu función solo debe ser llamada desde dominios específicos.
Cron
Define schedules recurrentes directamente en la configuración. Se sincronizan automáticamente en cada despliegue.
| Campo | Tipo | Requerido | Descripción |
|---|
expression | string | Sí | Cron estándar de 5 campos (min hora día mes díaSemana) |
timezone | string | No | Zona horaria IANA (ej: "America/Guayaquil"). Default: UTC. |
config: {
cron: [
{ expression: "0 9 * * *", timezone: "America/Guayaquil" },
{ expression: "0 9 * * *", timezone: "America/Bogota" },
{ expression: "*/30 * * * *" }, // UTC por defecto
],
}
Máximo 10 schedules por función. Cuando un schedule se dispara, tu función recibe una petición con ctx.isCron === true.
Expresiones comunes
| Expresión | Descripción |
|---|
0 9 * * * | Todos los días a las 9:00 AM |
0 9 * * 1-5 | Lunes a viernes a las 9:00 AM |
*/30 * * * * | Cada 30 minutos |
0 0 1 * * | Primer día de cada mes a medianoche |
0 */2 * * * | Cada 2 horas |
AppConfig — configuración global de app()
Cuando usas app() para agrupar múltiples tools, el objeto config de nivel superior aplica valores por defecto a todos los tools:
export default app({
config: { timeout: 30_000, cors: { origin: "*" }, mcp: true },
tools: {
rapido: define({ config: { timeout: 5_000 }, handler: async () => ({}) }),
lento: define({ handler: async () => ({}) }),
},
});
Combinación de config
| Campo | Comportamiento |
|---|
timeout | El tool sobreescribe el global |
methods | El tool sobreescribe el global |
cors | El tool sobreescribe el global |
mcp | El tool sobreescribe el global |
path | Siempre por tool |
cron | Siempre por tool |
Rutas expuestas
Cada función desplegada sirve estas rutas automáticamente:
| Ruta | Descripción |
|---|
/__health | Health check y metadata de la función |
/mcp | Endpoint MCP (a menos que config.mcp: false) |
| Tu ruta | Ruta del handler (default: * coincide con cualquier path) |
| Ruta | Descripción |
|---|
/__health | Health check con lista de todos los tools |
/mcp | Servidor MCP unificado con todos los tools |
/<tool-key> | Ruta de cada tool (kebab-case auto-generado o config.path personalizado) |