cronstable MCP

The cronstable job scheduler exposes its jobs, run history and schedule debugging to an agent through MCP.

  • 137 ★ on the repository
  • Last commit
MCP serverOfficial

Extended access

Why this level

  • In read-only mode the agent sees job logs and metrics; after `readOnly` is turned off it runs configured commands on the server.
All reasons and checks

ptweezy/cronstable

Install

Manual install

pipx install cronstable

Installs the scheduler with the MCP bridge. The `mcp` configuration section is enabled separately.

Access and checks

How we review

Extended accessThe tool runs code or makes network calls and only reads external data.

  • In read-only mode the agent sees job logs and metrics; after `readOnly` is turned off it runs configured commands on the server.

This is third-party code. Review the repository files before installing.

What it does

cronstable runs commands on a schedule from YAML or crontab, and its built-in MCP server shows the scheduler state to an agent. The agent reads the job list and status, run history, log tails and metrics. The `cron_explain_schedule`, `cron_why_no_run` and `cron_validate_schedule` tools analyse a schedule with the same engine as the daemon: why a job did not fire at a given moment and whether an entry is valid. The server is off by default and reachable two ways: `POST /mcp` on the daemon web API addresses and the `cronstable mcp` bridge for clients that launch the server as a stdio subprocess. In read-only mode the agent changes nothing. With `readOnly` turned off it can run, cancel, pause and resume jobs and manage workflows.

Who it is for. Administrators and developers who run recurring jobs on cronstable and need to find quickly why a job failed or did not start.

Good fit when

  • A nightly job did not run and the agent looks for the cause in logs and history.
  • A cron-style schedule should be checked before rollout.
  • The scheduler runs on a server while checks come from Claude Code on a laptop.
  • The agent pauses a job for the maintenance window and resumes it afterwards.

Not a fit when

  • Another scheduler runs the jobs: the MCP server cannot see a foreign schedule.
  • Job logs contain secrets that must not reach a model.
  • You need to run from a mobile client without access to the daemon.

Example request

Why did the backup-db job not run today at 03:00? Show its schedule, recent runs and the log tail.

MCP

Transport
stdio, http
Authentication
key is optional

Environment variables

CRONSTABLE_WEB_TOKEN secret
Daemon web API token that also protects the `/mcp` endpoint. Needed when `web` sets `authToken`.

Limitations

The server is enabled with an `mcp` section and `enabled: true` and needs a `web` section because it uses its addresses. The `cronstable mcp` bridge does not start a daemon: it only forwards requests to a running one. Writing stays off until `readOnly: false` and the needed toolsets are set. Risky calls require the `confirm: true` argument, yet running jobs executes configured commands on the server. The web API token also protects `/mcp`, so keep it in an environment variable. Log tails enter the model context in full.

How to disable. Remove the `mcp` section from the configuration or set `enabled: false` and restart the daemon. Delete the client entry with `claude mcp remove cronstable`.

FAQ

Can the agent start and stop jobs?

Only if you turn `readOnly` off and enable the `act` toolset. By default the server is read-only, and mutating calls need `confirm: true`.

How do I connect cronstable MCP to Claude Code?

Run `claude mcp add --transport stdio cronstable -- cronstable mcp --url http://127.0.0.1:8080 --token-env CRONSTABLE_WEB_TOKEN`. For a remote daemon use `--transport http` and the `/mcp` address with an Authorization header.

What do the schedule tools do?

`cron_validate_schedule` checks an entry, `cron_explain_schedule` explains it field by field, and `cron_why_no_run` answers why a job did not fire at a given moment.

Does MCP need extra packages?

No. The server is pure Python with no new dependencies and ships inside cronstable itself.

Where should the connection token live?

In the `CRONSTABLE_WEB_TOKEN` environment variable: the bridge reads it through `--token-env`, so the token itself never appears in the command.

Discussion

No questions or reviews yet.

Official

mcpd starts MCP servers from one .mcpd.toml file and serves them to agents and scripts as a plain HTTP API on a local port

CLIExtended access193Repository stars
Official

An agent runs servers through a catalog of declared actions: policy decides what runs and what waits for a person

MCP serverBroad access429Repository stars

MCP server for Kubernetes: the agent reads cluster state, diagnoses pod failures and runs operations through kubectl

MCP serverBroad access968Repository stars

An SSH MCP server: the agent runs commands, reads and writes files over SFTP, transfers files and starts long jobs while credentials stay with you

MCP serverBroad access1KRepository stars

A Node.js manager for MCP servers: it starts local servers, connects remote ones and gives a client one address, with a REST API for control

MCP serverBroad access526Repository stars

MCPM

mcpm

A package manager and registry for MCP on all platforms and clients: finds, adds and configures MCP servers, remembers the source and updates

CLIExtended access1KRepository stars

README in short

The endpoint serves several protocol revisions, so a client using `initialize` and one using the stateless 2026-07-28 revision both connect without setup. There are no sessions and the server issues no `Mcp-Session-Id`. A ready Docker Compose setup sits in `example/mcp`.

README badge

Report a problem

Foxx AIcronstable
Foxx AI

I am Foxx AI and I have already vetted this tool. Ask about install, setup or anything else, and I will keep it simple.