Skip to main content
Glama

Search products

search_catalog
Read-onlyIdempotent

Search products across the United States by a 5-digit US ZIP code or served market. Read-only product facts and JENNi's best offer, without source-shop details. Search results do not verify fulfillment eligibility.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
zipNo5-digit US ZIP code the shopper is in, e.g. 78205.
limitNoProducts to return (default 10).
queryYesWhat the shopper wants, e.g. "running shoes".
marketNoMarket key, e.g. san-antonio-tx. Used when no zip is given.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
locationNoThe place searched around; null for none.
productsYes
delivers_hereNoThe market we deliver in at that location; null when we deliver in none.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • changedOutput schema / properties / products / items / properties / description / description
      Previous value: -"The merchant's own description (get_product only)."New value: +"Product description from the source catalog, when returned."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / availability / description
      Previous value: -"NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Do not call it in or out of stock; when is_eligible_checkout is true it can still be ordered."New value: +"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."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / description
      Previous value: -"`local_delivery`: delivered locally. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `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 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."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / is_eligible_checkout / description
      Previous value: -"True: this offer can be ordered through JENNi; call start_checkout with it when the shopper wants to buy. start_checkout and the checkout page re-check the offer and say why if it can no longer be ordered, so do not ask the shopper to confirm stock or hours first. False: do not send the shopper to checkout for this offer. Nothing is charged until the shopper places the order on the checkout page."New value: +"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."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / shelf_price / description
      Previous value: -"Observed shelf price. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."New value: +"Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields."
    • changedOutput schema / properties / products / items / properties / shelf_price / description
      Previous value: -"Observed shelf price. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."New value: +"Observed shelf price for browsing, not a checkout price. Purchase price and checkout eligibility are separate fields."
    • changedOutput schema / properties / products / items / properties / variants / description
      Previous value: -"Buyable size/colour variants. Give the shopper the variant url so the page opens on that choice. search_catalog lists at most 30; get_product lists all."New value: +"Buyable size/colour variants and their product URLs. Search responses contain at most 30; detail responses may include all variants."
  2. Changed8 schema fields changed
    • changedOutput schema / properties / products / items / properties / offers / description
      Previous value: -"Always empty in product discovery. This field does not verify or rule out fulfillment availability."New value: +"JENNi's single best offer for this product (price, delivery_promise, fulfilled_by, is_eligible_checkout), without source-shop details."
    • addedOutput schema / properties / products / items / properties / offers / items / properties / delivery_promise
      Added value: +{
      +  "description": "Shopper-facing delivery promise, e.g. \"Get it today\" (local delivery) or \"Ships to you\".",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / products / items / properties / offers / items / properties / fulfilled_by
      Added value: +{
      +  "description": "Shopper-facing fulfiller line: \"Delivered by JENNi\".",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / description
      Previous value: -"`local_delivery`: delivered from the shop. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `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 locally. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `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."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / product_id / description
      Previous value: -"The exact variant this shop holds."New value: +"The exact variant this offer covers."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / shelf_price / description
      Previous value: -"Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."New value: +"Observed shelf price. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
    • changedOutput schema / properties / products / items / properties / offers / maxItems
      Previous value: -0New value: +1
    • changedOutput schema / properties / products / items / properties / shelf_price / description
      Previous value: -"Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."New value: +"Observed shelf price. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase."
  3. Changed11 schema fields changed
    • removedOutput schema / properties / products / items / properties / offer_count
      Removed value: -{
      -  "description": "How many offers this product has. search_catalog lists at most 5, orderable ones first; get_product lists all.",
      -  "type": "integer"
      -}
    • addedOutput schema / properties / products / items / properties / offers / description
      Added value: +"Always empty in product discovery. This field does not verify or rule out fulfillment availability."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / city
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / products / items / properties / offers / items / properties / distance_miles
      Removed value: -{
      -  "type": [
      -    "number",
      -    "null"
      -  ]
      -}
    • changedOutput schema / properties / products / items / properties / offers / items / properties / note / description
      Previous value: -"The disclosure a shopper sees for this shop; relay it."New value: +"A fulfillment disclosure, when applicable."
    • removedOutput schema / properties / products / items / properties / offers / items / properties / store_id
      Removed value: -{
      -  "type": "string"
      -}
    • removedOutput schema / properties / products / items / properties / offers / items / properties / store_name
      Removed value: -{
      -  "type": "string"
      -}
    • changedOutput schema / properties / products / items / properties / offers / items / properties / url / description
      Previous value: -"Storefront page for this exact offer."New value: +"Storefront page for this exact product."
    • changedOutput schema / properties / products / items / properties / offers / items / required
      Previous value: -[
      -  "store_id",
      -  "is_eligible_search",
      -  "is_eligible_checkout",
      -  "fulfillment",
      -  "availability"
      -]New value: +[
      +  "product_id",
      +  "is_eligible_search",
      +  "is_eligible_checkout",
      +  "fulfillment",
      +  "availability"
      +]
    • addedOutput schema / properties / products / items / properties / offers / maxItems
      Added value: +0
    • removedOutput schema / properties / store_id
      Removed value: -{
      -  "description": "The one shop searched; null for all shops.",
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
  4. Changed3 schema fields changed
    • changedOutput schema / properties / products / items / properties / offers / items / properties / availability / description
      Previous value: -"NULL when we cannot read that shop's shelf, or the last read is over 24 hours old (shelf_observed_at says when). Null is not 'out of stock' — it means unknown, and must not be presented as either availability state."New value: +"NULL when we have no shelf read under 24 hours old (shelf_observed_at says when). Do not call it in or out of stock; when is_eligible_checkout is true it can still be ordered."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / fulfillment / description
      Previous value: -"`local_delivery`: delivered from the shop. `concierge`: a person goes to the shop and buys it on the buyer's behalf. start_checkout returns a hosted request link, even when is_eligible_checkout is false; the page determines whether a request can proceed. The link is not a stock reservation, durable quote or completed purchase. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `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 from the shop. `concierge`: JENNi collects it from the shop and delivers it; buy it with start_checkout like any orderable offer. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `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."
    • changedOutput schema / properties / products / items / properties / offers / items / properties / is_eligible_checkout / description
      Previous value: -"True when the storefront offers this exact offer for order: ordering on, a checkout price quote, a shelf in stock, a courier or shipping, and a stated delivery fee. Local delivery is also refused when the shop's own hours show no opening within the week; a search result may not carry hours, and start_checkout re-checks with them. False forbids direct checkout. An explicitly `concierge` offer may still use start_checkout for a hosted request handoff; the product page checks whether a request is available. Neither eligibility nor a handoff reserves stock, creates a quote or places an order."New value: +"True: this offer can be ordered through JENNi; call start_checkout with it when the shopper wants to buy. start_checkout and the checkout page re-check the offer and say why if it can no longer be ordered, so do not ask the shopper to confirm stock or hours first. False: do not send the shopper to checkout for this offer. Nothing is charged until the shopper places the order on the checkout page."
  5. Changed33 schema fields changed
    • removedInput schema / properties / brand
      Removed value: -{
      -  "maxLength": 256,
      -  "type": "string"
      -}
    • removedInput schema / properties / cursor
      Removed value: -{
      -  "description": "Confidential opaque upstream continuation; forward unchanged with the same selectors and limit.",
      -  "maxLength": 8192,
      -  "type": "string"
      -}
    • removedInput schema / properties / gtin
      Removed value: -{
      -  "pattern": "^[0-9]{8,14}$",
      -  "type": "string"
      -}
    • removedInput schema / properties / limit / default
      Removed value: -20
    • addedInput schema / properties / limit / description
      Added value: +"Products to return (default 10)."
    • changedInput schema / properties / limit / maximum
      Previous value: -100New value: +20
    • addedInput schema / properties / market
      Added value: +{
      +  "description": "Market key, e.g. san-antonio-tx. Used when no zip is given.",
      +  "type": "string"
      +}
    • removedInput schema / properties / postal_code
      Removed value: -{
      -  "description": "Optional echoed caller context only; never filters facts.",
      -  "pattern": "^[0-9]{5}(?:-[0-9]{4})?$",
      -  "type": "string"
      -}
    • removedInput schema / properties / product_id
      Removed value: -{
      -  "maxLength": 128,
      -  "type": "string"
      -}
    • changedInput schema / properties / query / description
      Previous value: -"Optional title, brand, UPC or GTIN keyword. Omit to enumerate approved root catalog facts."New value: +"What the shopper wants, e.g. \"running shoes\"."
    • removedInput schema / properties / query / maxLength
      Removed value: -256
    • removedInput schema / properties / store_id
      Removed value: -{
      -  "description": "Unsupported for catalog facts; nonempty store filters are rejected.",
      -  "type": "string"
      -}
    • removedInput schema / properties / store_ids
      Removed value: -{
      -  "description": "Empty normalizes to absent; store filtering is unsupported.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "maxItems": 0,
      -  "type": "array"
      -}
    • changedInput schema / properties / zip / description
      Previous value: -"Optional echoed caller context only; never filters facts."New value: +"5-digit US ZIP code the shopper is in, e.g. 78205."
    • removedInput schema / properties / zip / pattern
      Removed value: -"^[0-9]{5}(?:-[0-9]{4})?$"
    • changedInput schema / required
      Previous value: -[]New value: +[
      +  "query"
      +]
    • removedOutput schema / additionalProperties
      Removed value: -false
    • removedOutput schema / properties / catalog_authority
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "kind": {
      -      "const": "jenni_catalog_facts",
      -      "type": "string"
      -    },
      -    "policy_hash": {
      -      "const": "1340ae7f5b87d590b5107d90c6ace904a0b38419101e211f39f5bbaa84e704a1",
      -      "type": "string"
      -    },
      -    "version": {
      -      "const": "2026-10-16.v1",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "kind",
      -    "version",
      -    "policy_hash"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / contract_version
      Removed value: -{
      -  "const": "catalog_facts_v1",
      -  "type": "string"
      -}
    • addedOutput schema / properties / delivers_here
      Added value: +{
      +  "description": "The market we deliver in at that location; null when we deliver in none.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / exhausted
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedOutput schema / properties / items
      Removed value: -{
      -  "items": {
      -    "additionalProperties": false,
      -    "properties": {
      -      "brand": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "category": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "id": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          },
      -          "name": {
      -            "type": [
      -              "string",
      -              "null"
      -            ]
      -          }
      -        },
      -        "required": [
      -          "id",
      -          "name"
      -        ],
      -        "type": "object"
      -      },
      -      "checkout_eligible": {
      -        "const": false,
      -        "type": "boolean"
      -      },
      -      "gtin": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "id": {
      -        "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
      -        "type": "string"
      -      },
      -      "images": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "maxItems": 0,
      -        "type": "array"
      -      },
      -      "offers": {
      -        "items": {
      -          "type": "string"
      -        },
      -        "maxItems": 0,
      -        "type": "array"
      -      },
      -      "stock_state": {
      -        "const": "unknown",
      -        "type": "string"
      -      },
      -      "title": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      },
      -      "upc": {
      -        "type": [
      -          "string",
      -          "null"
      -        ]
      -      }
      -    },
      -    "required": [
      -      "id",
      -      "title",
      -      "brand",
      -      "upc",
      -      "gtin",
      -      "category",
      -      "images",
      -      "offers",
      -      "stock_state",
      -      "checkout_eligible"
      -    ],
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedOutput schema / properties / location
      Added value: +{
      +  "description": "The place searched around; null for none.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • removedOutput schema / properties / mode
      Removed value: -{
      -  "const": "canonical_discovery",
      -  "type": "string"
      -}
    • removedOutput schema / properties / next_cursor
      Removed value: -{
      -  "type": [
      -    "string",
      -    "null"
      -  ]
      -}
    • removedOutput schema / properties / offer_policy
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "state": {
      -      "const": "not_requested",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "state"
      -  ],
      -  "type": "object"
      -}
    • addedOutput schema / properties / products
      Added value: +{
      +  "items": {
      +    "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": "The merchant's own description (get_product only).",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "image": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "offer_count": {
      +        "description": "How many offers this product has. search_catalog lists at most 5, orderable ones first; get_product lists all.",
      +        "type": "integer"
      +      },
      +      "offers": {
      +        "items": {
      +          "properties": {
      +            "availability": {
      +              "description": "NULL when we cannot read that shop's shelf, or the last read is over 24 hours old (shelf_observed_at says when). Null is not 'out of stock' — it means unknown, and must not be presented as either availability state.",
      +              "enum": [
      +                "in_stock",
      +                "out_of_stock",
      +                null
      +              ],
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "city": {
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "distance_miles": {
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "fulfillment": {
      +              "description": "`local_delivery`: delivered from the shop. `concierge`: a person goes to the shop and buys it on the buyer's behalf. start_checkout returns a hosted request link, even when is_eligible_checkout is false; the page determines whether a request can proceed. The link is not a stock reservation, durable quote or completed purchase. `ship_to_home`: shipped from the shop. `in_store_only`: the shop carries it, but it cannot be ordered through JENNi; tell the shopper to visit the shop. `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.",
      +              "enum": [
      +                "pickup",
      +                "local_delivery",
      +                "ship_to_home",
      +                "concierge",
      +                "in_store_only"
      +              ],
      +              "type": "string"
      +            },
      +            "is_eligible_checkout": {
      +              "description": "True when the storefront offers this exact offer for order: ordering on, a checkout price quote, a shelf in stock, a courier or shipping, and a stated delivery fee. Local delivery is also refused when the shop's own hours show no opening within the week; a search result may not carry hours, and start_checkout re-checks with them. False forbids direct checkout. An explicitly `concierge` offer may still use start_checkout for a hosted request handoff; the product page checks whether a request is available. Neither eligibility nor a handoff reserves stock, creates a quote or places an order.",
      +              "type": "boolean"
      +            },
      +            "is_eligible_search": {
      +              "type": "boolean"
      +            },
      +            "note": {
      +              "description": "The disclosure a shopper sees for this shop; relay it.",
      +              "type": "string"
      +            },
      +            "price": {
      +              "description": "USD, e.g. \"$12.50\". Null when we hold no current price.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "product_id": {
      +              "description": "The exact variant this shop holds.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "shelf_observed_at": {
      +              "description": "When the shelf was last read. Null means never.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "shelf_price": {
      +              "description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            },
      +            "store_id": {
      +              "type": "string"
      +            },
      +            "store_name": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "description": "Storefront page for this exact offer.",
      +              "type": [
      +                "string",
      +                "null"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "store_id",
      +            "is_eligible_search",
      +            "is_eligible_checkout",
      +            "fulfillment",
      +            "availability"
      +          ],
      +          "type": "object"
      +        },
      +        "type": "array"
      +      },
      +      "price": {
      +        "description": "Headline price in USD; null when none is held.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "product_id": {
      +        "type": "string"
      +      },
      +      "shelf_price": {
      +        "description": "Store shelf price observed at the named store. Browse information only; not a checkout price. Use `price` and is_eligible_checkout for purchase.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "size": {
      +        "description": "Size of the variant product_id names; null when it has none.",
      +        "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. Give the shopper the variant url so the page opens on that choice. search_catalog lists at most 30; get_product lists all.",
      +        "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"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / query
      Added value: +{
      +  "type": "string"
      +}
    • removedOutput schema / properties / requested_context
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "postal_code": {
      -      "pattern": "^[0-9]{5}(?:-[0-9]{4})?$",
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    }
      -  },
      -  "required": [
      -    "postal_code"
      -  ],
      -  "type": "object"
      -}
    • removedOutput schema / properties / snapshot_semantics
      Removed value: -{
      -  "const": "live_keyset",
      -  "type": "string"
      -}
    • removedOutput schema / properties / source_observed_at
      Removed value: -{
      -  "format": "date-time",
      -  "type": "string"
      -}
    • addedOutput schema / properties / store_id
      Added value: +{
      +  "description": "The one shop searched; null for all shops.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "mode",
      -  "contract_version",
      -  "items",
      -  "next_cursor",
      -  "exhausted",
      -  "catalog_authority",
      -  "offer_policy",
      -  "requested_context",
      -  "source_observed_at",
      -  "snapshot_semantics"
      -]New value: +[
      +  "query",
      +  "products"
      +]
  6. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=false), so the bar is lower, yet the description adds real behavioral context: results carry no source-shop details and do not verify fulfillment eligibility. That caveat meaningfully changes how an agent should present or trust the output.

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

Conciseness4/5

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

Three short sentences, front-loaded with the action and scope, then the result-content constraint. Every sentence contributes; only a slight tightening is possible.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers scope, content limits, and the fulfillment caveat. The main residual gap is routing guidance against the other product-related siblings, which is a usage concern rather than a completeness failure for what this tool does.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented, including the zip/market fallback rule. The description reinforces the ZIP-or-market locality concept but adds no syntax or constraint detail beyond what the schema states, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Search') and resource ('products') with geographic scope ('across the United States by a 5-digit US ZIP code or served market'). It confines the result set to read-only facts plus JENNi's best offer, which separates it from siblings like get_product and get_buying_options, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the locator framing (ZIP vs served market) and by the note that results don't verify fulfillment eligibility, but there is no explicit when-to-use versus find_stores, get_product, or get_buying_options. The agent must infer the choice from the sibling names.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources