Skip to main content
Glama

campaignstack_update_workflow_node

Change ONE workflow node's label or config without rewriting the graph. config is shallow merged onto the stored config (null removes a key), so a one-key edit is a one-key call. Call this when the user wants to change a single node's setting, like a message template or a delay. Returns the node's new nodeId, nodeType, label, config and declaredActions. On an ai:autonomous node, changing the brief starts a fresh reading of which actions it takes, so declaredActions on this reply is the PREVIOUS reading or null: read it back with campaignstack_get_workflow a moment later to see the new one. Use campaignstack_update_workflow only when the shape of the graph itself changes (adding, removing or rewiring nodes).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
labelNoNew display label for the node.
configNoConfig keys to change, SHALLOW MERGED onto the node's stored config: send only the keys you are changing, and set a key to null to remove it. Read the current config first with campaignstack_get_workflow. This is the narrow edit; campaignstack_update_workflow replaces the whole graph and drops any node you leave out of it.
nodeIdYesThe node to edit.
workflowIdYesThe workflow the node belongs to, from campaignstack_get_workflow.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
labelNo
configNo
nodeIdNo
nodeTypeNo
declaredActionsNoFor an ai:autonomous node: the actions its brief was read as taking, the reach flags, and whether the brief said nothing legible. Also present inside config.declaredActions.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": true,
      +  "properties": {
      +    "config": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "not": {}
      +            },
      +            {}
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "declaredActions": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "not": {}
      +            },
      +            {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "description": "For an ai:autonomous node: the actions its brief was read as taking, the reach flags, and whether the brief said nothing legible. Also present inside config.declaredActions.",
      +                  "properties": {
      +                    "actions": {
      +                      "items": {
      +                        "type": "string"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "briefHash": {
      +                      "type": "string"
      +                    },
      +                    "evaluatedAt": {
      +                      "type": "number"
      +                    },
      +                    "flags": {
      +                      "items": {
      +                        "type": "string"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "model": {
      +                      "type": "string"
      +                    },
      +                    "uncertain": {
      +                      "type": "boolean"
      +                    }
      +                  },
      +                  "type": "object"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "For an ai:autonomous node: the actions its brief was read as taking, the reach flags, and whether the brief said nothing legible. Also present inside config.declaredActions."
      +            }
      +          ],
      +          "description": "For an ai:autonomous node: the actions its brief was read as taking, the reach flags, and whether the brief said nothing legible. Also present inside config.declaredActions."
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "For an ai:autonomous node: the actions its brief was read as taking, the reach flags, and whether the brief said nothing legible. Also present inside config.declaredActions."
      +    },
      +    "label": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "not": {}
      +            },
      +            {
      +              "type": "string"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "nodeId": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "not": {}
      +            },
      +            {
      +              "type": "string"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "nodeType": {
      +      "anyOf": [
      +        {
      +          "anyOf": [
      +            {
      +              "not": {}
      +            },
      +            {
      +              "type": "string"
      +            }
      +          ]
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

Annotations are all false (readOnlyHint, destructiveHint, idempotentHint), so the description carries the full burden. It discloses the shallow-merge semantics (null removes a key), the return payload, and the subtle async behavior for ai:autonomous nodes where declaredActions is stale and must be re-read. This goes far beyond the minimal and is essential for correct usage.

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?

The description is dense but well-structured: it opens with the core purpose, then explains merge semantics, usage context, return value, the autonomous-node caveat, and the alternative. Every sentence adds value, though it is a bit long. For the complexity involved, the length is justified, so it earns a 4 rather than a 5.

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?

With an output schema present, the description doesn't need to detail return fields beyond a summary, which it provides. It covers the essential behavioral nuances (shallow merge, null removal, async action reading), the correct usage context, and the alternative tool. Nothing critical is missing for an agent to call it correctly.

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 description coverage is 100%, and the schema already documents the shallow-merge behavior and the need to read current config first. The tool description reinforces the 'one-key edit' idea but does not add meaningfully new per-parameter details beyond what the schema provides. The baseline of 3 is appropriate given high schema coverage.

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?

The description states a specific verb ('Change'), a precise resource ('ONE workflow node'), and a clear scope ('label or config without rewriting the graph'). It explicitly differentiates from the sibling campaignstack_update_workflow by naming the condition when that other tool should be used, so an agent can easily tell them apart without opening schemas.

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?

Provides explicit when-to-use ('when the user wants to change a single node's setting, like a message template or a delay') and when-not-to-use ('Use campaignstack_update_workflow only when the shape of the graph itself changes'), naming the alternative directly. This leaves no ambiguity about tool selection.

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