Skip to main content
Glama

create_cron

Run an HTTP request on a recurring schedule: a 5-field cron expression in UTC with a single minute value (at most once an hour) (e.g. "0 6 * * *" is daily at 06:00 UTC). Each run is an ordinary task (see get_task) and costs delivery attempts. Dead man's switch: if a run fails, or cannot start because the trial's attempts ran out or it ended, RunLater POSTs a signed alert to alert_url, and again when a run next succeeds. To hear how runs went, pass callback_url (a URL, or "inbox" for read_inbox) and capture: true to keep each run's response; report: "failures" sends only failed runs, so a healthy cron stays quiet (and doesn't wake you via set_wake). A run that cannot start at all (attempts ran out, the trial ended) never reports; it turns the cron failing, which goes to alert_url, so set alert_url too ("inbox" works). Calling again with the same name replaces that cron's schedule and request. At most 10 crons.

Input Schema

NameRequiredDescriptionDefault
urlYeshttps:// URL on a public domain name.
bodyNoRequest body for every run. Not allowed with GET.
nameYesThe cron's name, e.g. "daily-backup".
methodNoPOST
reportNoWhich runs report to callback_url: every run, or only failed ones. "failures" needs callback_url.always
captureNoKeep each run's response (status, 4 headers, first 16 KiB), as schedule_http's capture. Untrusted data.
headersNoHeaders to send on every run. Same rules as schedule_http. A header value may use {{secret:NAME}} (see set_secret); RunLater fills it in only when sending, to hosts the secret allows.
scheduleYesminute hour day-of-month month day-of-week, in UTC.
alert_urlNohttps:// URL that gets a signed POST when the cron starts failing (cron.failing) and when it recovers (cron.recovered). Or "inbox" to get those events from read_inbox instead.
callback_urlNoWhere each run reports when it finishes, as schedule_http's callback_url: a signed POST of task.finished to an https:// URL (one extra delivery attempt per report; one is reserved per run), or "inbox" (free).
max_attemptsNoAttempts per run.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so unusually well: each run costs delivery attempts, failures trigger a signed alert to alert_url (and again on recovery), runs that cannot start never report but flip the cron to failing, calling with the same name replaces the existing cron, and there is a hard cap of 10 crons. These are non-obvious operational consequences an agent could not get from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and every subsequent block addresses a distinct concern (cost, dead man's switch, reporting, replacement, quota). It is dense with stacked parentheticals and cross-references to set_wake and schedule_http, which slows parsing, but little of it is fillers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 11-parameter tool with nested header objects, no annotations and no output schema, the description covers cost, failure, quotas and update semantics thoroughly. The notable remaining gap is the return value: nothing says what create_cron hands back (a cron object, an id, or just confirmation), which matters when there is no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 91%, so the schema already explains most parameters. The description still adds real meaning: the schedule must have a single minute value (at most hourly) with a worked example, name reuse means replacement rather than an error, and report/alert_url/callback_url are tied together into a coherent reporting story.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource and scope: 'Run an HTTP request on a recurring schedule', then pins the schedule format to a 5-field UTC cron with a single minute value. It distinguishes itself from the one-off sibling by referencing schedule_http only for shared semantics ('as schedule_http's capture', 'Same rules as schedule_http'), so an agent can tell this is the recurring variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear conditional guidance: use report: "failures" for a quiet healthy cron, set alert_url (or "inbox") to catch crons that cannot start, and pass callback_url+capture to see run results. It stops short of an explicit 'use schedule_http for a single request instead' routing statement, so the when-not is only inferable from the recurring framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.