MCP Tools
Workflows

update_workflow

Make a partial update to a workflow template; only the fields you send change. Commonly used to activate, rename, archive, or edit a workflow's steps — call get_workflow first to see the current state.

Input Schema

{
  "type": "object",
  "required": [
    "workflow_id"
  ],
  "properties": {
    "name": {
      "type": "string",
      "description": "New display name for the workflow. Omit it to leave the name as it is — only the keys you send are written."
    },
    "tags": {
      "description": "Replacement array of label strings; it overwrites the existing tags. Must be an array — any other value leaves the tags untouched."
    },
    "steps": {
      "description": "Replacement ordered list of actions. It overwrites the existing steps outright rather than merging, so start from the list `get_workflow` returned and send the whole intended sequence. Omit it — or send an empty object, which counts as \"not provided\" — to leave the steps unchanged."
    },
    "inputs": {
      "description": "Replacement declaration of the values the workflow expects at run time. It overwrites the previous declaration outright. Omit it to leave it unchanged; note an empty object `{}` is also treated as \"not provided\" and changes nothing."
    },
    "status": {
      "type": "string",
      "description": "Lifecycle state of the workflow: \"draft\" (created but not runnable), \"active\" (required before `run_workflow` will start it — running a non-active workflow is rejected) or \"archived\" (the soft-delete convention; the record is kept but taken out of normal use). Set \"active\" only once the user has confirmed the steps. Other strings are stored but nothing in the product recognizes them."
    },
    "description": {
      "type": "string",
      "description": "Replacement description. It is inserted into the prompt given to the agent that runs the workflow, so refresh it whenever the steps change meaningfully. Omit to leave it unchanged."
    },
    "workflow_id": {
      "type": "string",
      "description": "UUID of the workflow to update, as returned by `list_workflows`, `create_workflow` or `get_workflow`. Required, and the workflow must belong to the user's current team. Call `get_workflow` first so you can send a minimal change set and know what the current values are."
    },
    "allowed_tools": {
      "description": "Replacement list of the tools the workflow's agent is permitted to call. It overwrites the existing allowlist, so send the full intended set rather than just additions, and keep it tight for scheduled workflows. Omit it (or send an empty object) to leave the allowlist unchanged."
    }
  }
}

Output Schema

{
  "type": "object",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid"
    },
    "name": {
      "type": "string"
    },
    "tags": {
      "type": "array"
    },
    "steps": {
      "type": "array"
    },
    "inputs": {
      "type": "object"
    },
    "status": {
      "type": "string"
    },
    "link_url": {
      "type": "string",
      "format": "uri",
      "description": "Direct URL to view this workflow in Marcora."
    },
    "updated_at": {
      "type": "integer"
    },
    "allowed_tools": {
      "type": "array"
    }
  }
}

Instructions

Partial update of a workflow template — only the keys you send mutate; unspecified keys are preserved. Call get_workflow first to read the current values, then send the minimal diff.

Activate with { workflow_id, status: "active" }; soft-delete with { workflow_id, status: "archived" }. To rename, call get_workflow first, then send just { workflow_id, name }.

Do NOT send schedule or schedule_config. This tool CANNOT edit a schedule, and it fails silently rather than loudly: the field is ignored, no error is raised, and you get a normal success response, so sending it looks like it worked when nothing changed. Schedule edits and enabling a schedule are app-only — direct the user to the Marcora UI.

Parameters:

  • workflow_id (string uuid, required): UUID of the workflow to update, as returned by list_workflows, create_workflow or get_workflow. The workflow must belong to your current team. Call get_workflow first so you can send a minimal change set and know what the current values are
  • name (string, optional): New display name for the workflow. Omit it to leave the name as it is — only the keys you send are written
  • description (string, optional): Replacement description. It is inserted into the prompt given to the agent that runs the workflow, so refresh it whenever the steps change meaningfully. Omit to leave it unchanged
  • status (string, optional): draft, active, or archived. "active" is required before run_workflow will start it (running a non-active workflow is rejected); "archived" is the soft-delete convention — the record is kept but taken out of normal use
  • steps (array, optional): Replacement ordered list of actions. It overwrites the existing steps outright rather than merging, so start from the list get_workflow returned and send the whole intended sequence. Omit it — or send an empty object, which counts as "not provided" — to leave the steps unchanged
  • inputs (object, optional): Replacement declaration of the values the workflow expects at run time. It overwrites the previous declaration outright. An empty object {} is also treated as "not provided" and changes nothing
  • allowed_tools (array, optional): Replacement list of the tools the workflow's agent is permitted to call. It overwrites the existing allowlist, so send the full intended set rather than just additions, and keep it tight for scheduled workflows
  • tags (string[], optional): Replacement array of label strings; it overwrites the existing tags. Must be an array — any other value leaves the tags untouched

Output: The updated workflow object — id, name, status, steps, inputs, allowed_tools, tags, updated_at (Unix ms integer), link_url.

Scroll to Top