How toolboxes work
Give an agent a curated set of tools instead of everything a product can do. Elaichi splits that curation into a reusable template (the tool list, no connections) and a connection-bound toolbox (what actually runs) — so a group of tools can be designed and shared long before anyone picks the accounts behind it.
Smaller, well-described toolboxes produce better results. An agent choosing between six clearly named tools makes better decisions than one sorting through two hundred.
Where to find it: Toolboxes in the sidebar → Toolboxes, Templates, or Synthetic tools
Three kinds
| Kind | Where in the UI | What it is |
|---|---|---|
| Template | Templates | A reusable definition — tools, frozen/default params, no connections. Teammates stamp their own toolbox from it. |
| Toolbox | Toolboxes | Connection-bound. What MCP clients connect to — stamped from a template, built from scratch, or one of the automatic system toolboxes below. |
| Synthetic tools | Synthetic tools | Multi-step composite tools you add into a template or a toolbox like normal entries. |
Elaichi also maintains automatic system toolboxes alongside the ones you build:
| System toolbox | Meaning |
|---|---|
| Global toolbox (“All tools”) | Everything you can currently reach |
| Connection toolbox (“{connection} tools”) | All tools for one Active connection |
System toolboxes are read-only: you can use them over the organization's MCP endpoint, but you can’t edit their entries.
The important rule
AI clients reach toolboxes over the MCP endpoint, not templates directly. A template is the recipe; a toolbox — stamped from one, or built by hand — is what actually advertises tools over MCP. There is one endpoint, and nothing is minted per toolbox: the organization it reaches and the access it runs as both come from the OAuth grant, not from the address.
flowchart TD Template["Template<br/>tools, frozen/default params<br/>no connections"] -->|"stamp (use)"| Toolbox["Toolbox<br/>your copy, connections bound"] Conn["Active connection"] -->|"automatic"| Dynamic["Connection toolbox<br/>read-only"] Toolbox --> MCP["Org's MCP endpoint"] Dynamic --> MCP MCP --> Client["AI client"]
Sharing levels (ACL)
Templates and toolboxes share the same ACL, but use means something
different on each:
| Level | On a template | On a toolbox |
|---|---|---|
| View | See it and its tools | See its metadata and tool list |
| Use (default) | Stamp a toolbox from it | Execute its tools over its bound connections, reachable through the org's MCP endpoint |
| Edit | Change its tools and settings | Change its entries and settings |
Share with a member, a team, or everyone at your organization. View-only recipients can’t stamp a template or run a toolbox.
Sharing a template never shares credentials — a template has none to share.
Sharing a toolbox is different: use delegates execution over the
connections its entries already have pinned. The grantee does not need their
own access to those connections at all; they run exactly this toolbox’s
tools, with its frozen params, over whichever connection an editor pinned in.
The live authority behind each entry is that editor (the entry’s
delegator) — if they later lose access to the connection they pinned, that
one entry stops working for everyone, independent of the toolbox share
itself. The share screen lists which connections a grantee will end up
running through before you confirm, especially private or someone-else-owned
ones.
Per-tool customization
On a template (and on a toolbox’s own entries), open Edit tool to tune what agents see and how calls run:
| Setting | Effect |
|---|---|
| Name override / Description override | What the model sees (empty = catalog) |
| Enabled | Disabled entries stay in the UI but aren’t offered over MCP |
| Frozen parameters | Fixed values stripped from the advertised schema and force-merged at execution — the model can’t see or override them |
| Default values | Applied when the client omits a parameter; the model can still override |
| Input schema override | Replace the advertised JSON Schema (with helpers to copy or reset the catalog schema) |
Call-time precedence: defaults < client arguments < frozen parameters.
A template entry never references a connection at all — that’s what stamping fills in (see How the pieces fit below).
Several accounts, one tool
Connect two accounts of the same product — two Notion workspaces, two Salesforce orgs — and Elaichi still advertises one tool, not two. Which account a call uses is an argument, not part of the tool name.
- One account backs the tool: nothing to do. The tool keeps its plain
name and its description starts with that account, like
[Work Notion]. - Several accounts back the same tool: the tool gains a required
connectionargument. Its choices are the account names, and it has no default — the agent must pick one. - A call that skips
connection, or names an account that doesn’t back that tool, is refused. The error lists the real choices and tells the agent to ask you when your request didn’t say. There is no default account and no "last one connected" fallback, anywhere.
Accounts with the same name
When two accounts of one product share a name, both get a short piece of
their connection id added — Notion (a1b2c3) and Notion (d4e5f6) — so
neither keeps the bare name. Names that differ only in capitals or spacing
(Work Notion and work notion) count as the same name and are treated the
same way.
The added piece is as short as it can be while still telling those accounts
apart, so it grows only if it has to. Elaichi never numbers accounts 1 and
2: a number would move to a different account the moment you add or remove
an unrelated one.
Labels are worked out per tool. If two accounts back get_page but only one
backs create_page, get_page offers Notion (a1b2c3) and Notion (d4e5f6) while create_page offers a plain Notion. Both are right at the
same time. Agents should copy the value from the tool they are calling.
Example: two Notion workspaces
Connect two Notion workspaces, both named "Notion". Agents see one get_page
— not two lookalikes — with a required connection set to one of
"Notion (a1b2c3)" or "Notion (d4e5f6)".
Ask an agent to look up a page without saying which workspace, and the call comes back with:
connectionis required. This tool reaches 2 connected accounts — pass exactly one of: "Notion (a1b2c3)", "Notion (d4e5f6)". If the user's request does not say which account, ask them; do not pick one for them.
A well-behaved agent asks you which workspace and calls again. Delete one
workspace later and get_page keeps its name, drops the connection
argument, and an agent still naming the deleted workspace is refused — never
quietly pointed at the one that is left.
When tools stay separate
Pinning an entry to a specific connection (see
Connection binding) does
not keep tools apart. Two entries for the same tool pinned to two different
accounts still merge into one tool with a connection argument. What keeps
tools separate is a difference in the call itself:
- Entries for the same tool that set different frozen parameters, defaults, overrides or schemas stay separate tools. Merging them would let one entry’s fixed values ride along on another account's call.
- A few products have their own
connectionparameter in their API. Tools for those stay one per account, so that parameter keeps working.
Locked values
A tool with frozen parameters tells agents about the lock in its
description. The note (frozen: folder_id=HR) sits between the account
label and the tool’s own text; a value too long, too complex or unsafe to
print is shortened to folder_id=…, which still says the lock is there.
The locked parameter is not in the tool’s schema at all, and a value an
agent sends anyway is overridden, not an error.
When the same tool is added several times with different frozen values,
the pinned value goes into each copy’s name — names ending _hr and
_legal, say — but only when every value is short plain text that does
not look like an id. Long values, ids, lists and objects get a short
generated code instead. That test is about shape, not secrecy: a short
readable value such as an email address does go into the name, and names
are cached by client apps and written to logs, so do not freeze something
private and expect the name to hide it.
A well-behaved agent picks the variant whose note matches your words, asks when none does, tells you when you ask for a value the tool is locked away from instead of running it anyway, and presents results as scoped — "contacts from the HR folder" — rather than as everything.
Approvals stay with the account
An approval you give — including "always allow" — applies to the account it was granted for. The same tool on another account asks again. If the account is changed after you approve, the call is refused rather than run somewhere else.
What restrictions can’t do
Restrictions work on the product and the tool, not on the account. You cannot allow a tool on one Notion workspace and block it on another — a restriction applies to every account behind that tool.
Needs connection
An entry with no connection pinned — left unmapped at stamp time, or added directly to a toolbox — renders as Needs connection, alongside the other statuses a tool entry can carry (Tool unavailable, Disabled, Ready). A needs-connection entry advertises nothing over MCP; it stays visible in the console so you can finish setting it up.
Fix it by picking a connection for that entry (connecting the product first, if you haven’t). The tool appears to MCP clients automatically once it resolves — no server restart, no re-mint.
An entry whose connection used to work can also fall back into this
state: if the person who pinned it (its delegator) loses access to that
connection, the entry goes unmet for everyone who runs the toolbox, until
someone with edit re-pins it.
How the pieces fit
- Connect accounts → automatic connection toolboxes appear under Toolboxes.
- Optionally build a template, tune its entries, and share it with view / use / edit.
- Recipients with use stamp their own toolbox from it — naming it and filling each entry’s connection as they go.
- Point an AI client at your org's MCP endpoint — it reaches every toolbox you can use, your own or delegated to you, with nothing to mint per toolbox.
- Optionally add synthetic tools into a template or a toolbox.
Good to know
- Tools blocked by restrictions never appear to MCP clients, even if a template includes them.
- Renaming a tool changes it only inside that template or toolbox — the underlying product is untouched.
- A template’s entries are copied, not linked: editing a template later never changes toolboxes already stamped from it.
- Permissions:
template:create/toolbox:createto build,template:share/toolbox:shareto share,template:manage/toolbox:manageto edit or delete one you own or hold aneditshare on.