elaichi__synthetic_tool__create
Author a new multi-step Elaichi tool: a named input_schema plus a DAG of steps, each calling one tool on one of YOUR OWN usable connections. Every step needs connection_id, tool_name and a JSONata args_template over { input, steps } — args_template must PARSE here but is not evaluated until synthetic_tool.execute, so a template that references a field the input_schema never declares still saves clean. depends_on orders the DAG; independent steps run in parallel at execute time. The whole definition is validated as one unit before anything saves — duplicate/unknown/cyclic step keys, bad JSONata, an input_schema whose type is not "object", an unknown connection, an unknown tool on that connection's connector, or a connection you cannot at least "use" (docs/access-model.md §6) all reject the call and save nothing. Name is sanitized into a lowercase_underscore MCP tool identifier and must be unique in the organization (a collision after sanitizing is a conflict, not a silent rename) — read back the returned name, which may differ from what you sent. You become this tool's OWNER, which is permanent: nothing here or elsewhere transfers a synthetic tool to somebody else, and no permission ever widens who may read, edit, execute or delete it beyond you (synthetic_tool.get/.execute/.update/.delete). Pin the created id into a toolbox with toolbox.set_entries (entry type: "synthetic") to make it runnable by anyone the toolbox is shared with — at that point THEIR calls still run under YOUR connection authority, never theirs. Returns the created record, the same shape synthetic_tool.get returns.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Display name — sanitized server-side into a lowercase_underscore MCP tool identifier. Must be unique in the organization after sanitizing. | |
| steps | Yes | 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 | Yes | What this tool does — becomes the advertised tool description wherever it is pinned. | |
| input_schema | No | JSON Schema (type "object" or omitted) describing the arguments a caller of this tool must supply — this is what synthetic_tool.execute's `input` is checked against, and what steps' args_template reads as `input.<field>`. Omit for no declared inputs. | |
| output_template | No | Optional JSONata over { input, steps } shaping the final result. Omit for the default output — the object of every step's raw result, keyed by step key. |