Skip to main content

MCP tools reference

The gateway ships eight tools out of the box. Each is intentionally narrow and ecommerce-shaped — agents shouldn't have to compose half a dozen calls to answer "is SKU X in stock and how much is it?".

All tools share these behaviours:

  • Per-store scope — your X-Horizon-Key decides which stores row applies.
  • Logged to usage_logs (visible in Usage analytics).
  • Counted against your monthly call quota.

ping

Connectivity verification. Doesn't touch Magento.

ArgumentTypeNotes
messagestring (optional)Echoed back in the response.

Returns: a string — either "pong" (no message) or "pong: <message>".

Use this in your client's startup probe to confirm transport + auth before issuing real tool calls.

search_products

Free-text + filter search over the AI product index.

ArgumentTypeNotes
querystringFree-text. Matches against name, SKU, description.
category_idint (optional)Filter to a category subtree.
product_typestring (optional)simple, configurable, bundle, grouped, virtual.
in_stockbool (optional)true to limit to in-stock products only.
limitint (optional)Page size. Defaults to 20, capped at 100.
offsetint (optional)Pagination offset.

Returns: an array of ProductSummary:

{
"entity_id": 12345,
"sku": "ABC-123",
"name": "Acme Hiking Jacket",
"url_key": "acme-hiking-jacket",
"price": 199.00,
"currency": "GBP",
"image_url": "https://shop.acme.example/media/catalog/product/a/b/abc-123.jpg",
"in_stock": true
}

For full detail (description, tiered pricing, attributes), pass an entity_id or sku to get_product.

get_product

Full product detail by SKU or entity ID.

ArgumentTypeNotes
skustring (optional)One of sku or entity_id is required.
entity_idint (optional)Same.

Returns: a ProductDetail:

{
"entity_id": 12345,
"sku": "ABC-123",
"name": "Acme Hiking Jacket",
"description": "Lightweight ...",
"short_description": "Lightweight 3-season jacket.",
"price": 199.00,
"special_price": 149.00,
"currency": "GBP",
"images": ["https://..."],
"categories": [{ "id": 4, "name": "Outdoor" }, { "id": 7, "name": "Jackets" }],
"attributes": { "color": "Black", "size": "L", "material": "Recycled polyester" },
"in_stock": true
}

get_categories

Walk the category tree.

ArgumentTypeNotes
parent_idint (optional)Root category if omitted.
depthint (optional)How many levels to descend. Defaults to 2.

Returns: a nested array of Category nodes, each with id, name, url_key, children.

Use this to ground a recommendation in your actual taxonomy rather than letting the agent invent category names.

get_inventory

Stock levels per SKU and MSI source.

ArgumentTypeNotes
skusstring[]Required. Up to 50 SKUs per call.

Returns: an array of stock entries:

{
"sku": "ABC-123",
"in_stock": true,
"qty": 42,
"sources": [
{ "source_code": "default", "qty": 35, "status": "in_stock" },
{ "source_code": "warehouse_eu", "qty": 7, "status": "in_stock" }
]
}

The qty field is the aggregated total across all sources the store's sales channel resolves to. Individual sources are useful when an agent needs to suggest a fulfilment region.

get_orders

List orders with filters.

ArgumentTypeNotes
customer_emailstring (optional)Filter by customer.
statusstring (optional)pending, processing, complete, closed, canceled, etc.
date_fromISO-8601 date (optional)
date_toISO-8601 date (optional)
limitint (optional)Defaults to 20, capped at 100.

Returns: an array of OrderSummary with increment_id, entity_id, status, customer_email, grand_total, created_at.

For full detail (items, shipments, payments) pass the increment_id to get_order.

get_order

Full detail for a single order.

ArgumentTypeNotes
increment_idstring (optional)One of increment_id or entity_id is required.
entity_idint (optional)Same.

Returns: an OrderDetail including line items, shipment tracking, payment method, billing/shipping addresses, status history.

Useful for "where's my order?" customer self-service flows.

get_customers

Customer search.

ArgumentTypeNotes
querystring (optional)Name / email partial match.
group_idint (optional)Filter to a specific customer group (e.g. wholesale).
is_activebool (optional)
limitint (optional)Defaults to 20.

Returns: an array of CustomerSummaryentity_id, email, firstname, lastname, group_id, created_at.

Worked example: "is SKU X in stock and how much?"

A single agent turn becomes two tool calls:

get_product(sku: "ABC-123")
→ returns price + currency

get_inventory(skus: ["ABC-123"])
→ returns qty + per-source breakdown

Total: 2 calls, ~150ms end-to-end on a warm Magento.

Rate limits

Per-tenant monthly call quotas are tier-driven (see pricing). Hitting the soft cap on a paid tier continues to serve requests; overage is metered and billed monthly. The Trial tier has a hard 429 cap because there's no card on file.