Schedule HTTP requests from an agent: once at an exact time or on cron, with retries and run logs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Bearer followed by your RunLater API key (rl_sk_...), from Settings. Not needed by clients that sign in with OAuth.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Show this workspace's plan, trial end date, limits and usage this month. With no plan yet, it includes the link where the 14-day trial starts.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http runlater https://runlater.app/api/mcp
Headers
Authorization (optional, not in the config above): Bearer followed by your RunLater API key (rl_sk_...), from Settings. Not needed by clients that sign in with OAuth.Show this workspace's plan, trial end date, limits and usage this month. With no plan yet, it includes the link where the 14-day trial starts.
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Delete a scheduled request for good. It stops running and cannot be restored. To stop it for a while, use pause_schedule.
| Argument | Type | Description |
|---|---|---|
| id* | string | Schedule id, from schedule_request or list_schedules |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Schedule id, from schedule_request or list_schedules"
}
}
}Get one scheduled request with its recent runs: status code, duration, error and a preview of each response. Use this to check whether a request worked.
| Argument | Type | Description |
|---|---|---|
| id* | string | Schedule id, from schedule_request or list_schedules |
| runs | integer | How many recent runs to include. Default 10. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Schedule id, from schedule_request or list_schedules"
},
"runs": {
"type": "integer",
"maximum": 100,
"minimum": 0,
"description": "How many recent runs to include. Default 10."
}
}
}List scheduled requests in this workspace, newest first, with status (scheduled, paused or finished) and next run time.
| Argument | Type | Description |
|---|---|---|
| limit | integer | Most to return. Default 50. |
| status | string | Filter by status. Default all. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"maximum": 200,
"minimum": 1,
"description": "Most to return. Default 50."
},
"status": {
"enum": [
"all",
"scheduled",
"paused",
"finished"
],
"type": "string",
"description": "Filter by status. Default all."
}
}
}Pause a scheduled request so it stops running until resumed.
| Argument | Type | Description |
|---|---|---|
| id* | string | Schedule id, from schedule_request or list_schedules |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Schedule id, from schedule_request or list_schedules"
}
}
}Resume a paused request. A recurring one continues at its next cron time. A one-time one needs its run time to still be in the future.
| Argument | Type | Description |
|---|---|---|
| id* | string | Schedule id, from schedule_request or list_schedules |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Schedule id, from schedule_request or list_schedules"
}
}
}Send a scheduled request once, right now, without retries, and return the status code and response. A successful run counts toward the monthly limit. A one-time request is finished after this.
| Argument | Type | Description |
|---|---|---|
| id* | string | Schedule id, from schedule_request or list_schedules |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Schedule id, from schedule_request or list_schedules"
}
}
}Schedule an HTTP request to a public URL: once at an exact time (run_at) or repeatedly (cron). Pass exactly one of run_at or cron. RunLater sends it, retries failures and logs every run. Returns the schedule with its id and next run time.
| Argument | Type | Description |
|---|---|---|
| url* | string | Public http(s) URL to call. Private and local addresses are refused. |
| body | string | Request body as text (JSON goes here as a string). Not sent on GET or DELETE. |
| cron | string | Recurring: 5-field cron (minute hour day-of-month month day-of-week), for example "0 9 * * 1" for Mondays at 9:00. At most once a minute. |
| name | string | Short label shown in the dashboard. Default: method and host. |
| method | string | HTTP method. Default POST. |
| run_at | string | One-time: ISO date and time, for example 2026-12-01T09:00:00 (read in timezone) or 2026-12-01T15:00:00Z. At most two years ahead. |
| headers | array | Request headers, for example [{"name":"Authorization","value":"Bearer abc"}]. Values are never shown back. |
| retries | integer | Retries after a failed attempt, with exponential backoff. Default 3. |
We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 5, 2026.
| timezone | string | IANA time zone for run_at without an offset and for cron, for example America/New_York. Default UTC. |
| timeout_seconds | integer | Seconds to wait for a response. Default 30. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"url"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "Public http(s) URL to call. Private and local addresses are refused."
},
"body": {
"type": "string",
"maxLength": 65536,
"description": "Request body as text (JSON goes here as a string). Not sent on GET or DELETE."
},
"cron": {
"type": "string",
"maxLength": 200,
"description": "Recurring: 5-field cron (minute hour day-of-month month day-of-week), for example \"0 9 * * 1\" for Mondays at 9:00. At most once a minute."
},
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Short label shown in the dashboard. Default: method and host."
},
"method": {
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE"
],
"type": "string",
"description": "HTTP method. Default POST."
},
"run_at": {
"type": "string",
"maxLength": 64,
"description": "One-time: ISO date and time, for example 2026-12-01T09:00:00 (read in timezone) or 2026-12-01T15:00:00Z. At most two years ahead."
},
"headers": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 4000
}
}
},
"maxItems": 30,
"description": "Request headers, for example [{\"name\":\"Authorization\",\"value\":\"Bearer abc\"}]. Values are never shown back."
},
"retries": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "Retries after a failed attempt, with exponential backoff. Default 3."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone for run_at without an offset and for cron, for example America/New_York. Default UTC."
},
"timeout_seconds": {
"type": "integer",
"maximum": 300,
"minimum": 1,
"description": "Seconds to wait for a response. Default 30."
}
}
}