Custom Blinds Shop
Server Details
South Africa's first AI-transactable blinds, shutters and awnings catalogue with live ZAR pricing.
- Status
- Healthy
- Uptime
- 99.4% over 73 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- CustomBlinds/cb-shop-mcp
- GitHub Stars
- 0
- Server Listing
- Custom Blinds Shop MCP
TDQS
Scored across 26 tools
The descriptions do a good job of signposting legacy vs preferred paths, but the surface still contains three discovery tools (search_catalog, lookup_catalog, legacy search_products) and two ordering paths (create_cart→create_checkout→complete_checkout vs legacy create_order/submit_enquiry) with overlapping purpose. An agent must read carefully to avoid misselection between get_price, get_product, and configure_product, all of which touch colour/stock/pricing.
Nearly every tool follows a clean verb_noun snake_case pattern (create_cart, get_checkout, request_swatch, update_cart). The few different verbs (lookup_ vs search_) are still consistent in form and reflect genuine distinctions. No camelCase or stylistic mixing.
26 tools is on the heavy side for a single-shop checkout surface, and the count is inflated by deprecated tools (search_products, create_order, submit_enquiry) retained for backward compatibility. The core flow could be expressed in roughly half the tools.
Coverage is broad and coherent: discovery, pricing, configuration, cart/checkout lifecycle, payment methods, order status, delivery estimates, human handoff, swatches, and price matching. Minor gaps exist around post-purchase order changes or cancellations, but the primary purchase lifecycle is well covered.
Available Tools
26 toolscancel_cartADestructiveInspect
Permanently delete a cart by cart_id. Use when the customer abandons the session or wants to start over. Has no effect on any checkout or paid order already created from this cart. Irreversible, create a new cart to restart.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes | cart_id returned by create_cart. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cart_id | Yes | |
| cancelled | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation/safety profile is covered by structured data. The description does add real value beyond them by scoping the blast radius ("no effect on any checkout or paid order already created from this cart") and stating irreversibility — but it gives no guidance on permissions, failure modes, or whether a cancelled cart remains visible in get_cart.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and key, then usage, then consequence. Nothing is redundant and every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, no return-value explanation is needed, and annotations cover the safety profile. The description is nearly complete for a single-parameter destructive tool, lacking only error/idempotency behavior for repeat calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter with 100% schema description coverage, which already explains cart_id comes from create_cart. The description restates the keying by cart_id but adds no format, validation, or edge-case semantics (e.g. what happens with an already-deleted or already-converted cart).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Permanently delete a cart by cart_id") and pre-empts the misleadingly soft name "cancel" by clarifying the operation is a hard delete. An agent can distinguish it from update_cart and create_cart without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggers ("customer abandons the session or wants to start over") and points at create_cart as the restart path. It stops short of an explicit "do not use this to modify a cart — use update_cart instead" exclusion, so the negative case is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_checkoutADestructiveInspect
Abort an unpaid checkout and release its checkout_id. Use if the customer changes their mind after create_checkout but before completing payment. Has no effect on orders already confirmed by webhook. To restart, create a new cart and checkout from scratch.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes | checkout_id returned by create_checkout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | |
| checkout_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false; the description earns credit by adding that the checkout_id is released, that the call is a no-op on webhook-confirmed orders, and that recovery requires a fresh cart. It does not state idempotency (re-cancelling an already-cancelled checkout) or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each doing distinct work: action, trigger, no-op boundary, recovery path. The action is front-loaded with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return values need no explanation; the tool takes one required param and the description covers trigger, effect on the resource, no-op case, and how to restart. An agent has everything needed to call this destructively and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter already documents itself as 'checkout_id returned by create_checkout'; the description merely echoes that provenance. Baseline 3 applies when the schema fully carries parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Abort an unpaid checkout') and adds the lifecycle position (after create_checkout, before payment), which makes the operation concrete. It never mentions the sibling cancel_cart, so the checkout-vs-cart distinction is left implicit as the only sibling differentiation gap.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear triggering context ('Use if the customer changes their mind after create_checkout but before completing payment') and a boundary condition ('Has no effect on orders already confirmed by webhook'). It also names the recovery path (new cart and checkout from scratch), but offers no guidance against cancel_cart for cart-level aborts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_colour_stockARead-onlyInspect
Verify whether a specific colour is available before configure_product. Returns in_stock boolean, expected_restock_date if out of stock, and up to 5 alternative in-stock colours ordered by similarity. Call this when a customer requests a named colour or when you want to prevent a configure_product failure due to an out-of-stock selection.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | product_id from search_catalog or lookup_catalog. | |
| colour_name | Yes | Colour name to check, e.g. "White". |
Output Schema
| Name | Required | Description |
|---|---|---|
| found | No | |
| colour | No | |
| message | No | |
| in_stock | Yes | |
| product_id | No | |
| expected_restock | No | |
| matching_colours | No | |
| available_colours | No | |
| exact_colour_match | No | |
| requires_exact_colour_selection | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered, and the description adds real behavioral detail: a boolean result, a restock date on failure, and a capped, similarity-ordered alternative list. It does not discuss matching semantics (e.g. case sensitivity, fuzzy vs exact colour names), which is the one behavior an agent might still need.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose and followed by return shape and call conditions. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the description only needs to explain intent and timing, which it does. Minor gaps remain around colour-name matching rules and what happens with an unrecognized colour name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters carry their own descriptions, including the provenance hint for product_id. The description adds no additional parameter meaning beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — verify whether a colour is in stock — and ties it to a concrete workflow (before configure_product). It is clearly distinguishable from catalog/search siblings because it checks stock rather than retrieving product data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the trigger conditions: a customer requesting a named colour, or wanting to avoid a configure_product failure from an out-of-stock selection. The alternative (configure_product) and the ordering relationship between the two tools are spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_checkoutADestructiveInspect
Generate a Yoco card or Ozow instant-EFT payment link; this does NOT complete payment. Rejects cancelled checkouts and rechecks stock and totals first. An atomic claim prevents competing gateway calls. Returns payment_url or null plus status and message; cloud callers may be held. Retain a successful URL: repeat calls return payment_pending with no URL. Gateway failures raise an error, send no payment-link email and require team review rather than an automatic retry. Poll get_order with customer_email for payment status.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes | checkout_id returned by create_checkout. | |
| payment_method | No | Overrides any value set in create_checkout/update_checkout |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | Yes | |
| currency | No | |
| customer | No | |
| next_step | No | |
| total_zar | No | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | Yes | |
| payment_method | No | |
| provider_reference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=true; the description goes far beyond by disclosing the stock/total recheck, the atomic claim blocking competing gateway calls, that cloud callers may be held, the exact return shape (payment_url or null plus status/message), and the failure contract (error raised, no payment-link email, no automatic retry). That is precisely the operational context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each carrying a distinct fact: what it does, the non-completion caveat, preconditions, concurrency behavior, return contract, and the retry/polling policy. The non-completion correction is front-loaded right after the purpose where it matters most.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a claim-holding, financially consequential operation and the description covers preconditions, concurrency, return values, failure handling, and the follow-up polling step. Even though an output schema exists, the idempotency warning about retaining a successful URL is essential and is supplied here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented inline (checkout_id provenance, payment_method override behavior), so the description need not repeat them. It adds no further semantics about checkout_id or how the payment_method enum interacts with prior configuration, leaving it at the baseline for a fully-covered schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a Yoco card or Ozow instant-EFT payment link') and explicitly bounds scope with 'this does NOT complete payment', which separates it from anything an agent might assume about checkout finalization. Gateway options are named, so an agent knows what it gets without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when/when-not rules: rejected for cancelled checkouts, and on gateway failure the agent must escalate rather than auto-retry. It also routes the agent to the correct sibling for the next step ('Poll get_order with customer_email for payment status') and warns against re-calling by explaining that repeats return payment_pending with no URL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_productARead-onlyInspect
Lock in a full blind specification: product, dimensions, colour, and mount type (inside recess or outside face-fix). Validates that the colour exists and is in stock, then prices the blind. Returns a configuration summary to pass directly into create_cart. Call check_colour_stock first if availability is uncertain.
| Name | Required | Description | Default |
|---|---|---|---|
| colour | Yes | Colour name (must match available colours) | |
| finish | No | Optional finish for aluminium venetians | |
| province | No | Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact. | |
| quantity | No | Number of blinds (default 1) | |
| width_mm | Yes | Width in millimetres | |
| height_mm | Yes | Height/drop in millimetres | |
| mount_type | Yes | Use inside (recess) or outside (face-fix); handler requires a nonempty value | |
| product_id | Yes | product_id from search_catalog or lookup_catalog |
Output Schema
| Name | Required | Description |
|---|---|---|
| colour | Yes | |
| finish | No | |
| limits | No | |
| contact | No | |
| summary | No | |
| currency | Yes | |
| delivery | No | |
| in_stock | No | |
| quantity | Yes | |
| width_mm | Yes | |
| height_mm | Yes | |
| lead_time | No | |
| next_step | No | |
| price_zar | No | |
| mount_type | Yes | |
| product_id | Yes | |
| product_name | No | |
| vat_included | No | |
| unit_price_zar | Yes | |
| total_price_zar | Yes | |
| effective_width_mm | No | |
| effective_height_mm | No | |
| minimum_charge_applied | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description is consistent with that: it validates colour existence and stock, prices the blind, and returns a summary rather than persisting a cart. It adds real behavioural detail beyond the annotation (validation happens, pricing is computed, output is a handoff artefact), though it does not say whether repeat calls recompute or cache, or what happens when validation fails.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the specification scope, followed by behaviour, output destination, and the prerequisite check. No sentence is redundant and each earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the validation, pricing and handoff semantics that the schema cannot. Minor gap: it does not mention that the optional province parameter alters which contact appears in the result, which is a meaningful side effect for an agent assembling the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by disambiguating mount_type into 'inside recess or outside face-fix' — a string parameter with no enum, where the schema's own note is only about nonemptiness. It stops short of covering the optional finish, province and quantity parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: locks in a blind specification covering product, dimensions, colour and mount type, then validates and prices it. The boundary with create_cart is made explicit by describing the output as something to 'pass directly into create_cart', so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing guidance: call check_colour_stock first if availability is uncertain, and pass the returned summary into create_cart. Both the predecessor and successor tools are named with the condition that selects them, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cartAInspect
Start the open UCP purchase flow, no auth needed. Creates a cart session and returns a cart_id (24-hour TTL). Optionally seed with pre-configured blind items and customer details. Next step: update_cart to add items, then create_checkout → complete_checkout to mint the payment link.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Optional configured items; all submitted prices are ignored | |
| customer | No | Optional customer details (name, email, phone, address, city). |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| customer | Yes | |
| total_zar | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| item_count | Yes | |
| updated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false and destructiveHint=false; the description adds genuinely new behavior: no auth is required, the returned cart_id expires after 24 hours, and seeding with items/customer details is optional. It does not cover failure modes (e.g., invalid colour or product_id) or whether a cart can be re-seeded, so it is good but not complete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: what it does, what it returns with its TTL, and the workflow it belongs to. The workflow pointer is last where it belongs, and no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are covered by structure, yet the description still surfaces the one thing an agent must know (cart_id and its 24-hour expiry) plus auth and workflow position. For a 2-param nested-object tool, that is sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every nested field is documented, including the unusual 'prices are ignored, server recalculates' rule. The description only restates that items and customer details are optional seeds, adding little beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource ('Creates a cart session') plus the concrete return value ('cart_id (24-hour TTL)'), and frames it as the entry point of the purchase flow. An agent can distinguish it from siblings like get_cart or update_cart without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent forward ('Next step: update_cart to add items, then create_checkout → complete_checkout'), which is the key sequencing decision for this tool family. It does not state when not to use it (e.g., to resume an existing cart use get_cart), so it stops short of full alternative coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_checkoutADestructiveInspect
Phase 1 of 2 in the purchase flow. Convert a cart (or inline items + customer) into a checkout. Customer name, email, and phone are required. Returns checkout_id. No payment link is minted yet, call complete_checkout for that. Use update_checkout to correct customer details before finalising.
| Name | Required | Description | Default |
|---|---|---|---|
| items | No | Line items to buy. Required if cart_id is not given. | |
| cart_id | No | Either cart_id or items required | |
| customer | No | Customer details. Name, email, mobile phone and delivery address are required; city is optional. Placeholder or test details are refused. | |
| payment_method | No | Default 'yoco' |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | No | |
| currency | Yes | |
| customer | No | |
| next_step | No | |
| total_zar | Yes | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | No | |
| payment_method | No | |
| provider_reference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the mutation signal is covered. The description adds genuinely useful context beyond that — no payment link is minted at this stage — but is silent on side effects an agent would want to know: whether stock is reserved or held, whether the checkout expires, and whether cancel_checkout is the recovery path for a mistake.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the phase and the core action, and each sentence carries routing or prerequisite information. Minor redundancy in restating the required customer fields, which the schema already marks required.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and checkout_id is named anyway; the two-step flow and the correction path are covered. For a tool this complex (nested items, server-side repricing), missing notes on stock reservation and checkout lifetime keep it short of full completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the nested items/customer schemas are richly documented, so the baseline applies. The only added semantics — that name, email and phone are required — restates constraints the schema already encodes, and the cart_id-vs-items exclusivity is not clarified further than the schema's anyOf.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Convert a cart ... into a checkout") and pins its position in the flow as "Phase 1 of 2 in the purchase flow". It also explicitly distinguishes itself from complete_checkout (payment link) and update_checkout (correcting details), so an agent can place it without opening siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives and the conditions that select them: call complete_checkout to mint the payment link, call update_checkout to fix customer details before finalising. The prerequisite (customer name/email/phone required) is also stated, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_orderADestructiveInspect
Legacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) which needs no credentials. Use create_order only if you hold a Bearer token and want a single-call path to a payment link. All item prices are re-verified server-side against the live pricing engine, agent-supplied prices are ignored. Returns a Yoco or Ozow payment_url.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | Array of configured blind items | |
| customer_city | No | Delivery city | |
| customer_name | Yes | Customer full name | |
| customer_email | Yes | Customer email address | |
| customer_phone | Yes | Customer phone number | |
| payment_method | No | Yoco card or Ozow instant EFT | yoco |
| customer_address | No | Delivery address |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | Yes | |
| currency | No | |
| customer | No | |
| next_step | No | |
| total_zar | No | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | Yes | |
| payment_method | No | |
| order_reference | Yes | |
| provider_reference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the Bearer-token auth requirement, that prices are re-verified server-side and agent-supplied prices are ignored, and what the response contains (payment_url). It does not elaborate on the destructive/mutating consequences flagged by destructiveHint=true (e.g. whether an order can be cancelled afterwards via cancel_cart), so a small gap remains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the routing decision (legacy vs open flow) and followed by auth, pricing integrity, and return value. No sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations carry the safety profile, so the description covers the remaining essentials: auth, the preferred alternative, and pricing behaviour. Only minor lifecycle details (what happens to the order if the payment link is abandoned, relation to cancel/ get_order) are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds real meaning beyond the schema by telling the agent that unit_price_zar/total_price_zar inputs are ignored in favour of the live pricing engine, which changes how the item parameters should be populated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (create an order) and pins down the exact output: a single-call path to a Yoco or Ozow payment_url. It also positions itself against the multi-step siblings (create_cart → create_checkout → complete_checkout), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use and when-not-to-use: prefer the open UCP flow, use this one only if you hold a Bearer token and want a single-call path. The named alternative sequence is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ar_visualizer_urlARead-onlyInspect
Returns the link to the Custom Blinds Visualiser (See it before you buy it), pre-selected to the product when it is supported. The customer adds a photo of their window (any angle), picks a blind and colour, and previews it on their own window. A preview of colour and style, not a measuring tool. No measuring or marking. A name and WhatsApp number are needed; 2 free previews per customer. Also returns the measuring guide (mode 'measure' makes it the main url) and the list of supported products. A customer still unsure of sizes can order with best guess sizes, receive a free tape measure and confirm before production starts. Use when a customer wants to see how a blind or colour will look before ordering, or is unsure how to measure.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Which link goes in url: visualize (own-window visualiser), measure (measuring guide) or both (visualiser, the default). Both links are always returned. | |
| product_id | No | Optional. Pre-select a product in the visualiser (e.g. roller-blockout, double-roller-zebra, outdoor-blinds). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | Yes | |
| note | Yes | |
| product_id | No | |
| measure_url | Yes | |
| visualiser_url | Yes | |
| supported_products | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds substantial context beyond that: two free previews per customer, the requirement for a name and WhatsApp number, that both links are always returned, and that unsupported products fall back to ordering with best-guess sizes plus a free tape measure. These are real operational constraints an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and scope are front-loaded in the first sentence, and the usage cue is placed last where it is most useful. It loses a point for mild redundancy, since 'not a measuring tool' and 'No measuring or marking' restate the same idea in consecutive sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Given a two-parameter read-only tool, the description covers the product scope, the preview limits, the contact-data prerequisite, and the measuring fallback — everything an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description still adds meaning the schema does not spell out plainly: 'both links are always returned' regardless of mode, and that product pre-selection only applies 'when it is supported' with the supported list returned alongside. That extra semantic lift from mode selection earns a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Returns the link to the Custom Blinds Visualiser'), states the pre-selection scope ('pre-selected to the product when it is supported'), and clarifies what the artifact is and is not ('A preview of colour and style, not a measuring tool'). An agent can distinguish this from siblings like get_product_recommendation or request_swatch without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is explicit: 'Use when a customer wants to see how a blind or colour will look before ordering, or is unsure how to measure,' and the mode enum is explained in terms of which link becomes primary. It doesn't name specific sibling tools as alternatives or state when NOT to call it, but the context is otherwise clear enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cartARead-onlyInspect
Retrieve live cart state by cart_id: full item list, calculated totals in ZAR, and any customer details stored so far. Call after update_cart to confirm changes are correct before proceeding to create_checkout. Cart expires after 24 hours of inactivity.
| Name | Required | Description | Default |
|---|---|---|---|
| cart_id | Yes | cart_id returned by create_cart. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| customer | Yes | |
| total_zar | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| item_count | Yes | |
| updated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds genuinely new context: totals are in ZAR and the cart expires after 24 hours of inactivity, which affects how an agent should handle stale cart_ids. The itemized return contents partly duplicate the output schema, so it falls just short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler: what it returns first, then when to call it, then the expiry caveat. Front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one fully documented parameter, a readOnlyHint annotation, and an existing output schema, the description only needed to add workflow sequencing and lifecycle behavior, both of which it provides. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains that cart_id comes from create_cart. The description adds no further syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve live cart state by cart_id') and enumerates the returned content: item list, ZAR totals, stored customer details. This is clearly distinguishable from mutating siblings like update_cart and from get_checkout/get_order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly positions the call in the workflow: 'Call after update_cart to confirm changes are correct before proceeding to create_checkout.' It names the preceding and following sibling tools, so the agent knows both when to call it and what it gates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_checkoutARead-onlyInspect
Read checkout by checkout_id. Returns persisted order status, payment_status, payment_method, items, customer, total_zar and currency. Initial order status is started, not pending. This tool does not return a previously generated payment_url: retain the complete_checkout response in caller context.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes | checkout_id returned by create_checkout. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | No | |
| currency | Yes | |
| customer | No | |
| next_step | No | |
| total_zar | Yes | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | No | |
| payment_method | No | |
| provider_reference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important behavior beyond the readOnlyHint annotation: it discloses the exact returned fields, clarifies that initial order status is 'started' rather than 'pending', and warns that payment_url is not retrievable here and must be retained from complete_checkout. These details materially affect how an agent uses the response.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences, front-loaded with the purpose followed by the return contents and two operational caveats. No sentence is wasted, and the important constraints appear before the caller would need to reason about them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with an output schema and readOnlyHint annotation, the description supplies the remaining behavioral context an agent needs: returned fields, initial status semantics, and the payment_url retention caveat. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single checkout_id parameter is fully documented in the schema as coming from create_checkout. The description repeats that it reads by checkout_id but adds no further syntax or format meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: read a checkout by checkout_id. It goes beyond the name by specifying the return payload and distinguishing checkout semantics from order/cart semantics, so an agent can identify the tool's purpose without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for using the tool, including the required checkout_id and the caveat that payment_url is not returned, implying the caller should retain the complete_checkout response. It does not explicitly name alternatives such as get_order or get_cart, so it falls short of a full usage-guidance score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_delivery_estimateARead-onlyInspect
Explain the lead time for a new order. Production takes 5 to 7 working days once payment clears, outside peak seasons, then courier transit of about 2 to 5 working days. Returns the ranges and a plain-language summary safe to share. Never quote a dispatch or delivery date: weather and production set them. Call this when a customer asks 'when will it arrive?'.
| Name | Required | Description | Default |
|---|---|---|---|
| order_date | No | ISO date string of the order placement date (e.g. '2026-05-18'). Defaults to today. |
Output Schema
| Name | Required | Description |
|---|---|---|
| summary | Yes | |
| important | Yes | |
| order_date | No | |
| production_starts | No | |
| expedited_available | No | |
| delivery_after_dispatch | Yes | |
| transit_working_days_max | Yes | |
| transit_working_days_min | Yes | |
| production_working_days_max | Yes | |
| production_working_days_min | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only disclose readOnlyHint=true, and the description adds substantially more: what the answer contains (ranges plus a shareable plain-language summary), the seasonal caveat ('outside peak seasons'), and a hard guardrail against quoting exact dispatch or delivery dates because weather and production determine them. That is real operational context an agent cannot get from the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the substantive lead-time facts before the caveats and the call trigger. Dense and largely waste-free, though the 'plain-language summary safe to share' detail is the only clause that could be trimmed as the output schema already covers return shape.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the remaining burden: what is estimated, the ranges' drivers, seasonal exceptions, the guardrail on quoting dates, and the triggering scenario. Nothing an agent needs in order to call and use this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and order_date is fully documented with an ISO example and a 'defaults to today' note. The description adds nothing about the parameter and never mentions that an order date can be supplied, so this sits at the baseline where the schema does all the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Explain the lead time for a new order'), and the scope is disambiguated by naming the contributing stages (production, then courier transit). No sibling tool in the list does delivery estimation, so the agent can identify this immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit trigger: 'Call this when a customer asks "when will it arrive?"'. It also constrains the answer ('Never quote a dispatch or delivery date'). It stops short of naming a when-not-to-use case or an alternative tool, but no sibling actually competes for this task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderARead-onlyInspect
Retrieve a confirmed order's status, items, and payment details by order_id. customer_email is required as soft-auth and must exactly match the order record, prevents arbitrary order lookups. Returns payment status (paid | pending | failed), production status, and dispatch date once available.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | Order reference: the checkout_id returned by create_checkout. | |
| customer_email | Yes | Email address on the order. Must match the order record (not case-sensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | No | |
| paid_at | No | |
| currency | Yes | |
| order_id | Yes | |
| lead_time | No | |
| total_zar | Yes | |
| order_status | No | |
| payment_status | Yes | |
| order_reference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true; the description goes further by disclosing the soft-auth requirement, the exact-match constraint on customer_email, and the security rationale (blocking arbitrary lookups). It also notes dispatch date is only present 'once available', which sets expectations about partial responses. It does not say what error surfaces on a mismatch, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the verb and resource, then the auth constraint, then the return shape. The third sentence enumerates return fields despite an output schema existing, which is mildly redundant but still helps the agent interpret partial results.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, 100% parameter coverage, and readOnlyHint, the description covers what the structured fields cannot: the auth model and the exact-match rule. It leaves open behavior for non-confirmed or cancelled orders and the failure mode on email mismatch, which are the only real gaps for a 2-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine semantics beyond the schema: it frames customer_email as an authentication gate rather than a filter, and explains why it is mandatory. Minor tension exists in 'must exactly match' versus the schema's 'not case-sensitive', though the schema resolves it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Retrieve a confirmed order's status, items, and payment details') with a clear key ('by order_id'). It implicitly separates itself from get_checkout/get_cart by scoping to a *confirmed* order, but never names those siblings, so an agent must infer the boundary itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the 'confirmed order' scope and the note that soft-auth 'prevents arbitrary order lookups', which is a partial when-not condition. There is no explicit routing to get_checkout, get_cart, or create_order, so the agent has no stated rule for choosing this tool over its closest siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_payment_methodsARead-onlyInspect
List available payment processors and their capabilities. Returns Yoco (card, immediate) and Ozow (instant EFT via South African bank account). Call when the customer asks 'how can I pay?' or before presenting options. The result informs the payment_method field in create_checkout and complete_checkout.
| Name | Required | Description | Default |
|---|---|---|---|
| order_total_zar | No | Optional. For future per-handler limit filtering. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| handlers | Yes | |
| default_currency | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: what is returned (card vs. instant EFT via South African bank account) and how the output feeds create_checkout/complete_checkout. It stops short of mentioning auth or caching/rate behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with what the tool returns, then when to call it, then why it matters. Every sentence adds information an agent needs; nothing is redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-specified, and the only parameter is optional and fully documented. Purpose, trigger, expected content, and downstream dependency are all present for a simple read-only lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional parameter order_total_zar is not mentioned in the description, but schema description coverage is 100% and the schema itself explains it is reserved for future per-handler limit filtering. With the schema carrying the load, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List available payment processors and their capabilities") and even enumerates the concrete return values, Yoco and Ozow. An agent can immediately tell this is the payment-options discovery tool and distinguish it from checkout-mutating siblings like create_checkout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ("Call when the customer asks 'how can I pay?' or before presenting options") and names the downstream tools whose payment_method field depends on the result. It provides clear usage context but no when-not conditions, which is acceptable since no sibling offers an overlapping capability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_priceARead-onlyInspect
Get an exact ZAR price using product_id from search_catalog or lookup_catalog, width_mm and height_mm. Prices include VAT and delivery. Colour selects the bamboo price tier where applicable. A price is not a stock reservation: validate the exact colour and mount with configure_product before creating a cart. Failure can return success:false or a JSON-RPC validation error.
| Name | Required | Description | Default |
|---|---|---|---|
| colour | No | Optional bamboo colour for colour-specific tier pricing | |
| finish | No | Optional finish for aluminium products: Plain, Brushed, Woodgrain | |
| province | No | Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact. | |
| quantity | No | Number of blinds (default 1) | |
| width_mm | Yes | Width in millimetres (e.g. 1200) | |
| height_mm | Yes | Height/drop in millimetres (e.g. 1500) | |
| product_id | Yes | product_id from search_catalog or lookup_catalog (e.g. roller-blockout) |
Output Schema
| Name | Required | Description |
|---|---|---|
| finish | No | |
| limits | No | |
| contact | No | |
| currency | Yes | |
| delivery | No | |
| quantity | Yes | |
| width_mm | Yes | |
| height_mm | Yes | |
| lead_time | No | |
| next_step | No | |
| product_id | Yes | |
| product_name | No | |
| vat_included | Yes | |
| unit_price_zar | Yes | |
| total_price_zar | Yes | |
| effective_width_mm | No | |
| effective_height_mm | No | |
| minimum_charge_applied | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint=true, it discloses that prices include VAT and delivery, that colour can shift the bamboo tier, and that failures can surface as success:false or as a JSON-RPC validation error. That is unusually rich behavioral context, though it does not say whether prices are cached or how often tiers change.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and inputs, followed by pricing semantics, a caveat, and error modes. No sentence is filler and each adds a distinct constraint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be re-explained. The description covers input provenance, pricing semantics, the mutation boundary (not a reservation), the correct next tool, and the failure surface — everything an agent needs before and after calling it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all seven parameters are already documented, including the colour-tier and finish semantics. The description echoes the colour-tier behavior and the dimension inputs but adds nothing new about finish, quantity, or the province routing parameter, so it sits at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The definition opens with a specific verb plus resource and defines the exact inputs that determine the answer ('Get an exact ZAR price using product_id from search_catalog or lookup_catalog, width_mm and height_mm'). It is clearly separated from siblings like request_price_match and get_product because this is the deterministic, configured-dimension price lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names where product_id must come from (search_catalog or lookup_catalog), states the pre-cart validation step via configure_product, and warns that a price is not a stock reservation. That is explicit when-to-use plus a clearly stated follow-up action instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_productARead-onlyInspect
Fetch complete details for one product by id (e.g. roller-blockout, venetian-25mm-aluwood). Returns all available colours with in-stock status, materials, features, and maximum supported dimensions. Use before configure_product to confirm a colour exists and is in stock before committing.
| Name | Required | Description | Default |
|---|---|---|---|
| product_id | Yes | product_id from search_catalog or lookup_catalog. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| colours | Yes | |
| category | Yes | |
| features | No | |
| materials | No | |
| product_id | Yes | |
| schema_url | No | |
| description | No | |
| product_url | Yes | |
| size_limits | No | |
| max_width_mm | No | |
| suitable_for | No | |
| max_height_mm | No | |
| installation_type | No | |
| starting_price_zar | No | |
| colour_count_in_stock | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the bar is lower, but the description still adds substantive payload context: all colours with in-stock status, materials, features, and maximum supported dimensions. It also discloses the intended role as a pre-commit validation step. No permission, rate-limit, or failure-mode notes, which keeps it at 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each doing distinct work: what it returns, what the payload contains, and when to call it. The action statement is front-loaded and nothing is repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema, an annotation declaring read-only behaviour, and full schema coverage, the description covers access pattern (by id), id format, payload contents, and workflow placement. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented as coming from search_catalog or lookup_catalog. The description goes beyond that by giving literal example id values, which clarifies the expected slug format. Small but genuine value added on top of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Fetch complete details for one product by id") and immediately grounds it with concrete id examples ("roller-blockout, venetian-25mm-aluwood"). It also implicitly separates itself from the list/search siblings by scoping to a single product, and names the downstream tool it feeds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-to-use rule: call before configure_product to confirm a colour exists and is in stock before committing. That is a clear conditional trigger rather than vague context. It does not address the near-neighbour alternative check_colour_stock for stock-only queries, so it falls short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_product_recommendationARead-onlyInspect
Translate a customer's primary concern into a product recommendation. primary_concern must be one of: blockout, heat, glare, moisture, privacy, security, automation. Optionally narrow by room (bedroom, lounge, etc.), location, budget, and aesthetic. Returns a recommended product_id with rationale, pass it to get_price or configure_product next. Security concern routes to brochure MCP (Garden Route customers only).
| Name | Required | Description | Default |
|---|---|---|---|
| room | No | Optional room, e.g. "bedroom". Noted in the reply. | |
| location | No | Optional customer city or suburb. Accepted but not currently used. | |
| aesthetic | No | Optional style preference. Noted in the reply. | |
| max_budget_zar | No | Optional budget in ZAR. Drops options whose 1000x1000mm starting price is above it. | |
| primary_concern | Yes | Main need: blockout, heat, glare, moisture, privacy, security or automation. security returns a Garden Route handoff, not shop products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | No | |
| handoff | No | |
| recommendations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Consistent with readOnlyHint=true — the wording ('Translate', 'Returns a recommended product_id') describes a pure lookup with no mutation. It adds real context beyond annotations: the security path is a handoff to another MCP rather than a normal result, and budget filtering silently drops products whose 1000x1000mm starting price exceeds the cap. The 'Garden Route customers only' qualifier is useful but vague about what happens to non-Garden-Route security requests.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences: what it does, valid inputs, optional narrowing, then next steps and the routing exception. The product_id handoff is placed exactly where the agent will look for it after invoking. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, single-required-param tool with a full output schema, this covers purpose, inputs, output handoff and the one exceptional path. The only material gap is how it relates to catalog-search siblings — an agent may still be unsure whether to recommend or search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 and the schema already carries enum values and per-parameter notes. The description does add the budget mechanism, but its claim that you can 'narrow by ... location' conflicts with the schema's own note that location is 'Accepted but not currently used', which could lead an agent to rely on a filter that does nothing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb+resource: 'Translate a customer's primary concern into a product recommendation.' The enumerated concern values make the input space concrete. It stops short of distinguishing itself from catalog siblings like search_products or lookup_catalog, so an agent can't be certain when this beats a catalog search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear usage context: supply a primary concern, optionally narrow by room/budget/aesthetic, then pass the returned product_id to get_price or configure_product. It also states an exclusion — security concerns route to the brochure MCP for Garden Route customers rather than returning shop products. No comparison against catalog-search siblings is offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_whatsapp_handoffARead-onlyInspect
Generate a pre-filled WhatsApp deep link to hand the customer off to the right contact. Garden Route locations (Knysna, Plett, George, Sedgefield, etc.) route to Duncan Kane for a free in-home consultation, booked on the same WhatsApp line (+27760228410); all other South African locations route to that line too (+27760228410). It is WhatsApp only, no voice calls. Use when the customer prefers human assistance or when self-serve checkout isn't appropriate.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional additional message to prefill | |
| location | No | City/suburb. Drives Duncan vs shop routing. | |
| customer_name | No | Customer's name, used in the prefilled WhatsApp message. | |
| product_context | No | e.g. 'roller blockout for bedroom' |
Output Schema
| Name | Required | Description |
|---|---|---|
| reason | Yes | |
| recipient | Yes | |
| whatsapp_url | Yes | |
| recipient_phone | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, and the description correctly reinforces that this is a non-mutating link generator while adding real behavioral context: WhatsApp-only channel, no voice calls, and the routing rule. It does not state what happens for locations outside South Africa or when location is omitted, which is a meaningful gap given routing is the tool's core logic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is correctly front-loaded, but the routing sentence is padded and repetitive — the phone number is printed twice and the 'Duncan Kane vs all others' distinction resolves to the same line. That clause consumes space without adding decision value, and the usage sentence is buried at the end.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only URL generator with an output schema and fully documented parameters, the description covers purpose, channel constraint, and routing intent adequately. The remaining gap is edge-case coverage (missing/unknown location, non-SA customers), which the self-nullifying routing sentence leaves genuinely ambiguous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does explain what location drives, but the explanation undercuts itself: both the Garden Route branch and 'all other South African locations' route to the identical number (+27760228410), so an agent cannot tell whether passing location changes anything. The message/customer_name/product_context prefill semantics are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a concrete verb+resource: 'Generate a pre-filled WhatsApp deep link to hand the customer off to the right contact.' That is unambiguous and distinguishable from siblings like submit_enquiry or complete_checkout, which handle different handoff paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit triggering conditions: 'Use when the customer prefers human assistance or when self-serve checkout isn't appropriate.' It does not, however, name the alternative tool (e.g., submit_enquiry) that also represents a human handoff, so the agent must infer which to pick when both could apply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_catalogARead-onlyInspect
Preferred structured discovery. Filter by category, partial colour name or required supported width/drop in mm. Returns results containing product_id, name, category and product_url, plus total. Width/drop filters check separate maximums, not every combination; confirm the exact pair with get_price.
| Name | Required | Description | Default |
|---|---|---|---|
| colour | No | Partial colour name to match, e.g. "white". | |
| category | No | roller | venetian | honeycomb | vertical | outdoor | |
| max_width_mm | No | Only products that can be made at least this wide, in millimetres. Checked separately from max_height_mm, not as a pair. | |
| max_height_mm | No | Only products that can be made at least this high (drop), in millimetres. Checked separately from max_width_mm; confirm the exact pair with get_price. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond readOnlyHint=true by disclosing the returned fields (product_id, name, category, product_url, total) and, critically, the non-obvious caveat that width/drop filters apply separate maximums rather than a validated pair. It also routes the agent to get_price for exact-pair confirmation, which prevents a real failure mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the preference claim, followed by filter coverage and the caveat. Every sentence carries information the agent needs; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return-shape explanation is optional, yet the description still names the key fields and total. Combined with the width/drop caveat and the get_price hand-off, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description adds value by clarifying the filter/repeat semantics of width and drop and warning that the pair is not jointly validated. It does not restate enum values or format details, but those are fully covered in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (catalog) and its filtering capability by category, partial colour, and width/drop in mm. 'Preferred structured discovery' signals how it differs from the fuzzy search siblings, though it never names search_catalog or search_products.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Preferred structured discovery' gives a preference cue that implies this is the go-to when filters are known, but it does not state when NOT to use it or name the alternative tools by name. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_price_matchARead-onlyInspect
Submit a price match claim when the customer has found the same blind at a lower price elsewhere. Custom Blinds matches verified South African retailer prices for identical product, dimensions, and specs. Returns a pre-filled WhatsApp link to the claims team. Not applicable to: Blinds Direct (same supplier), clearance or flash-sale prices, or out-of-stock items. Requires product_id and competitor_price_zar at minimum.
| Name | Required | Description | Default |
|---|---|---|---|
| width_mm | No | Window width in mm | |
| height_mm | No | Window height/drop in mm | |
| product_id | Yes | Product the customer wants to match (e.g. roller-blockout) | |
| customer_name | No | Customer name | |
| competitor_url | No | URL to competitor product page or quote | |
| competitor_name | No | Name of the competitor (e.g. 'Blind Empire') | |
| customer_whatsapp | No | Customer WhatsApp number for follow-up | |
| competitor_price_zar | Yes | Competitor's price in ZAR (incl. VAT) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| message | Yes | |
| success | Yes | |
| exclusions | Yes | |
| whatsapp_url | Yes | |
| claim_summary | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, and the description adds meaningful context beyond that: it discloses the actual output shape (a pre-filled WhatsApp link rather than a database write), the eligibility filter the claim is validated against, and the matching criteria. It does not cover turnaround, what happens if the claim is rejected, or any rate/auth constraints, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three well-ordered sentences: purpose first, then exclusions, then requirements, with zero filler. Slightly dense in the exclusion clause, but every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still tells the agent the salient return value (WhatsApp link), plus eligibility rules and required inputs. For an 8-parameter, non-destructive submission tool, an agent has everything needed to decide and call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies, but the description adds real value by naming the two minimum required fields and by explaining that product, dimensions, and specs must be identical for a claim to be verified — which is exactly why width_mm/height_mm exist. It stops short of describing competitor_url or customer_whatsapp usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submit a price match claim') plus the triggering condition ('customer has found the same blind at a lower price elsewhere'). The scope is narrowed further by naming what qualifies (verified South African retailer prices, identical product/dimensions/specs), which leaves no ambiguity against sibling tools like get_price or submit_enquiry.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit positive condition (customer found a lower price at another retailer), explicit exclusions ('Not applicable to: Blinds Direct, clearance or flash-sale prices, or out-of-stock items'), and the minimum prerequisites. This is textbook when/when-not guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_swatchAInspect
Log up to 5 colour codes against an EXISTING order for the team (order_ref required; without it the tool returns status order_required and logs nothing). Custom Blinds does not post individual swatches or off-cuts. For orders over R8,000 the customer can ask for the full sample book via WhatsApp; if nothing suits, full refund with no fees. Never quote a sample-book price or courier cost.
| Name | Required | Description | Default |
|---|---|---|---|
| suburb | No | Optional delivery suburb | |
| order_ref | Yes | The order reference the swatches ship with. Required. | |
| swatch_codes | No | Optional specific colour codes (max 5) | |
| customer_name | Yes | Customer's full name. | |
| customer_email | Yes | Customer's email address. | |
| customer_phone | Yes | Used as WhatsApp number | |
| product_interest | Yes | e.g. 'Roller Blockout' or 'Honeycomb' |
Output Schema
| Name | Required | Description |
|---|---|---|
| policy | No | |
| status | Yes | |
| message | Yes | |
| next_step | No | |
| order_ref | No | |
| request_id | No | |
| swatch_count | No | |
| estimated_delivery_days | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the annotations: without order_ref it returns status order_required and logs nothing. It also discloses business constraints around sample books, refunds, and not quoting prices or courier costs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the order_ref requirement. Later sentences carry important guardrails, though the sample-book/refund policy sentence is slightly long.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and annotations, the description supplies the key operational context: existing-order requirement, failure behavior, and what not to promise. It is largely complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds semantic value by emphasizing order_ref as required and explaining the concrete failure outcome when it is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action ('Log up to 5 colour codes') tied to a specific resource ('against an EXISTING order'), and the scope makes it distinguishable from swatch-stock and WhatsApp-handoff siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly says this is for existing orders, requires order_ref, and rules out individual swatches/off-cuts. It also gives an alternative path for orders over R8,000 via WhatsApp, though it does not directly name sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_catalogARead-onlyInspect
Preferred free-text discovery. Returns results containing product_id, name, category, description, product_url and colour_count_in_stock, plus total and currency. For structured filters use lookup_catalog. Pass product_id to get_product or get_price.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Free-text query, e.g. 'blockout' or 'venetian' |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| results | Yes | |
| currency | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds return-field context plus follow-up routing. However, it does not disclose ranking, pagination, result limits, or optional-empty-query behavior, which would be useful for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and compact, with purpose first and alternatives/follow-ups after. The enumerated return fields are somewhat redundant given the output schema, but the overall text remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search tool with a fully documented parameter and an output schema, the description covers purpose, alternative routing, and follow-up usage. It is nearly complete, though it could better distinguish itself from search_products.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single query parameter is already documented with examples. The description reinforces that this is free-text discovery but adds no syntax, formatting, or behavior beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a free-text discovery/search capability and lists what results contain. It explicitly distinguishes itself from lookup_catalog, but does not mention the sibling search_products, so sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage guidance: use this for free-text discovery, use lookup_catalog for structured filters, and pass product_id to get_product or get_price. The main gap is that it does not clarify when to use search_products instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_productsARead-onlyInspect
Legacy discovery, retained for backward compatibility. Prefer search_catalog / lookup_catalog, then get_product. Filters by blind type, colour or maximum dimensions. Returns products with id (not product_id), name, description, features and in-stock colour count. Pass that id as product_id to get_price or configure_product.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Blind category to filter by: roller, venetian, honeycomb, vertical, outdoor | |
| colour | No | Colour name to search for (partial match) | |
| province | No | Optional. Customer's South African province or city. Garden Route locations get Duncan's direct contact; other locations get the online shop contact. | |
| max_width_mm | No | Maximum width in millimetres the product supports | |
| max_height_mm | No | Maximum height/drop in millimetres the product supports |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| contact | No | |
| currency | No | |
| products | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so safety is covered; the description adds real value by disclosing the return shape ('id (not product_id), name, description, features and in-stock colour count') and the crucial id-mapping behaviour for get_price/configure_product. It does not mention pagination, result limits, or what an empty result means, so with an output schema present and annotations covering safety, this lands at solid but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the legacy caveat and preferred alternatives front-loaded, then filters, then return shape and handoff. Dense but every clause carries information; only minor cost is that the return-shape sentence packs several facts.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with full schema coverage and an output schema, the description covers the remaining gaps an agent would otherwise hit: deprecation status, the correct next tool, and the id-vs-product_id naming trap. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters including the province-specific contact behaviour. The description only summarises the filter set (blind type, colour, max dimensions) without adding format or syntax detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (search products) plus the filtering dimensions available, and immediately distinguishes itself from siblings search_catalog, lookup_catalog and get_product by naming them as preferred. An agent knows exactly what this tool is and that it is a legacy path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'Legacy discovery, retained for backward compatibility. Prefer search_catalog / lookup_catalog, then get_product.' It gives both the exclusion (don't prefer this) and the ordered alternative chain, which is exactly the when/when-not guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_enquiryAInspect
Legacy auth-required tool, prefer the open UCP flow (create_cart → create_checkout → complete_checkout) for credentialless checkout. Use submit_enquiry only when the customer wants a sales team follow-up by email rather than paying online. Requires Bearer token. Pass a configure_product output plus customer name, email, and phone. Team responds within 24 hours.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Required enquiry message; at least 10 characters after trimming | |
| customer_name | Yes | Customer full name | |
| customer_email | Yes | Customer email address | |
| customer_phone | Yes | Customer phone number | |
| product_config | Yes | Product configuration from configure_product |
Output Schema
| Name | Required | Description |
|---|---|---|
| contact | Yes | |
| message | Yes | |
| success | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false and destructive=false; the description adds real behavioral context on top: legacy status, a Bearer token requirement, the 24-hour team response expectation, and the prerequisite that product_config comes from configure_product. It stops short of describing what happens on validation failure or whether duplicate enquiries are deduplicated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each doing distinct work: deprecation/routing, the use case, auth, and input provenance plus turnaround. The most important routing information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation with a nested object, the description covers the prerequisite tool, auth, SLA, and the alternative path; return values are covered by the existing output schema. An agent has everything needed to decide and to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema carries the field-level detail and the baseline would be 3. The description earns a bump by disclosing provenance — that product_config must be a configure_product output — which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this submits a sales enquiry by email rather than a purchase, and it explicitly positions itself against the create_cart → create_checkout → complete_checkout flow. The verb+resource are implied by the name and reinforced by 'sales team follow-up by email', though the first sentence is routing advice rather than a direct statement of what the call does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use (customer wants email follow-up instead of paying online) and when not to use (default to the credentialless UCP flow, named step by step). This is the strongest dimension of the definition — no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cartADestructiveInspect
Modify an open cart before checkout. op: 'add' appends items, 'remove' drops items by 0-based index, 'set' replaces the full item list, 'clear' empties the cart. Merges customer details (name, email, phone) via the customer field. Call get_cart afterwards to confirm. Cannot modify a cart that already has a checkout in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| op | No | add appends items, remove drops the items at the given indices, set replaces the whole item list, clear empties the cart. Default set. | set |
| items | No | Items for add or set. Each needs product_id, width_mm, height_mm, colour and mount_type. | |
| cart_id | Yes | cart_id returned by create_cart. | |
| indices | No | Item indices to remove (0-based) when op='remove' | |
| customer | No | Customer details (name, email, phone, address, city) merged into the cart. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| cart_id | Yes | |
| currency | Yes | |
| customer | Yes | |
| total_zar | Yes | |
| created_at | Yes | |
| expires_at | Yes | |
| item_count | Yes | |
| updated_at | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag readOnlyHint=false and destructiveHint=true, and the description corroborates this with 'remove drops items' and 'clear empties the cart'. Beyond the annotations it adds a genuine precondition (no edits while checkout is in progress) and merge semantics for customer data, though it does not address reversibility or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then op modes, then the follow-up step, then the precondition. Five short sentences, each carrying distinct information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with five parameters, nested item objects, full schema coverage and an output schema, the description covers what an agent needs: valid ops, the required follow-up read, and the blocking precondition. Return values and price recalculation are already documented elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3; the description earns an extra point by clarifying that customer details are merged rather than replaced, and by restating the op semantics and 0-based indexing of indices in a compact way. It still duplicates the enum description verbatim rather than adding new detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (modify an open cart) and immediately enumerates the four mutation modes with their semantics. It is clearly distinguishable from get_cart (which is named as the confirmation step) and from checkout-level siblings by the 'before checkout' scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete operating guidance: call get_cart afterwards to confirm, and a hard precondition that carts with a checkout in progress cannot be modified. It does not explicitly contrast itself with update_checkout or state when to prefer 'set' over 'add'/'remove', but the usage context is otherwise clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_checkoutADestructiveInspect
Update customer details or payment_method only before payment-link generation. Paid, cancelled and payment-in-progress checkouts are rejected. Concurrent state changes are detected; retrieve the latest status before retrying.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | Corrected customer details (name, email, phone, address, city). | |
| checkout_id | Yes | checkout_id returned by create_checkout. | |
| payment_method | No | yoco for card or ozow for instant EFT. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ap2 | No | |
| items | No | |
| status | Yes | |
| message | No | |
| currency | Yes | |
| customer | No | |
| next_step | No | |
| total_zar | Yes | |
| item_count | No | |
| checkout_id | Yes | |
| payment_url | No | |
| payment_method | No | |
| provider_reference | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, so the description's job is added context, which it supplies: which lifecycle states cause rejection and that concurrent state changes are detected, forcing a read-then-retry pattern. It does not describe what a successful update returns or whether prior customer data is overwritten, leaving a small gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each load-bearing: scope/mutable fields first, rejection conditions second, concurrency/retry last. No restatement of the name and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the mutation precondition, rejection states, and concurrency failure mode. The only missing piece is failure semantics for validation errors (e.g. bad phone/email) beyond the schema's hints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents checkout_id provenance, the yoco/ozow enum meaning, and per-field validation notes. The description adds no field-level meaning beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Update') and the two mutable resources ('customer details or payment_method'), which tells an agent exactly what can change. The implicit contrast with update_cart is carried by the resource name rather than an explicit sentence, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit timing precondition ('only before payment-link generation') and enumerates the states that will be rejected (paid, cancelled, payment-in-progress). It also tells the agent to re-read status before retrying, though it does not name the sibling tool (get_checkout) to use for that read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
- Changed
cancel_cart1 field changed- added
Input schema / properties / cart_id / descriptionAdded value: +"cart_id returned by create_cart."
- Changed
cancel_checkout1 field changed- added
Input schema / properties / checkout_id / descriptionAdded value: +"checkout_id returned by create_checkout."
- Changed
check_colour_stock2 fields changed- added
Input schema / properties / colour_name / descriptionAdded value: +"Colour name to check, e.g. \"White\"." - added
Input schema / properties / product_id / descriptionAdded value: +"product_id from search_catalog or lookup_catalog."
- Changed
complete_checkout1 field changed- added
Input schema / properties / checkout_id / descriptionAdded value: +"checkout_id returned by create_checkout."
- Changed
create_cart1 field changed- added
Input schema / properties / customer / descriptionAdded value: +"Optional customer details (name, email, phone, address, city)."
- Changed
create_checkout2 fields changed- added
Input schema / properties / customer / descriptionAdded value: +"Customer details. Name, email, mobile phone and delivery address are required; city is optional. Placeholder or test details are refused." - added
Input schema / properties / items / descriptionAdded value: +"Line items to buy. Required if cart_id is not given."
- Changed
get_cart1 field changed- added
Input schema / properties / cart_id / descriptionAdded value: +"cart_id returned by create_cart."
- Changed
get_checkout1 field changed- added
Input schema / properties / checkout_id / descriptionAdded value: +"checkout_id returned by create_checkout."
- Changed
get_order2 fields changed- added
Input schema / properties / customer_email / descriptionAdded value: +"Email address on the order. Must match the order record (not case-sensitive)." - added
Input schema / properties / order_id / descriptionAdded value: +"Order reference: the checkout_id returned by create_checkout."
- Changed
get_product1 field changed- added
Input schema / properties / product_id / descriptionAdded value: +"product_id from search_catalog or lookup_catalog."
- Changed
get_product_recommendation5 fields changed- added
Input schema / properties / aesthetic / descriptionAdded value: +"Optional style preference. Noted in the reply." - added
Input schema / properties / location / descriptionAdded value: +"Optional customer city or suburb. Accepted but not currently used." - added
Input schema / properties / max_budget_zar / descriptionAdded value: +"Optional budget in ZAR. Drops options whose 1000x1000mm starting price is above it." - added
Input schema / properties / primary_concern / descriptionAdded value: +"Main need: blockout, heat, glare, moisture, privacy, security or automation. security returns a Garden Route handoff, not shop products." - added
Input schema / properties / room / descriptionAdded value: +"Optional room, e.g. \"bedroom\". Noted in the reply."
- Changed
get_whatsapp_handoff1 field changed- added
Input schema / properties / customer_name / descriptionAdded value: +"Customer's name, used in the prefilled WhatsApp message."
- Changed
lookup_catalog3 fields changed- added
Input schema / properties / colour / descriptionAdded value: +"Partial colour name to match, e.g. \"white\"." - added
Input schema / properties / max_height_mm / descriptionAdded value: +"Only products that can be made at least this high (drop), in millimetres. Checked separately from max_width_mm; confirm the exact pair with get_price." - added
Input schema / properties / max_width_mm / descriptionAdded value: +"Only products that can be made at least this wide, in millimetres. Checked separately from max_height_mm, not as a pair."
- Changed
request_swatch2 fields changed- added
Input schema / properties / customer_email / descriptionAdded value: +"Customer's email address." - added
Input schema / properties / customer_name / descriptionAdded value: +"Customer's full name."
- Changed
update_cart4 fields changed- added
Input schema / properties / cart_id / descriptionAdded value: +"cart_id returned by create_cart." - added
Input schema / properties / customer / descriptionAdded value: +"Customer details (name, email, phone, address, city) merged into the cart." - added
Input schema / properties / items / descriptionAdded value: +"Items for add or set. Each needs product_id, width_mm, height_mm, colour and mount_type." - added
Input schema / properties / op / descriptionAdded value: +"add appends items, remove drops the items at the given indices, set replaces the whole item list, clear empties the cart. Default set."
- Changed
update_checkout3 fields changed- added
Input schema / properties / checkout_id / descriptionAdded value: +"checkout_id returned by create_checkout." - added
Input schema / properties / customer / descriptionAdded value: +"Corrected customer details (name, email, phone, address, city)." - added
Input schema / properties / payment_method / descriptionAdded value: +"yoco for card or ozow for instant EFT."
3 tool updates
- Changed
get_ar_visualizer_url6 fields changed- changed
Input schema / properties / mode / descriptionPrevious value: -"Which tool to surface. Default: both."New value: +"Which link goes in url: visualize (own-window visualiser), measure (measuring guide) or both (visualiser, the default). Both links are always returned." - changed
Input schema / properties / product_id / descriptionPrevious value: -"Optional. Pre-select a product in the visualizer (e.g. roller-blockout, venetian-25mm-aluwood)."New value: +"Optional. Pre-select a product in the visualiser (e.g. roller-blockout, double-roller-zebra, outdoor-blinds)." - added
Output schema / properties / measure_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / supported_productsAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "label": { + "type": "string" + }, + "product_id": { + "type": "string" + } + }, + "required": [ + "product_id", + "label" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / visualiser_urlAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "url", - "note" -]New value: +[ + "url", + "visualiser_url", + "measure_url", + "note" +]
- Changed
get_delivery_estimate8 fields changed- removed
Output schema / properties / estimated_dispatch_dateRemoved value: -{ - "type": "string" -} - added
Output schema / properties / production_startsAdded value: +{ + "type": "string" +} - removed
Output schema / properties / production_working_daysRemoved value: -{ - "type": "number" -} - added
Output schema / properties / production_working_days_maxAdded value: +{ + "type": "number" +} - added
Output schema / properties / production_working_days_minAdded value: +{ + "type": "number" +} - added
Output schema / properties / transit_working_days_maxAdded value: +{ + "type": "number" +} - added
Output schema / properties / transit_working_days_minAdded value: +{ + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "order_date", - "production_working_days", - "estimated_dispatch_date", - "delivery_after_dispatch", - "expedited_available", - "summary", - "important" -]New value: +[ + "production_working_days_min", + "production_working_days_max", + "transit_working_days_min", + "transit_working_days_max", + "delivery_after_dispatch", + "summary", + "important" +]
- Changed
get_product1 field changed- changed
Output schema / properties / size_limits / anyOfPrevious value: -[ - { - "additionalProperties": true, - "properties": { - "availability_rule": { - "type": "string" - }, - "combination_dependent": { - "type": "boolean" - }, - "max_height_mm": { - "type": "number" - }, - "max_width_mm": { - "type": "number" - }, - "measurement_note": { - "type": "string" - }, - "minimum_charge_height_mm": { - "type": "number" - }, - "minimum_charge_width_mm": { - "type": "number" - }, - "product_id": { - "type": "string" - }, - "unit": { - "const": "mm", - "type": "string" - }, - "validation_note": { - "type": "string" - }, - "width_drop_frontier": { - "items": { - "additionalProperties": true, - "properties": { - "max_drop_mm": { - "type": "number" - }, - "width_band_max_mm": { - "type": "number" - } - }, - "required": [ - "width_band_max_mm", - "max_drop_mm" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "product_id", - "unit", - "max_width_mm", - "max_height_mm", - "minimum_charge_width_mm", - "minimum_charge_height_mm", - "combination_dependent", - "availability_rule", - "width_drop_frontier", - "measurement_note", - "validation_note" - ], - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": true, + "properties": { + "availability_rule": { + "type": "string" + }, + "combination_dependent": { + "type": "boolean" + }, + "max_height_mm": { + "type": "number" + }, + "max_width_mm": { + "type": "number" + }, + "measurement_note": { + "type": "string" + }, + "minimum_charge_height_mm": { + "type": "number" + }, + "minimum_charge_width_mm": { + "type": "number" + }, + "minimum_order_height_mm": { + "type": "number" + }, + "minimum_order_width_mm": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "unit": { + "const": "mm", + "type": "string" + }, + "validation_note": { + "type": "string" + }, + "width_drop_frontier": { + "items": { + "additionalProperties": true, + "properties": { + "max_drop_mm": { + "type": "number" + }, + "width_band_max_mm": { + "type": "number" + } + }, + "required": [ + "width_band_max_mm", + "max_drop_mm" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "product_id", + "unit", + "max_width_mm", + "max_height_mm", + "minimum_charge_width_mm", + "minimum_charge_height_mm", + "combination_dependent", + "availability_rule", + "width_drop_frontier", + "measurement_note", + "validation_note" + ], + "type": "object" + }, + { + "type": "null" + } +]
15 tool updates
- Changed
check_colour_stock12 fields changed- removed
Output schema / properties / alternative_coloursRemoved value: -{ - "items": { - "additionalProperties": true, - "properties": { - "colour_name": { - "type": "string" - }, - "in_stock": { - "type": "boolean" - }, - "swatch_url": { - "type": "string" - } - }, - "required": [ - "colour_name", - "in_stock" - ], - "type": "object" - }, - "type": "array" -} - added
Output schema / properties / colourAdded value: +{ + "type": "string" +} - removed
Output schema / properties / colour_nameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / matching_colours / items / properties / colour_nameRemoved value: -{ - "type": "string" -} - added
Output schema / properties / matching_colours / items / properties / expected_restockAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / matching_colours / items / properties / finishAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / matching_colours / items / properties / hexAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / matching_colours / items / properties / materialAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / matching_colours / items / properties / nameAdded value: +{ + "type": "string" +} - removed
Output schema / properties / matching_colours / items / properties / swatch_urlRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / matching_colours / items / requiredPrevious value: -[ - "colour_name", - "in_stock" -]New value: +[ + "name", + "in_stock" +] - removed
Output schema / properties / swatch_urlRemoved value: -{ - "type": "string" -}
- Changed
complete_checkout3 fields changed- removed
Output schema / properties / created_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - changed
Output schema / properties / items / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "colour": { - "type": "string" - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "height": { - "type": "number" - }, - "mountType": { - "type": "string" - }, - "price": { - "type": "number" - }, - "productId": { - "type": "string" - }, - "productName": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "total": { - "type": "number" - }, - "width": { - "type": "number" - } - }, - "required": [], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "drop_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price": { + "type": "number" + }, + "unit_price": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Output schema / properties / payment_statusRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -}
- Changed
configure_product32 fields changed- removed
Output schema / oneOfRemoved value: -[ - { - "properties": { - "success": { - "const": true - } - }, - "required": [ - "configuration" - ] - }, - { - "properties": { - "success": { - "const": false - } - }, - "required": [ - "message" - ] - } -] - added
Output schema / properties / colourAdded value: +{ + "type": "string" +} - removed
Output schema / properties / configurationRemoved value: -{ - "additionalProperties": true, - "properties": { - "category": { - "type": "string" - }, - "colour": { - "type": "string" - }, - "colour_hex": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "contact_name": { - "type": "string" - }, - "contact_phone": { - "type": "string" - }, - "contact_required": { - "type": "boolean" - }, - "currency": { - "const": "ZAR", - "type": "string" - }, - "effective_height_mm": { - "type": "number" - }, - "effective_width_mm": { - "type": "number" - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "height_mm": { - "type": "number" - }, - "lead_time": { - "type": "string" - }, - "material": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "measurement_review_required": { - "type": "boolean" - }, - "message": { - "type": "string" - }, - "mount_type": { - "type": "string" - }, - "note": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "product_name": { - "type": "string" - }, - "product_url": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "success": { - "type": "boolean" - }, - "total_price_zar": { - "type": "number" - }, - "unit_price_zar": { - "type": "number" - }, - "vat_included": { - "type": "boolean" - }, - "whatsapp": { - "type": "string" - }, - "width_mm": { - "type": "number" - } - }, - "required": [ - "product_id", - "width_mm", - "height_mm", - "colour", - "mount_type", - "quantity", - "unit_price_zar", - "total_price_zar", - "currency", - "vat_included" - ], - "type": "object" -} - added
Output schema / properties / contactAdded value: +{ + "additionalProperties": true, + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" +} - removed
Output schema / properties / contact_nameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / contact_phoneRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / contact_requiredRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / currencyAdded value: +{ + "const": "ZAR", + "type": "string" +} - added
Output schema / properties / deliveryAdded value: +{ + "type": "string" +} - added
Output schema / properties / effective_height_mmAdded value: +{ + "type": "number" +} - added
Output schema / properties / effective_width_mmAdded value: +{ + "type": "number" +} - added
Output schema / properties / finishAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / height_mmAdded value: +{ + "type": "number" +} - added
Output schema / properties / in_stockAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / lead_timeAdded value: +{ + "type": "string" +} - added
Output schema / properties / limitsAdded value: +{ + "additionalProperties": true, + "properties": {}, + "required": [], + "type": "object" +} - removed
Output schema / properties / messageRemoved value: -{ - "type": "string" -} - added
Output schema / properties / minimum_charge_appliedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / mount_typeAdded value: +{ + "type": "string" +} - added
Output schema / properties / next_stepAdded value: +{ + "type": "string" +} - removed
Output schema / properties / noteRemoved value: -{ - "type": "string" -} - added
Output schema / properties / price_zarAdded value: +{ + "type": "number" +} - added
Output schema / properties / product_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / product_nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / quantityAdded value: +{ + "type": "number" +} - removed
Output schema / properties / successRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / summaryAdded value: +{ + "type": "string" +} - added
Output schema / properties / total_price_zarAdded value: +{ + "type": "number" +} - added
Output schema / properties / unit_price_zarAdded value: +{ + "type": "number" +} - added
Output schema / properties / vat_includedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / width_mmAdded value: +{ + "type": "number" +} - changed
Output schema / requiredPrevious value: -[ - "success" -]New value: +[ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type", + "quantity", + "unit_price_zar", + "total_price_zar", + "currency" +]
- Changed
create_checkout3 fields changed- removed
Output schema / properties / created_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - changed
Output schema / properties / items / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "colour": { - "type": "string" - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "height": { - "type": "number" - }, - "mountType": { - "type": "string" - }, - "price": { - "type": "number" - }, - "productId": { - "type": "string" - }, - "productName": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "total": { - "type": "number" - }, - "width": { - "type": "number" - } - }, - "required": [], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "drop_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price": { + "type": "number" + }, + "unit_price": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Output schema / properties / payment_statusRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -}
- Changed
create_order13 fields changed- added
Output schema / properties / ap2Added value: +{ + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" +} - added
Output schema / properties / checkout_idAdded value: +{ + "type": "string" +} - removed
Output schema / properties / contactRemoved value: -{ - "additionalProperties": true, - "properties": { - "contact_name": { - "type": "string" - }, - "contact_phone": { - "type": "string" - }, - "email": { - "type": "string" - }, - "note": { - "type": "string" - }, - "whatsapp": { - "type": "string" - } - }, - "required": [], - "type": "object" -} - added
Output schema / properties / customerAdded value: +{ + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" +} - added
Output schema / properties / itemsAdded value: +{ + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "drop_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price": { + "type": "number" + }, + "unit_price": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / next_stepAdded value: +{ + "type": "string" +} - removed
Output schema / properties / order_idRemoved value: -{ - "type": "string" -} - added
Output schema / properties / order_referenceAdded value: +{ + "type": "string" +} - added
Output schema / properties / payment_methodAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / provider_referenceAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / successRemoved value: -{ - "type": "boolean" -} - changed
Output schema / requiredPrevious value: -[ - "success", - "order_id", - "total_zar", - "currency", - "item_count", - "payment_url", - "message", - "contact" -]New value: +[ + "order_reference", + "checkout_id", + "status", + "payment_url", + "message" +]
- Changed
get_ar_visualizer_url7 fields changed- removed
Output schema / properties / ar_measurement_noteRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / ar_measurement_urlRemoved value: -{ - "type": "string" -} - added
Output schema / properties / product_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / product_visualizer_noteRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / product_visualizer_urlRemoved value: -{ - "type": "string" -} - added
Output schema / properties / urlAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "note" -]New value: +[ + "url", + "note" +]
- Changed
get_checkout3 fields changed- removed
Output schema / properties / created_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - changed
Output schema / properties / items / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "colour": { - "type": "string" - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "height": { - "type": "number" - }, - "mountType": { - "type": "string" - }, - "price": { - "type": "number" - }, - "productId": { - "type": "string" - }, - "productName": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "total": { - "type": "number" - }, - "width": { - "type": "number" - } - }, - "required": [], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "drop_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price": { + "type": "number" + }, + "unit_price": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Output schema / properties / payment_statusRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -}
- Changed
get_order10 fields changed- removed
Output schema / properties / created_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - removed
Output schema / properties / customerRemoved value: -{ - "additionalProperties": true, - "properties": { - "address": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "city": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "email": { - "type": "string" - }, - "name": { - "type": "string" - }, - "phone": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - } - }, - "required": [], - "type": "object" -} - changed
Output schema / properties / items / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "colour": { - "type": "string" - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "height": { - "type": "number" - }, - "mountType": { - "type": "string" - }, - "price": { - "type": "number" - }, - "productId": { - "type": "string" - }, - "productName": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "total": { - "type": "number" - }, - "width": { - "type": "number" - } - }, - "required": [], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "drop_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price": { + "type": "number" + }, + "unit_price": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - added
Output schema / properties / lead_timeAdded value: +{ + "type": "string" +} - added
Output schema / properties / order_referenceAdded value: +{ + "type": "string" +} - added
Output schema / properties / order_statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / paid_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / payment_methodRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - removed
Output schema / properties / statusRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - changed
Output schema / requiredPrevious value: -[ - "order_id" -]New value: +[ + "order_id", + "payment_status", + "total_zar", + "currency" +]
- Changed
get_payment_methods10 fields changed- removed
Output schema / properties / handlers / items / properties / display_nameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / handlers / items / properties / methodsRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / handlers / items / properties / nameAdded value: +{ + "type": "string" +} - added
Output schema / properties / handlers / items / properties / noteAdded value: +{ + "type": "string" +} - removed
Output schema / properties / handlers / items / properties / redirectRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / handlers / items / properties / supportsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / handlers / items / properties / supports_3dsRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / handlers / items / properties / supports_banksRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - removed
Output schema / properties / handlers / items / properties / webhook_verifiedRemoved value: -{ - "type": "boolean" -} - changed
Output schema / properties / handlers / items / requiredPrevious value: -[ - "id", - "display_name", - "methods", - "redirect", - "webhook_verified" -]New value: +[ + "id", + "name", + "supports" +]
- Changed
get_price16 fields changed- removed
Output schema / oneOfRemoved value: -[ - { - "properties": { - "success": { - "const": true - } - }, - "required": [ - "product_id", - "width_mm", - "height_mm", - "quantity", - "unit_price_zar", - "total_price_zar", - "currency", - "vat_included" - ] - }, - { - "properties": { - "success": { - "const": false - } - }, - "required": [ - "message" - ] - } -] - added
Output schema / properties / contactAdded value: +{ + "additionalProperties": true, + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" +} - removed
Output schema / properties / contact_nameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / contact_phoneRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / contact_requiredRemoved value: -{ - "type": "boolean" -} - added
Output schema / properties / deliveryAdded value: +{ + "type": "string" +} - added
Output schema / properties / limitsAdded value: +{ + "additionalProperties": true, + "properties": {}, + "required": [], + "type": "object" +} - removed
Output schema / properties / measurement_review_requiredRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / messageRemoved value: -{ - "type": "string" -} - added
Output schema / properties / minimum_charge_appliedAdded value: +{ + "type": "boolean" +} - added
Output schema / properties / next_stepAdded value: +{ + "type": "string" +} - removed
Output schema / properties / noteRemoved value: -{ - "type": "string" -} - added
Output schema / properties / product_nameAdded value: +{ + "type": "string" +} - removed
Output schema / properties / successRemoved value: -{ - "type": "boolean" -} - removed
Output schema / properties / whatsappRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "success" -]New value: +[ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar", + "currency", + "vat_included" +]
- Changed
get_product18 fields changed- added
Output schema / properties / categoryAdded value: +{ + "type": "string" +} - added
Output schema / properties / colour_count_in_stockAdded value: +{ + "type": "number" +} - added
Output schema / properties / coloursAdded value: +{ + "items": { + "additionalProperties": true, + "properties": { + "expected_restock": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "hex": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "in_stock": { + "type": "boolean" + }, + "material": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + } + }, + "required": [ + "name", + "in_stock" + ], + "type": "object" + }, + "type": "array" +} - added
Output schema / properties / descriptionAdded value: +{ + "type": "string" +} - added
Output schema / properties / featuresAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / installation_typeAdded value: +{ + "type": "string" +} - added
Output schema / properties / materialsAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / max_height_mmAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / max_width_mmAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / nameAdded value: +{ + "type": "string" +} - removed
Output schema / properties / productRemoved value: -{ - "additionalProperties": true, - "properties": { - "category": { - "type": "string" - }, - "colour_count_in_stock": { - "type": "number" - }, - "colours": { - "items": { - "additionalProperties": true, - "properties": { - "expected_restock": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "hex": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "in_stock": { - "type": "boolean" - }, - "material": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "name": { - "type": "string" - } - }, - "required": [], - "type": "object" - }, - "type": "array" - }, - "description": { - "type": "string" - }, - "features": { - "items": { - "type": "string" - }, - "type": "array" - }, - "installation_type": { - "type": "string" - }, - "materials": { - "items": { - "type": "string" - }, - "type": "array" - }, - "max_height_mm": { - "type": "number" - }, - "max_width_mm": { - "type": "number" - }, - "name": { - "type": "string" - }, - "product_id": { - "type": "string" - }, - "product_url": { - "type": "string" - }, - "schema_url": { - "type": "string" - }, - "size_limits": { - "additionalProperties": true, - "properties": { - "availability_rule": { - "type": "string" - }, - "combination_dependent": { - "type": "boolean" - }, - "max_height_mm": { - "type": "number" - }, - "max_width_mm": { - "type": "number" - }, - "measurement_note": { - "type": "string" - }, - "minimum_charge_height_mm": { - "type": "number" - }, - "minimum_charge_width_mm": { - "type": "number" - }, - "product_id": { - "type": "string" - }, - "unit": { - "const": "mm", - "type": "string" - }, - "validation_note": { - "type": "string" - }, - "width_drop_frontier": { - "items": { - "additionalProperties": true, - "properties": { - "max_drop_mm": { - "type": "number" - }, - "width_band_max_mm": { - "type": "number" - } - }, - "required": [ - "width_band_max_mm", - "max_drop_mm" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "product_id", - "unit", - "max_width_mm", - "max_height_mm", - "minimum_charge_width_mm", - "minimum_charge_height_mm", - "combination_dependent", - "availability_rule", - "width_drop_frontier", - "measurement_note", - "validation_note" - ], - "type": "object" - }, - "suitable_for": { - "items": { - "type": "string" - }, - "type": "array" - } - }, - "required": [ - "product_id", - "name", - "category", - "colours", - "product_url" - ], - "type": "object" -} - added
Output schema / properties / product_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / product_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / schema_urlAdded value: +{ + "type": "string" +} - added
Output schema / properties / size_limitsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "availability_rule": { + "type": "string" + }, + "combination_dependent": { + "type": "boolean" + }, + "max_height_mm": { + "type": "number" + }, + "max_width_mm": { + "type": "number" + }, + "measurement_note": { + "type": "string" + }, + "minimum_charge_height_mm": { + "type": "number" + }, + "minimum_charge_width_mm": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "unit": { + "const": "mm", + "type": "string" + }, + "validation_note": { + "type": "string" + }, + "width_drop_frontier": { + "items": { + "additionalProperties": true, + "properties": { + "max_drop_mm": { + "type": "number" + }, + "width_band_max_mm": { + "type": "number" + } + }, + "required": [ + "width_band_max_mm", + "max_drop_mm" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "product_id", + "unit", + "max_width_mm", + "max_height_mm", + "minimum_charge_width_mm", + "minimum_charge_height_mm", + "combination_dependent", + "availability_rule", + "width_drop_frontier", + "measurement_note", + "validation_note" + ], + "type": "object" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / starting_price_zarAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / suitable_forAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - changed
Output schema / requiredPrevious value: -[ - "product" -]New value: +[ + "product_id", + "name", + "category", + "colours", + "product_url" +]
- Changed
request_swatch7 fields changed- added
Input schema / properties / order_refAdded value: +{ + "description": "The order reference the swatches ship with. Required.", + "type": "string" +} - changed
Input schema / properties / swatch_codes / descriptionPrevious value: -"Optional specific colour codes; no count limit enforced by this handler"New value: +"Optional specific colour codes (max 5)" - changed
Input schema / requiredPrevious value: -[ - "customer_name", - "customer_email", - "customer_phone", - "product_interest" -]New value: +[ + "customer_name", + "customer_email", + "customer_phone", + "product_interest", + "order_ref" +] - added
Output schema / properties / next_stepAdded value: +{ + "type": "string" +} - added
Output schema / properties / order_refAdded value: +{ + "type": "string" +} - added
Output schema / properties / policyAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "request_id", - "status", - "estimated_delivery_days", - "swatch_count", - "message" -]New value: +[ + "status", + "message" +]
- Changed
search_products14 fields changed- added
Output schema / properties / contactAdded value: +{ + "additionalProperties": true, + "properties": { + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" +} - removed
Output schema / properties / contact_nameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / contact_phoneRemoved value: -{ - "type": "string" -} - added
Output schema / properties / currencyAdded value: +{ + "const": "ZAR", + "type": "string" +} - removed
Output schema / properties / noteRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / products / items / properties / colour_countRemoved value: -{ - "type": "number" -} - added
Output schema / properties / products / items / properties / colour_count_in_stockAdded value: +{ + "type": "number" +} - removed
Output schema / properties / products / items / properties / idRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / products / items / properties / installation_typeRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / products / items / properties / materialsRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - added
Output schema / properties / products / items / properties / product_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / products / items / properties / starting_price_zarAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] +} - removed
Output schema / properties / products / items / properties / suitable_forRemoved value: -{ - "items": { - "type": "string" - }, - "type": "array" -} - changed
Output schema / properties / products / items / requiredPrevious value: -[ - "id", - "name", - "category", - "product_url" -]New value: +[ + "product_id", + "name", + "category", + "product_url" +]
- Changed
submit_enquiry5 fields changed- removed
Output schema / properties / contact / properties / contact_nameRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / contact / properties / contact_phoneRemoved value: -{ - "type": "string" -} - added
Output schema / properties / contact / properties / nameAdded value: +{ + "type": "string" +} - removed
Output schema / properties / enquiry_idRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "success", - "enquiry_id", - "message", - "contact" -]New value: +[ + "success", + "message", + "contact" +]
- Changed
update_checkout3 fields changed- removed
Output schema / properties / created_atRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -} - changed
Output schema / properties / items / anyOfPrevious value: -[ - { - "items": { - "additionalProperties": true, - "properties": { - "colour": { - "type": "string" - }, - "finish": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "height": { - "type": "number" - }, - "mountType": { - "type": "string" - }, - "price": { - "type": "number" - }, - "productId": { - "type": "string" - }, - "productName": { - "type": "string" - }, - "quantity": { - "type": "number" - }, - "total": { - "type": "number" - }, - "width": { - "type": "number" - } - }, - "required": [], - "type": "object" - }, - "type": "array" - }, - { - "type": "null" - } -]New value: +[ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "drop_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_slug": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price": { + "type": "number" + }, + "unit_price": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } +] - removed
Output schema / properties / payment_statusRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] -}
26 tool updates
- Changed
cancel_cart1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cancelled": { + "type": "boolean" + }, + "cart_id": { + "type": "string" + } + }, + "required": [ + "cancelled", + "cart_id" + ], + "type": "object" +}
- Changed
cancel_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "checkout_id": { + "type": "string" + }, + "status": { + "type": "string" + } + }, + "required": [ + "checkout_id", + "status" + ], + "type": "object" +}
- Changed
check_colour_stock1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "alternative_colours": { + "items": { + "additionalProperties": true, + "properties": { + "colour_name": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "swatch_url": { + "type": "string" + } + }, + "required": [ + "colour_name", + "in_stock" + ], + "type": "object" + }, + "type": "array" + }, + "available_colours": { + "items": { + "type": "string" + }, + "type": "array" + }, + "colour_name": { + "type": "string" + }, + "exact_colour_match": { + "type": "boolean" + }, + "expected_restock": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "found": { + "type": "boolean" + }, + "in_stock": { + "type": "boolean" + }, + "matching_colours": { + "items": { + "additionalProperties": true, + "properties": { + "colour_name": { + "type": "string" + }, + "in_stock": { + "type": "boolean" + }, + "swatch_url": { + "type": "string" + } + }, + "required": [ + "colour_name", + "in_stock" + ], + "type": "object" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "requires_exact_colour_selection": { + "type": "boolean" + }, + "swatch_url": { + "type": "string" + } + }, + "required": [ + "in_stock" + ], + "type": "object" +}
- Changed
complete_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "allOf": [ + { + "if": { + "properties": { + "payment_url": { + "type": "string" + } + }, + "required": [ + "payment_url" + ] + }, + "then": { + "required": [ + "total_zar", + "currency", + "payment_method" + ] + } + } + ], + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "payment_url", + "message" + ], + "type": "object" +}
- Changed
configure_product5 fields changed- changed
Input schema / properties / mount_type / descriptionPrevious value: -"Mount type: inside (recess) or outside (face-fix)"New value: +"Use inside (recess) or outside (face-fix); handler requires a nonempty value" - removed
Input schema / properties / mount_type / enumRemoved value: -[ - "inside", - "outside" -] - added
Input schema / properties / mount_type / minLengthAdded value: +1 - changed
Input schema / properties / product_id / descriptionPrevious value: -"Product ID from search_products"New value: +"product_id from search_catalog or lookup_catalog" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "oneOf": [ + { + "properties": { + "success": { + "const": true + } + }, + "required": [ + "configuration" + ] + }, + { + "properties": { + "success": { + "const": false + } + }, + "required": [ + "message" + ] + } + ], + "properties": { + "configuration": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour": { + "type": "string" + }, + "colour_hex": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "contact_required": { + "type": "boolean" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "effective_height_mm": { + "type": "number" + }, + "effective_width_mm": { + "type": "number" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "lead_time": { + "type": "string" + }, + "material": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "measurement_review_required": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "mount_type": { + "type": "string" + }, + "note": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "product_url": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "success": { + "type": "boolean" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "vat_included": { + "type": "boolean" + }, + "whatsapp": { + "type": "string" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type", + "quantity", + "unit_price_zar", + "total_price_zar", + "currency", + "vat_included" + ], + "type": "object" + }, + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "contact_required": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "note": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success" + ], + "type": "object" +}
- Changed
create_cart5 fields changed- removed
Input schema / properties / customer / descriptionRemoved value: -"Optional customer details" - added
Input schema / properties / customer / propertiesAdded value: +{ + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "email": { + "description": "Real customer email, checked before checkout creation", + "type": "string" + }, + "name": { + "description": "Real customer name, checked before checkout creation", + "type": "string" + }, + "phone": { + "description": "South African phone number, checked before checkout creation", + "type": "string" + } +} - changed
Input schema / properties / items / descriptionPrevious value: -"Optional initial items (configured blinds)"New value: +"Optional configured items; all submitted prices are ignored" - added
Input schema / properties / items / itemsAdded value: +{ + "properties": { + "colour": { + "description": "Exact available colour; validate with configure_product before adding", + "minLength": 1, + "type": "string" + }, + "finish": { + "description": "Optional pricing finish for aluminium Venetians", + "type": "string" + }, + "height_mm": { + "description": "Actual ordered drop in millimetres", + "exclusiveMinimum": 0, + "type": "number" + }, + "mount_type": { + "description": "Use inside for recess fit or outside for face fix", + "minLength": 1, + "type": "string" + }, + "product_id": { + "description": "product_id returned by search_catalog or lookup_catalog", + "type": "string" + }, + "product_name": { + "description": "Optional; server resolves the catalogue name", + "type": "string" + }, + "quantity": { + "description": "Number of blinds; defaults to 1", + "type": "number" + }, + "total_price_zar": { + "description": "Optional, ignored: server recalculates all totals", + "type": "number" + }, + "unit_price_zar": { + "description": "Optional, ignored: server recalculates all prices", + "type": "number" + }, + "width_mm": { + "description": "Actual ordered width in millimetres", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" + ], + "type": "object" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cart_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "type": "string" + }, + "item_count": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar" + ], + "type": "object" + }, + "type": "array" + }, + "total_zar": { + "type": "number" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "cart_id", + "items", + "item_count", + "total_zar", + "currency", + "customer", + "created_at", + "updated_at", + "expires_at" + ], + "type": "object" +}
- Changed
create_checkout8 fields changed- added
Input schema / anyOfAdded value: +[ + { + "required": [ + "cart_id" + ] + }, + { + "properties": { + "customer": { + "required": [ + "name", + "email", + "phone" + ] + } + }, + "required": [ + "items", + "customer" + ] + } +] - added
Input schema / properties / customer / properties / email / descriptionAdded value: +"Real customer email, checked before checkout creation" - added
Input schema / properties / customer / properties / name / descriptionAdded value: +"Real customer name, checked before checkout creation" - added
Input schema / properties / customer / properties / phone / descriptionAdded value: +"South African phone number, checked before checkout creation" - removed
Input schema / properties / customer / requiredRemoved value: -[ - "name", - "email", - "phone" -] - added
Input schema / properties / items / itemsAdded value: +{ + "properties": { + "colour": { + "description": "Exact available colour; validate with configure_product before adding", + "minLength": 1, + "type": "string" + }, + "finish": { + "description": "Optional pricing finish for aluminium Venetians", + "type": "string" + }, + "height_mm": { + "description": "Actual ordered drop in millimetres", + "exclusiveMinimum": 0, + "type": "number" + }, + "mount_type": { + "description": "Use inside for recess fit or outside for face fix", + "minLength": 1, + "type": "string" + }, + "product_id": { + "description": "product_id returned by search_catalog or lookup_catalog", + "type": "string" + }, + "product_name": { + "description": "Optional; server resolves the catalogue name", + "type": "string" + }, + "quantity": { + "description": "Number of blinds; defaults to 1", + "type": "number" + }, + "total_price_zar": { + "description": "Optional, ignored: server recalculates all totals", + "type": "number" + }, + "unit_price_zar": { + "description": "Optional, ignored: server recalculates all prices", + "type": "number" + }, + "width_mm": { + "description": "Actual ordered width in millimetres", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" + ], + "type": "object" +} - added
Input schema / properties / items / minItemsAdded value: +1 - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "total_zar", + "currency" + ], + "type": "object" +}
- Changed
create_order4 fields changed- changed
Input schema / properties / items / items / requiredPrevious value: -[ - "product_id", - "width_mm", - "height_mm", - "colour", - "mount_type", - "unit_price_zar", - "total_price_zar" -]New value: +[ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" +] - added
Input schema / properties / items / minItemsAdded value: +1 - added
Input schema / properties / payment_methodAdded value: +{ + "default": "yoco", + "description": "Yoco card or Ozow instant EFT", + "enum": [ + "yoco", + "ozow" + ], + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "contact": { + "additionalProperties": true, + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "email": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "item_count": { + "type": "number" + }, + "message": { + "type": "string" + }, + "order_id": { + "type": "string" + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "success": { + "type": "boolean" + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "success", + "order_id", + "total_zar", + "currency", + "item_count", + "payment_url", + "message", + "contact" + ], + "type": "object" +}
- Changed
get_ar_visualizer_url1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ar_measurement_note": { + "type": "string" + }, + "ar_measurement_url": { + "type": "string" + }, + "note": { + "type": "string" + }, + "product_visualizer_note": { + "type": "string" + }, + "product_visualizer_url": { + "type": "string" + } + }, + "required": [ + "note" + ], + "type": "object" +}
- Changed
get_cart1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cart_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "type": "string" + }, + "item_count": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar" + ], + "type": "object" + }, + "type": "array" + }, + "total_zar": { + "type": "number" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "cart_id", + "items", + "item_count", + "total_zar", + "currency", + "customer", + "created_at", + "updated_at", + "expires_at" + ], + "type": "object" +}
- Changed
get_checkout1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "total_zar", + "currency" + ], + "type": "object" +}
- Changed
get_delivery_estimate1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "delivery_after_dispatch": { + "type": "string" + }, + "estimated_dispatch_date": { + "type": "string" + }, + "expedited_available": { + "type": "boolean" + }, + "important": { + "type": "string" + }, + "order_date": { + "type": "string" + }, + "production_working_days": { + "type": "number" + }, + "summary": { + "type": "string" + } + }, + "required": [ + "order_date", + "production_working_days", + "estimated_dispatch_date", + "delivery_after_dispatch", + "expedited_available", + "summary", + "important" + ], + "type": "object" +}
- Changed
get_order1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "order_id": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "order_id" + ], + "type": "object" +}
- Changed
get_payment_methods1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "default_currency": { + "const": "ZAR", + "type": "string" + }, + "handlers": { + "items": { + "additionalProperties": true, + "properties": { + "display_name": { + "type": "string" + }, + "id": { + "type": "string" + }, + "methods": { + "items": { + "type": "string" + }, + "type": "array" + }, + "redirect": { + "type": "boolean" + }, + "supports_3ds": { + "type": "boolean" + }, + "supports_banks": { + "items": { + "type": "string" + }, + "type": "array" + }, + "webhook_verified": { + "type": "boolean" + } + }, + "required": [ + "id", + "display_name", + "methods", + "redirect", + "webhook_verified" + ], + "type": "object" + }, + "type": "array" + }, + "note": { + "type": "string" + } + }, + "required": [ + "default_currency", + "handlers", + "note" + ], + "type": "object" +}
- Changed
get_price3 fields changed- added
Input schema / properties / colourAdded value: +{ + "description": "Optional bamboo colour for colour-specific tier pricing", + "type": "string" +} - changed
Input schema / properties / product_id / descriptionPrevious value: -"Product ID from search_products (e.g. roller-blockout, venetian-25mm-aluminium)"New value: +"product_id from search_catalog or lookup_catalog (e.g. roller-blockout)" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "oneOf": [ + { + "properties": { + "success": { + "const": true + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar", + "currency", + "vat_included" + ] + }, + { + "properties": { + "success": { + "const": false + } + }, + "required": [ + "message" + ] + } + ], + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "contact_required": { + "type": "boolean" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "effective_height_mm": { + "type": "number" + }, + "effective_width_mm": { + "type": "number" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "lead_time": { + "type": "string" + }, + "measurement_review_required": { + "type": "boolean" + }, + "message": { + "type": "string" + }, + "note": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "success": { + "type": "boolean" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "vat_included": { + "type": "boolean" + }, + "whatsapp": { + "type": "string" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "success" + ], + "type": "object" +}
- Changed
get_product1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "product": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour_count_in_stock": { + "type": "number" + }, + "colours": { + "items": { + "additionalProperties": true, + "properties": { + "expected_restock": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "hex": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "in_stock": { + "type": "boolean" + }, + "material": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "name": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + "description": { + "type": "string" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "installation_type": { + "type": "string" + }, + "materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "max_height_mm": { + "type": "number" + }, + "max_width_mm": { + "type": "number" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_url": { + "type": "string" + }, + "schema_url": { + "type": "string" + }, + "size_limits": { + "additionalProperties": true, + "properties": { + "availability_rule": { + "type": "string" + }, + "combination_dependent": { + "type": "boolean" + }, + "max_height_mm": { + "type": "number" + }, + "max_width_mm": { + "type": "number" + }, + "measurement_note": { + "type": "string" + }, + "minimum_charge_height_mm": { + "type": "number" + }, + "minimum_charge_width_mm": { + "type": "number" + }, + "product_id": { + "type": "string" + }, + "unit": { + "const": "mm", + "type": "string" + }, + "validation_note": { + "type": "string" + }, + "width_drop_frontier": { + "items": { + "additionalProperties": true, + "properties": { + "max_drop_mm": { + "type": "number" + }, + "width_band_max_mm": { + "type": "number" + } + }, + "required": [ + "width_band_max_mm", + "max_drop_mm" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "product_id", + "unit", + "max_width_mm", + "max_height_mm", + "minimum_charge_width_mm", + "minimum_charge_height_mm", + "combination_dependent", + "availability_rule", + "width_drop_frontier", + "measurement_note", + "validation_note" + ], + "type": "object" + }, + "suitable_for": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "product_id", + "name", + "category", + "colours", + "product_url" + ], + "type": "object" + } + }, + "required": [ + "product" + ], + "type": "object" +}
- Changed
get_product_recommendation1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "handoff": { + "additionalProperties": true, + "properties": { + "product_family": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "url", + "product_family", + "reason" + ], + "type": "object" + }, + "notes": { + "type": "string" + }, + "recommendations": { + "items": { + "additionalProperties": true, + "properties": { + "currency": { + "const": "ZAR", + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "reason": { + "type": "string" + }, + "shop_url": { + "type": "string" + }, + "starting_price_zar_for_1m_x_1m": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ] + } + }, + "required": [ + "product_id", + "product_name", + "reason", + "starting_price_zar_for_1m_x_1m", + "currency", + "shop_url" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "recommendations" + ], + "type": "object" +}
- Changed
get_whatsapp_handoff1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "reason": { + "type": "string" + }, + "recipient": { + "type": "string" + }, + "recipient_phone": { + "type": "string" + }, + "whatsapp_url": { + "type": "string" + } + }, + "required": [ + "whatsapp_url", + "recipient", + "recipient_phone", + "reason" + ], + "type": "object" +}
- Changed
lookup_catalog1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "results": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_url": { + "type": "string" + } + }, + "required": [ + "product_id", + "name", + "category", + "product_url" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "results", + "total" + ], + "type": "object" +}
- Changed
request_price_match1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "claim_summary": { + "additionalProperties": true, + "properties": { + "competitor": { + "type": "string" + }, + "competitor_price_zar": { + "type": "string" + }, + "dimensions": { + "type": "string" + }, + "product_id": { + "type": "string" + } + }, + "required": [ + "product_id", + "dimensions", + "competitor", + "competitor_price_zar" + ], + "type": "object" + }, + "exclusions": { + "items": { + "type": "string" + }, + "type": "array" + }, + "message": { + "type": "string" + }, + "note": { + "type": "string" + }, + "success": { + "type": "boolean" + }, + "whatsapp_url": { + "type": "string" + } + }, + "required": [ + "success", + "claim_summary", + "whatsapp_url", + "message", + "exclusions", + "note" + ], + "type": "object" +}
- Changed
request_swatch2 fields changed- changed
Input schema / properties / swatch_codes / descriptionPrevious value: -"Optional specific colour codes (max 5)"New value: +"Optional specific colour codes; no count limit enforced by this handler" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "estimated_delivery_days": { + "additionalProperties": true, + "properties": { + "max": { + "type": "number" + }, + "min": { + "type": "number" + } + }, + "required": [ + "min", + "max" + ], + "type": "object" + }, + "message": { + "type": "string" + }, + "request_id": { + "type": "number" + }, + "status": { + "type": "string" + }, + "swatch_count": { + "type": "number" + } + }, + "required": [ + "request_id", + "status", + "estimated_delivery_days", + "swatch_count", + "message" + ], + "type": "object" +}
- Changed
search_catalog1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "currency": { + "const": "ZAR", + "type": "string" + }, + "results": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour_count_in_stock": { + "type": "number" + }, + "description": { + "type": "string" + }, + "name": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_url": { + "type": "string" + } + }, + "required": [ + "product_id", + "name", + "category", + "description", + "product_url", + "colour_count_in_stock" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "results", + "total", + "currency" + ], + "type": "object" +}
- Changed
search_products1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "note": { + "type": "string" + }, + "products": { + "items": { + "additionalProperties": true, + "properties": { + "category": { + "type": "string" + }, + "colour_count": { + "type": "number" + }, + "description": { + "type": "string" + }, + "features": { + "items": { + "type": "string" + }, + "type": "array" + }, + "id": { + "type": "string" + }, + "installation_type": { + "type": "string" + }, + "materials": { + "items": { + "type": "string" + }, + "type": "array" + }, + "name": { + "type": "string" + }, + "product_url": { + "type": "string" + }, + "suitable_for": { + "items": { + "type": "string" + }, + "type": "array" + } + }, + "required": [ + "id", + "name", + "category", + "product_url" + ], + "type": "object" + }, + "type": "array" + }, + "total": { + "type": "number" + } + }, + "required": [ + "products", + "total" + ], + "type": "object" +}
- Changed
submit_enquiry4 fields changed- changed
Input schema / properties / message / descriptionPrevious value: -"Additional message or questions from the customer"New value: +"Required enquiry message; at least 10 characters after trimming" - added
Input schema / properties / message / minLengthAdded value: +10 - changed
Input schema / requiredPrevious value: -[ - "product_config", - "customer_name", - "customer_email", - "customer_phone" -]New value: +[ + "product_config", + "customer_name", + "customer_email", + "customer_phone", + "message" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "contact": { + "additionalProperties": true, + "properties": { + "contact_name": { + "type": "string" + }, + "contact_phone": { + "type": "string" + }, + "email": { + "type": "string" + }, + "note": { + "type": "string" + }, + "whatsapp": { + "type": "string" + } + }, + "required": [], + "type": "object" + }, + "enquiry_id": { + "type": "string" + }, + "message": { + "type": "string" + }, + "success": { + "type": "boolean" + } + }, + "required": [ + "success", + "enquiry_id", + "message", + "contact" + ], + "type": "object" +}
- Changed
update_cart4 fields changed- added
Input schema / properties / customer / propertiesAdded value: +{ + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "email": { + "description": "Real customer email, checked before checkout creation", + "type": "string" + }, + "name": { + "description": "Real customer name, checked before checkout creation", + "type": "string" + }, + "phone": { + "description": "South African phone number, checked before checkout creation", + "type": "string" + } +} - added
Input schema / properties / items / itemsAdded value: +{ + "properties": { + "colour": { + "description": "Exact available colour; validate with configure_product before adding", + "minLength": 1, + "type": "string" + }, + "finish": { + "description": "Optional pricing finish for aluminium Venetians", + "type": "string" + }, + "height_mm": { + "description": "Actual ordered drop in millimetres", + "exclusiveMinimum": 0, + "type": "number" + }, + "mount_type": { + "description": "Use inside for recess fit or outside for face fix", + "minLength": 1, + "type": "string" + }, + "product_id": { + "description": "product_id returned by search_catalog or lookup_catalog", + "type": "string" + }, + "product_name": { + "description": "Optional; server resolves the catalogue name", + "type": "string" + }, + "quantity": { + "description": "Number of blinds; defaults to 1", + "type": "number" + }, + "total_price_zar": { + "description": "Optional, ignored: server recalculates all totals", + "type": "number" + }, + "unit_price_zar": { + "description": "Optional, ignored: server recalculates all prices", + "type": "number" + }, + "width_mm": { + "description": "Actual ordered width in millimetres", + "exclusiveMinimum": 0, + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "colour", + "mount_type" + ], + "type": "object" +} - added
Input schema / properties / op / defaultAdded value: +"set" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "cart_id": { + "type": "string" + }, + "created_at": { + "type": "string" + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "anyOf": [ + { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + { + "type": "null" + } + ] + }, + "expires_at": { + "type": "string" + }, + "item_count": { + "type": "number" + }, + "items": { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height_mm": { + "type": "number" + }, + "mount_type": { + "type": "string" + }, + "product_id": { + "type": "string" + }, + "product_name": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total_price_zar": { + "type": "number" + }, + "unit_price_zar": { + "type": "number" + }, + "width_mm": { + "type": "number" + } + }, + "required": [ + "product_id", + "width_mm", + "height_mm", + "quantity", + "unit_price_zar", + "total_price_zar" + ], + "type": "object" + }, + "type": "array" + }, + "total_zar": { + "type": "number" + }, + "updated_at": { + "type": "string" + } + }, + "required": [ + "cart_id", + "items", + "item_count", + "total_zar", + "currency", + "customer", + "created_at", + "updated_at", + "expires_at" + ], + "type": "object" +}
- Changed
update_checkout2 fields changed- added
Input schema / properties / customer / propertiesAdded value: +{ + "address": { + "type": "string" + }, + "city": { + "type": "string" + }, + "email": { + "description": "Real customer email, checked before checkout creation", + "type": "string" + }, + "name": { + "description": "Real customer name, checked before checkout creation", + "type": "string" + }, + "phone": { + "description": "South African phone number, checked before checkout creation", + "type": "string" + } +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "additionalProperties": true, + "properties": { + "ap2": { + "additionalProperties": true, + "properties": { + "merchant_authorization": { + "type": "string" + } + }, + "required": [ + "merchant_authorization" + ], + "type": "object" + }, + "checkout_id": { + "type": "string" + }, + "created_at": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "currency": { + "const": "ZAR", + "type": "string" + }, + "customer": { + "additionalProperties": true, + "properties": { + "address": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "city": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "email": { + "type": "string" + }, + "name": { + "type": "string" + }, + "phone": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + } + }, + "required": [], + "type": "object" + }, + "item_count": { + "type": "number" + }, + "items": { + "anyOf": [ + { + "items": { + "additionalProperties": true, + "properties": { + "colour": { + "type": "string" + }, + "finish": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "height": { + "type": "number" + }, + "mountType": { + "type": "string" + }, + "price": { + "type": "number" + }, + "productId": { + "type": "string" + }, + "productName": { + "type": "string" + }, + "quantity": { + "type": "number" + }, + "total": { + "type": "number" + }, + "width": { + "type": "number" + } + }, + "required": [], + "type": "object" + }, + "type": "array" + }, + { + "type": "null" + } + ] + }, + "message": { + "type": "string" + }, + "next_step": { + "type": "string" + }, + "payment_method": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "payment_url": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "provider_reference": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "total_zar": { + "type": "number" + } + }, + "required": [ + "checkout_id", + "status", + "total_zar", + "currency" + ], + "type": "object" +}
26 tool updates
- First observed
cancel_cart - First observed
cancel_checkout - First observed
check_colour_stock - First observed
complete_checkout - First observed
configure_product - First observed
create_cart - First observed
create_checkout - First observed
create_order - First observed
get_ar_visualizer_url - First observed
get_cart - First observed
get_checkout - First observed
get_delivery_estimate - First observed
get_order - First observed
get_payment_methods - First observed
get_price - First observed
get_product - First observed
get_product_recommendation - First observed
get_whatsapp_handoff - First observed
lookup_catalog - First observed
request_price_match - First observed
request_swatch - First observed
search_catalog - First observed
search_products - First observed
submit_enquiry - First observed
update_cart - First observed
update_checkout
Related MCP Connectors
Design homes with your AI: floor plans, furniture, joinery, lighting and photos, live.
AI-native product and pricing configuration (CPQ) for manufacturers, every rule checked.
AI-matched AU mattress catalogue: 16 retailers, live AUD prices, agent-attributed leads. No auth.
AI-agent product catalog: search, lookup & purchase routing over verified merchant data.
Related MCP Servers
- AlicenseAqualityDmaintenanceKlarna-style product discovery for AI shopping agents. Makes product catalogs machine-readable so AI agents can search, compare, and purchase products programmatically.633 PyPIMIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to search enterprise Auto-ID products and exact SKUs, read live stock and current pricing, and explore variants, accessories, consumables and support relationships through a public read-only endpoint. It also surfaces manuals, firmware, drivers and other verified technical resources from the vendor's support center.-
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to browse product catalogs, search products with filters, and initiate checkouts, generating order summaries and checkout URLs.-
- AlicenseBqualityBmaintenanceAI assistant tools for building high-converting immersive commerce showrooms from an existing e-commerce catalog. Built on Mantis XR's production immersive-commerce platform, used by Fortune 500 brands including New Balance, with deployments spanning the Paris 2024 Olympics, MLB (Chicago Cubs), NHL (St. Louis Blues), and the Premier League (Burnley FC and other clubs).1434 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.