> ## Documentation Index
> Fetch the complete documentation index at: https://dialnexa.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Add Workflow Edge

> Use the add_workflow_edge MCP tool on the DialNexa remote MCP server.

<span data-api-safety-label="changes-state"><Badge color="yellow" size="sm" shape="pill">Changes state - verify before retry</Badge></span>

Connects two existing nodes in a workflow with a directed edge — this is the recommended way to connect nodes, since it automatically keeps the source node's routing config (config.outputs/config.output, what the execution engine actually reads at call time) in sync with the edge. This is NOT a read-only action. Rejected (and automatically rolled back) if it would create a cycle in the graph. Adding the same edge twice is safe — it just returns the existing one rather than erroring. label is REQUIRED and must be exactly "COMPLETED", "DNP", or "FAILED" when the source is a VOICE\_CALL node, or exactly "true"/"false" when the source is CONDITIONAL — these are the literal keys the execution engine looks up, not just display text. label is optional for TIME/APPLICATION sources (they have only one next-node slot) and unused for CONVERTED/DROPPED sources (terminal, no next node).

## Parameters

| Name           | Type     | Required | Description                                                                                                                                                                                                                                                                 |
| -------------- | -------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `workflow_id`  | `string` | Yes      | The workflow ID, e.g. workflow\_abc123                                                                                                                                                                                                                                      |
| `from_node_id` | `string` | Yes      | Source node ID, e.g. node\_abc123                                                                                                                                                                                                                                           |
| `to_node_id`   | `string` | Yes      | Target node ID, e.g. node\_xyz789                                                                                                                                                                                                                                           |
| `label`        | `string` | No       | Required and must exactly match a valid output key ("COMPLETED"/"DNP"/"FAILED" for VOICE\_CALL, "true"/"false" for CONDITIONAL) when connecting from those node types — this literally drives call-time routing, it is not cosmetic. Optional for TIME/APPLICATION sources. |

## 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`, `from_node_id`, `to_node_id`.

## Example MCP request

Send `tools/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.

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "add_workflow_edge",
    "arguments": {
      "workflow_id": "workflow_abc123",
      "from_node_id": "VALUE",
      "to_node_id": "VALUE"
    }
  }
}
```

The server returns one text content block. Parse `content[0].text` as JSON when the tool succeeds. See [MCP responses and errors](/docs/mcp-tools/errors) for the full envelope and failure behavior.

## Verify the result

Confirm the response is not marked `isError`. Call [List Workflows](/docs/mcp-tools/workflows/list-workflows) 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

* [List Workflows](/docs/mcp-tools/workflows/list-workflows): `list_workflows`
* [Get Workflow](/docs/mcp-tools/workflows/get-workflow): `get_workflow`

## Related guides

* [Connect to the DialNexa MCP server](/docs/mcp-tools/overview)
* [Workflows MCP tools](/docs/mcp-tools/workflows/overview)
* [MCP responses and errors](/docs/mcp-tools/errors)
