elaichi__synthetic_tool__update
Edit a synthetic tool's definition — name, description, input_schema, steps or output_template. MERGE at the top level: fields you omit keep their current value. Sending steps is a WHOLESALE REPLACE of the step list, same as toolbox.set_entries — resend every step you want to keep, not only the ones you changed. The merged definition (your patch layered over what is stored) is re-validated as a whole exactly as synthetic_tool.create validates a new one, so an unrelated field edit can still fail if it leaves the stored steps inconsistent with a new input_schema. A step whose (connection_id, tool_name) pair is unchanged from what is already stored rides forward without re-checking your access to that connection — protects an honest read-modify-write from being refused by a restriction written after the step was first saved — but any step that is new, or that changes tool_name while keeping connection_id, is validated fresh against your CURRENT access and restrictions. OWNER-ONLY, same as every other synthetic-tool operation: this needs toolbox:create or toolbox:manage to call at all (the coarse permission gate PATCH /synthetic-tool/:id enforces), but that permission is not the real gate — unlike toolbox.update, a toolbox:manage holder who does not own this tool still gets the exact same 404 an unknown id gets, never access. Read synthetic_tool.get first: this endpoint does not tell you what changed, only the result after. Returns the updated record, the same shape synthetic_tool.get returns.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Synthetic tool id (`syn_…`) from synthetic_tool.list. | |
| name | No | New name — sanitized and uniqueness-checked the same as at creation. Omit to leave unchanged. | |
| steps | No | The COMPLETE step list — WHOLESALE REPLACE on update, never a merge. At least one step; every step key must be unique and dependency-free of cycles. | |
| description | No | New description. Omit to leave unchanged; unlike toolbox.update this cannot be cleared to null — it is always required text. | |
| input_schema | No | Replacement input_schema. Omit to leave unchanged. | |
| output_template | No | Replacement output_template, or null to clear it back to the default output. Omit to leave unchanged. |