streamable-httpMITupdated 1mo ago
Cron-as-a-service MCP. Schedule any prompt on any cron expression; when it fires we POST the job to your callback URL. No LLM in our stack.
What can you do with cron mcp?
cron-mcp
Cron-as-a-service MCP. Schedule any prompt on any cron expression; when it fires we POST the job to your callback URL. No LLM in our stack.
Your agent (Claude Desktop, Cursor, a custom script) does the thinking. We just:
- store the schedule + prompt + your callback URL
- match minutes against the cron expression
- POST the job body to your callback, signed with
X-Cron-Signature
That's it. Perfect for daily briefings, hourly polls, weekly digests, or anything else that repeats on a fixed schedule and needs to run through an LLM.
Hosted at cron.regiq.in or self-host with the Docker Compose below.
Use it (hosted)
-
Visit https://cron.regiq.in, sign in with Google or GitHub.
-
Generate an MCP API key on the dashboard, copy it.
-
Add to Claude Desktop's
claude_desktop_config.json(or Cursor / any MCP client):{ "mcpServers": { "cron": { "url": "https://cron.regiq.in/api/mcp", "headers": { "Authorization": "Bearer YOUR_KEY_HERE" } } } } -
Have your agent call
schedule_jobwith a cron expression, a prompt, and the URL you want us to POST to when it fires.
Tools
| Tool | Purpose |
|---|---|
schedule_job(name, cron, prompt, callbackUrl, ...) |
Create a scheduled prompt. |
list_jobs() |
Return every job owned by the calling key. |
get_job(id) |
One job + the last 20 fire attempts. |
update_job(id, ...) |
Partial update. Set isActive: false to pause. |
delete_job(id) |
Permanent delete. |
Webhook payload
When a job fires, we POST:
POST <your callbackUrl>
Content-Type: application/json
X-Cron-Signature: <hex-hmac-sha256-of-body>
{
"jobId": "clx...",
"name": "daily AI news briefing",
"prompt": "summarise the top 5 AI news items from the last 24h",
"metadata": { ... },
"firedAt": "2026-07-16T08:00:00.412Z"
}
Verify the signature by re-hashing the raw body with your shared signing secret (env CRON_WEBHOOK_SIGNING_SECRET) and comparing to the X-Cron-Signature header. Return any 2xx to mark the fire as ok โ anything else is logged as a failure and the schedule still advances (so a failing callback won't stop future runs).
Self-host
You'll need:
- Docker + Compose
- A Google OAuth client โ Cloud Console. Scopes:
openid,email,profile. Redirect:<PUBLIC_BASE_URL>/api/auth/callback/google - A public HTTPS domain (Cloudflare Tunnel or
ngrok http 3015locally)
No LLM key required. Your callback is where inference happens.
git clone https://github.com/globalion/cron-mcp
cd cron-mcp
cp .env.example .env
# fill NEXTAUTH_SECRET, GOOGLE_*, PUBLIC_BASE_URL, CRON_WEBHOOK_SIGNING_SECRET
docker compose up -d
# open http://localhost:3015
Architecture
Your agent Your callback
โ โฒ
โ schedule_job(cron, prompt, โ
โ callback_url) โ
โผ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ cron-mcp (Hetzner) โ
โ - /api/mcp Bearer-auth JSON-RPC โ
โ ยท schedule_job, list, get, update, delete โ
โ - Postgres: User, ApiKey, Job, JobRun โ
โ - Scheduler loop (60s tick) โ matches cron, โ
โ POSTs signed webhook to callback_url, โ
โ logs a JobRun row per fire. โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ POST (signed)
โผ
Your callback runs the
prompt through the LLM +
tools and delivers the result.
License
MIT. See LICENSE.
Install
Add cron mcp to your client. Pick the one you use.
claude mcp add --transport http cron-mcp https://cron.regiq.in/api/mcpcodex mcp add cron-mcp --url https://cron.regiq.in/api/mcp{
"mcpServers": {
"cron-mcp": {
"url": "https://cron.regiq.in/api/mcp"
}
}
}Add to `~/.cursor/mcp.json`, or `.cursor/mcp.json` for a single project.
{
"servers": {
"cron-mcp": {
"type": "http",
"url": "https://cron.regiq.in/api/mcp"
}
}
}Add to `.vscode/mcp.json` in your workspace.
{
"mcpServers": {
"cron-mcp": {
"url": "https://cron.regiq.in/api/mcp"
}
}
}Add to `claude_desktop_config.json`, then restart Claude Desktop.
{
"mcpServers": {
"cron-mcp": {
"serverUrl": "https://cron.regiq.in/api/mcp"
}
}
}Add to `~/.codeium/windsurf/mcp_config.json`.
Score
39 / 100
Incomplete
- Documentation25/25
- Maintenance16/25
- Trust16/20
- Capability0/15
- Install experience12/15
- Documents what it does and how to connect
- Has a resolvable package or endpoint
- Exposes at least one tool, prompt or resource
- README has substantive content
- Includes a code example
- Documents its configuration
- Mentions credentials or security posture
- Last commit 46 days ago
- Has a release history
- Repository is not archived
- Licensed MIT
- Namespace verified in the official MCP registry
- Claimed by its owner
- Published under an organisation
- 0 tool(s) documented
- Provides prompt templates
- Provides resources
- 6 documented install method(s)
- Published to a package registry
- Offers a hosted endpoint โ no local install
Version history
| Versions | Published |
|---|---|
| 0.1.0Latest | Jul 16, 2026 |