One tool registry backs the in-app assistant, the REST API and the MCP server. What you connect here behaves exactly as it does inside the app.
The agent tools are IziStore's capabilities — read orders, edit a product, adjust stock, launch a campaign — each declared once in a shared registry along with its argument schema and the permissions it needs.
The in-app assistant, the REST API and the MCP server all read that same registry, so a tool behaves identically wherever it is called from, with the same scope, store and confirmation checks applied.
In Claude Code, a single line connects your store. Swap in your own key.
claude mcp add --transport http izistore https://izistore.app/api/mcp \
--header "Authorization: Bearer sk_live_VOTRE_CLE"Every surface authenticates the same way: an Authorization: Bearer header carrying an IziStore key.
Apps installed from the marketplace get their own token, prefixed izapp_. It is used exactly the same way, and it is revoked on uninstall.
Two entry points: one to discover tools, one to run them.
Returns the tools your key can actually reach, with their id, summary and argument schema. A tool your scopes do not reach does not appear at all.
curl -s https://izistore.app/api/v1/tools \
-H "Authorization: Bearer sk_live_VOTRE_CLE"The JSON body carries the tool's arguments, as described by its schema. The response is the tool's result.
curl -s -X POST https://izistore.app/api/v1/tools/orders.list \
-H "Authorization: Bearer sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{"storeId":"STORE_ID","status":"pending","limit":20}'The same entry the listing carries, for one id. It is the only way to tell a tool that does not exist (404) from one your permissions do not reach (403) — the listing omits both alike. The 403 names the scope you are missing.
curl -s https://izistore.app/api/v1/tools/orders.updateStatus \
-H "Authorization: Bearer sk_live_VOTRE_CLE"curl -s -X POST https://izistore.app/api/v1/tools/stores.list \
-H "Authorization: Bearer sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{}'The registry holds dozens of tools. tools.find searches them by keyword or domain and returns ids and summaries only; tools.run executes one by id, with exactly the same guards applied.
curl -s -X POST https://izistore.app/api/v1/tools/tools.find \
-H "Authorization: Bearer sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{"query":"stock"}'The MCP server speaks Streamable HTTP at /api/mcp. Authentication is the same Bearer header as the REST API.
claude mcp add --transport http izistore https://izistore.app/api/mcp \
--header "Authorization: Bearer sk_live_VOTRE_CLE"Add this block to claude_desktop_config.json, then restart the app.
{
"mcpServers": {
"izistore": {
"type": "http",
"url": "https://izistore.app/api/mcp",
"headers": {
"Authorization": "Bearer sk_live_VOTRE_CLE"
}
}
}
}Put this block in ~/.cursor/mcp.json for every project, or in .cursor/mcp.json at a project root.
{
"mcpServers": {
"izistore": {
"url": "https://izistore.app/api/mcp",
"headers": {
"Authorization": "Bearer sk_live_VOTRE_CLE"
}
}
}
}The same tools from a terminal, with no model in the loop — for scripting a task rather than asking for it. The API key is stored 0600 in ~/.izistore/config.json and is never printed.
# Depuis une copie du dépôt : npm link
izistore login
# Clé API : sk_live_...
izistore tools # ce que votre clé atteint
izistore tools orders.updateStatus # le schéma d'un outil
izistore run stores.list
izistore run orders.updateStatus --arg orderId=abc --arg status=delivered
# 409 confirmation_required — code : 402913
izistore run orders.updateStatus --arg orderId=abc --arg status=delivered \
--confirm 402913This is the part that surprises everyone on a first integration: a destructive tool always refuses its first call. That is not a failure.
An agent that can send a bulk WhatsApp campaign can also send it by accident, and the merchant only finds out afterwards. So the first call to a destructive tool runs nothing: it returns a confirmation_required error carrying a six-digit code. Replay the same call with that code to execute it.
curl -s -X POST https://izistore.app/api/v1/tools/products.delete \
-H "Authorization: Bearer sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{"storeId":"STORE_ID","productId":"PRODUCT_ID"}'{
"ok": false,
"code": "confirmation_required",
"error": "products.delete makes a change that cannot be undone. Nothing has run yet. ...",
"details": {
"confirmationCode": "418327",
"warning": "products.delete makes a change that cannot be undone. ..."
}
}curl -s -X POST https://izistore.app/api/v1/tools/products.delete \
-H "Authorization: Bearer sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{"storeId":"STORE_ID","productId":"PRODUCT_ID","confirmationCode":"418327"}'Every tool declares the scopes it requires. A key only reaches what it is scoped for — everything else does not even appear in the tool list.
stores:readstores:writeproducts:readproducts:writeorders:readorders:writeinventory:readinventory:writecustomers:readdelivery:readdelivery:writemessaging:readmessaging:writecampaigns:readcampaigns:writemarketing:readmarketing:writestorefront:readstorefront:writeclassroom:readclassroom:writeworkshops:readworkshops:writeanalytics:readskills:readEach plan includes a volume of AI tokens funded by IziStore, spent by the in-app assistant and the AI agent.
| Plan | AI tokens / month | API calls |
|---|---|---|
| Free | — | No API access |
| Starter | 800 000 | 500 / h |
| Premium | 2 000 000 | 1 000 / h |
| Enterprise | 4 000 000 | Unlimited |
Driving IziStore from your own agent spends that agent's tokens, at your provider. The allowance above covers the AI IziStore runs for you.
A failure always carries a machine-readable code and a message that says what to do next.
| code | Meaning |
|---|---|
| invalid_input | The arguments do not satisfy the tool's schema. The message lists each offending field. |
| forbidden | The key lacks the required scope, or the tool is not exposed on this surface. |
| store_required | The tool needs a store. Call stores.list and pass the storeId back in. |
| confirmation_required | Nothing ran. A six-digit code was issued — replay the call with it. |
| unknown_tool | No tool carries that id. Call tools.find to see what exists. |
| tool_error | The tool failed while running. The message carries the reason. |
The manifest names the product, the entry points, the authentication method, the scope vocabulary and the confirmation rule. An agent can read it and take it from there.
curl -s https://izistore.app/.well-known/agents.jsonThis manifest and this page are public: no authentication is needed to read them.