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 |
| Create a scheduled prompt. |
| Return every job owned by the calling key. |
| One job + the last 20 fire attempts. |
| Partial update. Set |
| 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/googleA 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:3015Architecture
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Shreyas-Profile/cron-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server