- VOICE_CALL: config = { phone_number_id: “phn_abc123”, outputs: { COMPLETED?: node_id, DNP?: node_id, FAILED?: node_id } }. Places a call using the agent bound to that phone number. outputs can be created empty ({}) — this is the ONE node type you can create before its targets exist, then wire up later with add_workflow_edge.
- CONDITIONAL: config = { conditions: [{ field: “dynamic_variables.status”, operator: “equals”|“not_equals”|“exists”|“contains”|“greater_than”|“less_than”, value: ”…” }], logical_operator: “AND”|“OR”, outputs: { true: node_id, false: node_id } }. Both outputs.true and outputs.false are REQUIRED AT CREATION TIME — unlike VOICE_CALL, you cannot create this node first and wire it later. Create its true/false target nodes FIRST, then create this node with both real target ids already in outputs.
- TIME: config = { duration: { value: 24, unit: “minutes”|“hours”|“days” }, output: node_id } to wait a fixed duration, OR { time_source: “postcall_analysis”, pca_field: “Time of Callback”, output: node_id } to wait until a post-call-analysis field’s value. output is REQUIRED AT CREATION TIME, same constraint as CONDITIONAL — create the target node first.
- APPLICATION: config = { application_integration: “whatsapp”, wati_template_name: “template_name”, wati_template_params: [“param1”,“param2”], output: node_id }. WhatsApp (via Wati templates) is the ONLY application integration this tool supports — if the user asks for a different integration (email, Slack, etc.), tell them it isn’t available here rather than guessing a config shape for it. output is REQUIRED AT CREATION TIME, same constraint as CONDITIONAL/TIME.
- CONVERTED / DROPPED: terminal nodes, config = {} (or omit), no outputs concept at all. Every workflow needs at least one of each before it can be activated. They can never be the SOURCE of an edge — execution stops there.
- Exactly ONE node may have zero incoming edges — that’s the entry point every lead starts at. Every other node needs at least one incoming edge from add_workflow_edge. Two disconnected starting points, or a node nobody points to, both fail activation.
- Every node must be reachable from that entry point by following edges forward — a node created but never wired to anything fails activation as unreachable.
- No cycles, ever — this one IS checked immediately on add_workflow_edge (rejected and rolled back on the spot), not deferred.
- At least one CONVERTED and one DROPPED node must exist and be reachable. Before calling update_workflow_status with action “activate”, call get_workflow_structure and check points 1, 2, and 4 yourself — catching a broken connection there is far clearer for the user than an activation error. Adding a node does not connect it to anything by itself — use add_workflow_edge afterward, or reference other node ids directly inside this node’s outputs/output config.
Parameters
Before you call
- Connect and initialize the MCP client with OAuth or an API key for the intended workspace.
- Provide the required parameters:
workflow_id,node_type,label.
Example MCP request
Sendtools/call after your client completes MCP initialization. Replace placeholder values with IDs and inputs from your workspace. For object and array parameters, follow the nested requirements in the parameter description instead of treating an empty value as complete.
content[0].text as JSON when the tool succeeds. See MCP responses and errors for the full envelope and failure behavior.
Verify the result
Confirm the response is not markedisError. Call Get Workflow Structure to read the affected resource. Verify that the intended state is visible before making another change.
Retry safety
This tool changes workspace state. After a timeout, read the affected resource before retrying so you do not create duplicate or conflicting changes.Related MCP tools
- Update Workflow Status:
update_workflow_status - Get Workflow Structure:
get_workflow_structure - Add Workflow Edge:
add_workflow_edge - List Workflows:
list_workflows - Get Workflow:
get_workflow