Skip to main content
Glama

Server Details

Search local store inventory by US ZIP, verify same-day delivery, and check out on JENNi.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
ChatGPT
–
Claude
–

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation3/5

The product/order read tools (search_catalog, get_product, get_buying_options, get_order_status) are clearly distinct, and the checkout lifecycle is described in detail. However, create_checkout and start_checkout are hard to tell apart at a glance — both 'start' an order, but one runs in-chat and creates a pending order while the other is a read-only hosted checkout_url that creates nothing. update_checkout vs complete_checkout are better separated, but the four checkout-related tools still invite misselection without close reading.

Naming Consistency5/5

Every tool follows a clean verb_noun snake_case pattern: search_catalog, get_product, get_buying_options, get_order_status, create_checkout, start_checkout, update_checkout, complete_checkout. No camelCase mixing or stray verbs. The only weakness is semantic (create vs start), not stylistic, and it belongs under disambiguation rather than naming.

Tool Count5/5

Eight tools is well-scoped for a shop-local ordering flow: two discovery tools, one pricing tool, three checkout-stage tools, a completion tool and an order-status reader. Each earns its place and no tool looks redundant enough to cut outright.

Completeness4/5

The purchase lifecycle is well covered: search → product detail → buying options → create/hosted checkout → update → complete → order status. Gaps are on the post-purchase side: no cancel-order, refund/return, or order history/list-orders tool, which agents will hit when a shopper changes their mind. These are workaroundable for the core buy flow but leave dead ends.

Available Tools

8 tools
complete_checkoutPlace the orderA
DestructiveIdempotent
Inspect

Place the order. Only after the shopper has approved the total from update_checkout. With the shopper's Stripe shared payment token (spt_...), issued for at least the order total, JENNi charges it and places the order now. Never send card numbers. Delivered by JENNi. payment_token is optional. Without an spt_, call with only checkout_id: the result carries continue_url, the shopper's pay link, and the order is placed when they pay there. With a Link Agent Wallet, make a spend request (credential_type shared_payment_token, the network_id and amount_cents from this checkout's payment block) and pass the spt_ here.

NameRequiredDescriptionDefault
checkout_idYes
payment_tokenNoOptional. Stripe shared payment token, starting spt_. Leave it out to get the shopper's pay link (continue_url).
idempotency_keyNoOptional. Reuse the same value to retry safely; the retry returns the first result instead of acting twice.

Output Schema

NameRequiredDescription
statusYesincomplete, ready_for_complete, requires_escalation, completed or canceled.
totalsYes
currencyNo
messagesYes
order_idNo
next_stepYes
expires_atNo
line_itemsNo
checkout_idYes
reason_codeNo
continue_urlNoPresent when the shopper should finish on JENNi instead.
fulfilled_byYes
fulfillment_optionsYes
selected_fulfillment_modeNo

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=true, but the description adds what actually happens beyond the flag: JENNi charges the spt_ and places the order now, the spt_ must be issued for at least the order total, and without it the order only finalizes when the shopper pays at continue_url. That is meaningful consequence and precondition context a bare destructive flag cannot convey, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The critical information is front-loaded in the first two sentences, with the fallback and wallet flows trailing. It is dense but nearly every sentence earns its place; the Link Agent Wallet clause is detailed enough to slightly slow scanning, but it is operationally necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, payment-charging tool, the description covers prerequisites, both execution paths, security constraints, and even the continue_url return field, while the output schema handles the rest. Nothing an agent needs in order to call it correctly or safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, and the description goes well beyond it: it explains why payment_token is optional, the exact consequence of omitting it (continue_url fallback), and the spt_ issuance requirement plus the network_id/amount_cents source for the wallet spend request. Only idempotency_key is left to the schema, which already documents it well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The very first sentence states a specific verb and resource ('Place the order'), and the sequencing clause ('Only after the shopper has approved the total from update_checkout') positions it against the sibling update_checkout. An agent immediately understands this is the terminal step of the checkout flow that finalizes and charges.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use (after shopper approval of the total), when-not/constraint ('Never send card numbers'), and two concrete alternatives with their conditions: call with only checkout_id to get a continue_url pay link, or, with a Link Agent Wallet, make a spend request and pass the spt_. This is the full when/when-not/alternatives pattern.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_checkoutStart an orderA
Idempotent
Inspect

Start an order JENNi will deliver, without leaving the chat. Give the exact product_id, the delivery address and the shopper's contact details. Returns the delivery options and the order total. Nothing is charged until complete_checkout. Delivered by JENNi.

NameRequiredDescriptionDefault
buyerYes
quantityNoHow many (default 1).
product_idYes
idempotency_keyNoOptional. Reuse the same value to retry safely; the retry returns the first result instead of acting twice.
delivery_addressYes

Output Schema

NameRequiredDescription
statusYesincomplete, ready_for_complete, requires_escalation, completed or canceled.
totalsYes
currencyNo
messagesYes
order_idNo
next_stepYes
expires_atNo
line_itemsNo
checkout_idYes
reason_codeNo
continue_urlNoPresent when the shopper should finish on JENNi instead.
fulfilled_byYes
fulfillment_optionsYes
selected_fulfillment_modeNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is not read-only, is idempotent, and is not destructive. The description adds useful behavioral context: no charge occurs until complete_checkout, and the result includes delivery options and order total. It does not discuss authorization, rate limits, or retry behavior beyond the annotation and schema hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and front-loads the purpose, then adds return and billing context. The final sentence, 'Delivered by JENNi,' repeats the opening phrase and could be removed, but overall it remains efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and annotations already covering return shape and safety/idempotency traits, the description is largely complete for initiation. It explains the next step and the billing timing. The main remaining gap is that it does not disambiguate this tool from start_checkout.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 40%, so the description needs to compensate. It identifies the three required top-level inputs (product_id, delivery_address, buyer/contact details), while quantity and idempotency_key are documented in the schema itself. Nested field details are left to the schema, but the description meaningfully frames the required parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb and resource: start/create an order/checkout. It does not distinguish this from the sibling start_checkout, so an agent cannot tell from the description alone which of those two initiation tools to use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It implies the workflow by saying nothing is charged until complete_checkout, which suggests this tool precedes that one. However, it gives no explicit when-to-use or when-not-to-use guidance, and it does not address the very similar start_checkout sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_buying_optionsCheck price and deliveryA
Read-onlyIdempotent
Inspect

Price, delivery promise and total before tax for one product_id, ZIP, quantity and mode (local_delivery). Call it when the shopper picks a product, before quoting a total.

NameRequiredDescriptionDefault
zipYes
quantityYes
product_idYes
fulfillment_modeYes

Output Schema

NameRequiredDescription
noteNo
titleNo
pricingNounit_price x quantity + fee = total_before_tax. Sales tax is added at checkout.
availableYesTrue when this mode can be ordered for this product, ZIP and quantity.
product_idYes
unit_priceNo
reason_codeNoWhy this mode cannot be bought here now.
delivery_promiseNoLocal delivery: "Get it today" or "We'll deliver by <Month D>".
fulfillment_modeYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=true, idempotent=true, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful behavioral detail that the schema cannot express: the total is pre-tax, the result is per single product, and the mode is effectively fixed to local_delivery. It says nothing about freshness/real-time pricing or failure behavior, so it adds moderate rather than rich context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the returned values and followed by the call condition — no filler. The opening is a noun-phrase fragment rather than a verb phrase, which is slightly less scannable, and the parenthetical '(local_delivery)' is redundant with the schema enum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape detail is unnecessary, and all four required parameters are at least acknowledged. For a read-only pricing call this is close to complete; missing only guidance on pricing freshness and what to do when no delivery option is available for the ZIP.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden — and it does name all four parameters (product_id, ZIP, quantity, mode) and clarify the unit of the call is one product. However it omits format constraints the schema encodes (5-digit ZIP pattern, quantity 1–10,000 bounds) and doesn't explain the enum's practical meaning beyond echoing local_delivery.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete return set (price, delivery promise, total before tax) scoped to a single product_id/ZIP/quantity/mode, which is specific enough for an agent to know what it gets back. It doesn't explicitly differentiate itself from get_product or search_catalog, but the pricing/quoting focus is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call it when the shopper picks a product, before quoting a total" gives a clear trigger condition and a sequencing constraint relative to quoting. It stops short of naming alternatives (e.g. get_product for catalog data) or stating when not to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_statusCheck an orderA
Read-onlyIdempotent
Inspect

Read where a JENNi order stands: status, delivery ETA when known, courier tracking and whether the card was charged. Requires the private order_token from the shopper’s JENNi order page (starts jos1_). Read-only; it shows no personal details.

NameRequiredDescriptionDefault
order_tokenYesThe order token from the shopper's JENNi order page, starting jos1_.

Output Schema

NameRequiredDescription
etaYesDelivery estimate when JENNi has one; null means not known yet.
itemsYes
statusYes
paymentYes
trackingYes
next_stepYes
updated_atNo
order_stateYes
refund_stateYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description adds genuinely new context: the token is private and comes from the shopper's page, the ETA is returned only 'when known' (i.e. may be absent), and no personal details are exposed — useful for deciding whether the output is safe to surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The capability statement comes first, the required input and privacy caveat second, which is the right order for an agent scanning definitions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 spelled out, and annotations cover the safety profile; the description supplies the remaining pieces an agent needs — what the call reads, what credential it requires, and that no PII is exposed. Nothing material is missing for a one-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is fully documented in the schema, including the jos1_ prefix, so the description is not required to carry this. It restates the token's origin and adds the 'private' qualifier (a mild hint about handling), but adds no format or validation detail beyond the schema — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Read where a JENNi order stands') and then enumerates exactly what is returned: status, delivery ETA, courier tracking, and charge state. The read-only, per-order framing makes it unmistakable against the checkout-creation siblings (create_checkout, complete_checkout, start_checkout), which all mutate a cart rather than inspect an existing order.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the precondition for calling it — the private order_token from the shopper's JENNi order page — which is the main practical gate on usage. It does not explicitly say when not to use it or name an alternative, but no sibling offers order-status lookup, so the risk of misrouting is low.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_productProduct detailsB
Read-onlyIdempotent
Inspect

Details for one product_id: description, images, sizes and colours, and its price and delivery at the ZIP.

NameRequiredDescriptionDefault
zipNo5-digit US ZIP code, for local prices and delivery options.
marketNoMarket key, e.g. san-antonio-tx. Used when no zip is given.
product_idYes

Output Schema

NameRequiredDescription
productYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed-world scope, so the safety profile is covered. The description usefully adds that price and delivery are resolved locally at the ZIP, which is real behavioral context beyond the annotations. It stops short of stating the fallback when no ZIP is supplied or what happens for an invalid/unknown product_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tightly packed sentence with the resource and its identifier front-loaded, and no filler. The telegraphic phrasing ('at the ZIP') is slightly compressed at the cost of a little readability, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not required, and the annotations carry the safety semantics. What is missing is guidance on the two optional locator parameters and on failure modes for a bad product_id or ZIP, which matters for a three-parameter lookup tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: zip and market are documented in the schema, while product_id has no description there. The description compensates partially by framing product_id as selecting exactly one product and by tying zip to localized price and delivery, but it never mentions the market parameter or the zip-versus-market precedence.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-and-resource: details for one product_id, and enumerates the returned content (description, images, sizes, colours, price, delivery). This implicitly separates it from search_catalog, which returns many products, but the distinction is never made explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent must infer this is the lookup to call once it already holds a product_id. There is no explicit when-to-use versus search_catalog or get_buying_options, and no note about what to do when the id is unknown or the zip is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_catalogSearch productsA
Read-onlyIdempotent
Inspect

Search in-stock products JENNi can deliver to a 5-digit US ZIP: local delivery. Every product returned can be ordered; price is per unit, before the delivery fee. A product with variants and no price is a size or colour family: buy one of its variants. Sized goods are often listed one size per product: put the size in the query and match it against size or title. Put a price limit in max_price, not the query; keep the query to brand, product type and size. If it returns product_not_found, search once more with fewer words before telling the shopper nothing matched. Pass fulfillment_mode to search one mode. More results: call again with page+1 while page < paging.total_pages.

NameRequiredDescriptionDefault
zipNo5-digit US ZIP code the shopper is in, e.g. 78205.
pageNo1-based results page; call again with page+1 while page < paging.total_pages.
limitNoProducts to return (default 10).
queryYesWhat the shopper wants, e.g. "running shoes".
marketNoMarket key, e.g. san-antonio-tx. Used when no zip is given.
max_priceNoHighest price the shopper will pay, in US dollars, e.g. 120. Put a price limit here, not in the query.
fulfillment_modeNoSearch one mode only. Lists local delivery offers.

Output Schema

NameRequiredDescription
noteNoWhat could not be checked (for example local delivery): that availability is unknown, not unavailable.
pagingNo
productsYes
reason_codeNoPresent only when products is empty.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and a closed-world scope, so the safety profile is covered; the description goes well beyond it by disclosing pricing semantics (per unit, before delivery fee), the orderability guarantee, the variant/family rule ('a product with variants and no price is a size or colour family'), and the sized-goods listing quirk. The error-recovery rule for product_not_found is exactly the kind of behavior an agent cannot infer from structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The scope constraint is front-loaded, then rules follow in priority order (pricing, variants, sizing, error retry, pagination). Every sentence states a distinct operational rule with no restated boilerplate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 not be explained, and the description still references paging.total_pages for the loop. The only minor gap is that the zip-versus-market precedence is left to the schema rather than stated in prose, though nothing essential for a correct call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 earns an increment by adding routing meaning the schema does not carry, notably the max_price-versus-query split and the instruction to match size tokens against size or title. It adds little on zip, market or limit beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening names a specific verb and resource ('Search in-stock products JENNi can deliver to a 5-digit US ZIP'), constrains the result set to orderable products, and implicitly separates it from get_product and get_buying_options by emphasizing catalog search. An agent knows exactly what this returns 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit rules cover when to use each parameter and what not to do: 'Put a price limit in max_price, not the query', 'keep the query to brand, product type and size', 'Pass fulfillment_mode to search one mode', and a defined retry ladder ('If it returns product_not_found, search once more with fewer words'). Pagination guidance is likewise conditional and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_checkoutStart checkoutA
Read-onlyIdempotent
Inspect

Returns a hosted checkout_url for an exact product and selected fulfillment mode using the delivery ZIP or address. For several products, pass items instead of product_id: one checkout_url puts them all in one basket. JENNi selects the source internally. The buyer reviews delivery, tax and the total, enters payment details, and places the order on the hosted page. This read-only tool creates no order, reservation or charge. The final checkout page verifies current price and availability.

NameRequiredDescriptionDefault
zipNo5-digit US delivery ZIP code, when no delivery_address is given.
itemsNoSeveral products in one link, instead of product_id. Same fulfillment_mode and ZIP for all.
quantityNoHow many of product_id (default 1).
product_idNoThe exact item: a variant's product_id when it has variants.
delivery_addressNoDelivery destination. Address details are not placed in the checkout URL.
fulfillment_modeYesSelected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by).

Output Schema

NameRequiredDescription
itemNo
itemsNo
pricingNounit_price x quantity + fee = total_before_tax. Sales tax is added at checkout.
quantityNo
next_stepYes
product_idNo
unit_priceNo
reason_codeNoMachine-readable reason, alongside the prose note.
checkout_urlYes
delivery_promiseNoLocal delivery: "Get it today" or "We'll deliver by <Month D>".
fulfillment_modeNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description reinforces this with the high-value clarification that no order, reservation or charge is created. It also discloses that the hosted page re-verifies price and availability at purchase time, which is genuine behavioral context not present in the annotations. It stops short of auth requirements, rate limits, or expiry of the generated link.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the return value and the multi-item rule, which are the two things an agent most needs. The last two sentences describing the buyer's review-and-pay flow are somewhat expansive relative to the tool's single job, costing a little tightness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full schema coverage, the description does not need to explain return shape, and it covers the important safety story (no order/charge) plus linkage to `get_buying_options` via delivery_promise. The one material gap is sibling differentiation against `create_checkout`/`complete_checkout`, which matters given how close those names are.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 meaning the schema does not: the ZIP-or-address alternative for delivery location, and that passing `items` instead of `product_id` yields one basket in a single `checkout_url`. Those are semantic clarifications about mutual exclusivity and outcome, not restatements of field docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a concrete verb and output ('Returns a hosted checkout_url') scoped to a product and fulfillment mode, and it explains the multi-item variant via `items`. It never distinguishes itself from the sibling `create_checkout`, `update_checkout` or `complete_checkout`, so an agent cannot tell from the text alone which of these similarly named tools to pick.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'For several products, pass items instead of product_id' gives real selection guidance between two parameter paths. However, there is no guidance on when to use this versus `create_checkout` or `complete_checkout`, nor any stated prerequisites (e.g. must a buying-options read happen first). Usage is implied by the buyer-flow narrative rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_checkoutUpdate an orderA
Idempotent
Inspect

Choose local_delivery, or change the quantity, address or contact details of an order started with create_checkout. Call with only checkout_id to re-read it. Returns the order total once a delivery option is chosen.

NameRequiredDescriptionDefault
buyerNo
quantityNo
checkout_idYes
idempotency_keyNoOptional. Reuse the same value to retry safely; the retry returns the first result instead of acting twice.
delivery_addressNo
fulfillment_modeNo

Output Schema

NameRequiredDescription
statusYesincomplete, ready_for_complete, requires_escalation, completed or canceled.
totalsYes
currencyNo
messagesYes
order_idNo
next_stepYes
expires_atNo
line_itemsNo
checkout_idYes
reason_codeNo
continue_urlNoPresent when the shopper should finish on JENNi instead.
fulfilled_byYes
fulfillment_optionsYes
selected_fulfillment_modeNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, idempotent=true, destructive=false, openWorld=false, so the safety profile is covered. The description adds genuinely non-obvious behavior beyond them: the same endpoint doubles as a read when passed only checkout_id, and the returned total depends on a delivery option having been selected. It does not mention preconditions such as order state or that the address is US-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the primary action and with the cheap re-read path stated early. The opening clause 'Choose local_delivery' is slightly jarring out of context since it omits the parameter name, and 'change ... contact details' is looser than the schema's buyer object.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Return values need not be explained because an output schema exists, yet the description still usefully notes the total. For a 6-parameter tool with nested objects and only one required field, the main remaining gap is the absence of any prerequisite or state guidance (e.g. what an order must contain before a delivery option can be chosen).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17%, so the description must carry meaning, and it does map the mutable surfaces: quantity, delivery_address, buyer contact details, and the fulfillment_mode value 'local_delivery'. It does not cover the nested address constraints (2-letter state, US-only country, ZIP pattern) or the idempotency_key, though the schema documents the latter itself.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific mutations (choose a delivery option, change quantity, address, or contact details) on a named resource and anchors it to the sibling that creates it: 'an order started with create_checkout'. An agent can distinguish this from create_checkout, complete_checkout, and get_order_status 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit invocation modes: call with only checkout_id to re-read, and supply fields to mutate. It also implies the sequencing rule that the total appears only 'once a delivery option is chosen'. It does not state exclusions relative to get_order_status (read a completed order) or complete_checkout, which keeps it out of the top band.

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.

  1. 1 tool update
    • Changedget_product1 field changed
      • addedOutput schema / properties / product / properties / ratings
        Added value: +{
        +  "description": "Customer ratings, present only when there are some. first_party are verified JENNi purchases; external are other retailers' reviews.",
        +  "properties": {
        +    "external": {
        +      "properties": {
        +        "as_of": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "avg": {
        +          "type": "number"
        +        },
        +        "count": {
        +          "type": "integer"
        +        },
        +        "sources": {
        +          "type": "integer"
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "first_party": {
        +      "properties": {
        +        "avg": {
        +          "type": "number"
        +        },
        +        "count": {
        +          "type": "integer"
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    }
        +  },
        +  "type": "object"
        +}
  2. 2 tool updates
    • Changedget_product1 field changed
      • addedOutput schema / properties / product / properties / last_verified_at
        Added value: +{
        +  "description": "The hour of the most recent inventory read behind this offer (ISO-8601 UTC, hour precision). null when unknown. It dates the read; it is not a guarantee the item is still in stock.",
        +  "format": "date-time",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
    • Changedsearch_catalog1 field changed
      • addedOutput schema / properties / products / items / properties / last_verified_at
        Added value: +{
        +  "description": "The hour of the most recent inventory read behind this offer (ISO-8601 UTC, hour precision). null when unknown. It dates the read; it is not a guarantee the item is still in stock.",
        +  "format": "date-time",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
  3. 5 tool updates
    • Changedget_buying_options4 fields changed
      • changedInput schema / properties / fulfillment_mode / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / delivery_promise / description
        Previous value: -"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."New value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\"."
      • changedOutput schema / properties / fulfillment_mode / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / pricing / properties / fee / description
        Previous value: -"Local delivery fee or flat shipping."New value: +"Local delivery fee."
    • Changedget_product3 fields changed
      • changedOutput schema / properties / product / properties / delivery_promise / description
        Previous value: -"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."New value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\"."
      • changedOutput schema / properties / product / properties / fulfillment / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / product / properties / price / description
        Previous value: -"Unit price in USD, before the delivery or shipping fee. Absent on a size or colour family: pick a variant."New value: +"Unit price in USD, before the delivery fee. Absent on a size or colour family: pick a variant."
    • Changedsearch_catalog5 fields changed
      • changedInput schema / properties / fulfillment_mode / description
        Previous value: -"Search one mode only. Omit to list local delivery first, filled with ship-to-home."New value: +"Search one mode only. Lists local delivery offers."
      • changedInput schema / properties / fulfillment_mode / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / products / items / properties / delivery_promise / description
        Previous value: -"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."New value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\"."
      • changedOutput schema / properties / products / items / properties / fulfillment / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / products / items / properties / price / description
        Previous value: -"Unit price in USD, before the delivery or shipping fee. Absent on a size or colour family: pick a variant."New value: +"Unit price in USD, before the delivery fee. Absent on a size or colour family: pick a variant."
    • Changedstart_checkout5 fields changed
      • changedInput schema / properties / fulfillment_mode / description
        Previous value: -"Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by); ship_to_home ships to the delivery address."New value: +"Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by)."
      • changedInput schema / properties / fulfillment_mode / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / delivery_promise / description
        Previous value: -"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."New value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\"."
      • changedOutput schema / properties / fulfillment_mode / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
      • changedOutput schema / properties / pricing / properties / fee / description
        Previous value: -"Local delivery fee or flat shipping."New value: +"Local delivery fee."
    • Changedupdate_checkout1 field changed
      • changedInput schema / properties / fulfillment_mode / enum
        Previous value: -[
        -  "local_delivery",
        -  "ship_to_home"
        -]New value: +[
        +  "local_delivery"
        +]
  4. 1 tool update
    • Changedcomplete_checkout2 fields changed
      • changedInput schema / properties / payment_token / description
        Previous value: -"Stripe shared payment token, starting spt_."New value: +"Optional. Stripe shared payment token, starting spt_. Leave it out to get the shopper's pay link (continue_url)."
      • changedInput schema / required
        Previous value: -[
        -  "checkout_id",
        -  "payment_token"
        -]New value: +[
        +  "checkout_id"
        +]
  5. 2 tool updates
    • Changedget_product1 field changed
      • addedOutput schema / properties / product / properties / variants / items / properties / label
        Added value: +{
        +  "description": "The source's own option text, word for word, when the variant has no size or colour.",
        +  "type": "string"
        +}
    • Changedsearch_catalog1 field changed
      • addedOutput schema / properties / products / items / properties / variants / items / properties / label
        Added value: +{
        +  "description": "The source's own option text, word for word, when the variant has no size or colour.",
        +  "type": "string"
        +}
  6. 1 tool update
    • Changedstart_checkout5 fields changed
      • addedInput schema / properties / items
        Added value: +{
        +  "description": "Several products in one link, instead of product_id. Same fulfillment_mode and ZIP for all.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "product_id": {
        +        "description": "The exact item: a variant's product_id when it has variants.",
        +        "type": "string"
        +      },
        +      "quantity": {
        +        "description": "How many (default 1).",
        +        "maximum": 10000,
        +        "minimum": 1,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "product_id"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 8,
        +  "minItems": 1,
        +  "type": "array"
        +}
      • addedInput schema / properties / quantity
        Added value: +{
        +  "description": "How many of product_id (default 1).",
        +  "maximum": 10000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / zip
        Added value: +{
        +  "description": "5-digit US delivery ZIP code, when no delivery_address is given.",
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "product_id",
        -  "fulfillment_mode",
        -  "delivery_address"
        -]New value: +[
        +  "fulfillment_mode"
        +]
      • addedOutput schema / properties / items
        Added value: +{
        +  "items": {
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
  7. 1 tool update
    • Changedsearch_catalog1 field changed
      • addedInput schema / properties / max_price
        Added value: +{
        +  "description": "Highest price the shopper will pay, in US dollars, e.g. 120. Put a price limit here, not in the query.",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
  8. 4 tool updates
    • Changedget_buying_options13 fields changed
      • addedOutput schema / properties / available
        Added value: +{
        +  "description": "True when this mode can be ordered for this product, ZIP and quantity.",
        +  "type": "boolean"
        +}
      • addedOutput schema / properties / delivery_promise
        Added value: +{
        +  "description": "Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\".",
        +  "type": "string"
        +}
      • addedOutput schema / properties / fulfillment_mode
        Added value: +{
        +  "enum": [
        +    "local_delivery",
        +    "ship_to_home"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / properties / fulfillment_option
        Removed value: -{
        -  "properties": {
        -    "available": {
        -      "description": "True only when the requested mode was verified as orderable for this exact product, ZIP and quantity.",
        -      "type": "boolean"
        -    },
        -    "deliver_by": {
        -      "description": "Local delivery only: YYYY-MM-DD JENNi delivers by (cutoff-aware), when known.",
        -      "type": "string"
        -    },
        -    "delivery_promise": {
        -      "description": "Local delivery: \"Get it today\" only when the order cutoff allows same-day, otherwise \"We'll deliver by <Month D>\"; with no known date no same-day claim is made. ship_to_home: \"Ships to you\".",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "fulfilled_by": {
        -      "const": "Delivered by JENNi",
        -      "type": "string"
        -    },
        -    "fulfillment_mode": {
        -      "enum": [
        -        "local_delivery",
        -        "ship_to_home"
        -      ],
        -      "type": "string"
        -    },
        -    "note": {
        -      "type": "string"
        -    },
        -    "pricing": {
        -      "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total_before_tax (sales tax is added at checkout). Null when the price could not be read; reason_code says why.",
        -      "properties": {
        -        "currency": {
        -          "const": "USD",
        -          "type": "string"
        -        },
        -        "eta": {
        -          "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
        -          "properties": {
        -            "deliver_by_text": {
        -              "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        -              "type": "string"
        -            },
        -            "earliest_date": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            },
        -            "kind": {
        -              "enum": [
        -                "same_day",
        -                "window"
        -              ],
        -              "type": "string"
        -            },
        -            "latest_date": {
        -              "type": [
        -                "string",
        -                "null"
        -              ]
        -            }
        -          },
        -          "type": [
        -            "object",
        -            "null"
        -          ]
        -        },
        -        "fee": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "fee_cents": {
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "fee_kind": {
        -          "enum": [
        -            "local_delivery_fee",
        -            "shipping"
        -          ],
        -          "type": "string"
        -        },
        -        "fulfilled_by": {
        -          "const": "Delivered by JENNi",
        -          "type": "string"
        -        },
        -        "fulfillment_mode": {
        -          "enum": [
        -            "local_delivery",
        -            "ship_to_home"
        -          ],
        -          "type": "string"
        -        },
        -        "note": {
        -          "type": "string"
        -        },
        -        "quantity": {
        -          "type": "integer"
        -        },
        -        "reason_code": {
        -          "enum": [
        -            "no_price",
        -            "no_live_offer",
        -            "out_of_stock",
        -            "not_served_locally",
        -            "variant_required",
        -            "product_not_found",
        -            "invalid_input",
        -            "fee_unavailable",
        -            "price_unavailable",
        -            "catalog_unavailable",
        -            "rate_limited",
        -            "not_checked",
        -            "no_buyable_offer"
        -          ],
        -          "type": "string"
        -        },
        -        "subtotal": {
        -          "type": "string"
        -        },
        -        "subtotal_cents": {
        -          "type": "integer"
        -        },
        -        "tax": {
        -          "const": "added_at_checkout",
        -          "type": "string"
        -        },
        -        "total_before_tax": {
        -          "description": "subtotal + fee before tax; null when the fee could not be read.",
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "total_before_tax_cents": {
        -          "type": [
        -            "integer",
        -            "null"
        -          ]
        -        },
        -        "unit_price": {
        -          "type": "string"
        -        },
        -        "unit_price_cents": {
        -          "type": "integer"
        -        }
        -      },
        -      "type": [
        -        "object",
        -        "null"
        -      ]
        -    },
        -    "reason_code": {
        -      "description": "Present when available is false: why this mode cannot be bought here now.",
        -      "enum": [
        -        "no_price",
        -        "no_live_offer",
        -        "out_of_stock",
        -        "not_served_locally",
        -        "variant_required",
        -        "product_not_found",
        -        "invalid_input",
        -        "fee_unavailable",
        -        "price_unavailable",
        -        "catalog_unavailable",
        -        "rate_limited",
        -        "not_checked",
        -        "no_buyable_offer"
        -      ],
        -      "type": "string"
        -    },
        -    "ship_estimate": {
        -      "description": "Display-only arrival window for a shipped order. An estimate, not a promise.",
        -      "properties": {
        -        "earliest_date": {
        -          "type": "string"
        -        },
        -        "latest_date": {
        -          "type": "string"
        -        },
        -        "source": {
        -          "type": "string"
        -        }
        -      },
        -      "type": "object"
        -    },
        -    "shipping_price": {
        -      "description": "USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`.",
        -      "type": "string"
        -    },
        -    "unit_price": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    }
        -  },
        -  "required": [
        -    "fulfillment_mode",
        -    "available"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / note
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / pricing
        Added value: +{
        +  "description": "unit_price x quantity + fee = total_before_tax. Sales tax is added at checkout.",
        +  "properties": {
        +    "eta": {
        +      "properties": {
        +        "earliest_date": {
        +          "type": "string"
        +        },
        +        "latest_date": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "fee": {
        +      "description": "Local delivery fee or flat shipping.",
        +      "type": "string"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "quantity": {
        +      "type": "integer"
        +    },
        +    "reason_code": {
        +      "description": "Machine-readable reason, alongside the prose note.",
        +      "enum": [
        +        "no_price",
        +        "no_live_offer",
        +        "out_of_stock",
        +        "not_served_locally",
        +        "variant_required",
        +        "product_not_found",
        +        "invalid_input",
        +        "fee_unavailable",
        +        "price_unavailable",
        +        "catalog_unavailable",
        +        "rate_limited",
        +        "not_checked",
        +        "no_buyable_offer"
        +      ],
        +      "type": "string"
        +    },
        +    "subtotal": {
        +      "description": "unit_price x quantity, when quantity > 1.",
        +      "type": "string"
        +    },
        +    "total_before_tax": {
        +      "type": "string"
        +    },
        +    "unit_price": {
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
      • removedOutput schema / properties / product
        Removed value: -{
        -  "properties": {
        -    "brand": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "category": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "color": {
        -      "description": "Colour of the variant product_id names; null when it has none.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "description": {
        -      "description": "Product description from the source catalog, when returned.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "image": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "note": {
        -      "type": "string"
        -    },
        -    "offers": {
        -      "description": "JENNi's single best offer for this product (price, delivery_promise, fulfilled_by, is_eligible_checkout), without source-shop details.",
        -      "items": {
        -        "properties": {
        -          "availability": {
        -            "description": "NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Null is not evidence of in-stock or out-of-stock state; checkout eligibility is independent.",
        -            "enum": [
        -              "in_stock",
        -              "out_of_stock",
        -              null
        -            ],
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "delivery_promise": {
        -            "description": "Shopper-facing delivery promise: \"Get it today\" only when the cutoff allows same-day, else \"We'll deliver by <Month D>\" (local delivery); \"Ships to you\" for ship_to_home.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "fulfilled_by": {
        -            "description": "Shopper-facing fulfiller line: \"Delivered by JENNi\".",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "fulfillment": {
        -            "description": "`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. Ordering happens with create_checkout and complete_checkout, or on the storefront link.",
        -            "enum": [
        -              "local_delivery",
        -              "ship_to_home",
        -              "in_store_only"
        -            ],
        -            "type": "string"
        -          },
        -          "is_eligible_checkout": {
        -            "description": "True when this offer is currently eligible for ordering through JENNi; false otherwise. Eligibility and price are checked again at hosted checkout. Nothing is charged until the buyer places the order on the checkout page.",
        -            "type": "boolean"
        -          },
        -          "is_eligible_search": {
        -            "type": "boolean"
        -          },
        -          "note": {
        -            "description": "A fulfillment disclosure, when applicable.",
        -            "type": "string"
        -          },
        -          "price": {
        -            "description": "USD, e.g. \"$12.50\". Null when we have no current price.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "product_id": {
        -            "description": "The exact variant this offer covers.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "shelf_observed_at": {
        -            "description": "When the shelf was last read. Null means never.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "shelf_price": {
        -            "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "ship_estimate": {
        -            "description": "Display-only arrival window for a shipped order. An estimate, not a promise.",
        -            "properties": {
        -              "earliest_date": {
        -                "type": "string"
        -              },
        -              "latest_date": {
        -                "type": "string"
        -              },
        -              "source": {
        -                "type": "string"
        -              }
        -            },
        -            "type": "object"
        -          },
        -          "shipping_label": {
        -            "description": "Plain-language label for shipping_price, e.g. \"$7.99 flat shipping\".",
        -            "type": "string"
        -          },
        -          "shipping_price": {
        -            "description": "USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`.",
        -            "type": "string"
        -          },
        -          "url": {
        -            "description": "Storefront page for this exact product.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "product_id",
        -          "is_eligible_search",
        -          "is_eligible_checkout",
        -          "fulfillment",
        -          "availability"
        -        ],
        -        "type": "object"
        -      },
        -      "maxItems": 1,
        -      "type": "array"
        -    },
        -    "price": {
        -      "description": "Headline price in USD; null when there is none.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "product_id": {
        -      "type": "string"
        -    },
        -    "reason_code": {
        -      "description": "Present when offers is empty: not_checked (no fulfillment mode was verified for this result) or not_served_locally.",
        -      "enum": [
        -        "no_price",
        -        "no_live_offer",
        -        "out_of_stock",
        -        "not_served_locally",
        -        "variant_required",
        -        "product_not_found",
        -        "invalid_input",
        -        "fee_unavailable",
        -        "price_unavailable",
        -        "catalog_unavailable",
        -        "rate_limited",
        -        "not_checked",
        -        "no_buyable_offer"
        -      ],
        -      "type": "string"
        -    },
        -    "shelf_price": {
        -      "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "size": {
        -      "description": "Size of the variant product_id names; null when none is recorded. Many items are listed one size per product, so a null size may be in the title (e.g. \"..., Size 8\"): match the shopper's size against it.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "title": {
        -      "type": "string"
        -    },
        -    "url": {
        -      "description": "Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "variants": {
        -      "description": "Buyable size/colour variants and their product URLs. Search responses contain at most 30; detail responses may include all variants.",
        -      "items": {
        -        "properties": {
        -          "color": {
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "product_id": {
        -            "type": "string"
        -          },
        -          "size": {
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          },
        -          "url": {
        -            "description": "Storefront page opened on this variant.",
        -            "type": [
        -              "string",
        -              "null"
        -            ]
        -          }
        -        },
        -        "required": [
        -          "product_id"
        -        ],
        -        "type": "object"
        -      },
        -      "type": "array"
        -    }
        -  },
        -  "required": [
        -    "product_id",
        -    "title",
        -    "offers"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / product_id
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / reason_code
        Added value: +{
        +  "description": "Why this mode cannot be bought here now.",
        +  "enum": [
        +    "no_price",
        +    "no_live_offer",
        +    "out_of_stock",
        +    "not_served_locally",
        +    "variant_required",
        +    "product_not_found",
        +    "invalid_input",
        +    "fee_unavailable",
        +    "price_unavailable",
        +    "catalog_unavailable",
        +    "rate_limited",
        +    "not_checked",
        +    "no_buyable_offer"
        +  ],
        +  "type": "string"
        +}
      • removedOutput schema / properties / requested_context
        Removed value: -{
        -  "properties": {
        -    "fulfillment_mode": {
        -      "enum": [
        -        "local_delivery",
        -        "ship_to_home"
        -      ],
        -      "type": "string"
        -    },
        -    "postal_code": {
        -      "type": "string"
        -    },
        -    "product_id": {
        -      "type": "string"
        -    },
        -    "quantity": {
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "product_id",
        -    "postal_code",
        -    "quantity",
        -    "fulfillment_mode"
        -  ],
        -  "type": "object"
        -}
      • addedOutput schema / properties / title
        Added value: +{
        +  "type": "string"
        +}
      • addedOutput schema / properties / unit_price
        Added value: +{
        +  "type": "string"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "product",
        -  "requested_context",
        -  "fulfillment_option"
        -]New value: +[
        +  "product_id",
        +  "fulfillment_mode",
        +  "available"
        +]
    • Changedget_product25 fields changed
      • changedOutput schema / properties / product / properties / brand / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / product / properties / category / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / product / properties / color / description
        Removed value: -"Colour of the variant product_id names; null when it has none."
      • changedOutput schema / properties / product / properties / color / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • addedOutput schema / properties / product / properties / delivery_promise
        Added value: +{
        +  "description": "Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\".",
        +  "type": "string"
        +}
      • removedOutput schema / properties / product / properties / description / description
        Removed value: -"Product description from the source catalog, when returned."
      • changedOutput schema / properties / product / properties / description / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • addedOutput schema / properties / product / properties / fulfillment
        Added value: +{
        +  "enum": [
        +    "local_delivery",
        +    "ship_to_home"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / product / properties / image / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • addedOutput schema / properties / product / properties / images
        Added value: +{
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • removedOutput schema / properties / product / properties / note
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / product / properties / offers
        Removed value: -{
        -  "description": "JENNi's single best offer for this product (price, delivery_promise, fulfilled_by, is_eligible_checkout), without source-shop details.",
        -  "items": {
        -    "properties": {
        -      "availability": {
        -        "description": "NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Null is not evidence of in-stock or out-of-stock state; checkout eligibility is independent.",
        -        "enum": [
        -          "in_stock",
        -          "out_of_stock",
        -          null
        -        ],
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "delivery_promise": {
        -        "description": "Shopper-facing delivery promise: \"Get it today\" only when the cutoff allows same-day, else \"We'll deliver by <Month D>\" (local delivery); \"Ships to you\" for ship_to_home.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "fulfilled_by": {
        -        "description": "Shopper-facing fulfiller line: \"Delivered by JENNi\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "fulfillment": {
        -        "description": "`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. Ordering happens with create_checkout and complete_checkout, or on the storefront link.",
        -        "enum": [
        -          "local_delivery",
        -          "ship_to_home",
        -          "in_store_only"
        -        ],
        -        "type": "string"
        -      },
        -      "is_eligible_checkout": {
        -        "description": "True when this offer is currently eligible for ordering through JENNi; false otherwise. Eligibility and price are checked again at hosted checkout. Nothing is charged until the buyer places the order on the checkout page.",
        -        "type": "boolean"
        -      },
        -      "is_eligible_search": {
        -        "type": "boolean"
        -      },
        -      "note": {
        -        "description": "A fulfillment disclosure, when applicable.",
        -        "type": "string"
        -      },
        -      "price": {
        -        "description": "USD, e.g. \"$12.50\". Null when we have no current price.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "product_id": {
        -        "description": "The exact variant this offer covers.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "shelf_observed_at": {
        -        "description": "When the shelf was last read. Null means never.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "shelf_price": {
        -        "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "ship_estimate": {
        -        "description": "Display-only arrival window for a shipped order. An estimate, not a promise.",
        -        "properties": {
        -          "earliest_date": {
        -            "type": "string"
        -          },
        -          "latest_date": {
        -            "type": "string"
        -          },
        -          "source": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "shipping_label": {
        -        "description": "Plain-language label for shipping_price, e.g. \"$7.99 flat shipping\".",
        -        "type": "string"
        -      },
        -      "shipping_price": {
        -        "description": "USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`.",
        -        "type": "string"
        -      },
        -      "url": {
        -        "description": "Storefront page for this exact product.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "product_id",
        -      "is_eligible_search",
        -      "is_eligible_checkout",
        -      "fulfillment",
        -      "availability"
        -    ],
        -    "type": "object"
        -  },
        -  "maxItems": 1,
        -  "type": "array"
        -}
      • changedOutput schema / properties / product / properties / price / description
        Previous value: -"Headline price in USD; null when there is none."New value: +"Unit price in USD, before the delivery or shipping fee. Absent on a size or colour family: pick a variant."
      • changedOutput schema / properties / product / properties / price / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / product / properties / reason_code / description
        Previous value: -"Present when offers is empty: not_checked (no fulfillment mode was verified for this result) or not_served_locally."New value: +"Machine-readable reason, alongside the prose note."
      • removedOutput schema / properties / product / properties / shelf_price
        Removed value: -{
        -  "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / product / properties / size / description
        Previous value: -"Size of the variant product_id names; null when none is recorded. Many items are listed one size per product, so a null size may be in the title (e.g. \"..., Size 8\"): match the shopper's size against it."New value: +"Absent when none is recorded; the size may then be in the title."
      • changedOutput schema / properties / product / properties / size / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / product / properties / url / description
        Previous value: -"Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured."New value: +"Product page on JENNi, already carrying the shopper's ZIP."
      • changedOutput schema / properties / product / properties / url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / product / properties / variants / description
        Previous value: -"Buyable size/colour variants and their product URLs. Search responses contain at most 30; detail responses may include all variants."New value: +"Sizes or colours, each with its own product_id. For a family (no price), get_buying_options and start_checkout need a variant's product_id."
      • changedOutput schema / properties / product / properties / variants / items / properties / color / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / product / properties / variants / items / properties / size / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / product / properties / variants / items / properties / url
        Removed value: -{
        -  "description": "Storefront page opened on this variant.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / product / required
        Previous value: -[
        -  "product_id",
        -  "title",
        -  "offers"
        -]New value: +[
        +  "product_id",
        +  "title"
        +]
    • Changedsearch_catalog31 fields changed
      • removedOutput schema / properties / delivers_here
        Removed value: -{
        -  "description": "The market we deliver in at that location; null when we deliver in none.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / location
        Removed value: -{
        -  "description": "The place searched around; null for none.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / note / description
        Previous value: -"Plain-language context for an empty or ship-only result."New value: +"What could not be checked (for example local delivery): that availability is unknown, not unavailable."
      • removedOutput schema / properties / paging / description
        Removed value: -"Number of result pages; call again with page+1 while page < total_pages. At most 42; 0 when nothing matched."
      • removedOutput schema / properties / paging / required
        Removed value: -[
        -  "page",
        -  "total_pages",
        -  "total_matches"
        -]
      • changedOutput schema / properties / products / items / properties / brand / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / products / items / properties / category / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / products / items / properties / color / description
        Removed value: -"Colour of the variant product_id names; null when it has none."
      • changedOutput schema / properties / products / items / properties / color / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • addedOutput schema / properties / products / items / properties / delivery_promise
        Added value: +{
        +  "description": "Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\".",
        +  "type": "string"
        +}
      • removedOutput schema / properties / products / items / properties / description
        Removed value: -{
        -  "description": "Product description from the source catalog, when returned.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / products / items / properties / fulfillment
        Added value: +{
        +  "enum": [
        +    "local_delivery",
        +    "ship_to_home"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / products / items / properties / image / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / products / items / properties / note
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / products / items / properties / offers
        Removed value: -{
        -  "description": "JENNi's single best offer for this product (price, delivery_promise, fulfilled_by, is_eligible_checkout), without source-shop details.",
        -  "items": {
        -    "properties": {
        -      "availability": {
        -        "description": "NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Null is not evidence of in-stock or out-of-stock state; checkout eligibility is independent.",
        -        "enum": [
        -          "in_stock",
        -          "out_of_stock",
        -          null
        -        ],
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "delivery_promise": {
        -        "description": "Shopper-facing delivery promise: \"Get it today\" only when the cutoff allows same-day, else \"We'll deliver by <Month D>\" (local delivery); \"Ships to you\" for ship_to_home.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "fulfilled_by": {
        -        "description": "Shopper-facing fulfiller line: \"Delivered by JENNi\".",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "fulfillment": {
        -        "description": "`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. Ordering happens with create_checkout and complete_checkout, or on the storefront link.",
        -        "enum": [
        -          "local_delivery",
        -          "ship_to_home",
        -          "in_store_only"
        -        ],
        -        "type": "string"
        -      },
        -      "is_eligible_checkout": {
        -        "description": "True when this offer is currently eligible for ordering through JENNi; false otherwise. Eligibility and price are checked again at hosted checkout. Nothing is charged until the buyer places the order on the checkout page.",
        -        "type": "boolean"
        -      },
        -      "is_eligible_search": {
        -        "type": "boolean"
        -      },
        -      "note": {
        -        "description": "A fulfillment disclosure, when applicable.",
        -        "type": "string"
        -      },
        -      "price": {
        -        "description": "USD, e.g. \"$12.50\". Null when we have no current price.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "product_id": {
        -        "description": "The exact variant this offer covers.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "shelf_observed_at": {
        -        "description": "When the shelf was last read. Null means never.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "shelf_price": {
        -        "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      },
        -      "ship_estimate": {
        -        "description": "Display-only arrival window for a shipped order. An estimate, not a promise.",
        -        "properties": {
        -          "earliest_date": {
        -            "type": "string"
        -          },
        -          "latest_date": {
        -            "type": "string"
        -          },
        -          "source": {
        -            "type": "string"
        -          }
        -        },
        -        "type": "object"
        -      },
        -      "shipping_label": {
        -        "description": "Plain-language label for shipping_price, e.g. \"$7.99 flat shipping\".",
        -        "type": "string"
        -      },
        -      "shipping_price": {
        -        "description": "USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`.",
        -        "type": "string"
        -      },
        -      "url": {
        -        "description": "Storefront page for this exact product.",
        -        "type": [
        -          "string",
        -          "null"
        -        ]
        -      }
        -    },
        -    "required": [
        -      "product_id",
        -      "is_eligible_search",
        -      "is_eligible_checkout",
        -      "fulfillment",
        -      "availability"
        -    ],
        -    "type": "object"
        -  },
        -  "maxItems": 1,
        -  "type": "array"
        -}
      • changedOutput schema / properties / products / items / properties / price / description
        Previous value: -"Headline price in USD; null when there is none."New value: +"Unit price in USD, before the delivery or shipping fee. Absent on a size or colour family: pick a variant."
      • changedOutput schema / properties / products / items / properties / price / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / products / items / properties / reason_code
        Removed value: -{
        -  "description": "Present when offers is empty: not_checked (no fulfillment mode was verified for this result) or not_served_locally.",
        -  "enum": [
        -    "no_price",
        -    "no_live_offer",
        -    "out_of_stock",
        -    "not_served_locally",
        -    "variant_required",
        -    "product_not_found",
        -    "invalid_input",
        -    "fee_unavailable",
        -    "price_unavailable",
        -    "catalog_unavailable",
        -    "rate_limited",
        -    "not_checked",
        -    "no_buyable_offer"
        -  ],
        -  "type": "string"
        -}
      • removedOutput schema / properties / products / items / properties / shelf_price
        Removed value: -{
        -  "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / products / items / properties / size / description
        Previous value: -"Size of the variant product_id names; null when none is recorded. Many items are listed one size per product, so a null size may be in the title (e.g. \"..., Size 8\"): match the shopper's size against it."New value: +"Absent when none is recorded; the size may then be in the title."
      • changedOutput schema / properties / products / items / properties / size / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / products / items / properties / url / description
        Previous value: -"Storefront product page, where the buyer picks size/colour, checks out as a guest (email, no account) and pays. Null when no storefront is configured."New value: +"Product page on JENNi, already carrying the shopper's ZIP."
      • changedOutput schema / properties / products / items / properties / url / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / products / items / properties / variants / description
        Previous value: -"Buyable size/colour variants and their product URLs. Search responses contain at most 30; detail responses may include all variants."New value: +"Sizes or colours, each with its own product_id. For a family (no price), get_buying_options and start_checkout need a variant's product_id."
      • changedOutput schema / properties / products / items / properties / variants / items / properties / color / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / products / items / properties / variants / items / properties / size / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / products / items / properties / variants / items / properties / url
        Removed value: -{
        -  "description": "Storefront page opened on this variant.",
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / products / items / required
        Previous value: -[
        -  "product_id",
        -  "title",
        -  "offers"
        -]New value: +[
        +  "product_id",
        +  "title"
        +]
      • removedOutput schema / properties / query
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / properties / reason_code / description
        Previous value: -"Present when products is empty: no_buyable_offer (matches exist, none orderable now) or product_not_found."New value: +"Present only when products is empty."
      • changedOutput schema / required
        Previous value: -[
        -  "query",
        -  "products"
        -]New value: +[
        +  "products"
        +]
    • Changedstart_checkout30 fields changed
      • addedOutput schema / properties / delivery_promise / description
        Added value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"."
      • changedOutput schema / properties / delivery_promise / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / fulfilled_by
        Removed value: -{
        -  "const": "Delivered by JENNi",
        -  "type": "string"
        -}
      • removedOutput schema / properties / kind
        Removed value: -{
        -  "enum": [
        -    "basket"
        -  ],
        -  "type": "string"
        -}
      • changedOutput schema / properties / pricing / description
        Previous value: -"The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total_before_tax (sales tax is added at checkout). Null when the price could not be read; reason_code says why."New value: +"unit_price x quantity + fee = total_before_tax. Sales tax is added at checkout."
      • removedOutput schema / properties / pricing / properties / currency
        Removed value: -{
        -  "const": "USD",
        -  "type": "string"
        -}
      • removedOutput schema / properties / pricing / properties / eta / description
        Removed value: -"Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim)."
      • removedOutput schema / properties / pricing / properties / eta / properties / deliver_by_text
        Removed value: -{
        -  "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        -  "type": "string"
        -}
      • changedOutput schema / properties / pricing / properties / eta / properties / earliest_date / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / pricing / properties / eta / properties / kind
        Removed value: -{
        -  "enum": [
        -    "same_day",
        -    "window"
        -  ],
        -  "type": "string"
        -}
      • changedOutput schema / properties / pricing / properties / eta / properties / latest_date / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / properties / pricing / properties / eta / type
        Previous value: -[
        -  "object",
        -  "null"
        -]New value: +"object"
      • addedOutput schema / properties / pricing / properties / fee / description
        Added value: +"Local delivery fee or flat shipping."
      • changedOutput schema / properties / pricing / properties / fee / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / pricing / properties / fee_cents
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / pricing / properties / fee_kind
        Removed value: -{
        -  "enum": [
        -    "local_delivery_fee",
        -    "shipping"
        -  ],
        -  "type": "string"
        -}
      • removedOutput schema / properties / pricing / properties / fulfilled_by
        Removed value: -{
        -  "const": "Delivered by JENNi",
        -  "type": "string"
        -}
      • removedOutput schema / properties / pricing / properties / fulfillment_mode
        Removed value: -{
        -  "enum": [
        -    "local_delivery",
        -    "ship_to_home"
        -  ],
        -  "type": "string"
        -}
      • addedOutput schema / properties / pricing / properties / reason_code / description
        Added value: +"Machine-readable reason, alongside the prose note."
      • addedOutput schema / properties / pricing / properties / subtotal / description
        Added value: +"unit_price x quantity, when quantity > 1."
      • removedOutput schema / properties / pricing / properties / subtotal_cents
        Removed value: -{
        -  "type": "integer"
        -}
      • removedOutput schema / properties / pricing / properties / tax
        Removed value: -{
        -  "const": "added_at_checkout",
        -  "type": "string"
        -}
      • removedOutput schema / properties / pricing / properties / total_before_tax / description
        Removed value: -"subtotal + fee before tax; null when the fee could not be read."
      • changedOutput schema / properties / pricing / properties / total_before_tax / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • removedOutput schema / properties / pricing / properties / total_before_tax_cents
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / pricing / properties / unit_price_cents
        Removed value: -{
        -  "type": "integer"
        -}
      • changedOutput schema / properties / pricing / type
        Previous value: -[
        -  "object",
        -  "null"
        -]New value: +"object"
      • removedOutput schema / properties / unit_price / description
        Removed value: -"The unit price the page shows; null when it could not be read (reason_code says why)."
      • changedOutput schema / properties / unit_price / type
        Previous value: -[
        -  "string",
        -  "null"
        -]New value: +"string"
      • changedOutput schema / required
        Previous value: -[
        -  "kind",
        -  "checkout_url",
        -  "next_step"
        -]New value: +[
        +  "checkout_url",
        +  "next_step"
        +]
  9. 1 tool update
    • Changedsearch_catalog2 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "1-based results page; call again with page+1 while page < paging.total_pages.",
        +  "maximum": 42,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / paging
        Added value: +{
        +  "description": "Number of result pages; call again with page+1 while page < total_pages. At most 42; 0 when nothing matched.",
        +  "properties": {
        +    "page": {
        +      "type": "integer"
        +    },
        +    "total_matches": {
        +      "type": "integer"
        +    },
        +    "total_pages": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "page",
        +    "total_pages",
        +    "total_matches"
        +  ],
        +  "type": "object"
        +}
  10. 5 tool updates
    • Changedget_buying_options6 fields changed
      • addedOutput schema / properties / fulfillment_option / properties / pricing
        Added value: +{
        +  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total_before_tax (sales tax is added at checkout). Null when the price could not be read; reason_code says why.",
        +  "properties": {
        +    "currency": {
        +      "const": "USD",
        +      "type": "string"
        +    },
        +    "eta": {
        +      "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
        +      "properties": {
        +        "deliver_by_text": {
        +          "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        +          "type": "string"
        +        },
        +        "earliest_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "kind": {
        +          "enum": [
        +            "same_day",
        +            "window"
        +          ],
        +          "type": "string"
        +        },
        +        "latest_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "fee": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "fee_cents": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "fee_kind": {
        +      "enum": [
        +        "local_delivery_fee",
        +        "shipping"
        +      ],
        +      "type": "string"
        +    },
        +    "fulfilled_by": {
        +      "const": "Delivered by JENNi",
        +      "type": "string"
        +    },
        +    "fulfillment_mode": {
        +      "enum": [
        +        "local_delivery",
        +        "ship_to_home"
        +      ],
        +      "type": "string"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "quantity": {
        +      "type": "integer"
        +    },
        +    "reason_code": {
        +      "enum": [
        +        "no_price",
        +        "no_live_offer",
        +        "out_of_stock",
        +        "not_served_locally",
        +        "variant_required",
        +        "product_not_found",
        +        "invalid_input",
        +        "fee_unavailable",
        +        "price_unavailable",
        +        "catalog_unavailable",
        +        "rate_limited",
        +        "not_checked",
        +        "no_buyable_offer"
        +      ],
        +      "type": "string"
        +    },
        +    "subtotal": {
        +      "type": "string"
        +    },
        +    "subtotal_cents": {
        +      "type": "integer"
        +    },
        +    "tax": {
        +      "const": "added_at_checkout",
        +      "type": "string"
        +    },
        +    "total_before_tax": {
        +      "description": "subtotal + fee before tax; null when the fee could not be read.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_before_tax_cents": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "unit_price": {
        +      "type": "string"
        +    },
        +    "unit_price_cents": {
        +      "type": "integer"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / fulfillment_option / properties / quote
        Removed value: -{
        -  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total (before sales tax, which checkout adds). Null when the price could not be read; reason_code says why.",
        -  "properties": {
        -    "currency": {
        -      "const": "USD",
        -      "type": "string"
        -    },
        -    "eta": {
        -      "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
        -      "properties": {
        -        "deliver_by_text": {
        -          "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        -          "type": "string"
        -        },
        -        "earliest_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "kind": {
        -          "enum": [
        -            "same_day",
        -            "window"
        -          ],
        -          "type": "string"
        -        },
        -        "latest_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": [
        -        "object",
        -        "null"
        -      ]
        -    },
        -    "fee": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "fee_cents": {
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "fee_kind": {
        -      "enum": [
        -        "local_delivery_fee",
        -        "shipping"
        -      ],
        -      "type": "string"
        -    },
        -    "fulfilled_by": {
        -      "const": "Delivered by JENNi",
        -      "type": "string"
        -    },
        -    "fulfillment_mode": {
        -      "enum": [
        -        "local_delivery",
        -        "ship_to_home"
        -      ],
        -      "type": "string"
        -    },
        -    "note": {
        -      "type": "string"
        -    },
        -    "quantity": {
        -      "type": "integer"
        -    },
        -    "reason_code": {
        -      "enum": [
        -        "no_price",
        -        "no_live_offer",
        -        "out_of_stock",
        -        "not_served_locally",
        -        "variant_required",
        -        "product_not_found",
        -        "invalid_input",
        -        "fee_unavailable",
        -        "quote_unavailable",
        -        "catalog_unavailable",
        -        "rate_limited",
        -        "not_checked",
        -        "no_buyable_offer"
        -      ],
        -      "type": "string"
        -    },
        -    "subtotal": {
        -      "type": "string"
        -    },
        -    "subtotal_cents": {
        -      "type": "integer"
        -    },
        -    "tax": {
        -      "const": "added_at_checkout",
        -      "type": "string"
        -    },
        -    "total": {
        -      "description": "subtotal + fee before tax; null when the fee could not be read.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "total_cents": {
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "unit_price": {
        -      "type": "string"
        -    },
        -    "unit_price_cents": {
        -      "type": "integer"
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / fulfillment_option / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked",
        -  "no_buyable_offer"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "price_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
      • changedOutput schema / properties / product / properties / offers / items / properties / price / description
        Previous value: -"USD, e.g. \"$12.50\". Null when we hold no current price."New value: +"USD, e.g. \"$12.50\". Null when we have no current price."
      • changedOutput schema / properties / product / properties / price / description
        Previous value: -"Headline price in USD; null when none is held."New value: +"Headline price in USD; null when there is none."
      • changedOutput schema / properties / product / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked",
        -  "no_buyable_offer"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "price_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
    • Changedget_order_status5 fields changed
      • removedOutput schema / properties / payment / properties / amount_held_cents
        Removed value: -{
        -  "type": [
        -    "integer",
        -    "null"
        -  ]
        -}
      • removedOutput schema / properties / payment / properties / hold_expires_at
        Removed value: -{
        -  "type": [
        -    "string",
        -    "null"
        -  ]
        -}
      • addedOutput schema / properties / payment / properties / pending_amount_cents
        Added value: +{
        +  "type": [
        +    "integer",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / payment / properties / state / enum
        Previous value: -[
        -  "held",
        -  "captured",
        -  "hold_released",
        -  "none",
        -  "unavailable"
        -]New value: +[
        +  "pending",
        +  "charged",
        +  "not_charged",
        +  "none",
        +  "unavailable"
        +]
      • changedOutput schema / properties / refund_state / enum
        Previous value: -[
        -  "none",
        -  "hold_released",
        -  "unknown"
        -]New value: +[
        +  "none",
        +  "not_charged",
        +  "unknown"
        +]
    • Changedget_product3 fields changed
      • changedOutput schema / properties / product / properties / offers / items / properties / price / description
        Previous value: -"USD, e.g. \"$12.50\". Null when we hold no current price."New value: +"USD, e.g. \"$12.50\". Null when we have no current price."
      • changedOutput schema / properties / product / properties / price / description
        Previous value: -"Headline price in USD; null when none is held."New value: +"Headline price in USD; null when there is none."
      • changedOutput schema / properties / product / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked",
        -  "no_buyable_offer"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "price_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
    • Changedsearch_catalog4 fields changed
      • changedOutput schema / properties / products / items / properties / offers / items / properties / price / description
        Previous value: -"USD, e.g. \"$12.50\". Null when we hold no current price."New value: +"USD, e.g. \"$12.50\". Null when we have no current price."
      • changedOutput schema / properties / products / items / properties / price / description
        Previous value: -"Headline price in USD; null when none is held."New value: +"Headline price in USD; null when there is none."
      • changedOutput schema / properties / products / items / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked",
        -  "no_buyable_offer"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "price_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
      • changedOutput schema / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked",
        -  "no_buyable_offer"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "price_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
    • Changedstart_checkout3 fields changed
      • addedOutput schema / properties / pricing
        Added value: +{
        +  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total_before_tax (sales tax is added at checkout). Null when the price could not be read; reason_code says why.",
        +  "properties": {
        +    "currency": {
        +      "const": "USD",
        +      "type": "string"
        +    },
        +    "eta": {
        +      "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
        +      "properties": {
        +        "deliver_by_text": {
        +          "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        +          "type": "string"
        +        },
        +        "earliest_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "kind": {
        +          "enum": [
        +            "same_day",
        +            "window"
        +          ],
        +          "type": "string"
        +        },
        +        "latest_date": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        }
        +      },
        +      "type": [
        +        "object",
        +        "null"
        +      ]
        +    },
        +    "fee": {
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "fee_cents": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "fee_kind": {
        +      "enum": [
        +        "local_delivery_fee",
        +        "shipping"
        +      ],
        +      "type": "string"
        +    },
        +    "fulfilled_by": {
        +      "const": "Delivered by JENNi",
        +      "type": "string"
        +    },
        +    "fulfillment_mode": {
        +      "enum": [
        +        "local_delivery",
        +        "ship_to_home"
        +      ],
        +      "type": "string"
        +    },
        +    "note": {
        +      "type": "string"
        +    },
        +    "quantity": {
        +      "type": "integer"
        +    },
        +    "reason_code": {
        +      "enum": [
        +        "no_price",
        +        "no_live_offer",
        +        "out_of_stock",
        +        "not_served_locally",
        +        "variant_required",
        +        "product_not_found",
        +        "invalid_input",
        +        "fee_unavailable",
        +        "price_unavailable",
        +        "catalog_unavailable",
        +        "rate_limited",
        +        "not_checked",
        +        "no_buyable_offer"
        +      ],
        +      "type": "string"
        +    },
        +    "subtotal": {
        +      "type": "string"
        +    },
        +    "subtotal_cents": {
        +      "type": "integer"
        +    },
        +    "tax": {
        +      "const": "added_at_checkout",
        +      "type": "string"
        +    },
        +    "total_before_tax": {
        +      "description": "subtotal + fee before tax; null when the fee could not be read.",
        +      "type": [
        +        "string",
        +        "null"
        +      ]
        +    },
        +    "total_before_tax_cents": {
        +      "type": [
        +        "integer",
        +        "null"
        +      ]
        +    },
        +    "unit_price": {
        +      "type": "string"
        +    },
        +    "unit_price_cents": {
        +      "type": "integer"
        +    }
        +  },
        +  "type": [
        +    "object",
        +    "null"
        +  ]
        +}
      • removedOutput schema / properties / quote
        Removed value: -{
        -  "description": "The price an agent may state before checkout: unit price x quantity + the flat fee for the mode = total (before sales tax, which checkout adds). Null when the price could not be read; reason_code says why.",
        -  "properties": {
        -    "currency": {
        -      "const": "USD",
        -      "type": "string"
        -    },
        -    "eta": {
        -      "description": "Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim).",
        -      "properties": {
        -        "deliver_by_text": {
        -          "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        -          "type": "string"
        -        },
        -        "earliest_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        },
        -        "kind": {
        -          "enum": [
        -            "same_day",
        -            "window"
        -          ],
        -          "type": "string"
        -        },
        -        "latest_date": {
        -          "type": [
        -            "string",
        -            "null"
        -          ]
        -        }
        -      },
        -      "type": [
        -        "object",
        -        "null"
        -      ]
        -    },
        -    "fee": {
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "fee_cents": {
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "fee_kind": {
        -      "enum": [
        -        "local_delivery_fee",
        -        "shipping"
        -      ],
        -      "type": "string"
        -    },
        -    "fulfilled_by": {
        -      "const": "Delivered by JENNi",
        -      "type": "string"
        -    },
        -    "fulfillment_mode": {
        -      "enum": [
        -        "local_delivery",
        -        "ship_to_home"
        -      ],
        -      "type": "string"
        -    },
        -    "note": {
        -      "type": "string"
        -    },
        -    "quantity": {
        -      "type": "integer"
        -    },
        -    "reason_code": {
        -      "enum": [
        -        "no_price",
        -        "no_live_offer",
        -        "out_of_stock",
        -        "not_served_locally",
        -        "variant_required",
        -        "product_not_found",
        -        "invalid_input",
        -        "fee_unavailable",
        -        "quote_unavailable",
        -        "catalog_unavailable",
        -        "rate_limited",
        -        "not_checked",
        -        "no_buyable_offer"
        -      ],
        -      "type": "string"
        -    },
        -    "subtotal": {
        -      "type": "string"
        -    },
        -    "subtotal_cents": {
        -      "type": "integer"
        -    },
        -    "tax": {
        -      "const": "added_at_checkout",
        -      "type": "string"
        -    },
        -    "total": {
        -      "description": "subtotal + fee before tax; null when the fee could not be read.",
        -      "type": [
        -        "string",
        -        "null"
        -      ]
        -    },
        -    "total_cents": {
        -      "type": [
        -        "integer",
        -        "null"
        -      ]
        -    },
        -    "unit_price": {
        -      "type": "string"
        -    },
        -    "unit_price_cents": {
        -      "type": "integer"
        -    }
        -  },
        -  "type": [
        -    "object",
        -    "null"
        -  ]
        -}
      • changedOutput schema / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked",
        -  "no_buyable_offer"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "price_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
  11. 3 tool updates
    • Changedget_buying_options1 field changed
      • changedOutput schema / properties / product / properties / size / description
        Previous value: -"Size of the variant product_id names; null when it has none."New value: +"Size of the variant product_id names; null when none is recorded. Many items are listed one size per product, so a null size may be in the title (e.g. \"..., Size 8\"): match the shopper's size against it."
    • Changedget_product1 field changed
      • changedOutput schema / properties / product / properties / size / description
        Previous value: -"Size of the variant product_id names; null when it has none."New value: +"Size of the variant product_id names; null when none is recorded. Many items are listed one size per product, so a null size may be in the title (e.g. \"..., Size 8\"): match the shopper's size against it."
    • Changedsearch_catalog2 fields changed
      • addedInput schema / properties / fulfillment_mode
        Added value: +{
        +  "description": "Search one mode only. Omit to list local delivery first, filled with ship-to-home.",
        +  "enum": [
        +    "local_delivery",
        +    "ship_to_home"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / properties / products / items / properties / size / description
        Previous value: -"Size of the variant product_id names; null when it has none."New value: +"Size of the variant product_id names; null when none is recorded. Many items are listed one size per product, so a null size may be in the title (e.g. \"..., Size 8\"): match the shopper's size against it."
  12. 3 tool updates
    • Changedget_buying_options1 field changed
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. Ordering happens with create_checkout and complete_checkout, or on the storefront link."
    • Changedget_product1 field changed
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. Ordering happens with create_checkout and complete_checkout, or on the storefront link."
    • Changedsearch_catalog1 field changed
      • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. Ordering happens with create_checkout and complete_checkout, or on the storefront link."
  13. 3 tool updates
    • Addedcomplete_checkout
    • Addedcreate_checkout
    • Addedupdate_checkout
  14. 4 tool updates
    • Changedget_buying_options6 fields changed
      • addedOutput schema / properties / fulfillment_option / properties / deliver_by
        Added value: +{
        +  "description": "Local delivery only: YYYY-MM-DD JENNi delivers by (cutoff-aware), when known.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / fulfillment_option / properties / delivery_promise / description
        Previous value: -"\"Get it today\" (local_delivery) or \"Ships to you\" (ship_to_home) when available."New value: +"Local delivery: \"Get it today\" only when the order cutoff allows same-day, otherwise \"We'll deliver by <Month D>\"; with no known date no same-day claim is made. ship_to_home: \"Ships to you\"."
      • changedOutput schema / properties / fulfillment_option / properties / quote / properties / eta / description
        Previous value: -"same_day for local delivery; a display-only date window for ship_to_home. Null when no window is known."New value: +"Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim)."
      • addedOutput schema / properties / fulfillment_option / properties / quote / properties / eta / properties / deliver_by_text
        Added value: +{
        +  "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / product / properties / offers / items / properties / delivery_promise / description
        Previous value: -"Shopper-facing delivery promise, e.g. \"Get it today\" (local delivery) or \"Ships to you\"."New value: +"Shopper-facing delivery promise: \"Get it today\" only when the cutoff allows same-day, else \"We'll deliver by <Month D>\" (local delivery); \"Ships to you\" for ship_to_home."
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered the same day by JENNi. `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."
    • Changedget_product2 fields changed
      • changedOutput schema / properties / product / properties / offers / items / properties / delivery_promise / description
        Previous value: -"Shopper-facing delivery promise, e.g. \"Get it today\" (local delivery) or \"Ships to you\"."New value: +"Shopper-facing delivery promise: \"Get it today\" only when the cutoff allows same-day, else \"We'll deliver by <Month D>\" (local delivery); \"Ships to you\" for ship_to_home."
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered the same day by JENNi. `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."
    • Changedsearch_catalog2 fields changed
      • changedOutput schema / properties / products / items / properties / offers / items / properties / delivery_promise / description
        Previous value: -"Shopper-facing delivery promise, e.g. \"Get it today\" (local delivery) or \"Ships to you\"."New value: +"Shopper-facing delivery promise: \"Get it today\" only when the cutoff allows same-day, else \"We'll deliver by <Month D>\" (local delivery); \"Ships to you\" for ship_to_home."
      • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered the same day by JENNi. `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered locally by JENNi (same-day only when delivery_promise says so). `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."
    • Changedstart_checkout3 fields changed
      • changedInput schema / properties / fulfillment_mode / description
        Previous value: -"Selected fulfillment mode: local_delivery is same-day; ship_to_home ships to the delivery address."New value: +"Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by); ship_to_home ships to the delivery address."
      • changedOutput schema / properties / quote / properties / eta / description
        Previous value: -"same_day for local delivery; a display-only date window for ship_to_home. Null when no window is known."New value: +"Local delivery: same_day only when today is truly deliverable (before the cutoff), otherwise a window whose dates are the delivery date. ship_to_home: a display-only date window. Null when no date is known (no same-day claim)."
      • addedOutput schema / properties / quote / properties / eta / properties / deliver_by_text
        Added value: +{
        +  "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.",
        +  "type": "string"
        +}
  15. 1 tool update
    • Changedget_buying_options1 field changed
      • changedInput schema / properties / quantity / maximum
        Previous value: -99New value: +10000
  16. 4 tool updates
    • Changedget_buying_options7 fields changed
      • changedOutput schema / properties / fulfillment_option / properties / quote / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
      • changedOutput schema / properties / fulfillment_option / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
      • changedOutput schema / properties / fulfillment_option / properties / shipping_price / description
        Previous value: -"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (a ship_to_home or a concierge offer that ships) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."New value: +"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered locally. `concierge`: JENNi collects it from the shop and delivers or ships it to the shopper. `ship_to_home`: shipped to the shopper. `in_store_only`: observed on the shelf, but it cannot be ordered through JENNi. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered the same day by JENNi. `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / enum
        Previous value: -[
        -  "pickup",
        -  "local_delivery",
        -  "ship_to_home",
        -  "concierge",
        -  "in_store_only"
        -]New value: +[
        +  "local_delivery",
        +  "ship_to_home",
        +  "in_store_only"
        +]
      • changedOutput schema / properties / product / properties / offers / items / properties / shipping_price / description
        Previous value: -"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (a ship_to_home or a concierge offer that ships) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."New value: +"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."
      • changedOutput schema / properties / product / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
    • Changedget_product4 fields changed
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered locally. `concierge`: JENNi collects it from the shop and delivers or ships it to the shopper. `ship_to_home`: shipped to the shopper. `in_store_only`: observed on the shelf, but it cannot be ordered through JENNi. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered the same day by JENNi. `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."
      • changedOutput schema / properties / product / properties / offers / items / properties / fulfillment / enum
        Previous value: -[
        -  "pickup",
        -  "local_delivery",
        -  "ship_to_home",
        -  "concierge",
        -  "in_store_only"
        -]New value: +[
        +  "local_delivery",
        +  "ship_to_home",
        +  "in_store_only"
        +]
      • changedOutput schema / properties / product / properties / offers / items / properties / shipping_price / description
        Previous value: -"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (a ship_to_home or a concierge offer that ships) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."New value: +"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."
      • changedOutput schema / properties / product / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
    • Changedsearch_catalog6 fields changed
      • addedOutput schema / properties / note
        Added value: +{
        +  "description": "Plain-language context for an empty or ship-only result.",
        +  "type": "string"
        +}
      • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / description
        Previous value: -"`local_delivery`: delivered locally. `concierge`: JENNi collects it from the shop and delivers or ships it to the shopper. `ship_to_home`: shipped to the shopper. `in_store_only`: observed on the shelf, but it cannot be ordered through JENNi. `pickup` is store-owned capability metadata, not a JENNi customer reservation/ready/handoff flow, and is never returned. These are not executable MCP methods: ordering happens on the storefront."New value: +"`local_delivery`: delivered the same day by JENNi. `ship_to_home`: shipped to the shopper by JENNi. `in_store_only`: observed, but it cannot be ordered through JENNi for this destination. These are not executable MCP methods: ordering happens on the storefront."
      • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / enum
        Previous value: -[
        -  "pickup",
        -  "local_delivery",
        -  "ship_to_home",
        -  "concierge",
        -  "in_store_only"
        -]New value: +[
        +  "local_delivery",
        +  "ship_to_home",
        +  "in_store_only"
        +]
      • changedOutput schema / properties / products / items / properties / offers / items / properties / shipping_price / description
        Previous value: -"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (a ship_to_home or a concierge offer that ships) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."New value: +"USD, e.g. \"$7.99\". The flat shipping fee for this order, present only on an offer the storefront can sell (an offer that ships from JENNi) when a fee is set. Absent means unstated, never free. Added at checkout on top of `price`."
      • changedOutput schema / properties / products / items / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
      • addedOutput schema / properties / reason_code
        Added value: +{
        +  "description": "Present when products is empty: no_buyable_offer (matches exist, none orderable now) or product_not_found.",
        +  "enum": [
        +    "no_price",
        +    "no_live_offer",
        +    "out_of_stock",
        +    "not_served_locally",
        +    "variant_required",
        +    "product_not_found",
        +    "invalid_input",
        +    "fee_unavailable",
        +    "quote_unavailable",
        +    "catalog_unavailable",
        +    "rate_limited",
        +    "not_checked",
        +    "no_buyable_offer"
        +  ],
        +  "type": "string"
        +}
    • Changedstart_checkout3 fields changed
      • changedOutput schema / properties / kind / enum
        Previous value: -[
        -  "basket",
        -  "concierge_request"
        -]New value: +[
        +  "basket"
        +]
      • changedOutput schema / properties / quote / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]
      • changedOutput schema / properties / reason_code / enum
        Previous value: -[
        -  "no_price",
        -  "no_live_offer",
        -  "out_of_stock",
        -  "not_served_locally",
        -  "variant_required",
        -  "product_not_found",
        -  "invalid_input",
        -  "fee_unavailable",
        -  "quote_unavailable",
        -  "catalog_unavailable",
        -  "rate_limited",
        -  "not_checked"
        -]New value: +[
        +  "no_price",
        +  "no_live_offer",
        +  "out_of_stock",
        +  "not_served_locally",
        +  "variant_required",
        +  "product_not_found",
        +  "invalid_input",
        +  "fee_unavailable",
        +  "quote_unavailable",
        +  "catalog_unavailable",
        +  "rate_limited",
        +  "not_checked",
        +  "no_buyable_offer"
        +]

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search products and check whether specific items are in stock at nearby physical stores in covered US cities, returning store prices and last-checked times through read-only tools.
    830 npm
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Connects conversational AI agents to live inventories of verified neighborhood retail stores through GPS-radius catalog search, zero-PII order reservations with direct merchant checkout links, real-time fulfillment tracking, and store trust reporting. Shoppers settle payment directly with merchants while orders trigger counter terminals and courier dispatch slips.
    2
    4
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Lets AI assistants look up product details — what each product does, who it's for, what it needs, and what it costs — along with checkout availability, so they can recommend the right tool accurately.
    3
    39 PyPI
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables users to search live products on crunchyfashion.in by keyword, collection, price and sort order, retrieve full details for individual items, and browse available collections — with results rendered as a shoppable, storefront-styled carousel or grid.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources