CronSpell
Validate and explain cron expressions; list next/previous run times in any time zone, DST-aware.
¿Debería usar esto?
Calidad y seguridad
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"cronspell": {
"url": "https://cronspell.mike-tusa.workers.dev/mcp"
}
}
}Puntos de conexión remotos
https://cronspell.mike-tusa.workers.dev/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (4)
🟢validate_cron(expression)
Check whether a cron expression is valid. Returns valid true with the expanded values of every field (minute, hour, day of month, month, day of week, and seconds for 6-field expressions), or valid false with an error code, the field at fault and a message. Detects schedules that can never run (e.g. February 30). Read-only. Same engine as GET /api/validate.
Esquema de entrada
{
"type": "object",
"properties": {
"expression": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Cron expression, e.g. \"0 9 * * 1-5\", \"*/15 * * * *\", \"0 30 8 * * *\" (6 fields = leading seconds) or \"@daily\"."
}
},
"required": [
"expression"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"valid": {
"type": "boolean"
},
"expression": {
"type": "string"
},
"normalized": {
"type": "string"
},
"format": {
"type": "string",
"enum": [
"standard",
"seconds",
"shorthand"
]
},
"dayMatching": {
"type": "string",
"enum": [
"or",
"and"
]
},
"fields": {
"type": "object"
},
"description": {
"type": "string"
},
"error": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"message": {
"type": "string"
},
"field": {
"type": "string"
}
},
"required": [
"code",
"message"
]
},
"version": {
"type": "string"
}
},
"required": [
"valid",
"expression",
"version"
]
}🟢explain_cron(expression)
Explain a cron expression in plain English, e.g. "0 9 * * 1-5" → "At 09:00, on Monday through Friday." Also returns notes on cron rules that often surprise people (day-of-month OR day-of-week, seconds field, shorthand expansion). Invalid expressions return isError with the reason. Read-only. Same engine as GET /api/explain.
Esquema de entrada
{
"type": "object",
"properties": {
"expression": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Cron expression, e.g. \"0 9 * * 1-5\", \"*/15 * * * *\", \"0 30 8 * * *\" (6 fields = leading seconds) or \"@daily\"."
}
},
"required": [
"expression"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"expression": {
"type": "string"
},
"normalized": {
"type": "string"
},
"description": {
"type": "string"
},
"format": {
"type": "string"
},
"dayMatching": {
"type": "string"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"version": {
"type": "string"
}
},
"required": [
"expression",
"description",
"version"
]
}🟢next_cron_runs(expression, timezone, count, from, direction)
List the next (or, with direction "previous", the most recent past) run times of a cron expression in an IANA time zone, DST-aware. Each run has the local time with its UTC offset, the UTC time, unix seconds and weekday. Default 5 runs, max 20; searches up to 50 years. Read-only. Same engine as GET /api/next and GET /api/previous.
Esquema de entrada
{
"type": "object",
"properties": {
"expression": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Cron expression, e.g. \"0 9 * * 1-5\", \"*/15 * * * *\", \"0 30 8 * * *\" (6 fields = leading seconds) or \"@daily\"."
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_+\\-/]+$",
"default": "UTC",
"description": "IANA time zone the schedule runs in, e.g. \"America/Denver\", \"Europe/London\". Default UTC."
},
"count": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 5,
"description": "How many runs (1-20)."
},
"from": {
"type": "string",
"maxLength": 40,
"description": "Start point (exclusive); default now. ISO 8601 with Z or an offset (2026-11-01T09:00:00Z), a local time read in the time zone (2026-11-01T09:00), or unix seconds."
},
"direction": {
"type": "string",
"enum": [
"next",
"previous"
],
"default": "next",
"description": "\"next\" (default) or \"previous\" (most recent first)."
}
},
"required": [
"expression"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"expression": {
"type": "string"
},
"normalized": {
"type": "string"
},
"timezone": {
"type": "string"
},
"description": {
"type": "string"
},
"runs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "Local ISO 8601 time with UTC offset"
},
"utc": {
"type": "string"
},
"unix": {
"type": "number"
},
"weekday": {
"type": "string"
},
"offset": {
"type": "string"
},
"dst": {
"type": "string",
"enum": [
"repeated"
]
}
},
"required": [
"time",
"utc",
"unix",
"weekday",
"offset"
]
}
},
"complete": {
"type": "boolean"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"version": {
"type": "string"
},
"from": {
"type": "string"
},
"direction": {
"type": "string"
}
},
"required": [
"expression",
"timezone",
"runs",
"complete",
"notes",
"version"
]
}🟢cron_runs_between(expression, timezone, start, end, limit)
List every run of a cron expression between start and end (both inclusive) in an IANA time zone, DST-aware, oldest first. Default limit 20, max 100; truncated is true when there are more. Read-only. Same engine as GET /api/between.
Esquema de entrada
{
"type": "object",
"properties": {
"expression": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Cron expression, e.g. \"0 9 * * 1-5\", \"*/15 * * * *\", \"0 30 8 * * *\" (6 fields = leading seconds) or \"@daily\"."
},
"timezone": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[A-Za-z0-9_+\\-/]+$",
"default": "UTC",
"description": "IANA time zone the schedule runs in, e.g. \"America/Denver\", \"Europe/London\". Default UTC."
},
"start": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Window start (inclusive). ISO 8601 with Z or an offset (2026-11-01T09:00:00Z), a local time read in the time zone (2026-11-01T09:00), or unix seconds."
},
"end": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Window end (inclusive). ISO 8601 with Z or an offset (2026-11-01T09:00:00Z), a local time read in the time zone (2026-11-01T09:00), or unix seconds."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Max runs to return (1-100)."
}
},
"required": [
"expression",
"start",
"end"
],
"additionalProperties": false
}Esquema de salida
{
"type": "object",
"properties": {
"expression": {
"type": "string"
},
"normalized": {
"type": "string"
},
"timezone": {
"type": "string"
},
"description": {
"type": "string"
},
"runs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"time": {
"type": "string",
"description": "Local ISO 8601 time with UTC offset"
},
"utc": {
"type": "string"
},
"unix": {
"type": "number"
},
"weekday": {
"type": "string"
},
"offset": {
"type": "string"
},
"dst": {
"type": "string",
"enum": [
"repeated"
]
}
},
"required": [
"time",
"utc",
"unix",
"weekday",
"offset"
]
}
},
"complete": {
"type": "boolean"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
},
"version": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"truncated": {
"type": "boolean"
}
},
"required": [
"expression",
"timezone",
"runs",
"truncated",
"notes",
"version"
]
}Comunidad
Evidencia