{
  "server": "crontoenglish",
  "url": "https://crontoenglish.com/api/mcp",
  "date": "2026-09-03",
  "protocolVersion": "2026-07-28",
  "serverInfo": {
    "name": "cron-translator",
    "version": "0.1.0"
  },
  "listChangedDeclared": true,
  "toolCount": 3,
  "outputSchemaCoveragePct": 0,
  "tools": [
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "Convert an English schedule description into a standard five-field cron expression, then explain and validate the result.\n\nUse this when a user describes a schedule in words and needs the expression. This is a RULE-BASED converter, not a language model: it handles a fixed grammar and returns an error listing the supported phrasings when a phrase falls outside it. That refusal is deliberate — a plausible-looking wrong schedule is worse than no answer. If a phrase is rejected, rephrase it into one of the supported shapes and call again.\n\nSupported shapes include: every minute; every 5 minutes; every hour; every 6 hours; every day at 9am; every day at 14:30.\n\nReturns the expression, which rule matched, any words the rules did not use (check these — leftover words may mean the phrase was misread), the English description of the result, warnings, and the next run times.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "phrase": {
            "description": "An English schedule description, for example \"every weekday at 9am\" or \"on the 1st of every month at midnight\". Times accept 24-hour (\"14:30\"), 12-hour (\"2:30pm\"), \"midnight\", and \"noon\".",
            "type": "string"
          },
          "timezone": {
            "default": "UTC",
            "description": "IANA timezone name, for example \"UTC\", \"America/New_York\", or \"Europe/Berlin\". Cron expressions carry no timezone of their own, so this decides when the schedule actually fires. Defaults to UTC.",
            "type": "string"
          }
        },
        "required": [
          "phrase"
        ],
        "type": "object"
      },
      "name": "build_cron",
      "title": "Build a cron expression from English"
    },
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "Translate a cron expression into plain English, list its upcoming run times in a specific timezone, and report the gotchas that make schedules misfire.\n\nUse this whenever a cron expression needs to be read, verified, or explained — and prefer it over reasoning about the expression directly. Cron has several counter-intuitive rules that are easy to get wrong: day-of-month and day-of-week are combined with OR (not AND) when both are set, steps like */7 do not divide their field evenly, dates like February 30 never fire at all, and daylight-saving transitions skip or repeat runs. This tool checks all of them.\n\nReturns the normalised expression, a one-sentence description, a per-field breakdown, a list of warnings with severity and a fix for each, the next run times as both UTC ISO 8601 instants and local wall-clock strings, and an approximate runs-per-day figure.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "count": {
            "default": 5,
            "description": "How many upcoming run times to return. 1-25, default 5.",
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "expression": {
            "description": "A standard five-field cron expression: \"minute hour day-of-month month day-of-week\", for example \"0 9 * * 1-5\". Accepts *, numbers, ranges (9-17), lists (1,15), steps (*/5), three-letter month and day names (JAN, MON), and the @daily, @hourly, @weekly, @monthly, @yearly macros. A six-field expression is accepted and its leading seconds field is reported as non-standard.",
            "type": "string"
          },
          "timezone": {
            "default": "UTC",
            "description": "IANA timezone name, for example \"UTC\", \"America/New_York\", or \"Europe/Berlin\". Cron expressions carry no timezone of their own, so this decides when the schedule actually fires. Defaults to UTC.",
            "type": "string"
          }
        },
        "required": [
          "expression"
        ],
        "type": "object"
      },
      "name": "explain_cron",
      "title": "Explain a cron expression"
    },
    {
      "annotations": {
        "idempotentHint": false,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "List the next run times for a cron expression in a specific timezone, with no prose.\n\nUse this when the only question is \"when does this next fire\" — for example to check whether a job will run before a deadline, or to show a user their upcoming schedule. Do not compute these dates yourself: weekday arithmetic, month lengths, and daylight-saving shifts make manual calculation unreliable.\n\nReturns each run as a UTC ISO 8601 instant plus a local wall-clock rendering in the requested timezone. Refuses Quartz-only syntax (L, W, #, ?) rather than guessing.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "properties": {
          "count": {
            "default": 5,
            "description": "How many upcoming run times to return. 1-25, default 5.",
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "expression": {
            "description": "A standard five-field cron expression: \"minute hour day-of-month month day-of-week\", for example \"0 9 * * 1-5\". Accepts *, numbers, ranges (9-17), lists (1,15), steps (*/5), three-letter month and day names (JAN, MON), and the @daily, @hourly, @weekly, @monthly, @yearly macros. A six-field expression is accepted and its leading seconds field is reported as non-standard.",
            "type": "string"
          },
          "timezone": {
            "default": "UTC",
            "description": "IANA timezone name, for example \"UTC\", \"America/New_York\", or \"Europe/Berlin\". Cron expressions carry no timezone of their own, so this decides when the schedule actually fires. Defaults to UTC.",
            "type": "string"
          }
        },
        "required": [
          "expression"
        ],
        "type": "object"
      },
      "name": "next_cron_runs",
      "title": "Next cron run times"
    }
  ]
}
