Skip to main content
Glama

Update a routine

routines_update
Destructive

Update a routine's instruction, cadence, delivery, the writes each run makes on its own, or its enabled switch (pause/resume). Only pass the fields being changed; writes replaces the whole list. Cadence changes recompute the next fire time. When people now act on each item, or it has become a process mapped in Compass, build a Task instead (workbench_tasks_create).

Input Schema

NameRequiredDescriptionDefault
idYesRoutine id (from routines_list).
nameNo
roomIdNoWith delivery "room": the room to post in.
writesNoTools each run writes with on its own, without asking: the ones the job needs every time, like ["napkin_tables_add_records"]. The person approves this list once, with this call. Any other write waits for approval on every run, and emails, invites, shares, publishing, schedules, deletes and starting other work always wait, even when listed.
enabledNo
deliveryNo
intervalNo
workspaceNoWorkspace slug. Personal tokens with no default workspace MUST pass this; tokens with a default can override per call. Ignored for workspace API keys.
approvalIdNoApproval id from a prior needs_confirmation envelope.
recurrenceNoWhen it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {"freq":"hourly"|"daily"|"weekly"|"monthly"|"yearly","every":N,"times":["HH:MM"],"weekdays":[0=Sun…6=Sat],"monthDays":[1…31,-1=last],"nthWeekdays":[{"nth":1…5|-1,"weekdays":[…]}],"months":[1…12],"minutes":[…],"hours":{"from","to"},"timezone":"<IANA>","starts","ends","skip":["YYYY-MM-DD"]}. Examples: weekdays at 8 → {"freq":"weekly","weekdays":[1,2,3,4,5],"times":["08:00"],"timezone":"America/Chicago"}; the last business day of the month → {"freq":"monthly","nthWeekdays":[{"nth":-1,"weekdays":[1,2,3,4,5]}],"timezone":"…"}; every other Friday → {"freq":"weekly","every":2,"weekdays":[5],"starts":"<a Friday>","timezone":"…"}. null clears it.
instructionNo
scheduleTimeNoWall-clock "HH:MM" anchor (default 09:00).
scheduleTimezoneNo
scheduleDayOfWeekNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / recurrence
      Added value: +{
      +  "anyOf": [
      +    {
      +      "properties": {
      +        "ends": {
      +          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +          "type": "string"
      +        },
      +        "every": {
      +          "default": 1,
      +          "maximum": 366,
      +          "minimum": 1,
      +          "type": "integer"
      +        },
      +        "freq": {
      +          "enum": [
      +            "hourly",
      +            "daily",
      +            "weekly",
      +            "monthly",
      +            "yearly"
      +          ],
      +          "type": "string"
      +        },
      +        "hours": {
      +          "properties": {
      +            "from": {
      +              "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +              "type": "string"
      +            },
      +            "to": {
      +              "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "from",
      +            "to"
      +          ],
      +          "type": "object"
      +        },
      +        "minutes": {
      +          "items": {
      +            "maximum": 59,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "maxItems": 12,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "monthDays": {
      +          "items": {
      +            "maximum": 31,
      +            "minimum": -1,
      +            "type": "integer"
      +          },
      +          "maxItems": 31,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "months": {
      +          "items": {
      +            "maximum": 12,
      +            "minimum": 1,
      +            "type": "integer"
      +          },
      +          "maxItems": 12,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "nthWeekdays": {
      +          "items": {
      +            "properties": {
      +              "nth": {
      +                "maximum": 5,
      +                "minimum": -1,
      +                "type": "integer"
      +              },
      +              "weekdays": {
      +                "items": {
      +                  "maximum": 6,
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "maxItems": 7,
      +                "minItems": 1,
      +                "type": "array"
      +              }
      +            },
      +            "required": [
      +              "nth",
      +              "weekdays"
      +            ],
      +            "type": "object"
      +          },
      +          "maxItems": 5,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "skip": {
      +          "items": {
      +            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +            "type": "string"
      +          },
      +          "maxItems": 100,
      +          "type": "array"
      +        },
      +        "starts": {
      +          "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +          "type": "string"
      +        },
      +        "times": {
      +          "items": {
      +            "pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
      +            "type": "string"
      +          },
      +          "maxItems": 24,
      +          "minItems": 1,
      +          "type": "array"
      +        },
      +        "timezone": {
      +          "maxLength": 64,
      +          "minLength": 1,
      +          "type": "string"
      +        },
      +        "weekdays": {
      +          "items": {
      +            "maximum": 6,
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "maxItems": 7,
      +          "minItems": 1,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "freq",
      +        "timezone"
      +      ],
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "When it runs, like a calendar event repeats; use it for anything beyond a plain hourly/daily/weekly at one time (then omit interval). {\"freq\":\"hourly\"|\"daily\"|\"weekly\"|\"monthly\"|\"yearly\",\"every\":N,\"times\":[\"HH:MM\"],\"weekdays\":[0=Sun…6=Sat],\"monthDays\":[1…31,-1=last],\"nthWeekdays\":[{\"nth\":1…5|-1,\"weekdays\":[…]}],\"months\":[1…12],\"minutes\":[…],\"hours\":{\"from\",\"to\"},\"timezone\":\"<IANA>\",\"starts\",\"ends\",\"skip\":[\"YYYY-MM-DD\"]}. Examples: weekdays at 8 → {\"freq\":\"weekly\",\"weekdays\":[1,2,3,4,5],\"times\":[\"08:00\"],\"timezone\":\"America/Chicago\"}; the last business day of the month → {\"freq\":\"monthly\",\"nthWeekdays\":[{\"nth\":-1,\"weekdays\":[1,2,3,4,5]}],\"timezone\":\"…\"}; every other Friday → {\"freq\":\"weekly\",\"every\":2,\"weekdays\":[5],\"starts\":\"<a Friday>\",\"timezone\":\"…\"}. null clears it."
      +}
    • addedInput schema / properties / writes
      Added value: +{
      +  "description": "Tools each run writes with on its own, without asking: the ones the job needs every time, like [\"napkin_tables_add_records\"]. The person approves this list once, with this call. Any other write waits for approval on every run, and emails, invites, shares, publishing, schedules, deletes and starting other work always wait, even when listed.",
      +  "items": {
      +    "pattern": "^[a-z][a-z0-9_]{1,79}$",
      +    "type": "string"
      +  },
      +  "maxItems": 20,
      +  "type": "array"
      +}
  2. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and non-readOnly, and the description adds real behavioral context beyond them: partial-update semantics, whole-list replacement for `writes`, and the side effect that cadence changes recompute the next fire time. It does not address permission requirements, irreversibility, or how an invalid `id` fails, so it stops short of a 5.

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?

Three dense sentences with the mutation scope front-loaded, followed by the replace-semantics warning, then the alternative. Every clause carries information, though the Task-pivot sentence is a touch rhetorical for a tool definition.

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 a destructive 14-parameter mutation with no output schema, the description covers the critical unknowns: partial vs full update, list replacement, and schedule recomputation. It leaves out authorization expectations and confirmation/approval flow, though the schema partially documents approvalId.

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

Parameters3/5

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

Schema coverage is 50%. The description compensates for some gaps by explaining `writes` replacement semantics and that cadence fields recompute the fire time, but roughly half the parameters (name, enabled, delivery, interval, instruction, schedule* fields) get no meaning from the description, relying on the schema or on inference.

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 (update) and resource (routine) and enumerates the exact mutable surfaces: instruction, cadence, delivery, autonomous writes, enabled switch. An agent can distinguish it from routines_create/routines_list and from workbench_tasks_create without opening a 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 says to pass only changed fields, warns that `writes` replaces the whole list, and names an alternative (workbench_tasks_create) with the conditions that select it: people now act on each item, or it became a Compass-mapped process. Both when-to-use and when-not are present.

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