Contents
Tools
Served by each module. Tool names have no module prefix here (search_orders); the MCP
connector adds one (commerce_search_orders). The full catalogue per module is in the MCP
connector API (x-nucleo-tools).
Base URL, authentication and conventions of this API are on the AI Tools API page.
/api/v1/ai-toolsList the tools available in a company
nucleo.ai_tools scope.The tools the person may use in the company of X-Nucleo-Company, already filtered by their
permissions and roles in that module, sorted by name. Definitions do not change between a list
and a call unless the company or the person's permissions change.
Caching: responses carry ETag and Cache-Control: private, max-age=60; send the ETag back
in If-None-Match to get 304 Not Modified.
Company errors (400 company_required, 403 company_forbidden, 409 company_not_ready)
mean the module is not usable for this person in this company: hide it. 403 ai_connector_disabled means the company has switched off this module's AI connector (Nucleo
Core → company modules): hide it too. That check runs on every module right after the token and the
person's access to the module are verified, and before the company, version and tool checks, on the
company of X-Nucleo-Company (on Brain, without the header, the token's company or the person's only
company with Brain). Switching the connector off usually applies within seconds, but can take up to
5 minutes.
Catalog only: a company can have several catalogs. X-Nucleo-Store (id or slug) picks one;
without it the first ready catalog the person can access is used (the first created), and
company.store says which. The MCP connector never sends X-Nucleo-Store, so it always works on
that catalog.
Module differences. On Brain, company errors are
plain {"message": "..."} bodies (400 no company, 403 no access, 404 Brain not set up for the
company — no 409), and it does not echo X-Nucleo-Request-Id. Intelligence checks the company
before the contract version.
Rate limit: 120 requests per minute per user on every module (Brain, Catalog, Commerce, Intelligence), in a separate bucket from tool calls.
Headers
X-Nucleo-CompanystringrequiredNumeric company id (
companies[].idfrom the context, ororgs[].idfrom userinfo).pattern ^[1-9][0-9]{0,18}$Example:7X-Nucleo-LanguagestringLanguage of human-readable texts in results and errors (
enorit, defaulten). Tool descriptions are written for the model and do not followX-Nucleo-Language; Catalog tools are currently described in Italian. Catalog applies it only to its protocol errors (company, version, unknown tool, invalid arguments): the texts inside its tool results, domain errors and thepermission_deniedmessages written by a tool are in Italian whatever the header.One ofenitdefault enExample:enX-Nucleo-AI-Tools-VersionstringContract version. Missing = 1. Any other value →
406.One of1default 1Example:1X-Nucleo-Request-IdstringYour id for the call (UUID recommended), echoed back and written in Nucleo's logs. Pattern
^[A-Za-z0-9._:-]{1,128}$, otherwise a new UUID is used.max length 128Example:2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6aX-Nucleo-StorestringCatalog only — id or slug of the catalog (store) to use within the company (ignored by other modules).
Example:acme-euIf-None-MatchstringExample:"5f1d3b0c9a4e2b7d8c6f1a0e3b2d4c5a6f7e8d9c"
Responses
200Tool list.application/json
HeadersETagCache-ControlX-Nucleo-Request-IdEcho of the request id (or a generated one). Not sent by Brain.
version1requiredmodulestringrequiredOne ofbraincatalogcommerceintelligencecompanyobjectOn Catalog,
idis the company butslugandnameare those of the catalog in use (the same asstore).Child attributes
idinteger | nullslugstring | nullnamestring | nullstoreobjectCatalog only — the catalog in use.
Child attributes
idintegerslugstringnamestring
languagestringinstructionsstringModule-level guidance for the model (English).
toolsarray of ToolDefinitionrequiredAttributes of each item
namestringrequiredpattern ^[a-z][a-z0-9_]{1,47}$titlestringmax length 60descriptionstringrequiredWritten for the model, cut at 1,024 characters. Brain, Commerce and Intelligence describe their tools in English; Catalog tools are currently described in Italian.
max length 1024inputSchemaobjectrequiredJSON Schema of
type object(no$ref,oneOf/anyOf/allOforadditionalProperties).permissionstring | nullModule permission the tool requires (informational).
side_effectsstringrequiredOne ofreadwriteannotationsobjectChild attributes
readOnlyHintbooleandestructiveHintbooleantrue only for a write that cannot be undone automatically (for example a merge of two records, forgetting a memory, or removing a deal). The gateway passes every hint unchanged to the AI client.
idempotentHintbooleanopenWorldHintboolean
tagsarray of string
generated_atstring (date-time)
304Not modified (
If-None-Matchmatched).400
X-Nucleo-Companymissing or not a positive integer.application/jsonerrorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
401Missing, expired or revoked token — or a token that is not from a self-registered client. Body:
{"message":"Unauthenticated."}; Intelligence answers withapplication/problem+json. application/jsonmessagestring
403No access to the module in this company, or the company switched off its AI connector.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
404Brain only — Brain is not set up for this company.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
406Unknown contract version.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
409The person has access but the module is not set up yet for this company.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
429More than 120 requests per minute for this user on this endpoint. Default body; Intelligence answers with
application/problem+json. application/jsonHeadersRetry-AfterX-RateLimit-LimitX-RateLimit-Remaining
messagestring
curl -X GET https://api-commerce.nucleoplatform.com/api/v1/ai-tools \
-H "Authorization: Bearer $NUCLEO_ACCESS_TOKEN" \
-H 'X-Nucleo-Company: 7' \
-H 'X-Nucleo-Language: en' \
-H 'X-Nucleo-AI-Tools-Version: 1' \
-H 'X-Nucleo-Request-Id: 2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6a' \
-H 'X-Nucleo-Store: acme-eu' \
-H 'If-None-Match: "5f1d3b0c9a4e2b7d8c6f1a0e3b2d4c5a6f7e8d9c"' \
-H 'Accept: application/json'const res = await fetch("https://api-commerce.nucleoplatform.com/api/v1/ai-tools", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.NUCLEO_ACCESS_TOKEN}`,
"X-Nucleo-Company": "7",
"X-Nucleo-Language": "en",
"X-Nucleo-AI-Tools-Version": "1",
"X-Nucleo-Request-Id": "2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6a",
"X-Nucleo-Store": "acme-eu",
"If-None-Match": "\"5f1d3b0c9a4e2b7d8c6f1a0e3b2d4c5a6f7e8d9c\"",
Accept: "application/json",
},
});
const data = await res.json();
console.log(res.status, data);<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api-commerce.nucleoplatform.com/api/v1/ai-tools', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('NUCLEO_ACCESS_TOKEN'),
'X-Nucleo-Company' => '7',
'X-Nucleo-Language' => 'en',
'X-Nucleo-AI-Tools-Version' => '1',
'X-Nucleo-Request-Id' => '2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6a',
'X-Nucleo-Store' => 'acme-eu',
'If-None-Match' => '"5f1d3b0c9a4e2b7d8c6f1a0e3b2d4c5a6f7e8d9c"',
'Accept' => 'application/json',
],
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo $response->getBody();{
"version": 1,
"module": "commerce",
"company": {
"id": 7,
"slug": "acme",
"name": "Acme Apparel"
},
"language": "en",
"instructions": "Nucleo Commerce: Customer care (internal tickets between Customer Service, Logistics and the other teams; customer requests from the helpdesk, for the Customer Service team only), POS (points of sale, on-hand stock, inbound deliveries, transfers and returns) and Orders (the OMS: orders, customers, returns, shipments, sellable stock, routing, anomalies, fulfillment KPIs). Ticket codes look like TK-0029. Start from search_tickets or list_customer_requests (search_orders for orders), then read the detail. Everything here is read-only: nothing changes data, and reading a ticket does not mark it as read.",
"tools": [
{
"name": "get_order",
"title": "Get order",
"description": "Orders (Nucleo OMS). One order in full, as on its page: customer and shipping address, items (SKU, quantities ordered, cancelled, shipped; price paid, full price, compare-at price and share of order discounts, fixed at the first download), amounts in the order currency and in the store currency (original and current after edits, refunds and cancellations; received, outstanding, refunded; shipping with discount and tax), refunds made on the sales channel, where each item ships from, pauses, shipments with tracking, returns, open anomalies. The order can be given by number (#1001) or id. For \"why is it here / why is it stuck\" use explain_order instead.",
"inputSchema": {
"type": "object",
"properties": {
"order": {
"type": "string",
"description": "Order number (e.g. #1001) or id."
}
},
"required": [
"order"
]
},
"permission": "oms.read",
"side_effects": "read",
"annotations": {
"readOnlyHint": true,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"tags": [
"oms",
"orders"
]
}
],
"generated_at": "2026-10-04T09:15:00+02:00"
}{
"error": "company_required",
"message": "Missing or invalid X-Nucleo-Company header."
}{
"message": "Azienda attiva mancante (header X-Nucleo-Company)."
}{
"message": "Unauthenticated."
}{
"error": "company_forbidden",
"message": "Nucleo Commerce is not available to you in this company."
}{
"error": "ai_connector_disabled",
"message": "The AI connector is switched off for this module in this company."
}{
"message": "Hub is not provisioned for this company."
}{
"error": "unsupported_version",
"message": "Unsupported ai-tools contract version.",
"supported": [
1
]
}{
"error": "company_not_ready",
"message": "Nucleo Intelligence is not set up yet for this company: open it once in the Nucleo app."
}{
"message": "Too Many Attempts."
}/api/v1/ai-tools/{name}Run a tool
nucleo.ai_tools scope.Runs one tool with arguments (validated against its inputSchema) and returns an MCP
CallToolResult:
content[0].text— readable result (JSON text, cut at 50,000 characters with a "truncated" note: refine the query);structuredContent— the same result as JSON;isError: true— a domain error the model can act on (record not found, no data source, a write that needs confirmation in the Nucleo app…). HTTP status stays200.
Protocol errors use HTTP statuses: 404 unknown_tool, 403 permission_denied (+ permission),
422 invalid_arguments, and the company errors of the list endpoint, including
403 ai_connector_disabled when the company has switched off this module's AI connector.
Writes. Commerce and Intelligence tools are read-only. Brain and Catalog have write tools
(side_effects: write): announce the change to the user before calling them. Catalog applies
only small, reversible writes from AI clients (up to 3 writes / 5 products within 10 minutes per
person and catalog, counted from the first write); deletions, whole-object replacements (every
PUT, e.g. prices, stock, translations, categories, variants), bulk, storefront-facing changes,
imports and publishing come back as a preview (will_do) with isError: true and
error: confirmation_required_in_app — nothing is changed, the user confirms inside Nucleo.
Idempotency. Send a fresh X-Nucleo-Request-Id per logical call and reuse it on retries;
Brain uses it to deduplicate record writes. Catalog does not: it only logs the id, so its writes are
not idempotent and retrying create_product (or duplicate_product) creates another product. Before
retrying a Catalog write that timed out, search for its result.
Responses should arrive within 25 seconds; long jobs return an id to poll with a companion tool.
Rate limit: 120 calls per minute per user on every module (Brain, Catalog, Commerce, Intelligence), in a separate bucket from tool lists.
Path parameters
namestringrequiredTool name from the list, without module prefix.
max length 48pattern ^[a-z0-9_]+$Example:search_orders
Headers
X-Nucleo-CompanystringrequiredNumeric company id (
companies[].idfrom the context, ororgs[].idfrom userinfo).pattern ^[1-9][0-9]{0,18}$Example:7X-Nucleo-LanguagestringLanguage of human-readable texts in results and errors (
enorit, defaulten). Tool descriptions are written for the model and do not followX-Nucleo-Language; Catalog tools are currently described in Italian. Catalog applies it only to its protocol errors (company, version, unknown tool, invalid arguments): the texts inside its tool results, domain errors and thepermission_deniedmessages written by a tool are in Italian whatever the header.One ofenitdefault enExample:enX-Nucleo-AI-Tools-VersionstringContract version. Missing = 1. Any other value →
406.One of1default 1Example:1X-Nucleo-Request-IdstringYour id for the call (UUID recommended), echoed back and written in Nucleo's logs. Pattern
^[A-Za-z0-9._:-]{1,128}$, otherwise a new UUID is used.max length 128Example:2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6aX-Nucleo-StorestringCatalog only — id or slug of the catalog (store) to use within the company (ignored by other modules).
Example:acme-euX-Nucleo-ClientstringInformational. Modules currently ignore this header; send
context.clientin the body for Brain's record trace.Example:acme-agent/1.4
Request bodyapplication/json
argumentsobjectTool arguments (if omitted, the root keys except
contextare used as arguments).contextobjectOptional, informational.
Child attributes
clientobjectChild attributes
namestringversionstring
session_idstring
Responses
200Tool result (success or domain error).application/json
HeadersX-Nucleo-Request-Id
contentarray of objectrequiredAttributes of each item
typestringrequiredOne oftextresource_linkimagetextstringmax length 50000
structuredContentobjectisErrorbooleanrequired
400
X-Nucleo-Companymissing or not a positive integer.application/jsonerrorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
401Missing, expired or revoked token — or a token that is not from a self-registered client. Body:
{"message":"Unauthenticated."}; Intelligence answers withapplication/problem+json. application/jsonmessagestring
403Permission denied for this tool, no access to the module in this company, or the company switched off its AI connector.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
404Unknown tool, or (Brain) a tool not visible to this person. Catalog answers a tool that exists but that the person may not use with
403 permission_denied.application/jsonerrorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
406Unknown contract version.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
409The person has access but the module is not set up yet for this company.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
422Arguments do not match the tool's input schema.application/json
errorstringOne ofcompany_requiredcompany_forbiddencompany_not_readyai_connector_disabledunsupported_versionunknown_toolpermission_deniedinvalid_argumentsmessagestringrequiredIn the language of
X-Nucleo-Languagewhere translated.permissionstringpermission_deniedonly.supportedarray of integerunsupported_versiononly.errorsobjectinvalid_argumentson Commerce and Intelligence (standard validation shape).detailsarray of objectinvalid_argumentson Brain and Catalog.Attributes of each item
fieldstringerrorstring
429More than 120 requests per minute for this user on this endpoint. Default body; Intelligence answers with
application/problem+json. application/jsonHeadersRetry-AfterX-RateLimit-LimitX-RateLimit-Remaining
messagestring
curl -X POST https://api-commerce.nucleoplatform.com/api/v1/ai-tools/search_orders \
-H "Authorization: Bearer $NUCLEO_ACCESS_TOKEN" \
-H 'X-Nucleo-Company: 7' \
-H 'X-Nucleo-Language: en' \
-H 'X-Nucleo-AI-Tools-Version: 1' \
-H 'X-Nucleo-Request-Id: 2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6a' \
-H 'X-Nucleo-Store: acme-eu' \
-H 'X-Nucleo-Client: acme-agent/1.4' \
-H 'Content-Type: application/json' \
-d '{
"arguments": {
"query": "giulia.rossi@acme.example",
"status": "shipped",
"per_page": 5
},
"context": {
"client": {
"name": "acme-agent",
"version": "1.4"
}
}
}'const res = await fetch("https://api-commerce.nucleoplatform.com/api/v1/ai-tools/search_orders", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.NUCLEO_ACCESS_TOKEN}`,
"X-Nucleo-Company": "7",
"X-Nucleo-Language": "en",
"X-Nucleo-AI-Tools-Version": "1",
"X-Nucleo-Request-Id": "2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6a",
"X-Nucleo-Store": "acme-eu",
"X-Nucleo-Client": "acme-agent/1.4",
"Content-Type": "application/json",
},
body: JSON.stringify({
"arguments": {
"query": "giulia.rossi@acme.example",
"status": "shipped",
"per_page": 5
},
"context": {
"client": {
"name": "acme-agent",
"version": "1.4"
}
}
}),
});
const data = await res.json();
console.log(res.status, data);<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api-commerce.nucleoplatform.com/api/v1/ai-tools/search_orders', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('NUCLEO_ACCESS_TOKEN'),
'X-Nucleo-Company' => '7',
'X-Nucleo-Language' => 'en',
'X-Nucleo-AI-Tools-Version' => '1',
'X-Nucleo-Request-Id' => '2f9c1e4a-7b3d-4c5e-9f8a-1b2c3d4e5f6a',
'X-Nucleo-Store' => 'acme-eu',
'X-Nucleo-Client' => 'acme-agent/1.4',
],
'json' => [
'arguments' => [
'query' => 'giulia.rossi@acme.example',
'status' => 'shipped',
'per_page' => 5,
],
'context' => [
'client' => [
'name' => 'acme-agent',
'version' => '1.4',
],
],
],
'http_errors' => false,
]);
echo $response->getStatusCode(), PHP_EOL;
echo $response->getBody();{
"content": [
{
"type": "text",
"text": "{\n \"total\": 1,\n \"orders\": [ { \"number\": \"#1042\", \"status\": \"shipped\" } ]\n}"
}
],
"structuredContent": {
"total": 1,
"orders": [
{
"number": "#1042",
"status": "shipped",
"customer": "Giulia Rossi",
"total": "89.00 EUR",
"url": "https://app.nucleoplatform.com/commerce/orders/1042"
}
]
},
"isError": false
}{
"content": [
{
"type": "text",
"text": "{\n \"error\": \"not_found\",\n \"message\": \"Order #1099 not found.\"\n}"
}
],
"structuredContent": {
"error": "not_found",
"message": "Order #1099 not found."
},
"isError": true
}{
"content": [
{
"type": "text",
"text": "{ \"error\": \"confirmation_required_in_app\", \"applied\": false, ... }"
}
],
"structuredContent": {
"error": "confirmation_required_in_app",
"applied": false,
"message": "Nothing was changed. This change needs an explicit confirmation that only happens inside Nucleo Catalog (deletions, whole-object replacements, bulk or storefront-facing changes, imports, publishing, or more than 3 writes / 5 products within 10 minutes). `will_do` is the preview: show it to the user and ask them to run it with Atomo in Nucleo Catalog, or split it into smaller changes.",
"will_do": {
"summary": "Set price 29.90 EUR on 40 products in price list Retail EU"
}
},
"isError": true
}{
"error": "company_required",
"message": "Missing or invalid X-Nucleo-Company header."
}{
"message": "Azienda attiva mancante (header X-Nucleo-Company)."
}{
"message": "Unauthenticated."
}{
"error": "permission_denied",
"permission": "dashboard.private",
"message": "This dashboard is private: only its owner and Intelligence admins can open it."
}{
"error": "company_forbidden",
"message": "Nucleo Commerce is not available to you in this company."
}{
"error": "ai_connector_disabled",
"message": "The AI connector is switched off for this module in this company."
}{
"error": "unknown_tool",
"message": "Unknown tool: search_invoices"
}{
"error": "unsupported_version",
"message": "Unsupported ai-tools contract version.",
"supported": [
1
]
}{
"error": "company_not_ready",
"message": "Nucleo Intelligence is not set up yet for this company: open it once in the Nucleo app."
}{
"error": "invalid_arguments",
"message": "The per page field must not be greater than 50.",
"errors": {
"per_page": [
"The per page field must not be greater than 50."
]
}
}{
"error": "invalid_arguments",
"message": "Invalid arguments for this tool.",
"details": [
{
"field": "product",
"error": "required"
}
]
}{
"error": "invalid_arguments",
"message": "The arguments do not match the tool input schema: deal_id is required.",
"details": [
{
"field": "deal_id",
"error": "is required"
}
]
}{
"message": "Too Many Attempts."
}