¿Cuándo usar app() vs define()?
Si tu proyecto tiene un solo handler, usa
define(). Si necesitas agrupar múltiples operaciones — por ejemplo, enviar y leer emails desde el mismo servicio — usa app().
Ejemplo básico
index.ts
Prueba local
Inicia el servidor conjelou functions dev y prueba cada tool en su ruta:
400 con detalles:
API
AppConfig
Rutas auto-generadas
Tus keys del objetotools se convierten automáticamente a kebab-case para generar las rutas HTTP:
Para personalizar una ruta, usa
config.path en el define() individual:
Combinación de config
La configuración global deapp() se aplica a todos los tools. Cada define() puede sobreescribir valores específicos:
rapido tiene un timeout de 5 segundos y lento hereda los 30 segundos globales. Ambos comparten la configuración CORS.
Endpoint de salud
En modo app,/__health retorna información de todos los tools:
Guardas de tipo
UsaisEdgeApp() e isEdgeFunction() para identificar el tipo de export en runtime:
Multi-tool cron
Cada tool dentro deapp() puede tener sus propios schedules cron independientes. Las peticiones cron se envían a la ruta específica de cada tool.
Multi-tool MCP
Un solo servidor MCP en/mcp registra automáticamente todos los tools del app(). Para excluir un tool del registro MCP, usa mcp: false en su config:
toolPublico vía MCP. toolInterno solo es accesible por HTTP directo en su ruta /tool-interno.
Rutas expuestas (modo app)
Problemas comunes
- 404 en la ruta del tool
- Validación falla con 400
- Tool no aparece en MCP
Las keys de
tools se convierten a kebab-case. Si tu key es enviarEmail, la ruta es /enviar-email, no /enviarEmail.Verifica las rutas reales con el health check:Public per-tool
Puedes mezclar tools públicos y protegidos en el mismoapp():
/__health, cada tool reporta su estado public:
Siguientes pasos
Pruebas
Aprende a probar funciones multi-tool con
createMockApp().MCP
Configura el servidor MCP unificado para tus agentes IA.
Cron
Schedules independientes por tool dentro de
app().