{"serverId":"mcp-registry/com.402cron/402cron","tools":[{"name":"create_task","fixed":{"name":"create_task","description":"Register a schedule against a destination you have already verified. Idempotent on \"name\": the same name updates the existing task instead of creating a second one. Creating costs nothing; each delivery ATTEMPT costs one credit.","inputSchema":{"type":"object","required":["name","cron","url"],"properties":{"url":{"type":"string","description":"The https:// destination. It must already be registered and verified — see register_destination."},"body":{"description":"The body we send. Stored in the clear, so it must not carry credentials. A non-string is serialized as JSON.","type":"string"},"cron":{"type":"string","description":"5 fields, UTC only, one minute at the finest. Operators: * a-b a,b */n a-b/n. Names: SUN-SAT (day), JAN-DEC (month). Macros: @yearly @annually @monthly @weekly @daily @midnight @hourly. Day-of-week is 0-6 with 0 = Sunday; 7 also means Sunday. Write days as names (MON-FRI). Numbers differ between schedulers: Quartz, AWS EventBridge and Cloudflare number Sunday as 1, we and croniter as 0. Translated for you: \"?\". \"?\" as a whole day-of-month or day-of-week field becomes \"*\". A NUMERIC day-of-week next to \"?\" is refused, because \"?\" means the expression was written where Sunday is 1. Refused: Quartz L, Quartz W, Quartz #, six fields (seconds), seven fields (year), @reboot, @every, CRON_TZ= prefixes, time zones of any kind — each with a code saying what to send instead."},"name":{"type":"string","description":"Your name for the task. Unique among your live tasks; creating with an existing name updates it."},"method":{"type":"string","description":"HTTP method of the delivery. Default POST. GET and HEAD carry no body."},"headers":{"type":"object","description":"Headers we send with the delivery. Stored ENCRYPTED at rest — put credentials here, never in the body."},"timeoutMs":{"type":"integer","description":"How long we wait for your server, 250-2000 ms. Answer 202 and do the work behind it."}},"additionalProperties":false},"annotations":{"title":"Create or update a scheduled task","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":true},"title":"Create or update a scheduled task"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: body. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":558,"tokensAfter":562},{"name":"update_task","fixed":{"name":"update_task","description":"Change the schedule, destination, method, timeout, headers or body of an existing task. Omit a field to leave it unchanged — sending null is refused, because \"unchanged\" and \"cleared\" must not look the same. State is NOT editable here: use pause_task and resume_task.","inputSchema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Task id (UUID), as returned by create_task or list_tasks."},"url":{"type":"string","description":"The https:// destination. It must already be registered and verified — see register_destination."},"body":{"description":"The body we send. Stored in the clear, so it must not carry credentials. A non-string is serialized as JSON.","type":"string"},"cron":{"type":"string","description":"5 fields, UTC only, one minute at the finest. Operators: * a-b a,b */n a-b/n. Names: SUN-SAT (day), JAN-DEC (month). Macros: @yearly @annually @monthly @weekly @daily @midnight @hourly. Day-of-week is 0-6 with 0 = Sunday; 7 also means Sunday. Write days as names (MON-FRI). Numbers differ between schedulers: Quartz, AWS EventBridge and Cloudflare number Sunday as 1, we and croniter as 0. Translated for you: \"?\". \"?\" as a whole day-of-month or day-of-week field becomes \"*\". A NUMERIC day-of-week next to \"?\" is refused, because \"?\" means the expression was written where Sunday is 1. Refused: Quartz L, Quartz W, Quartz #, six fields (seconds), seven fields (year), @reboot, @every, CRON_TZ= prefixes, time zones of any kind — each with a code saying what to send instead."},"name":{"type":"string","description":"Your name for the task. Unique among your live tasks; creating with an existing name updates it."},"method":{"type":"string","description":"HTTP method of the delivery. Default POST. GET and HEAD carry no body."},"headers":{"type":"object","description":"Headers we send with the delivery. Stored ENCRYPTED at rest — put credentials here, never in the body."},"timeoutMs":{"type":"integer","description":"How long we wait for your server, 250-2000 ms. Answer 202 and do the work behind it."}},"additionalProperties":false},"annotations":{"title":"Edit a task","readOnlyHint":false,"openWorldHint":true,"idempotentHint":true,"destructiveHint":true},"title":"Edit a task"},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: body. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":592,"tokensAfter":597}],"toolsChanged":2,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}