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
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.
Install
- Works in
Manual install
pipx install cronstableInstalls the scheduler with the MCP bridge. The `mcp` configuration section is enabled separately.
Access and checks
How we reviewExtended 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_TOKENsecret- 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.
Related
MCP serversmcpd starts MCP servers from one .mcpd.toml file and serves them to agents and scripts as a plain HTTP API on a local port
An agent runs servers through a catalog of declared actions: policy decides what runs and what waits for a person
MCP server for Kubernetes: the agent reads cluster state, diagnoses pod failures and runs operations through kubectl
SSH MCP Server (classfang): remote commands over SSH
SSH MCP Server (classfang)
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
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
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
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`.