Skip to main content
This page covers the MCP tools for job runs and schedules. Run inspection tools are read-only: they report on what has run and why it failed. The schedule and execution tools modify your live account: they create or change schedules, start runs, and cancel or retry jobs. Mutations take effect immediately against production; there is no sandbox or staging copy. Tools that subclass the mutation base support dry_run, which validates and returns the would-be outcome without applying it.

Tool index

Each tool name links to its section below.
ToolClassWhat it does
list_runsReadRecent job runs with status, timing, and last error.
get_runReadOne run’s fields plus an output count and a redacted log tail.
explain_job_failureReadA failed run’s primary error, detected error patterns, log tail, and next steps.
list_schedulesReadSchedules with cadence, status, target packages, and run timestamps.
get_scheduleReadOne schedule’s full config, target packages with variables, and run metadata.
toggle_scheduleWriteEnable or disable a schedule.
create_scheduleWriteCreate a schedule (disabled by default) that runs packages on a cadence.
update_scheduleWriteChange a schedule’s cadence or metadata, toggle it, or append packages.
run_packageWriteStart a new run of a package on a cluster.
cancel_jobWriteStop an in-flight run.
retry_jobWriteRe-run a finished run as a new sibling run.

Run inspection

list_runs

Read-only. Lists recent job runs (executions) in the account, most recent first. Each run is one execution of a package. Defaults to root runs only, so child retries are excluded. Filter by package_id or status.
limit
integer
default:"50"
Maximum runs to return. 1 to 200.
offset
integer
default:"0"
Number of runs to skip, for paging.
package_id
integer
Restrict to runs of a single package.
status
string
Filter by run status. One of idle, pending, queued, running, completed, failed, stopped.
runs
array
Each run includes id, package_id, status, owner_id, cluster_id, started_at, completed_at, failed_at, runtime_seconds, progress, attempts, created_at, updated_at, and last_error (present for failed or stopped runs, with sensitive values redacted).
pagination
object
offset, limit, and returned (the number of runs on this page).

get_run

Read-only. Returns details for a single run by id: the same fields as list_runs, plus an output count and a redacted tail of the execution log for inline diagnosis. Run variables are deliberately not exposed.
run_id
integer
required
The run to fetch.
log_tail_lines
integer
default:"20"
How many trailing log lines to return. 1 to 200.
id
integer
The run id, alongside package_id, status, owner_id, cluster_id, started_at, completed_at, failed_at, runtime_seconds, progress, attempts, created_at, updated_at, and last_error (for failed or stopped runs, redacted).
outputs_count
integer
Number of outputs the run produced.
log_tail
string
The last N lines of the execution log, redacted. null when no log body exists.

explain_job_failure

Read-only. Diagnoses a failed run without an LLM call on the server. Returns the run’s primary error, programmatically detected error patterns (FATAL, ERROR, exception, connection, auth, schema, and more), a redacted log tail, and heuristic next-step suggestions. The calling agent does the final synthesis.
run_id
integer
required
The run to diagnose.
log_tail_lines
integer
default:"50"
How many trailing log lines to return. 1 to 200.
run_id
integer
The run id, with package_id, status, and failed_at.
primary_error
string
The run’s primary error message (from last_error), redacted. null for runs that did not fail or stop.
detected_errors
array
Structured error patterns found in the log, each with a type such as connection_failure, auth_failure, schema_error, destination_conflict, rate_limited, out_of_memory, or exception.
log_tail
string
The redacted trailing log lines, with log_lines_returned and log_truncated alongside.
suggested_next_steps
array
Heuristic next steps tied to the detected patterns (for example, run test_connection on a refused connection, or discover_schema on a schema mismatch).

Schedules

list_schedules

Read-only. Lists schedules in the account. Each schedule fires on a cron expression or an interval. Filter by package_id (schedules targeting a given package) or status.
limit
integer
default:"50"
Maximum schedules to return. 1 to 200.
offset
integer
default:"0"
Number of schedules to skip, for paging.
status
string
Filter by schedule status. One of enabled, disabled.
package_id
integer
Return only schedules whose task targets this package.
schedules
array
Each schedule includes id, name, description, status, schedule_type, schedule_expression, interval_amount, interval_unit, cron_time_zone, start_at, end_at, next_run_at, last_run_at, last_run_status, execution_count, recurrence_count, package_ids, owner_id, created_at, and updated_at.
pagination
object
offset, limit, and returned.

get_schedule

Read-only. Returns full details for a single schedule by id, including the packages it targets with their per-package variables, the task config, and run metadata.
schedule_id
integer
required
The schedule to fetch.
id
integer
The schedule id, with name, description, status, schedule_type, schedule_expression, interval_amount, interval_unit, cron_time_zone, start_at, end_at, owner_id, execution_count, recurrence_count, next_run_at, last_run_at, last_run_id, last_run_status, auto_retry, auto_retry_attempts, created_at, and updated_at.
packages
array
Each target package as { package_id, package_name, variables }.
task
object
Task config: nodes, terminate_on_idle, time_to_idle, and reuse_cluster_strategy.

toggle_schedule

Mutation. Enables or disables an existing schedule. This is a pure metadata change: no credentials, no data writes, no cluster spin-up, and it is reversible by the same tool. The cron worker picks up the new state within about 60 seconds. Idempotent in both directions, an already-matching state returns already_in_target_state: true as a no-op. Supports dry_run, which returns the would-be transition without toggling.
schedule_id
integer
required
The schedule to toggle.
enabled
boolean
required
true to enable, false to disable.
schedule_id
integer
The schedule id, with previous_status, new_status, already_in_target_state, and toggled_at.

create_schedule

Mutation. Creates a schedule that runs one or more packages on a cadence. It is created disabled by default, so an agent call will not silently start firing recurring jobs. Pass status: "enabled" (or call toggle_schedule afterward) to activate it. Supports dry_run, which validates and returns the would-be schedule without creating it.
name
string
required
Schedule name. Max 255 characters.
schedule_type
string
required
Cadence type. One of interval, cron.
start_at
string
required
ISO-8601 timestamp for when the schedule starts. Interpreted as UTC unless current_time_zone is set.
packages
array
required
At least one package. Each item may be { package_id, variables? } or a bare package id.
interval_amount
integer
default:"1"
For interval schedules: how many interval_unit between runs. Minimum 1.
interval_unit
string
default:"hours"
For interval schedules: minutes, hours, days, weeks, or months.
schedule_expression
string
For cron schedules: the cron expression, for example 0 9 * * *.
status
string
default:"disabled"
Initial status. One of enabled, disabled.
schedule_id
integer
The new schedule id, with name, status, schedule_type, and next_run_at. On a dry_run, these are nested under would_create with a valid flag (and errors when invalid).

update_schedule

Mutation. Updates an existing schedule’s cadence or metadata, toggles it, and/or appends packages. Only the fields you pass are changed. status goes through the proper enable/disable transition. add_packages only appends to the schedule’s package list: packages already on the schedule are skipped, and nothing is removed or reordered. To change the full package set, recreate the schedule. Supports dry_run.
schedule_id
integer
required
The schedule to update.
add_packages
array
Packages to add. Each item may be { package_id, variables? } or a bare package id. Appends only.
status
string
Change the schedule status through the enable/disable transition. One of enabled, disabled.
schedule_type
string
Change the cadence type. One of interval, cron.
start_at
string
New ISO-8601 start timestamp.
schedule_id
integer
The schedule id, with name, status, schedule_type, next_run_at, and package_ids. On a dry_run, the response is nested under would_update with the changed fields, target status, and add_packages.

Execution and recovery

run_package

Mutation. Starts a new run of a package on a given cluster and returns the run_id immediately, with the run in pending. It does not wait for completion: poll get_run for status. Compute charged for time the run was already executing on the cluster cannot be refunded, so cancel via cancel_job if needed. Supports dry_run, which returns the predicted state without creating a run.
package_id
integer
required
The package to run. Must not be archived.
cluster_id
integer
required
The cluster to dispatch to. Must not be terminated or terminating.
variables
object
A map of variable name to value that overrides the package’s defaults for this run only. String literals must be wrapped in inner single quotes (pass "'Smith'", not "Smith"), since $variable references are evaluated as Pig expressions. Numbers and booleans need no quoting, and values are matched case-sensitively.
run_id
integer
The new run id, with package_id, package_name, cluster_id, status, variables_applied (the overridden keys), and started_at. On a dry_run, the details are nested under would_create with a cluster_action hint.

cancel_job

Mutation. Stops an in-flight run by sending the cancel signal through the run’s state machine. An idle run stops synchronously; pending, queued, or running runs move to pending_stoppage and are stopped asynchronously (poll get_run to confirm). Idempotent: a run already cancelling returns already_cancelling: true, and a run already finished returns already_terminal: true. Not reversible once cancelled. Supports dry_run.
run_id
integer
required
The run to cancel.
run_id
integer
The run id, with previous_status, new_status, already_terminal, already_cancelling, and cancel_requested_at (the time the cancel signal was sent, not when the run finished stopping). On a dry_run, the details are nested under would_cancel with a cluster_impact hint.

retry_job

Mutation. Re-runs a finished (failed, cancelled, or completed) run by creating a fresh run that copies the parent’s package, cluster, and variables, then starts it. The new run is a sibling: the original run is preserved in its terminal status. By default, variables are merged onto the parent’s; pass replace_variables: true to use only the new hash. Supports dry_run, which returns the resolved variable set without creating the run.
run_id
integer
required
The parent run to re-run.
variables
object
Variable overrides. Merged onto the parent’s variables by default (override wins on collision). Omit to retry exactly as the parent ran.
replace_variables
boolean
default:"false"
When true, use only the supplied variables hash instead of merging onto the parent’s.
new_run_id
integer
The new run id, with parent_run_id, package_id, cluster_id, status, variables_applied, and started_at. On a dry_run, the details are nested under would_retry with the fully variables_resolved hash.
Last modified on July 14, 2026