JENNi Shop Local
Server Details
Search local store inventory by US ZIP, verify same-day delivery, and check out on JENNi.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 8 tools
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.
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.
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.
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 toolscomplete_checkoutPlace the orderADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| checkout_id | Yes | ||
| payment_token | No | Optional. Stripe shared payment token, starting spt_. Leave it out to get the shopper's pay link (continue_url). | |
| idempotency_key | No | Optional. Reuse the same value to retry safely; the retry returns the first result instead of acting twice. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | incomplete, ready_for_complete, requires_escalation, completed or canceled. |
| totals | Yes | |
| currency | No | |
| messages | Yes | |
| order_id | No | |
| next_step | Yes | |
| expires_at | No | |
| line_items | No | |
| checkout_id | Yes | |
| reason_code | No | |
| continue_url | No | Present when the shopper should finish on JENNi instead. |
| fulfilled_by | Yes | |
| fulfillment_options | Yes | |
| selected_fulfillment_mode | No |
TDQS
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.
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.
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.
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.
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.
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 orderAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| buyer | Yes | ||
| quantity | No | How many (default 1). | |
| product_id | Yes | ||
| idempotency_key | No | Optional. Reuse the same value to retry safely; the retry returns the first result instead of acting twice. | |
| delivery_address | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | incomplete, ready_for_complete, requires_escalation, completed or canceled. |
| totals | Yes | |
| currency | No | |
| messages | Yes | |
| order_id | No | |
| next_step | Yes | |
| expires_at | No | |
| line_items | No | |
| checkout_id | Yes | |
| reason_code | No | |
| continue_url | No | Present when the shopper should finish on JENNi instead. |
| fulfilled_by | Yes | |
| fulfillment_options | Yes | |
| selected_fulfillment_mode | No |
TDQS
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.
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.
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.
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.
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.
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 deliveryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | Yes | ||
| quantity | Yes | ||
| product_id | Yes | ||
| fulfillment_mode | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| title | No | |
| pricing | No | unit_price x quantity + fee = total_before_tax. Sales tax is added at checkout. |
| available | Yes | True when this mode can be ordered for this product, ZIP and quantity. |
| product_id | Yes | |
| unit_price | No | |
| reason_code | No | Why this mode cannot be bought here now. |
| delivery_promise | No | Local delivery: "Get it today" or "We'll deliver by <Month D>". |
| fulfillment_mode | Yes |
TDQS
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.
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.
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.
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.
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.
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 orderARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| order_token | Yes | The order token from the shopper's JENNi order page, starting jos1_. |
Output Schema
| Name | Required | Description |
|---|---|---|
| eta | Yes | Delivery estimate when JENNi has one; null means not known yet. |
| items | Yes | |
| status | Yes | |
| payment | Yes | |
| tracking | Yes | |
| next_step | Yes | |
| updated_at | No | |
| order_state | Yes | |
| refund_state | Yes |
TDQS
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.
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.
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.
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.
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.
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 detailsBRead-onlyIdempotentInspect
Details for one product_id: description, images, sizes and colours, and its price and delivery at the ZIP.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit US ZIP code, for local prices and delivery options. | |
| market | No | Market key, e.g. san-antonio-tx. Used when no zip is given. | |
| product_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| product | Yes |
TDQS
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.
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.
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.
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.
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.
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 productsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit US ZIP code the shopper is in, e.g. 78205. | |
| page | No | 1-based results page; call again with page+1 while page < paging.total_pages. | |
| limit | No | Products to return (default 10). | |
| query | Yes | What the shopper wants, e.g. "running shoes". | |
| market | No | Market key, e.g. san-antonio-tx. Used when no zip is given. | |
| max_price | No | Highest price the shopper will pay, in US dollars, e.g. 120. Put a price limit here, not in the query. | |
| fulfillment_mode | No | Search one mode only. Lists local delivery offers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | What could not be checked (for example local delivery): that availability is unknown, not unavailable. |
| paging | No | |
| products | Yes | |
| reason_code | No | Present only when products is empty. |
TDQS
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.
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.
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.
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.
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.
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 checkoutARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| zip | No | 5-digit US delivery ZIP code, when no delivery_address is given. | |
| items | No | Several products in one link, instead of product_id. Same fulfillment_mode and ZIP for all. | |
| quantity | No | How many of product_id (default 1). | |
| product_id | No | The exact item: a variant's product_id when it has variants. | |
| delivery_address | No | Delivery destination. Address details are not placed in the checkout URL. | |
| fulfillment_mode | Yes | Selected fulfillment mode: local_delivery arrives on the delivery date the buying-options read returns (delivery_promise / deliver_by). |
Output Schema
| Name | Required | Description |
|---|---|---|
| item | No | |
| items | No | |
| pricing | No | unit_price x quantity + fee = total_before_tax. Sales tax is added at checkout. |
| quantity | No | |
| next_step | Yes | |
| product_id | No | |
| unit_price | No | |
| reason_code | No | Machine-readable reason, alongside the prose note. |
| checkout_url | Yes | |
| delivery_promise | No | Local delivery: "Get it today" or "We'll deliver by <Month D>". |
| fulfillment_mode | No |
TDQS
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.
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.
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.
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.
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.
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 orderAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| buyer | No | ||
| quantity | No | ||
| checkout_id | Yes | ||
| idempotency_key | No | Optional. Reuse the same value to retry safely; the retry returns the first result instead of acting twice. | |
| delivery_address | No | ||
| fulfillment_mode | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | Yes | incomplete, ready_for_complete, requires_escalation, completed or canceled. |
| totals | Yes | |
| currency | No | |
| messages | Yes | |
| order_id | No | |
| next_step | Yes | |
| expires_at | No | |
| line_items | No | |
| checkout_id | Yes | |
| reason_code | No | |
| continue_url | No | Present when the shopper should finish on JENNi instead. |
| fulfilled_by | Yes | |
| fulfillment_options | Yes | |
| selected_fulfillment_mode | No |
TDQS
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.
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.
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.
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.
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.
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 tool update
- Changed
get_product1 field changed- added
Output schema / properties / product / properties / ratingsAdded 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 tool updates
- Changed
get_product1 field changed- added
Output schema / properties / product / properties / last_verified_atAdded 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" + ] +}
- Changed
search_catalog1 field changed- added
Output schema / properties / products / items / properties / last_verified_atAdded 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" + ] +}
5 tool updates
- Changed
get_buying_options4 fields changed- changed
Input schema / properties / fulfillment_mode / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / delivery_promise / descriptionPrevious 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>\"." - changed
Output schema / properties / fulfillment_mode / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / pricing / properties / fee / descriptionPrevious value: -"Local delivery fee or flat shipping."New value: +"Local delivery fee."
- Changed
get_product3 fields changed- changed
Output schema / properties / product / properties / delivery_promise / descriptionPrevious 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>\"." - changed
Output schema / properties / product / properties / fulfillment / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / product / properties / price / descriptionPrevious 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."
- Changed
search_catalog5 fields changed- changed
Input schema / properties / fulfillment_mode / descriptionPrevious 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." - changed
Input schema / properties / fulfillment_mode / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / products / items / properties / delivery_promise / descriptionPrevious 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>\"." - changed
Output schema / properties / products / items / properties / fulfillment / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / products / items / properties / price / descriptionPrevious 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."
- Changed
start_checkout5 fields changed- changed
Input schema / properties / fulfillment_mode / descriptionPrevious 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)." - changed
Input schema / properties / fulfillment_mode / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / delivery_promise / descriptionPrevious 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>\"." - changed
Output schema / properties / fulfillment_mode / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +] - changed
Output schema / properties / pricing / properties / fee / descriptionPrevious value: -"Local delivery fee or flat shipping."New value: +"Local delivery fee."
- Changed
update_checkout1 field changed- changed
Input schema / properties / fulfillment_mode / enumPrevious value: -[ - "local_delivery", - "ship_to_home" -]New value: +[ + "local_delivery" +]
1 tool update
- Changed
complete_checkout2 fields changed- changed
Input schema / properties / payment_token / descriptionPrevious 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)." - changed
Input schema / requiredPrevious value: -[ - "checkout_id", - "payment_token" -]New value: +[ + "checkout_id" +]
2 tool updates
- Changed
get_product1 field changed- added
Output schema / properties / product / properties / variants / items / properties / labelAdded value: +{ + "description": "The source's own option text, word for word, when the variant has no size or colour.", + "type": "string" +}
- Changed
search_catalog1 field changed- added
Output schema / properties / products / items / properties / variants / items / properties / labelAdded value: +{ + "description": "The source's own option text, word for word, when the variant has no size or colour.", + "type": "string" +}
1 tool update
- Changed
start_checkout5 fields changed- added
Input schema / properties / itemsAdded 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" +} - added
Input schema / properties / quantityAdded value: +{ + "description": "How many of product_id (default 1).", + "maximum": 10000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / zipAdded value: +{ + "description": "5-digit US delivery ZIP code, when no delivery_address is given.", + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "product_id", - "fulfillment_mode", - "delivery_address" -]New value: +[ + "fulfillment_mode" +] - added
Output schema / properties / itemsAdded value: +{ + "items": { + "type": "object" + }, + "type": "array" +}
1 tool update
- Changed
search_catalog1 field changed- added
Input schema / properties / max_priceAdded 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" +}
4 tool updates
- Changed
get_buying_options13 fields changed- added
Output schema / properties / availableAdded value: +{ + "description": "True when this mode can be ordered for this product, ZIP and quantity.", + "type": "boolean" +} - added
Output schema / properties / delivery_promiseAdded value: +{ + "description": "Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\".", + "type": "string" +} - added
Output schema / properties / fulfillment_modeAdded value: +{ + "enum": [ + "local_delivery", + "ship_to_home" + ], + "type": "string" +} - removed
Output schema / properties / fulfillment_optionRemoved 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" -} - added
Output schema / properties / noteAdded value: +{ + "type": "string" +} - added
Output schema / properties / pricingAdded 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" +} - removed
Output schema / properties / productRemoved 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" -} - added
Output schema / properties / product_idAdded value: +{ + "type": "string" +} - added
Output schema / properties / reason_codeAdded 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" +} - removed
Output schema / properties / requested_contextRemoved 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" -} - added
Output schema / properties / titleAdded value: +{ + "type": "string" +} - added
Output schema / properties / unit_priceAdded value: +{ + "type": "string" +} - changed
Output schema / requiredPrevious value: -[ - "product", - "requested_context", - "fulfillment_option" -]New value: +[ + "product_id", + "fulfillment_mode", + "available" +]
- Changed
get_product25 fields changed- changed
Output schema / properties / product / properties / brand / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / product / properties / category / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / product / properties / color / descriptionRemoved value: -"Colour of the variant product_id names; null when it has none." - changed
Output schema / properties / product / properties / color / typePrevious value: -[ - "string", - "null" -]New value: +"string" - added
Output schema / properties / product / properties / delivery_promiseAdded value: +{ + "description": "Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\".", + "type": "string" +} - removed
Output schema / properties / product / properties / description / descriptionRemoved value: -"Product description from the source catalog, when returned." - changed
Output schema / properties / product / properties / description / typePrevious value: -[ - "string", - "null" -]New value: +"string" - added
Output schema / properties / product / properties / fulfillmentAdded value: +{ + "enum": [ + "local_delivery", + "ship_to_home" + ], + "type": "string" +} - changed
Output schema / properties / product / properties / image / typePrevious value: -[ - "string", - "null" -]New value: +"string" - added
Output schema / properties / product / properties / imagesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - removed
Output schema / properties / product / properties / noteRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / product / properties / offersRemoved 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" -} - changed
Output schema / properties / product / properties / price / descriptionPrevious 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." - changed
Output schema / properties / product / properties / price / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / product / properties / reason_code / descriptionPrevious 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." - removed
Output schema / properties / product / properties / shelf_priceRemoved value: -{ - "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.", - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / product / properties / size / descriptionPrevious 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." - changed
Output schema / properties / product / properties / size / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / product / properties / url / descriptionPrevious 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." - changed
Output schema / properties / product / properties / url / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / product / properties / variants / descriptionPrevious 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." - changed
Output schema / properties / product / properties / variants / items / properties / color / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / product / properties / variants / items / properties / size / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / product / properties / variants / items / properties / urlRemoved value: -{ - "description": "Storefront page opened on this variant.", - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / product / requiredPrevious value: -[ - "product_id", - "title", - "offers" -]New value: +[ + "product_id", + "title" +]
- Changed
search_catalog31 fields changed- removed
Output schema / properties / delivers_hereRemoved value: -{ - "description": "The market we deliver in at that location; null when we deliver in none.", - "type": [ - "string", - "null" - ] -} - removed
Output schema / properties / locationRemoved value: -{ - "description": "The place searched around; null for none.", - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / note / descriptionPrevious 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." - removed
Output schema / properties / paging / descriptionRemoved value: -"Number of result pages; call again with page+1 while page < total_pages. At most 42; 0 when nothing matched." - removed
Output schema / properties / paging / requiredRemoved value: -[ - "page", - "total_pages", - "total_matches" -] - changed
Output schema / properties / products / items / properties / brand / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / products / items / properties / category / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / products / items / properties / color / descriptionRemoved value: -"Colour of the variant product_id names; null when it has none." - changed
Output schema / properties / products / items / properties / color / typePrevious value: -[ - "string", - "null" -]New value: +"string" - added
Output schema / properties / products / items / properties / delivery_promiseAdded value: +{ + "description": "Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\".", + "type": "string" +} - removed
Output schema / properties / products / items / properties / descriptionRemoved value: -{ - "description": "Product description from the source catalog, when returned.", - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / products / items / properties / fulfillmentAdded value: +{ + "enum": [ + "local_delivery", + "ship_to_home" + ], + "type": "string" +} - changed
Output schema / properties / products / items / properties / image / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / products / items / properties / noteRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / products / items / properties / offersRemoved 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" -} - changed
Output schema / properties / products / items / properties / price / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / price / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / products / items / properties / reason_codeRemoved 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" -} - removed
Output schema / properties / products / items / properties / shelf_priceRemoved value: -{ - "description": "Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields.", - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / products / items / properties / size / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / size / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / products / items / properties / url / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / url / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / products / items / properties / variants / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / variants / items / properties / color / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / products / items / properties / variants / items / properties / size / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / products / items / properties / variants / items / properties / urlRemoved value: -{ - "description": "Storefront page opened on this variant.", - "type": [ - "string", - "null" - ] -} - changed
Output schema / properties / products / items / requiredPrevious value: -[ - "product_id", - "title", - "offers" -]New value: +[ + "product_id", + "title" +] - removed
Output schema / properties / queryRemoved value: -{ - "type": "string" -} - changed
Output schema / properties / reason_code / descriptionPrevious 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." - changed
Output schema / requiredPrevious value: -[ - "query", - "products" -]New value: +[ + "products" +]
- Changed
start_checkout30 fields changed- added
Output schema / properties / delivery_promise / descriptionAdded value: +"Local delivery: \"Get it today\" or \"We'll deliver by <Month D>\". Ship-to-home: \"Ships to you\"." - changed
Output schema / properties / delivery_promise / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / fulfilled_byRemoved value: -{ - "const": "Delivered by JENNi", - "type": "string" -} - removed
Output schema / properties / kindRemoved value: -{ - "enum": [ - "basket" - ], - "type": "string" -} - changed
Output schema / properties / pricing / descriptionPrevious 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." - removed
Output schema / properties / pricing / properties / currencyRemoved value: -{ - "const": "USD", - "type": "string" -} - removed
Output schema / properties / pricing / properties / eta / descriptionRemoved 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)." - removed
Output schema / properties / pricing / properties / eta / properties / deliver_by_textRemoved value: -{ - "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.", - "type": "string" -} - changed
Output schema / properties / pricing / properties / eta / properties / earliest_date / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / pricing / properties / eta / properties / kindRemoved value: -{ - "enum": [ - "same_day", - "window" - ], - "type": "string" -} - changed
Output schema / properties / pricing / properties / eta / properties / latest_date / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / properties / pricing / properties / eta / typePrevious value: -[ - "object", - "null" -]New value: +"object" - added
Output schema / properties / pricing / properties / fee / descriptionAdded value: +"Local delivery fee or flat shipping." - changed
Output schema / properties / pricing / properties / fee / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / pricing / properties / fee_centsRemoved value: -{ - "type": [ - "integer", - "null" - ] -} - removed
Output schema / properties / pricing / properties / fee_kindRemoved value: -{ - "enum": [ - "local_delivery_fee", - "shipping" - ], - "type": "string" -} - removed
Output schema / properties / pricing / properties / fulfilled_byRemoved value: -{ - "const": "Delivered by JENNi", - "type": "string" -} - removed
Output schema / properties / pricing / properties / fulfillment_modeRemoved value: -{ - "enum": [ - "local_delivery", - "ship_to_home" - ], - "type": "string" -} - added
Output schema / properties / pricing / properties / reason_code / descriptionAdded value: +"Machine-readable reason, alongside the prose note." - added
Output schema / properties / pricing / properties / subtotal / descriptionAdded value: +"unit_price x quantity, when quantity > 1." - removed
Output schema / properties / pricing / properties / subtotal_centsRemoved value: -{ - "type": "integer" -} - removed
Output schema / properties / pricing / properties / taxRemoved value: -{ - "const": "added_at_checkout", - "type": "string" -} - removed
Output schema / properties / pricing / properties / total_before_tax / descriptionRemoved value: -"subtotal + fee before tax; null when the fee could not be read." - changed
Output schema / properties / pricing / properties / total_before_tax / typePrevious value: -[ - "string", - "null" -]New value: +"string" - removed
Output schema / properties / pricing / properties / total_before_tax_centsRemoved value: -{ - "type": [ - "integer", - "null" - ] -} - removed
Output schema / properties / pricing / properties / unit_price_centsRemoved value: -{ - "type": "integer" -} - changed
Output schema / properties / pricing / typePrevious value: -[ - "object", - "null" -]New value: +"object" - removed
Output schema / properties / unit_price / descriptionRemoved value: -"The unit price the page shows; null when it could not be read (reason_code says why)." - changed
Output schema / properties / unit_price / typePrevious value: -[ - "string", - "null" -]New value: +"string" - changed
Output schema / requiredPrevious value: -[ - "kind", - "checkout_url", - "next_step" -]New value: +[ + "checkout_url", + "next_step" +]
1 tool update
- Changed
search_catalog2 fields changed- added
Input schema / properties / pageAdded value: +{ + "description": "1-based results page; call again with page+1 while page < paging.total_pages.", + "maximum": 42, + "minimum": 1, + "type": "integer" +} - added
Output schema / properties / pagingAdded 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" +}
5 tool updates
- Changed
get_buying_options6 fields changed- added
Output schema / properties / fulfillment_option / properties / pricingAdded 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" + ] +} - removed
Output schema / properties / fulfillment_option / properties / quoteRemoved 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" - ] -} - changed
Output schema / properties / fulfillment_option / properties / reason_code / enumPrevious 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" +] - changed
Output schema / properties / product / properties / offers / items / properties / price / descriptionPrevious 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." - changed
Output schema / properties / product / properties / price / descriptionPrevious value: -"Headline price in USD; null when none is held."New value: +"Headline price in USD; null when there is none." - changed
Output schema / properties / product / properties / reason_code / enumPrevious 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" +]
- Changed
get_order_status5 fields changed- removed
Output schema / properties / payment / properties / amount_held_centsRemoved value: -{ - "type": [ - "integer", - "null" - ] -} - removed
Output schema / properties / payment / properties / hold_expires_atRemoved value: -{ - "type": [ - "string", - "null" - ] -} - added
Output schema / properties / payment / properties / pending_amount_centsAdded value: +{ + "type": [ + "integer", + "null" + ] +} - changed
Output schema / properties / payment / properties / state / enumPrevious value: -[ - "held", - "captured", - "hold_released", - "none", - "unavailable" -]New value: +[ + "pending", + "charged", + "not_charged", + "none", + "unavailable" +] - changed
Output schema / properties / refund_state / enumPrevious value: -[ - "none", - "hold_released", - "unknown" -]New value: +[ + "none", + "not_charged", + "unknown" +]
- Changed
get_product3 fields changed- changed
Output schema / properties / product / properties / offers / items / properties / price / descriptionPrevious 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." - changed
Output schema / properties / product / properties / price / descriptionPrevious value: -"Headline price in USD; null when none is held."New value: +"Headline price in USD; null when there is none." - changed
Output schema / properties / product / properties / reason_code / enumPrevious 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" +]
- Changed
search_catalog4 fields changed- changed
Output schema / properties / products / items / properties / offers / items / properties / price / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / price / descriptionPrevious value: -"Headline price in USD; null when none is held."New value: +"Headline price in USD; null when there is none." - changed
Output schema / properties / products / items / properties / reason_code / enumPrevious 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" +] - changed
Output schema / properties / reason_code / enumPrevious 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" +]
- Changed
start_checkout3 fields changed- added
Output schema / properties / pricingAdded 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" + ] +} - removed
Output schema / properties / quoteRemoved 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" - ] -} - changed
Output schema / properties / reason_code / enumPrevious 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" +]
3 tool updates
- Changed
get_buying_options1 field changed- changed
Output schema / properties / product / properties / size / descriptionPrevious 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."
- Changed
get_product1 field changed- changed
Output schema / properties / product / properties / size / descriptionPrevious 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."
- Changed
search_catalog2 fields changed- added
Input schema / properties / fulfillment_modeAdded 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" +} - changed
Output schema / properties / products / items / properties / size / descriptionPrevious 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."
3 tool updates
- Changed
get_buying_options1 field changed- changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / descriptionPrevious 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."
- Changed
get_product1 field changed- changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / descriptionPrevious 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."
- Changed
search_catalog1 field changed- changed
Output schema / properties / products / items / properties / offers / items / properties / fulfillment / descriptionPrevious 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."
3 tool updates
- Added
complete_checkout - Added
create_checkout - Added
update_checkout
4 tool updates
- Changed
get_buying_options6 fields changed- added
Output schema / properties / fulfillment_option / properties / deliver_byAdded value: +{ + "description": "Local delivery only: YYYY-MM-DD JENNi delivers by (cutoff-aware), when known.", + "type": "string" +} - changed
Output schema / properties / fulfillment_option / properties / delivery_promise / descriptionPrevious 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\"." - changed
Output schema / properties / fulfillment_option / properties / quote / properties / eta / descriptionPrevious 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)." - added
Output schema / properties / fulfillment_option / properties / quote / properties / eta / properties / deliver_by_textAdded value: +{ + "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.", + "type": "string" +} - changed
Output schema / properties / product / properties / offers / items / properties / delivery_promise / descriptionPrevious 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." - changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / descriptionPrevious 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."
- Changed
get_product2 fields changed- changed
Output schema / properties / product / properties / offers / items / properties / delivery_promise / descriptionPrevious 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." - changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / descriptionPrevious 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."
- Changed
search_catalog2 fields changed- changed
Output schema / properties / products / items / properties / offers / items / properties / delivery_promise / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / offers / items / properties / fulfillment / descriptionPrevious 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."
- Changed
start_checkout3 fields changed- changed
Input schema / properties / fulfillment_mode / descriptionPrevious 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." - changed
Output schema / properties / quote / properties / eta / descriptionPrevious 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)." - added
Output schema / properties / quote / properties / eta / properties / deliver_by_textAdded value: +{ + "description": "Local delivery only: the date JENNi delivers by, e.g. October 23.", + "type": "string" +}
1 tool update
- Changed
get_buying_options1 field changed- changed
Input schema / properties / quantity / maximumPrevious value: -99New value: +10000
4 tool updates
- Changed
get_buying_options7 fields changed- changed
Output schema / properties / fulfillment_option / properties / quote / properties / reason_code / enumPrevious 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" +] - changed
Output schema / properties / fulfillment_option / properties / reason_code / enumPrevious 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" +] - changed
Output schema / properties / fulfillment_option / properties / shipping_price / descriptionPrevious 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`." - changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / descriptionPrevious 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." - changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / enumPrevious value: -[ - "pickup", - "local_delivery", - "ship_to_home", - "concierge", - "in_store_only" -]New value: +[ + "local_delivery", + "ship_to_home", + "in_store_only" +] - changed
Output schema / properties / product / properties / offers / items / properties / shipping_price / descriptionPrevious 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`." - changed
Output schema / properties / product / properties / reason_code / enumPrevious 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" +]
- Changed
get_product4 fields changed- changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / descriptionPrevious 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." - changed
Output schema / properties / product / properties / offers / items / properties / fulfillment / enumPrevious value: -[ - "pickup", - "local_delivery", - "ship_to_home", - "concierge", - "in_store_only" -]New value: +[ + "local_delivery", + "ship_to_home", + "in_store_only" +] - changed
Output schema / properties / product / properties / offers / items / properties / shipping_price / descriptionPrevious 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`." - changed
Output schema / properties / product / properties / reason_code / enumPrevious 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" +]
- Changed
search_catalog6 fields changed- added
Output schema / properties / noteAdded value: +{ + "description": "Plain-language context for an empty or ship-only result.", + "type": "string" +} - changed
Output schema / properties / products / items / properties / offers / items / properties / fulfillment / descriptionPrevious 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." - changed
Output schema / properties / products / items / properties / offers / items / properties / fulfillment / enumPrevious value: -[ - "pickup", - "local_delivery", - "ship_to_home", - "concierge", - "in_store_only" -]New value: +[ + "local_delivery", + "ship_to_home", + "in_store_only" +] - changed
Output schema / properties / products / items / properties / offers / items / properties / shipping_price / descriptionPrevious 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`." - changed
Output schema / properties / products / items / properties / reason_code / enumPrevious 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" +] - added
Output schema / properties / reason_codeAdded 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" +}
- Changed
start_checkout3 fields changed- changed
Output schema / properties / kind / enumPrevious value: -[ - "basket", - "concierge_request" -]New value: +[ + "basket" +] - changed
Output schema / properties / quote / properties / reason_code / enumPrevious 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" +] - changed
Output schema / properties / reason_code / enumPrevious 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
Send flowers in the US: search arrangements, same-day florist delivery by ZIP, checkout links
Search live store shelves, verify delivery windows, and run instant AI agent checkouts.
Send real gifts to 190+ countries: search, check delivery, get a secure checkout link.
Agent-native product catalog: 300M+ products, 150,000+ stores, deliver_to ranking.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables 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 npmMIT- AlicenseAqualityCmaintenanceConnects 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.241MIT
- AlicenseAqualityCmaintenanceLets 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.339 PyPIMIT
- AlicenseNot gradedqualityCmaintenanceEnables 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
Glama MCP Gateway
Add one secure layer between your agents and this server.