Firma
Opciones
| Opción | Tipo | Requerido | Predeterminado | Descripción |
|---|---|---|---|---|
name | string | No | — | Nombre visible y nombre de la herramienta MCP |
description | string | No | — | Descripción legible, mostrada en el listado MCP |
input | z.ZodObject | No | — | Esquema Zod para validar la entrada. Rechaza con 400 si falla. |
output | z.ZodObject | No | — | Esquema Zod para validar la salida. Solo advierte, nunca bloquea. |
tags | string[] | No | — | Tags de categorización |
auth | AuthOption | No | false | Autenticación Bearer token (ver Autenticación) |
config | Config | No | {} | Configuración de runtime (ver Configuración) |
handler | (input, ctx, request) => Promise | Sí | — | Función que procesa la petición |
Handler
| Parámetro | Tipo | Descripción |
|---|---|---|
input | z.infer<TInput> | Entrada parseada y validada (con tipos inferidos del esquema Zod) |
ctx | Context | Objeto context con metadata de la petición y acceso a la plataforma (ver Context) |
request | Request | Objeto Web estándar Request |
Del handler a la respuesta HTTP
Lo que retornas en el handler determina la respuesta HTTP que recibe el cliente:| Retornas en el handler | Status | Content-Type | Body |
|---|---|---|---|
{ ok: true } | 200 | application/json | {"ok":true} |
"texto plano" | 200 | text/plain | texto plano |
undefined / sin return | 204 | — | vacío |
throw new Error(...) | 500 | application/json | {"error":"Internal server error"} |
| Timeout excedido | 504 | application/json | {"error":"Function timed out"} |
| Input inválido (schema) | 400 | application/json | {"error":"Validation failed","details":[...]} |
Los errores de negocio (cliente no encontrado, saldo insuficiente) son tu responsabilidad — retornas un JSON con tu propia estructura y el status siempre es
200. Los errores de plataforma (validación del schema, timeout, crash) generan automáticamente 400, 500 o 504.Validación de entrada
Cuando defines un esquemainput, cada petición se valida antes de ejecutar el handler. Si falla, el handler no se ejecuta y se retorna un 400:
z.coerce para convertir tipos:
Validación de salida
Cuando defines un esquemaoutput, el valor retornado se valida después de la ejecución. Si no coincide, se registra una advertencia en los logs pero la respuesta se envía normalmente con status 200.
La validación de output nunca bloquea la respuesta. Es una herramienta de desarrollo para detectar inconsistencias.
Anotaciones .describe()
Usa .describe() en los campos del esquema para documentar parámetros. Estas descripciones aparecen automáticamente en el esquema MCP:
app() — funciones multi-tool
Usa app() para agrupar múltiples define() en un solo despliegue. Cada tool obtiene su propia ruta HTTP, registro MCP y schedules cron.
AppConfig
Guardas de tipo
Guía completa de multi-tool
Rutas auto-generadas, combinación de config, MCP unificado y cron por tool.