Skip to main content
Glama

Change a schedule

well_update_schedule

Change, arm, pause or resume one workspace schedule.

Use it to move, rename, pause or re-arm any schedule: a one-off at a set time ("make the poem 2am"), a recurring job ("move the Monday runway to Tuesday") or an event job. To move a one-off, send the new run_after and a cron_expression that matches its time of day, together.

REQUIRED: schedule_id (from well_list_schedules or the result of well_create_schedule). OPTIONAL: name, routine_summary, cadence_label, status_report, instruction, restore_well_instruction, method_name, method_params, cron_expression, trigger_name, timezone, run_after, max_occurrences, ends_at, approved_tools, status, verified.

Send exactly one: cron_expression for a clock, trigger_name (from well_list_schedule_triggers) for an event. An event routine takes no run_after or max_occurrences.

ends_at (ISO 8601 with an offset) is the moment after which the routine stops: no run happens after it, and the schedule completes once it passes. Send null to remove the end. It is part of what the user signs off, like the rhythm.

status takes "paused" (stop admitting runs, keep the approval) or "active" (resume a paused schedule, or turn a disabled morning brief back on). The first approval of a brief that was never approved also turns it back on. An approved edit keeps it off, so send status "active" after it to turn it on. "active" never arms a draft. Send status on its own, without the other fields. To end a schedule for good use well_cancel_schedule. To skip a few days and let it carry on by itself, use well_snooze_schedule: a pause lasts until the user resumes it.

status_report ("on_error", "on_success", "both" or "none") is the message the user wants after a run. Changing only status_report needs no new yes and draws no card: send it on its own, without verified.

verified: true arms the schedule with any fields sent in the same call. In Well's chat it asks the user for approval: the schedule is armed, and a changed version runs, only after the user approves the confirmation card, and until then the stored schedule is unchanged. Anywhere else the fields are saved as a draft edit and nothing is armed. Only a call that arms a schedule (verified: true) asks the user for approval, through a confirmation card in Well's chat, and the schedule is armed only when the user approves it. Outside Well's chat no card can be drawn, so verified: true arms nothing there: the call saves the schedule as a draft, and the user arms it from Well's chat. Two creates arm at once with no card on every surface, because the ask is the yes and the run writes nothing: an agent's routine (agent_seat_id), and a weekly_missing_invoices_total routine of kind prompt on a cron that fires once a week, with no approved_tools. Saving or editing a draft, pausing, resuming and cancelling draw no card. Editing the routine_summary, the cadence_label, the instruction, the method, the rhythm, the time zone, the start, the end limit or approved_tools returns the schedule to a draft, which runs nothing until it is armed again. Two exceptions. The creator's own edit of a weekly_missing_invoices_total routine that still fits the rule above (kind prompt, a cron that fires once a week, no approved_tools) keeps it armed on the new clock, and arms it when it is a draft, with no card and with Well's own instruction for that job. Moving only the hour and minute of the user's active afternoon or EOD touchbase, on the same weekdays and with a new cadence_label, keeps it armed.

A morning brief's instruction is the person's to change. Send instruction and a new routine_summary on a card, with verified: true, after a yes. To go back to Well's own brief, send restore_well_instruction: true on its own, with verified: true, after a yes. Before the yes, say in one line that the person's words replace Well's brief.

A cron whose day-of-month and day-of-week fields are both restricted fires when either one matches. To tie a weekday to its nth occurrence in the month, leave day-of-month as * and write the weekday, then #, then n, in the day-of-week field. A clock routine is held on Sunday in the user's time zone by default. The morning brief is never held by the Sunday gate; its default cron runs on weekdays. For another routine, only an explicit choice lifts the hold: name Sunday in the day-of-week field when asked for Sunday or all seven days (0 alone or in a list or range; * does not name Sunday), save sunday_routines as receive, or set a one-off time. A meeting or Sunday habit does not lift the hold. A routine already scheduled for Sunday must have Sunday removed from its schedule to stop it; other routines already have the default hold. For a cron, two runs of a schedule must be at least 30 minutes apart, and the rhythm must fire at least once a year. A rhythm outside that range is refused, never adjusted: explain the rule to the user and let them choose a rhythm that keeps it.

The user never reads the instruction, the cron or a trigger name: the instruction is the detailed brief for the run, and a person does not read a contract. Show the user only the routine_summary, when it runs (with the status report choice) and the permissions, in plain words, and never paste the instruction, a cron expression or a trigger name into the chat. The confirmation card shows the same three things, built by Well from the stored schedule.

routine_summary and cadence_label are written for the user, in the language of the conversation, as plain text with no markdown. routine_summary says what will happen, and who or what outside Well each change reaches. cadence_label says when it runs. For a clock it says the rhythm in words and says the same thing as cron_expression: write both in the same call. Well computes the next run dates from cron_expression and shows them beside cadence_label, so a label that disagrees with the cron is visible to the user. For an event it says the event in plain words, such as "Each time a Qonto payment is matched to an invoice", and never the trigger_name. A call that changes cron_expression, trigger_name or timezone must also send a new cadence_label, and a call that changes the instruction or the method must also send a new routine_summary: a call without them is refused. Changing the timezone of a routine Well set up makes it stop following the person's profile time zone for good, so send timezone only when the person asks for another zone.

The result states status and next_run_at. Quote them to the user, and say the stored approved_tools in plain words, never as tool names.

WORKFLOW: for a change to the job, the rhythm, the end limit or the permissions, run the /schedule conversation again on the changed parts, show the user the routine_summary, when it runs and the permission list as they will stand, get an explicit yes, then call this tool once with the changed fields and verified: true. Exception: when the user moves their own active afternoon or EOD touchbase to another hour on the same weekdays, send cron_expression and cadence_label and omit verified. Any weekday or other change follows the approval flow above. A pause or a resume needs no approval.

The conversation that produces a good schedule (what the run needs, which jobs cannot run alone, the rhythm advice and the permission list the user signs off) belongs to the /schedule skill. Load it before proposing a schedule.

Do NOT use this to create a schedule (use well_create_schedule), to cancel one (use well_cancel_schedule) or to snooze one (use well_snooze_schedule). A scheduled run never changes a schedule, its own included.

When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.

Input Schema

NameRequiredDescriptionDefault
nameNoThe routine's name, as `<Subject> · <moment>`: the subject in the user's own words, then when it runs. A rename keeps that shape, and a call that changes the rhythm renames the moment with it, or the name announces a cadence the routine no longer has. Never a cron expression. Inside 60 characters.
statusNo"paused" or "active". Status "active" turns a disabled morning brief back on, and so does the first approval of a brief that was never approved; an approved edit keeps it off.
ends_atNoThe new moment after which the routine stops (ISO 8601 with an offset). null removes the end.
timezoneNoAn IANA time zone name.
verifiedNotrue arms the schedule once the user approves Well's card; outside Well's chat it saves a draft edit. Omit it for a draft edit.
run_afterNo
instructionNoThe new detailed brief of a prompt schedule. The user never reads it.
method_nameNo
schedule_idYesThe schedule to change.
trigger_nameNoThe event that starts the routine. Send null when the routine moves to a cron.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which.
cadence_labelNoThe new rhythm, or for a trigger_name the new event, in plain words. Required with a new cron_expression, timezone or trigger_name, and when switching between a clock and an event.
method_paramsNo
status_reportNoThe message the user wants after a run: "on_error", "on_success", "both" or "none".
approved_toolsNoThe full new list of signed-off write tools, replacing the old one.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
cron_expressionNoA 5-field cron: minute hour day-of-month month day-of-week. Send null when the routine moves to an event.
idempotency_keyNoOptional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation.
max_occurrencesNo
routine_summaryNoThe new plain-words summary for the user. Required with a new instruction or method.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.
reviewed_versionNoSet by Well from the version the user reviewed. Never send it yourself.
restore_well_instructionNoMorning brief only: true goes back to Well's own brief. Never with instruction.

Output Schema

NameRequiredDescriptionDefault
errorNo
statusNo
messageNo
successYes
scheduleNo
next_run_atNo
approved_toolsNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / restore_well_instruction
      Added value: +{
      +  "description": "Morning brief only: true goes back to Well's own brief. Never with instruction.",
      +  "type": "boolean"
      +}
  2. Changed4 schema fields changed
    • removedOutput schema / properties / next_run_at / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / next_run_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / resolved_workspace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / resolved_workspace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / approved_tools / items / properties / browser
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "On a well_create_task entry only: the browser task the routine may start (\"buy\", a purchase that stops at the payment page; \"invoice_fetch\", the collection of the missing invoices of the counterparties it names). Without it the entry covers plain tasks only.",
      +  "properties": {
      +    "goal_kind": {
      +      "enum": [
      +        "buy",
      +        "invoice_fetch"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "goal_kind"
      +  ],
      +  "type": "object"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / status / description
      Previous value: -"\"paused\" or \"active\". \"active\" only resumes a paused schedule."New value: +"\"paused\" or \"active\". Status \"active\" turns a disabled morning brief back on, and so does the first approval of a brief that was never approved; an approved edit keeps it off."
  5. Changed1 schema field changed
    • addedInput schema / properties / ends_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "date-time",
      +      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "The new moment after which the routine stops (ISO 8601 with an offset). null removes the end."
      +}
  6. Changed3 schema fields changed
    • addedInput schema / properties / name / description
      Added value: +"The routine's name, as `<Subject> · <moment>`: the subject in the user's own words, then when it runs. A rename keeps that shape, and a call that changes the rhythm renames the moment with it, or the name announces a cadence the routine no longer has. Never a cron expression. Inside 60 characters."
    • changedInput schema / properties / name / maxLength
      Previous value: -255New value: +60
    • changedOutput schema / properties / newly_connected / description
      Previous value: -"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. Start the reply with one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."New value: +"Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: \"<name> is connected.\". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later."
  7. Added

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false, but the description massively extends this: it discloses that edits return a schedule to draft, when a confirmation card is raised, that verified:true arms nothing outside Well's chat, that approved edits keep a brief off, and the destructive consequences of timezone changes. This is behavior far beyond the annotation set.

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

Conciseness3/5

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

Content is front-loaded and organized into scannable blocks, but the verified paragraph is almost verbatim duplicated ('a confirmation card... armed only when the user approves it' appears twice), and several edge-case paragraphs (Sunday hold, nth-weekday cron syntax) are dense. The repetition and length cost clarity despite the good ordering.

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

Completeness5/5

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

For a 23-parameter, nested-object mutation tool, the description covers the approval/safety semantics, cross-parameter constraints, the Sunday-hold and cron rules, and the plain-words communication rules. An output schema exists so return values need not be explained, and the description even notes the result's status/next_run_at fields. Nothing essential for correct invocation is missing.

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 already 83%, yet the description adds meaningful rules the schema cannot express: send exactly one of cron_expression/trigger_name, event routines take no run_after/max_occurrences, ends_at null removes the end, status must be sent alone, status_report needs no verified, and the required companion fields (cadence_label with cron/trigger/timezone, routine_summary with instruction/method). It slightly over-explains fields the schema already covers, keeping it just under 5.

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?

States a specific verb and resource up front ('Change, arm, pause or resume one workspace schedule') and immediately distinguishes itself from well_create_schedule, well_cancel_schedule and well_snooze_schedule in the closing paragraph. An agent can identify the tool's role without opening any schema.

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

Usage Guidelines5/5

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

Explicitly names when to use (change/arm/pause/resume), when not to (create, cancel, snooze), and routes to alternatives by name. It also prescribes a concrete WORKFLOW (approval flow, the touchbase exception) and states prerequisites like loading the /schedule skill.

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.

Resources