# Build synthetic tools

> Source: https://elaichi.ai/docs/guides/toolboxes/synthetic-tools/

Combine several steps — sometimes across different products — into a single tool your agents can call.

**Where to find it:** **Toolboxes → Synthetic tools**

Example: look a customer up in the CRM, then open a support ticket for them. One decisive tool usually beats three chained calls the agent has to orchestrate itself.

Synthetic tools are gated by your plan’s **synthetic tools** feature (included on Gold and Black). Without it, the empty state explains they aren’t in your plan.

## Before you start

- A plan that includes synthetic tools
- `toolbox:create` (or equivalent access to build tools)
- At least one working connection to test against

## Design a synthetic tool

1. Open **Toolboxes → Synthetic tools** → **New synthetic tool**.
2. Name it and describe when an agent should reach for it (this becomes the advertised tool description).
3. Define the tool’s **input schema** (what the agent must provide).
4. **Add step** for each call. For every step set:

| Field | Purpose |
| --- | --- |
| **Step key** | Stable id other steps and templates refer to |
| **Connection** | Which account runs this step |
| **Tool** | Which tool on that connection to call |
| **Depends on** | Earlier steps that must finish first |
| **Arguments template (JSONata)** | Build arguments from `{ input, steps }` |
| **Output template (JSONata)** (optional) | Shape what later steps see |

Independent steps (no dependency between them) **run in parallel**. Dependent steps wait. Cycles and unknown references are rejected when you save.

Step results are available as `steps.<key>` for later templates.

5. **Save changes**.

## Test run

After save, use the **Test run** panel:

1. Provide sample inputs matching your schema.
2. Choose **Run** against live connections.
3. Confirm **Test succeeded**, or fix the step where **Test stopped**.

Test execute runs the synthetic tool without needing it in a toolbox first. Results depend on real account data — use a safe connection when experimenting.

## Add to a toolbox

1. Open a shared or personal toolbox → **Add tools**.
2. Choose the **Synthetic tools** tab and pick your tool.
3. Tune name, description, defaults, or frozen params like any other entry.

It advertises its own input schema over MCP and executes its steps server-side through the same restriction and audit pipeline as normal tools.

## Good to know

- Each step runs with the access of the connection behind it.
- If a dependent step fails, the run stops there; independent parallel steps still follow the DAG.
- Restriction-blocked tools can’t be used as steps for callers who can’t reach them.
- Agents see one tool — they don’t manage the intermediate steps.

## Related

- [How toolboxes work](/guides/toolboxes/overview)
- [Shared toolboxes](/guides/toolboxes/shared-toolboxes)
- [Your toolboxes](/guides/toolboxes/your-toolboxes)
