Croncool
Inspecciona trabajos programados, ejecuciones, flujos de trabajo duraderos y el estado de los webhooks; ejecuta un trabajo confirmado.
Documentación
Impulsa tus trabajos programados desde tu propio código: una API REST con claves de alcance limitado y límites de tasa por clave, el historial completo de ejecución de cada ejecución y webhooks firmados cuando algo sucede.
Claves de API
Obtén una clave y autentícate
La API REST de Cron permite que tu propio backend haga todo lo que hace el panel de control con tus trabajos programados: crearlos y editarlos, ejecutar uno de inmediato y leer lo que sucedió en cada ejecución pasada.
Abre tu proyecto en el panel de control de Cron y crea una clave de API en Claves de API. El secreto se muestra una sola vez, cuando se crea la clave, y nunca más — guárdalo en un lugar seguro. Una clave pertenece a un solo proyecto, por lo que el proyecto está implícito en la clave y nunca es necesario enviarlo.
Autentica cada solicitud con autenticación básica HTTP que lleve solo el secreto de la clave, codificado en base64, en el encabezado Authorization.
# The Authorization header is HTTP Basic auth carrying only the key secret,
# with no username and no colon.
Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)
Cada endpoint vive bajo https://api.cron.cool. Las solicitudes realizadas con una clave tienen límite de tasa por clave; superar el límite devuelve 429.
Inicio rápido
Tus primeras tres llamadas
Lista los trabajos de tu proyecto, programa uno nuevo y luego lee su historial de ejecución.
# List the cron jobs of the project the key belongs to
curl https://api.cron.cool/api/jobs \
-H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"
# Create a job that calls your endpoint every five minutes.
# expression is an EventBridge Scheduler expression — rate(5 minutes) or
# cron(0/5 * * * ? *), not a five-field unix crontab line.
curl -X POST https://api.cron.cool/api/jobs \
-H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)" \
-H "Content-Type: application/json" \
-d '{
"name": "warm-cache",
"type": "webhook",
"expression": "rate(5 minutes)",
"url": "https://example.com/warm-cache",
"httpMethod": "POST",
"contentType": "application/json",
"input": { "reason": "scheduled warm-up" }
}'
# Read the last executions of that job
curl https://api.cron.cool/api/jobs/JOB_ID/executions?limit=20 \
-H "Authorization: Basic $(printf %s YOUR_API_KEY_SECRET | base64)"
Explora la referencia completa de la API — cada endpoint con sus parámetros, cuerpo de solicitud, respuestas y alcance requerido.
CLI
Interfaz de línea de comandos
Los mismos proyectos, trabajos y estado de ejecución están disponibles desde tu terminal a través del CLI de croncool. Instálalo globalmente con npm, o ejecútalo puntualmente con npx.
La autenticación es un solo comando: croncool login abre tu navegador para iniciar sesión en tu cuenta de Croncool y guarda una sesión para comandos posteriores — sin necesidad de pegar una clave de API.
# Install once, globally
npm install -g croncool
# or run it ad hoc without installing
npx croncool --help
# Log in — opens your browser to sign in and stores a session
croncool login
# List your projects with their ids
croncool projects list
# The jobs of one project, with schedule and id
croncool jobs list --projectId PROJECT_ID
# One job's schedule, target and last execution status
croncool jobs read JOB_ID
# Fire a job right now
croncool jobs execute JOB_ID
El CLI es de código abierto en github.com/croncool/cli y se publica como croncool en npm. Ejecuta cualquier comando con --help para ver sus opciones.
Alcances
Privilegio mínimo por defecto
Cada clave lleva una lista de alcances, por lo que una integración que solo necesita observar tus trabajos nunca obtiene la capacidad de modificarlos. Las claves nuevas comienzan con solo lectura; amplíalas explícitamente en el panel de control. Una solicitud cuya clave carece del alcance que requiere un endpoint se rechaza con 403.
- jobs:readLista tus trabajos cron y lee un trabajo individual.
- jobs:writeCrea, actualiza y elimina trabajos, y ejecuta uno bajo demanda.
- executions:readLee el historial de ejecución de un trabajo.
- workflows:readLee ejecuciones de flujos de trabajo alojados, pasos, eventos y hooks.
- workflows:writeCrea eventos de flujo de trabajo, pon en cola y despacha trabajo, cancela y reproduce ejecuciones.
Los alcances workflows:read y workflows:write controlan los endpoints que el runtime de flujos de trabajo alojado llama en tu nombre. La referencia en /api/ cubre los endpoints de trabajos y suscripciones de webhook que llamas tú mismo; los endpoints de flujos de trabajo no forman parte de ella.
Conector MCP
Usa Croncool desde Claude y ChatGPT
El conector MCP remoto de Croncool permite que un asistente inspeccione los proyectos, trabajos, ejecuciones, flujos de trabajo duraderos y el estado de entrega de webhooks ya disponibles para tu organización con sesión iniciada. Agrega la misma URL de producción en cualquier host que admita MCP remoto sobre HTTP:
https://mcp.cron.cool/mcp
Elige la opción del host para agregar un conector personalizado o servidor MCP, pega esa URL y completa el inicio de sesión OAuth y la pantalla de consentimiento de Croncool. Nunca pegues una clave de API en una conversación. OAuth mantiene cada llamada dentro de la organización y los alcances aprobados para esa cuenta con sesión iniciada.
Herramientas disponibles
- list_projectsEncuentra proyectos accesibles y sus ids exactos.
- list_jobsRecorre los horarios de trabajos seguros y los orígenes de destino dentro de la organización autenticada.
- get_jobInspecciona el horario, método, origen de destino y estado más reciente de un trabajo.
- get_job_runsRevisa el estado de ejecución limitado, código HTTP, duración y metadatos de tiempo.
- list_workflowsResume los conteos de ejecuciones de flujos de trabajo alojados para un proyecto exacto.
- list_workflow_runsRecorre el estado de flujo de trabajo seguro y metadatos de tiempo.
- get_workflow_runInspecciona una ejecución de flujo de trabajo y un rastro de pasos limitado sin cargas útiles.
- list_webhook_subscriptionsAudita orígenes de endpoints, filtros de eventos y estado de entrega sin secretos.
- show_project_overviewRenderiza una vista general limitada de proyecto y trabajos en hosts MCP compatibles.
- run_jobEjecuta un trabajo existente ahora después de confirmación explícita; cada llamada puede causar efectos reales posteriores.
Límite seguro de datos
Los resultados del conector usan listas de permitidos campo por campo. Entradas de solicitudes de trabajos, información de usuario de URL de destino, rutas, consultas y fragmentos, cuerpos de respuesta y errores de ejecución, entradas y salidas de flujos de trabajo, rutas y consultas de endpoints de webhook, secretos de firma, credenciales, tokens y campos de propiedad de la organización nunca son visibles para el modelo. Los destinos de destino y webhook se reducen a su origen HTTP o HTTPS.
Ejecutar un trabajo ahora
run_job es la única herramienta del conector que cambia el estado. Invoca la solicitud ya configurada en un trabajo exacto. Ese servicio posterior puede escribir datos, enviar mensajes, cobrar por trabajo o desencadenar a un tercero. Croncool no agrega una clave de idempotencia ni un tiempo de espera de aplicación, por lo que el resultado puede ser desconocido después de un tiempo de espera de transporte y repetir la llamada puede duplicar efectos. El asistente debe primero mostrar el trabajo exacto y el origen de destino, pedir confirmación explícita, invocarlo una vez y usar get_job_runs para verificar el resultado registrado en lugar de reintentar automáticamente.
Ejemplos de solicitudes
- "Lista mis proyectos de Croncool y muestra la vista general del primer proyecto."
- "Muestra las ejecuciones fallidas del flujo de trabajo nightly-sync en este proyecto, luego inspecciona el fallo más reciente."
- "Audita mis suscripciones de webhook y marca cualquier deshabilitada después de fallos de entrega repetidos."
Habilidades de agente
Enseña a tu agente de codificación Croncool
Croncool incluye Habilidades de agente — guías que siguen el estándar agentskills.io que enseñan a los agentes de codificación cómo inspeccionar y operar trabajos programados con el CLI de croncool y el conector MCP, en lugar de adivinar comandos y herramientas.
# Install the Croncool skills into your coding agent
npx skills add croncool/skills
Un solo comando instala las habilidades en Claude Code, Cursor, Codex, Gemini CLI y cualquier otro agente que siga el estándar de Habilidades. El CLI también incluye las mismas guías, con versiones coincidentes con los comandos que incluye: croncool skills get <name> imprime una bajo demanda.
Las habilidades son de código abierto en github.com/croncool/skills. Los usuarios de Claude también pueden instalar el plugin de Croncool para Claude, que incluye el conector junto con las habilidades: github.com/croncool/claude-plugin.
Webhooks
Webhooks firmados
Agrega una suscripción de webhook a tu proyecto y Cron envía por POST los eventos que elegiste a tu servidor a medida que ocurren.
- job.createdSe creó un trabajo.
- job.updatedSe editó, pausó o reanudó un trabajo.
- job.deletedSe eliminó un trabajo.
- job.executedSe ejecutó un trabajo; la carga útil es la ejecución, con su estado, estado HTTP, duración y cuerpo de respuesta truncado.
POST https://your-server.com/cron-webhook
{
"event": "job.executed",
"timestamp": 1719000000,
"data": { "...": "..." }
}
Verifica la firma
Cada entrega lleva un encabezado X-Croncool-Signature de la forma t=timestamp,v1=firma, donde la firma es un HMAC-SHA256 de timestamp.body con la clave del secreto de suscripción que se te mostró una vez cuando se creó la suscripción. Recalcúlala sobre el cuerpo sin procesar y compara antes de confiar en la carga útil.
import crypto from 'node:crypto'
// body must be the RAW request body, byte for byte
function verify(header, body, secret) {
const [t, v1] = (header || '').split(',').map(part => part.split('=')[1])
if (!t || !v1) return false
const expected = crypto
.createHmac('sha256', secret)
.update(\`${t}.${body}\`)
.digest('hex')
// timingSafeEqual throws on a length mismatch, so a malformed signature
// has to be rejected before the comparison rather than by it.
if (v1.length !== expected.length) return false
return crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
}
La entrega es un intento de mejor esfuerzo con un tiempo de espera de cinco segundos y sin reintentos, por lo que responde 2xx rápidamente y haz el trabajo de forma asíncrona. Un endpoint que falla veinte veces seguidas se deshabilita automáticamente y debe re-habilitarse en el panel de control.