Overview
Cron Expression Parser works by parsing cron expressions and validating their syntax. It returns field-by-field analysis, human-readable descriptions, and frequency information for both 5-field and 6-field cron formats.
Live Test Cron Parser Skill Skill →
The tool
Once your client is connected to the VerveKit server, this appears in its tool list as CronParserSkill. It is read-only and open-world — it fetches and never mutates anything on your side — so most clients call it without asking you to confirm.
{
"name": "CronParserSkill",
"arguments": {
"expression": "0 9 * * 1-5"
}
}You do not name the tool yourself; the model picks it. Asking about 0 9 * * 1-5 in the terms this skill covers is enough for it to reach for CronParserSkill on its own — naming it explicitly also works, and is the way to force the call.
Connecting
One server URL covers every skill in the catalog, including this one. Authorization is OAuth: the client opens a browser once, and there is no key to paste into a config file.
{
"mcpServers": {
"vervekit": {
"url": "https://api.vervekit.com/v1/mcp"
}
}
}https://api.vervekit.com/v1/mcpPer-client setup — Claude, Cursor, VS Code, ChatGPT — is on the MCP setup page.
Arguments
These are the properties on the tool's inputSchema, so a well-behaved client validates them before the call is made. Premium arguments are accepted on every plan but only take effect on plans that include them.
| Argument | Type | Description |
|---|---|---|
expressionRequired | string | The cron expression to parse (5-field or 6-field format) |
What the model gets back
The result carries a structuredContent object matching the tool's declared outputSchema, so a client reads fields without parsing prose. status is "ok" and error is null on success; a null field means the value was not available for that input, not that the call failed.
{
"status": "ok",
"error": null,
"data": {
"expression": "0 9 * * 1-5",
"isValid": true,
"format": "5-field",
"fields": {
"second": {
"expression": "0",
"description": "At 0",
"values": [
0
]
},
"minute": {
"expression": "0",
"description": "At 0",
"values": [
0
]
},
"hour": {
"expression": "9",
"description": "At 9",
"values": [
9
]
},
"dayOfMonth": {
"expression": "*",
"description": "Every",
"values": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31
]
},
"month": {
"expression": "*",
"description": "Every",
"values": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
]
},
"dayOfWeek": {
"expression": "1-5",
"description": "From 1 to 5",
"values": [
1,
2,
3,
4,
5
]
}
},
"description": "At 9:00 AM on Monday, Tuesday, Wednesday, Thursday, Friday",
"frequency": {
"type": "Daily",
"interval": "day"
},
"nextRuns": [
"2026-02-19T09:00:00.000Z",
"2026-02-20T09:00:00.000Z",
"2026-02-21T09:00:00.000Z",
"2026-02-24T09:00:00.000Z",
"2026-02-25T09:00:00.000Z"
]
}
}
Response fields
Paths are relative to data. Premium fields are absent rather than zeroed on plans that do not include them, so check for presence instead of comparing to 0.
| Field | Type | Example | Description |
|---|---|---|---|
expression | string | 0 9 * * 1-5 | The original cron expression submitted for parsing |
isValid | boolean | true | Whether the cron expression is valid and syntactically correct |
format | string | 5-field | Cron format type (5-field or 6-field with optional seconds) |
fieldsPremium | object | {…} | Detailed breakdown of each cron field with expression and values |
fields.secondPremium | object | {…} | The seconds field, its description and the seconds it fires on |
fields.second.expressionPremium | string | 0 | The second field cron expression (0-59 or special) |
fields.second.descriptionPremium | string | At 0 | Human-readable description of second field timing |
fields.second.valuesPremium | array | [0] | Array of valid second values matching the expression |
fields.minutePremium | object | {…} | The minutes field, its description and the minutes it fires on |
fields.minute.expressionPremium | string | 0 | The minute field cron expression (0-59 or special) |
fields.minute.descriptionPremium | string | At 0 | Human-readable description of minute field timing |
fields.minute.valuesPremium | array | [0] | Array of valid minute values matching the expression |
fields.hourPremium | object | {…} | The hours field, its description and the hours it fires on |
fields.hour.expressionPremium | string | 9 | The hour field cron expression (0-23 or special) |
fields.hour.descriptionPremium | string | At 9 | Human-readable description of hour field timing |
fields.hour.valuesPremium | array | [9] | Array of valid hour values matching the expression |
fields.dayOfMonthPremium | object | {…} | The day-of-month field, its description and the days it fires on |
fields.dayOfMonth.expressionPremium | string | * | The day of month field cron expression (1-31 or special) |
fields.dayOfMonth.descriptionPremium | string | Every | Human-readable description of day of month timing |
fields.dayOfMonth.valuesPremium | array | [1,2,3] | Array of valid day values matching the expression |
fields.monthPremium | object | {…} | The month field, its description and the months it fires on |
fields.month.expressionPremium | string | * | The month field cron expression (1-12 or special) |
fields.month.descriptionPremium | string | Every | Human-readable description of month field timing |
fields.month.valuesPremium | array | [1,2,3] | Array of valid month values matching the expression |
fields.dayOfWeekPremium | object | {…} | The day-of-week field, its description and the days it fires on |
fields.dayOfWeek.expressionPremium | string | 1-5 | The day of week field cron expression (0-6 or special) |
fields.dayOfWeek.descriptionPremium | string | From 1 to 5 | Human-readable description of day of week timing |
fields.dayOfWeek.valuesPremium | array | [1,2,3] | Array of valid day values matching the expression |
description | string | At 9:00 AM on Monday, Tuesday, Wednesday, Thursday, Friday | Human-readable description of when cron will execute |
frequency | object | {…} | How often the schedule fires, as a type and interval |
frequency.typePremium | string | Daily | Frequency type (e.g., Daily, Weekly, Monthly, Hourly) |
frequency.intervalPremium | string | day | Frequency interval unit (day, week, month, hour, minute) |
nextRuns | array | ["2026-02-19T09:00:00.000Z","2026-02-20T09:00:00.000Z","2026-02-21T09:00:00.000Z"] | Next 5 scheduled execution times in ISO 8601 format |
Failure modes
Errors come back as tool errors carrying a sentence the model can act on, not a bare status code. Error handling covers the full list.
| Status | What it means |
|---|---|
400 / 422 | The arguments did not validate. The message names the offending one. |
401 | The OAuth session is invalid or expired — reconnect the server. |
403 | Blocked by a key restriction or an IP allow-list. Never a bad identity. |
404 | This skill is not part of VerveKit. Check the catalog. |
429 | Out of credits, or a brief rate limit. The message tells them apart. |
A call costs 2 credits each time the tool actually runs; a model that reasons about the tool without calling it costs nothing.
Use cases
- Syntax Validation
- Validate cron expressions before deploying them to production to avoid scheduling errors
- Schedule Documentation
- Generate human-readable descriptions of cron expressions for documentation and team communication
- Debugging
- Parse and analyze existing cron expressions to understand their timing and identify issues
- Migration
- Verify cron expressions when migrating between systems or converting from 5-field to 6-field format
Other ways to use Cron Parser Skill
Set up Cron Parser Skill on VerveKit, or reach the same source a different way. Your VerveKit account and credits work on all of them — one key, one balance.
Related
More in Text Processing: