toolUrl. When Ola calls one, Salesive makes a signed POST to that URL
and returns the answer to Ola. Your app does not need to be open, and it does not
need to run an MCP server.
Three ways to give Ola tools
WebMCP tools run in your iframe. The dashboard preloads
installed apps in the background, but the tool still depends on that page being
loaded in the merchant’s browser. Server-side tools do not: the call goes from
Salesive’s servers to yours.
Register your tools
Send the whole list withPUT /api/v1/app/tools and your app token. The
installation, and therefore the store, comes from the token.
- The request replaces the whole list. Send every tool every time; a tool you leave out is removed.
- Nothing is written until every tool passes validation. A rejected request
leaves the previous list in place and answers
400with a message that names the tool and the rule, plus adata.codesuch astoo_many_tools,duplicate_name,schema_too_largeorunsafe_url. GET /api/v1/app/toolsreturns the list for the installation, including tools the merchant switched off.
Tool fields
toolUrl is checked when you save it and again before every call. A URL that
stops passing the guard is not called.
What the API returns
How Ola calls a tool
When Ola decides to use one of your tools, Salesive sends:argumentsis the object Ola built from yourinputSchema. It is{}when there is nothing.shopIdandinstallationIdsay which install the call is for. They are inside the signed body.- There is no merchant identity, no session token and no
Authorizationheader. The signature is the only credential. - The call has 20 seconds to answer. A response over 256 KB is refused.
- A
3xxis refused, and a non2xxstatus is a failed call. - Return JSON or plain text. Salesive parses JSON when it can and passes text otherwise.
Verify the signature
The signature uses your app’s webhook signing secret and the same construction as webhooks and the app proxy: base64 HMAC-SHA256 of<t>.<raw body>, in X-Salesive-Signature: t=<unix seconds>,v1=<signature>.
Reject a timestamp more than 300 seconds from your clock, in either direction.
Verify the raw body before parsing.
Node.js (Express)
A development install is signed with your development signing secret;
production uses the production pair. Tool calls use the app’s current secret
for the installation’s environment, not a release snapshot’s secret.
toolUrl
still has to be a public HTTPS address, so use a tunnel (for example
cloudflared or ngrok) if your server runs locally.Approval and the merchant’s switch
In the dashboard chat, every call shows an approval card first. The card shows your app’s name and logo from the installation record, and the tool name.- Approve runs this call.
- Reject tells Ola the merchant declined. Your server is never called.
- Always allow runs this call, and future calls of this tool for this installation without asking.
tool_disabled
and your server is not called. The list Ola sees can take up to 30 seconds to
catch up, but the call itself is refused immediately.
Re-registering your list does not re-enable a tool the merchant switched off. The
choice is carried across by name. A tool you remove and add again later is a new
row, so it starts on.
Only the store owner or a store admin can see and switch tools. Other staff get
403.
Scheduled tasks and headless runs
Ola also runs where nobody can click a card, such as scheduled tasks. There she only uses tools the merchant chose Always allow for. These tools have no read-only annotation, so even a read-only tool needs Always allow to run in a scheduled task. Workflow AI steps never get app tools.Audit
Every call that reaches a registered tool writes one audit row: the app, installation, tool, whether it succeeded, how long it took, and a short error code. Arguments and results are never stored, so the audit cannot carry customer data. Audit rows are not shown in the developer console yet.Limits
Merchant endpoints
The merchant’s view and switch use a merchant session, never an app token:GET returns data.tools, the same shape the app sees. PATCH returns
data.tool with the new enabled value.
Security model
- The app token is bound to one installation, so you can only register tools for the store that installed you.
- No OAuth scope is required, because registering a tool is not a write to store data.
- Every call is signed with your webhook secret. Verify it and reject stale timestamps.
- Salesive never sends your
toolUrlor secret to the model. Ola sees the name, the description and the schema. - Results reach Ola marked as untrusted third-party data and are capped at 16,000 characters.
- The merchant can switch any tool off, and uninstalling the app stops calls immediately.
- Your server never receives a merchant session or user identity. Use
shopIdandinstallationIdfrom the signed body.
Next steps
AI tools (WebMCP)
Tools that run inside your embedded page.
AI tools from your server (MCP)
A full MCP server, with its own session tokens and tool listing.
Storefront app proxy
Serve your own pages on the merchant’s storefront domain.

