CronSpell
Validate and explain cron expressions; list next/previous run times in any time zone, DST-aware.
사용해야 할까요
품질 및 안전성
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"cronspell": {
"url": "https://cronspell.mike-tusa.workers.dev/mcp"
}
}
}원격 엔드포인트
https://cronspell.mike-tusa.workers.dev/mcpstreamable-http할 수 있는 일
도구 목록
도구 (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.
입력 스키마
{
"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
}출력 스키마
{
"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.
입력 스키마
{
"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
}출력 스키마
{
"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.
입력 스키마
{
"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
}출력 스키마
{
"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.
입력 스키마
{
"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
}출력 스키마
{
"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"
]
}커뮤니티
증거