discover_products

Use discover_products for all product search. It works best with descriptive natural-language queries ("something elegant for a cocktail party", "breathable linen dress for a beach wedding under $200") and can be combined with structured filters like category, gender, min_price for precise results. AI-powered semantic search with vector embeddings handles intent, not just keywords. Price phrases like "under 200 zł" inside the query are parsed automatically.

Parameters

Core query

ParameterTypeRequiredDefaultDescription
querystringYesNatural language search query — be descriptive for best results. Price phrases like "under 200 zł" are parsed automatically.

Filters

ParameterTypeRequiredDefaultDescription
categorystringNoCategory slug from get_filters, e.g. clothing, clothing/jackets, clothing/jackets/bomber-jackets. Last-segment shortcuts are accepted when unambiguous (e.g. loafers-and-slip-ons resolves the same as shoes/loafers-and-slip-ons).
colorsstring[]NoFilter by colors, e.g. ["black", "navy", "sage green"]
exclude_colorsstring[]NoColors to exclude from results
color_matchstringNoany"any" (default): product has at least one queried color. "exact": at least one image is exclusively the queried colors — use for mono-color searches like "all black".
materialsstring[]NoFilter by materials, e.g. ["cotton", "silk", "leather"]
exclude_materialsstring[]NoMaterials to exclude from results
genderstringNoGender filter — call get_filters for current values
occasionstringNoOccasion filter — call get_filters for current values
seasonstringNoSeason filter — call get_filters for current values
stylestringNoSingle-style filter — call get_filters for current values
stylesstring[]NoMulti-style filter (OR). A product matches if any of its styles is in this list. Use to span a related set, e.g. ["basics","minimalist","preppy","sportswear"] for a "Casual" bucket. Combined with style if both are provided.
silhouettestringNoSilhouette/fit filter — call get_filters for current values
patternstringNoPattern filter (e.g. solid, stripe, checked, floral)
necklinestringNoNeckline filter (e.g. crew, v-neck, turtleneck)
sleevesstringNoSleeve-style filter (e.g. short, long, sleeveless)
available_sizesstring[]NoFilter by available size labels, e.g. ["s", "m", "38"]
is_sustainablebooleanNoOnly products with explicit sustainability claims
brandstringNoFilter by brand name
store_domainstringNoFilter by a single store domain (e.g. "thereformation.com")

Pricing

ParameterTypeRequiredDefaultDescription
min_pricenumberNoMinimum price (in currency, or USD if omitted). Positive float; extra decimals beyond two are floored silently (e.g. 19.99919.99).
max_pricenumberNoMaximum price. Same rules as min_price. If set below min_price, results come back empty.
currencystringNoUSDISO 4217 code for min_price/max_price and returned prices (e.g. "EUR", "PLN").

Pagination

ParameterTypeRequiredDefaultDescription
limitnumberNo10Page size (max 10)
pagenumberNo1Page number.

Response

Returns products ranked by semantic relevance, the current page, and a hasNextPage flag:

{
  "page": 1,
  "hasNextPage": true,
  "results": [
    {
      "id": "665a1f...",
      "title": "Coastal Breeze Linen Dress",
      "summary": "A flowing linen midi in soft sage with subtle pleating.",
      "brand": "Reformation",
      "price": 178,
      "currency": "USD",
      "compareAtPrice": null,
      "category": "clothing/dresses",
      "colors": ["sage green"],
      "materials": ["linen"],
      "gender": "women",
      "silhouette": "relaxed",
      "neckline": "v-neck",
      "sleeves": "short",
      "closures": [],
      "tags": ["casual", "summer", "minimalist", "solid"],
      "isSustainable": true,
      "inStock": true,
      "images": ["https://..."],
      "productUrl": "https://api.vistoya.com/go/665a1f...?src=mcp",
      "availability": {
        "dimensions": ["color", "size"],
        "color": [
          {
            "colorKey": "sage-green",
            "color": "sage green",
            "label": "Sage Green",
            "imageUrls": ["https://..."],
            "availableSizes": [
              { "label": "xs", "inStock": true },
              { "label": "s",  "inStock": true },
              { "label": "m",  "inStock": false }
            ]
          }
        ],
        "sizes": [
          { "label": "xs", "inStock": true },
          { "label": "s",  "inStock": true },
          { "label": "m",  "inStock": false }
        ]
      },
      "relevanceScore": 0.92
    }
  ]
}

Fields

FieldDescription
pageCurrent result page
hasNextPageTrue when another page of results is available
idProduct identifier — pass to get_product for full details
titleProduct title
summaryAI-generated shopping summary. Not merchant copy — call get_product for merchantDescription
priceCurrent price rendered in currency
currencyPrice currency code
compareAtPriceOriginal price before discount (nullable — present when on sale)
categoryMost specific available category value, preferring subcategory over broad category
colorsProduct colors
materialsProduct materials
genderTarget gender
silhouetteFit/silhouette
necklineNeckline value
sleevesSleeve style
closuresClosure types (e.g. zipper, button)
tagsMerged public descriptive tags — derived from fit, function, details, aesthetic, style, and pattern. Use these to read off stylistic/occasion/season hints that aren't promoted to top-level fields.
isSustainableHas explicit sustainability claims
inStockAny variant is in stock
imagesProduct image URLs
productUrlClick-tracked Vistoya redirect URL
brandBrand name
availabilityCompact color/size availability matrix. Full SKU-level variants come from get_product
relevanceScoreSemantic similarity score (0–1) — how closely the product matches the query

Examples

Natural language with price filter:

{
  "name": "discover_products",
  "arguments": {
    "query": "black leather jacket for going out",
    "max_price": 300
  }
}

Price in a non-USD currency:

{
  "name": "discover_products",
  "arguments": {
    "query": "white wool coat",
    "max_price": 1000,
    "currency": "PLN"
  }
}

Size + sustainability filter:

{
  "name": "discover_products",
  "arguments": {
    "query": "organic cotton t-shirt",
    "available_sizes": ["m", "l"],
    "is_sustainable": true
  }
}

Multi-style filter for a "Casual" bucket:

{
  "name": "discover_products",
  "arguments": {
    "query": "easy weekend layers",
    "styles": ["basics", "minimalist", "preppy", "sportswear"],
    "season": "fall"
  }
}

After a result, call get_product for the full merchant description, all images, and SKU-level variants. Use find_similar_products with a result's id for "more like this." When called from a UI-capable host (ChatGPT Apps SDK, Claude Desktop, Cursor, VS Code Copilot, Goose), the same response renders inline as a visual product grid via the embedded widget — no separate render call needed.

Call get_filters once at the start of a session to learn which category, colors, materials, style, and other enum values are valid in the current catalog.