# Cron Translator

> Explain cron expressions in English, list next run times, and catch scheduling gotchas.

- name: com.crontoenglish/cron-translator
- version: 0.1.0
- connection class: R0 (autonomous)
- trust: 89/100 flags: duplicate-repo
- quality: 89/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.crontoenglish%2Fcron-translator
- tools: https://api.protogrid.dev/v1/servers/com.crontoenglish%2Fcron-translator/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "cron-translator": {
      "type": "http",
      "url": "https://crontoenglish.com/api/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% ~updated-48d-ago -duplicate-repo(16 names)
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 89/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 3 of 3 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: next_cron_runs (destructiveHint, idempotentHint); explain_cron (destructiveHint, idempotentHint); build_cron (destructiveHint, idempotentHint)
- pass `tools.token_cost`: about 1,210 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 1,210 tokens to load them all
- tool set hash: 1168811cee134b316c47e532d3f826a4
- badge: [![protogrid quality](https://protogrid.dev/badge/com.crontoenglish/cron-translator.svg)](https://protogrid.dev/servers/com.crontoenglish/cron-translator)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://crontoenglish.com/api/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (3)

- `build_cron`: Convert an English schedule description into a standard five-field cron expression, then explain and validate the result.

Use 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.

Returns 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.
- `explain_cron`: Translate a cron expression into plain English, list its upcoming run times in a specific timezone, and report the gotchas that make schedules misfire.

Use 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.

Returns 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.
- `next_cron_runs`: List the next run times for a cron expression in a specific timezone, with no prose.

Use 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.

Returns 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.
