Back to MCP

MCP guides · Sep 15, 2026

Replace Vercel Cron from your editor

Keep your deployed function, move only its HTTP clock, and cut over without leaving two schedulers active.
crontap.com / mcp guides
Keep your deployed Vercel route, move only its HTTP clock to Crontap, preserve authorization, prevent duplicate schedules, and retain rollback.

Your Vercel function works, but its clock is tied to vercel.json. This walkthrough keeps the production route on Vercel and uses Crontap MCP from a supported AI editor to move only the recurring HTTP trigger. You will preserve endpoint authorization, create the replacement in a paused state, remove the Vercel entry, then resume and verify one clock. Nothing here migrates the function runtime or application data.

Before you start

  • Confirm the deployed route currently works and is safe under duplicate or missed delivery.
  • Connect Cursor, Claude Code, Codex, VS Code Copilot Chat, or another supported client from the MCP hub.
  • Have Vercel project access to change vercel.json, deployment configuration, and runtime logs.
  • Verified against Vercel's Cron overview, management guide, and usage and pricing on 2026-09-15.

Record the current Vercel contract

Vercel Cron makes an HTTP GET request to the production deployment URL using the configured path. Cron expressions use UTC. Vercel currently allows 100 cron jobs per project on Hobby, Pro, and Enterprise. Hobby jobs run at most once per day with per-hour precision; more frequent expressions fail deployment. Pro and Enterprise support once-per-minute minimum intervals with per-minute precision.

Vercel documents delivery as best effort, says duplicates or misses can occur, and does not retry failed invocations. Function duration limits still apply. A route can overlap with a later invocation when it runs longer than its interval, so locks and idempotent reconciliation remain useful after migration.

Step 1

Inventory the exact route

Read the crons array in vercel.json or the equivalent Build Output API configuration. Record the path, cron expression, production hostname, and whether the handler expects Vercel's x-vercel-cron-schedule header. Inspect runtime logs for one known invocation before changing anything.

If the route branches on x-vercel-cron-schedule, a generic external request will not automatically reproduce that Vercel-specific header. Refactor the route to use an application-owned signal or create one external schedule per explicit route. Deploy and test that change before moving the clock.

Preserve authorization without exposing it

Vercel recommends a random CRON_SECRET of at least 16 characters. When configured, Vercel automatically sends Authorization: Bearer <CRON_SECRET>. Your route compares the incoming header with the environment variable.

Step 2

Verify the existing auth check

Keep CRON_SECRET in Vercel Environment Variables and make sure the route rejects a missing or wrong bearer value. Do not ask the editor to read or repeat the value. The same value will be stored as a request header on the Crontap schedule page after the non-secret resource exists.

Inspect this repository's Vercel cron configuration and route code. Report the configured path, cron expression, HTTP method accepted by the handler, whether it validates Authorization against CRON_SECRET, and whether it relies on x-vercel-cron-schedule. Do not read, print, or change any secret value.

Create the replacement without a second clock

Step 3

Preview the matching cadence

Ask Crontap to preview the intended cadence with an explicit timezone. Vercel's expression is UTC, so use UTC when preserving exact behavior. Choose an IANA local timezone only when intentionally changing the business requirement. Review the three upcoming runs before creating anything.

Use Crontap MCP to preview the existing Vercel cron cadence in UTC. Show the resolved cron and three upcoming runs. Do not create or update a schedule.

Step 4

Create, secure, and pause the replacement

Create one schedule for the full production URL using the HTTP method the deployed handler accepts. Retrieve its ID, then pause that exact schedule before cutover. Open it in Crontap, add the Authorization bearer value in the UI, and test the route through a controlled request. Keep it paused after the test.

Create one schedule named "Vercel catalog refresh replacement" for https://example.vercel.app/api/cron/catalog using the previewed cadence and the method accepted by the deployed route. Do not include Authorization. Retrieve the returned ID, pause that exact schedule, and confirm its paused status before I change vercel.json.

Crontap MCP list and get output omits saved request headers and bodies. That is why the bearer value belongs on the schedule page, not in the prompt. A 401 test means the route is reachable but the stored value or header format does not match.

Remove the old clock, then resume

Step 5

Deploy the Vercel removal

Remove only the matching entry from vercel.json and deploy. Leave the API route and CRON_SECRET in place. In Project Settings, Cron Jobs, confirm the old entry is gone. Updating or deleting Vercel cron configuration requires a redeploy.

Step 6

Resume one external schedule

Retrieve the paused Crontap ID again, approve resume_schedule, and read it back. Confirm status, URL, method, timezone, cadence, and next run. This order prevents Vercel Cron and Crontap from remaining active together.

Two schedulers pointed at one route are independent and can produce duplicate work. Do not describe overlap as harmless merely because the function is idempotent. Idempotency limits damage; one owner for the clock keeps operations understandable.

Verify request and application outcomes

After the first timed run, read Crontap history for the replacement ID. Match startedAt, statusCode, durationMs, runId, and attempt with Vercel runtime logs. Confirm the route's durable effect, such as one catalog version or one reconciliation checkpoint.

A 2xx result proves the route returned HTTP success. It does not prove a queued background task finished. If the route returns before asynchronous work, verify the queue and final business record separately. If it relies on Vercel's old user-agent or schedule header, logs will reveal the compatibility mistake.

Keep rollback mechanical

Pause the Crontap schedule first. Restore the original Vercel cron entry and deploy. Confirm the Vercel entry is active before deciding whether to retain the paused Crontap resource for another attempt.

Vercel explicitly notes that Instant Rollback does not update active cron jobs. A code rollback alone is not a scheduler rollback, so restore cron configuration through a deployment and verify Project Settings.

Troubleshooting

The Crontap test returns 405

The existing Vercel Cron route may accept GET only. Match the deployed handler rather than changing the method in the scheduler.

The request returns 401

Keep Bearer before the existing CRON_SECRET value and store it in Crontap UI. Never paste the value into the editor prompt.

Work happens twice

Pause one clock immediately, inspect Vercel Cron Jobs and Crontap schedules, then use application idempotency records to reconcile duplicate effects.

No Vercel log appears

Confirm the full production URL, route deployment, and Crontap history. Vercel also notes that cached or redirect responses may not appear in cron logs, and its cron requests do not follow redirects.

Hobby timing differs from the old expectation

Hobby daily jobs can fire anywhere within the specified hour. Preserve the actual business requirement in Crontap rather than treating an observed Vercel minute as guaranteed.

Next steps

Ready to move the HTTP clock? Free forever tier. No credit card. Create your Crontap account →

Verified against current Vercel Cron and Crontap MCP documentation on 2026-09-15. Sources: Vercel Cron Jobs, Managing Cron Jobs, and Usage and Pricing.

FAQ

Replacing Vercel Cron questions

Do I need to move my function away from Vercel?
No. Keep the production route on Vercel. Remove only its Vercel Cron entry after the Crontap replacement is verified.
How does Vercel secure cron requests?
When CRON_SECRET is configured, Vercel sends it as an Authorization Bearer header. Configure the same value on the Crontap schedule page during migration.
Can Vercel Cron and Crontap run together?
Yes, but that creates duplicate calls. Keep Crontap paused until the deployment removing the Vercel entry is live, then resume it.
What is the fastest rollback?
Pause the Crontap schedule, restore the vercel.json cron entry, and deploy. Vercel notes that Instant Rollback alone does not update active cron jobs.

From the blog

Read the blog

Guides, patterns and product updates.

Tutorials on scheduling API calls, webhooks and automations, plus deep dives into cron syntax, timezones and reliability.

Product Updates

Introducing AI Integrations

Transform a schedule's HTTP response with a plain-English prompt, return text or JSON, and forward it to Slack, Make, n8n, or your own endpoint. Test on any tier; saving is a Pro feature.

Alternatives

Vercel cron jobs: the Hobby once-per-day limit and how to beat it

Vercel Cron caps Hobby at one run per day, only guarantees timing within the hour, is UTC only, and ties every schedule change to a redeploy. Here is the external cron pattern teams use to ship per-minute, timezone-aware schedules and one dashboard across projects without paying $20/mo per user for Pro.