Skip to main content
Glama

Server Details

Search and get fashion products recommendations across multiple e-ecom stores

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
98.6% over 79 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
vistoya/vistoya-mcp
GitHub Stars
0
Server Listing
Vistoya
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a clearly distinct entry point: NL/filter discovery (discover_*), seed-based similarity (find_similar_*), catalog facets (get_filters), and single-entity detail (get_product). The discover_brands description explicitly resolves the one potentially subtle case by telling the agent to use find_similar_brands for a plain 'brands like X' request. The discover_products vs. get_product boundary (compact cards vs. SKU-level detail) is spelled out rather than left implicit.

Naming Consistency5/5

All six names follow a predictable verb_noun pattern (discover_*, find_similar_*, get_*), with no casing or style drift. Singular/plural is used meaningfully rather than arbitrarily (get_product for one item vs. get_filters for the dimension set).

Tool Count5/5

Six tools is well-scoped for a fashion catalog discovery server: two discovery tools, two similarity tools, plus facets and detail. Each tool has a distinct consumer and there are no redundant or filler endpoints.

Completeness4/5

Discovery, similarity, facet lookup, and product detail give a complete browse-to-detail lifecycle, and find_similar_products precedes to full variant detail via get_product. Minor gaps: there is no get_brand tool to retrieve a brand profile (only brand search/listing and similarity), and find_similar_brands offers no pagination while its product counterpart does.

Available Tools

6 tools
discover_brandsAInspect

Find fashion brands using natural language, structured filters, or both. Best for queries like "Italian streetwear brands", "Scandinavian minimalist brands", "Japanese technical outerwear", "brands with avant-garde tailoring", or qualified similarity such as "brands like Rick Owens for technical outerwear". For a plain "brands like X" request, use find_similar_brands. Country adjectives ("Italian", "Scandinavian", "Nordic", "Japanese", "Iberian", "Benelux") are parsed server-side into shipping-origin filters; you don't need to translate them to ISO codes. query is optional — provide a query, structured filters, or both. Brand country/shipping signals are best-effort and separate from product availability.

NameRequiredDescriptionDefault
limitNoMaximum number of brands to return (1-20, default 12).
queryNoNatural language brand search query, e.g. "Italian streetwear brands", "Scandinavian minimalist brands", "Japanese technical outerwear", or qualified similarity such as "brands like Rick Owens for technical outerwear". Use find_similar_brands for a plain "brands like X" request. Similarity seeds must resolve to an active catalog brand or merged alias; unknown or ambiguous seeds return no brands. Country adjectives are parsed server-side — no need to translate them into ISO codes. Optional: when omitted, results are filtered by the structured fields below.
styleNoOptional style filter, e.g. streetwear, minimalist, elegant, avant-garde, techwear.
countryNoOptional shopper location as an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.
price_tierNoOptional public brand price-tier focus filter: budget, mid, premium, or luxury. Input "budget" maps to the brand-level output tier "value".
gender_focusNoOptional brand audience focus filters.
category_focusNoOptional brand category focus filters, e.g. ["clothing", "shoes"].
ships_from_countryNoOptional ISO-3166-1 alpha-2 country filter for best-effort store shipping origin, e.g. "IT", "US", "GB". Lowercase input is accepted and normalized to uppercase. This is not the same as brand origin.

Output Schema

NameRequiredDescription
brandsYes

TDQS

A4.6/5.0
Behavior4/5

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

Beyond the annotations, it discloses server-side parsing of country adjectives and warns that brand country and shipping signals are best-effort and distinct from product availability. These are useful processing and data-quality caveats, though the description does not add further operational context such as result freshness or ranking behavior.

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

Conciseness4/5

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

The purpose is front-loaded, followed by routing, parsing, optionality, and data-quality guidance in a logical order. It is dense and mostly purposeful, but the long example list and repetition of schema guidance make it somewhat longer than necessary.

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

Completeness5/5

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

For an eight-parameter discovery tool, the description covers supported search modes, sibling selection, country-language handling, optional inputs, and an important limitation of shipping-origin signals. The fully documented input schema and presence of an output schema fill the remaining structural and return-value details.

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

Parameters4/5

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

Schema coverage is 100%, so the structured fields already provide the baseline parameter documentation. The description adds useful cross-parameter semantics by explaining that query and filters can be combined and that country adjectives require no ISO-code translation, although some of this guidance duplicates the query schema.

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

Purpose5/5

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

The opening clearly states the verb and resource: finding fashion brands through natural language, structured filters, or both. Concrete queries establish the intended scope, and the explicit distinction from find_similar_brands separates it from its closest sibling.

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

Usage Guidelines5/5

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

It explains when this tool is best suited, including qualified similarity requests, and explicitly routes plain "brands like X" requests to find_similar_brands. It also clarifies that callers may supply a query, structured filters, or both.

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

discover_productsAInspect

Find fashion products using natural language and/or structured filters. Provide a query for semantic ranking via multimodal text+image embeddings ("oversized wool coat", "black leather jacket", "minimalist gold jewelry", "linen shirt for a beach wedding under $200") — best for open-ended discovery. Keep queries concrete: noun-led with up to one or two modifiers works best ("summer linen shirt" beats "breathable linen shirt perfect for summer"). Provide only structured filters (category, brand, colors, gender, price, etc.) for pure browse — results are recency-ranked and paginate cleanly. Combine both for filtered semantic search. At least one of query or a filter must be provided.

Example calls (notice the sparse filter population — descriptive attributes stay in query, not in structured fields):

  • "linen wedding guest dress under $200" → {query: "linen wedding guest dress", gender: "women", max_price: 200, materials: ["linen"]}

  • "wool coat under $300" → {query: "wool coat", gender: "women", max_price: 300, materials: ["wool"]}

  • "browse women's black dresses $100-$300" → {gender: "women", category: "clothing/dresses", colors: ["black"], min_price: 100, max_price: 300}

  • "Acne Studios outerwear" → {query: "outerwear", brand: "Acne Studios", gender: "women"}

Returns compact product cards: AI-generated summary, price, images, tags, and compact availability by color/size; variant price differences are nested under the availability dimension that determines price. For merchant description, store info, SKU-level variants, exact variant prices, and all product images, call get_product with a product ID from these results. Multi-currency prices supported (e.g. "under 200 zł" or min_price=200 + currency="PLN"); returned prices render in the requested currency when provided.

NameRequiredDescriptionDefault
pageNoPage number. Increment while the response indicates another page. Vistoya results are returned first; a later page may continue with an optional external catalog after owned results are exhausted. Provider failure does not fail normal discovery.
brandNoFilter by brand name
limitNoPage size (1-20, default 12)
queryNoNatural language search query — be descriptive for best results. Can include price with currency symbols (e.g. "white coat under 200 zł") which will be parsed automatically. Optional: when omitted, results are filtered by the structured fields below and ranked by recency. Provide either a query, structured filters, or both.
colorsNoFilter by lowercase colors: e.g. ["black", "navy", "sage green"]
genderNoGender filter.
seasonNoSeason filter. Soft descriptor — set ONLY when the user explicitly named the season. The `query` field already captures season semantically; over-specifying is the most common cause of zero-result calls.
stylesNoStyle filter (OR semantics — a product matches if any of its `styles` values is in this list). Pass a single value to filter by one style ("styles": ["minimalist"]); pass several to span a related set ("styles": ["basics", "minimalist", "preppy", "sportswear"] for a "Casual" bucket). Soft descriptor — set ONLY when the user explicitly named one or more styles. The `query` field already captures style semantically; over-specifying is the most common cause of zero-result calls.
countryNoOptional shopper location as an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.
patternNoPattern filter (e.g. solid, stripe, checked, floral). Soft descriptor — set ONLY when the user explicitly named the pattern. Default for unspecified ("solid") leaks into queries and zeros the candidate set; omit when unsure.
sleevesNoSleeve style filter. Soft descriptor — set ONLY when the user explicitly named the sleeve style. Do not infer from category or query.
categoryNoCategory slug, e.g. "clothing", "clothing/jackets", "clothing/jackets/bomber-jackets". Accepts last-segment shortcuts when unambiguous — e.g. "loafers-and-slip-ons" resolves the same as "shoes/loafers-and-slip-ons", and "bomber-jackets" resolves the same as "clothing/jackets/bomber-jackets".
currencyNoISO 4217 currency code for min_price/max_price (e.g. "PLN", "EUR", "GBP"). Prices are converted to USD for filtering. Omit for USD.
necklineNoNeckline filter. Soft descriptor — set ONLY when the user explicitly named the neckline. Do not infer from category or query.
occasionNoOccasion filter. Soft descriptor — set ONLY when the user explicitly named the occasion. The `query` field already captures occasion semantically; over-specifying is the most common cause of zero-result calls.
materialsNoFilter by lowercase materials: e.g. ["cotton", "silk", "leather"]
max_priceNoMaximum price (in the currency specified by "currency" param, or USD if omitted)
min_priceNoMinimum price (in the currency specified by "currency" param, or USD if omitted)
silhouetteNoSilhouette/fit filter (e.g. fitted, slim, regular, relaxed, oversized). Soft descriptor — set ONLY when the user explicitly named the fit. The `query` field already captures silhouette semantically; over-specifying is the most common cause of zero-result calls.
color_matchNoColor matching mode. "any" (default): product has at least one of the queried colors. "exact": product has at least one image where the ONLY colors are the queried colors — use for mono-color searches like "all black".any
store_domainNoFilter by store domain (e.g. "thereformation.com"). Accepts forms with protocol, www, locale subdomain, or path — they are normalized to match the registered store.
exclude_colorsNoExclude products with these colors: e.g. ["white", "beige"]
is_sustainableNoTrue when the user explicitly wants products with sustainability claims.
available_sizesNoFilter by available size labels, e.g. ["s", "m", "38"].
exclude_materialsNoExclude products with these materials: e.g. ["polyester", "nylon"]

Output Schema

NameRequiredDescription
pageYes
productsYes
marketUrlYes
hasNextPageYes
externalCatalogStatusNo

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations by disclosing ranking semantics (semantic for query, recency for filter-only), pagination behavior, multi-currency conversion for price filters, and that results are compact cards with nested variant price differences. It even discloses a side effect not visible in annotations — the `country` value is recorded for analytics — which is consistent with readOnlyHint=false rather than contradicting it.

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?

Front-loaded with the core purpose and mode selection, then examples, then return shape, then the escalation path to get_product — a logical progression with no filler sentences. It is on the long side for a tool description, but the length is driven by genuinely decision-relevant content rather than restatement.

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

Completeness5/5

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

For a 25-parameter discovery tool this covers everything an agent needs: mode selection, query phrasing guidance, filter sparsity warnings, currency handling, result shape, and where to go for deeper product data. An output schema exists, yet the description still usefully summarizes the compact card contents and the nested variant pricing, which is the non-obvious part.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns above that by teaching the non-obvious population strategy — keep descriptive attributes in `query` and populate structured filters sparsely — and by giving four worked natural-language-to-parameter mappings. It does not walk through the 25 individual fields, but the schema already does that adequately.

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

Purpose5/5

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

States a specific verb and resource ("Find fashion products") and immediately distinguishes the three modes of operation: semantic query, pure structured browse, and combined filtered semantic search. It also separates itself from the sibling get_product by naming it as the tool for merchant descriptions, SKU-level variants, and full image sets.

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

Usage Guidelines5/5

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

Explicitly says when to use query (open-ended discovery), when to use filters only (pure browse, recency-ranked), when to combine both, and the hard precondition that at least one of query or a filter must be supplied. It also routes detail-seeking agents to get_product with a product ID, which is exactly the sibling-disambiguation an agent needs.

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

find_similar_brandsAInspect

Given an active catalog brand name or merged alias, find similar brands using brand-profile vectors generated during product indexing. Unknown or ambiguous seeds return no brands. Returns up to 20 brands.

NameRequiredDescriptionDefault
brandYesBrand name (case-insensitive), e.g. "Rick Owens".
limitNo
countryNoOptional shopper location as an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.

Output Schema

NameRequiredDescription
brandsYes

TDQS

A3.5/5.0
Behavior3/5

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

Adds real context beyond the annotations: similarity is vector-based, seeds must be active or merged aliases, failed seeds return an empty set, and output is capped. But the annotations declare readOnlyHint=false for what is plainly a read-only lookup, and the description does nothing to clarify that no state is changed (unlike the country parameter, which the schema admits is recorded for analytics). That leaves a genuine ambiguity an agent cannot resolve from either source.

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 verb and mechanism, then the edge case, then the result size. No filler or repetition, though 'Returns up to 20 brands' partially duplicates the schema's limit maximum of 20.

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

Completeness4/5

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

An output schema exists so return structure needn't be explained, and the description covers seed validity, empty-result behavior, and result volume. The one omission for a lookup tool of this shape is whether results are similarity-ranked, which determines how an agent should present them.

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

Parameters3/5

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

Schema coverage is 67%, so the schema already documents brand and country. The description adds meaning for the brand parameter (must be an active catalog brand or merged alias) and echoes the 20-result cap that bounds limit. It says nothing about how limit interacts with the default of 12 or about ranking/ordering of results.

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

Purpose4/5

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

States a specific verb and resource ('find similar brands') plus the mechanism ('brand-profile vectors generated during product indexing'), which cleanly separates it from find_similar_products and discover_brands by resource. It also constrains the seed to an 'active catalog brand name or merged alias'. Sibling tools are not named explicitly, so it falls just short of a 5.

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?

Gives an implicit usage rule that unknown or ambiguous seeds return no brands, which helps an agent predict failure. However, it never says when to prefer this over discover_brands (broad discovery) or find_similar_products (item-level similarity), so the alternative selection is left to inference.

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

find_similar_productsAInspect

Given a product ID, find similar products across the entire catalog. Useful for "more like this" recommendations or finding alternatives. Returns compact product cards, not full variant detail; call get_product for SKU-level variants, exact variant prices, merchant description, store info, and all images. Returns page and hasNextPage. Returns up to 20 results per page, paginated (max 3 pages).

NameRequiredDescriptionDefault
pageNoPage number (1-3)
limitNoPage size (1-20)
countryNoOptional shopper location as an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.
currencyNoISO 4217 currency code to render prices in (e.g. "GBP", "EUR", "USD"). Defaults to USD. Stored native prices are preferred; falls back to FX conversion when a merchant-set price isn't available.
product_idYesThe product ID (from a previous search result)

Output Schema

NameRequiredDescription
pageYes
productsYes
hasNextPageYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations supply the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description doesn't need to. It does disclose the result shape (compact cards, not full variant detail) and pagination bounds, but the 20-per-page and 3-page limits simply restate the schema's maximums for limit and page, and it says nothing about ordering, matching logic, or what happens with an unknown product_id.

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

Conciseness4/5

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

Front-loaded with purpose and use case, then result shape, then the alternative tool, then pagination, which is a sensible order. The sentence 'Returns page and hasNextPage' is redundant given an output schema exists and could be cut.

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?

Given a rich schema, existing annotations, and an output schema, the description covers purpose, use case, result granularity, and the alternative tool adequately. Only minor gaps remain, such as no guidance on invalid or missing product IDs.

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 every parameter including page, limit, country, and currency is already documented with examples and defaults. The description adds no new meaning about the parameters beyond repeating the pagination caps, so the baseline of 3 applies.

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

Purpose5/5

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

Names a specific verb and resource ('find similar products across the entire catalog') and anchors it to a required input ('Given a product ID'). It also implicitly distinguishes itself from get_product by saying it returns compact cards rather than full variant detail.

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

Usage Guidelines4/5

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

Gives concrete use cases ('more like this' recommendations, finding alternatives) and explicitly routes the agent to get_product when SKU-level variants, exact prices, descriptions, or images are needed. It does not cover the sibling find_similar_brands or state when not to use this tool, which keeps it short of a 5.

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

get_filtersAInspect

Returns available filter values in the catalog. By default returns categoryTree plus brands, colors, materials, genders, occasions, seasons, styles, silhouettes, currencies, and price range. Use "fields" to request only specific dimensions — faster and less data. "categoryTree" is a flat DFS-ordered list of { value, label } entries; hierarchy is encoded in the value slug (e.g. "clothing/jackets/bomber-jackets"), parents appear before descendants, and every value can be passed directly to discover_products.category. Use "brand_search" to search brands by prefix instead of listing all. Pass "gender" to scope categoryTree to that gender (women/men/girls/boys); omit to see the merged union.

NameRequiredDescriptionDefault
fieldsNoWhich filter dimensions to return. Omit for all. Example: ["categoryTree", "colors", "priceRange"]
genderNoScope categoryTree to this gender. Omit to return the merged union across women/men/girls/boys.
countryNoOptional shopper location as an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.
brand_pageNoPage number for brands (12 per page). Use with or without brand_search.
brand_searchNoSearch brands by name (case-insensitive, prefix matches first). Only affects the brands field.

Output Schema

NameRequiredDescription
brandsNo
colorsNo
stylesNo
gendersNo
seasonsNo
patternsNo
materialsNo
occasionsNo
currenciesNo
priceRangeNo
silhouettesNo
categoryTreeNo

TDQS

A4.4/5.0
Behavior4/5

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

Adds substantial behavior beyond the thin annotations: the full default dimension set, the performance/size tradeoff of 'fields', the flat DFS ordering of categoryTree with hierarchy encoded in the value slug, and parent-before-descendant ordering. It does not address the notable readOnlyHint=false on what reads as a retrieval tool, though the schema's note that 'country' is 'recorded for analytics' plausibly explains the side effect; that explanation lives in the schema rather than the description.

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?

Front-loads the default payload, then the narrowing options, then the structural detail about categoryTree — a sensible order for an agent deciding how to call it. It is dense but nearly every clause carries actionable information; the quoted 'categoryTree' repetition is the only mild redundancy.

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

Completeness5/5

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

An output schema exists, so return values need not be documented, yet the description still explains the shape of the trickiest field (categoryTree) and how its values are consumed downstream. For a zero-required-parameter catalog tool, an agent has everything needed to call it efficiently on the first try.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining semantics the schema cannot: categoryTree is a flat DFS-ordered { value, label } list whose hierarchy is encoded in the slug, values pass directly to discover_products.category, and 'gender' scopes only categoryTree. 'brand_search' prefix behavior and pagination are left to the schema.

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

Purpose5/5

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

Opens with a specific verb and resource ('Returns available filter values in the catalog') and immediately enumerates the default payload, so an agent knows exactly what comes back without opening the schema. It also names the downstream consumer ('discover_products.category'), which distinguishes it from sibling tools like discover_brands and discover_products.

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

Usage Guidelines4/5

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

Gives concrete selection guidance: use 'fields' for a narrower, faster response, use 'brand_search' instead of listing all brands, and pass 'gender' to scope categoryTree or omit it for the merged union. It stops short of saying when to prefer this tool over the sibling discover_brands for brand lookups, so it is clear context without explicit sibling exclusions.

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

get_productAInspect

Get the detailed response for a specific product ID. Use this after discover_products or find_similar_products when you need merchant description, store info, all images, SKU-level availability variants, SKU, colorKey/size matrix, exact variant prices/compareAtPrice in the requested currency, and the direct link to purchase.

NameRequiredDescriptionDefault
countryNoOptional shopper location as an ISO-3166-1 alpha-2 country code (e.g. "US", "GB", "DE"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.
currencyNoISO 4217 currency code to render prices in (e.g. "GBP", "EUR", "USD"). Defaults to USD.
product_idYesThe product ID (from a previous search result)

Output Schema

NameRequiredDescription
idYes
tagsNo
brandNo
priceYes
storeNo
titleYes
colorsNo
genderNo
imagesNo
inStockNo
sleevesNo
summaryNo
categoryNo
closuresNo
currencyYes
necklineNo
materialsNo
productUrlNo
silhouetteNo
availabilityYes
isSustainableNo
compareAtPriceNo
relevanceScoreNo
similarityScoreNo
merchantDescriptionNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=false and openWorldHint=false, and the description correctly frames the tool as a retrieval that follows a search. However, readOnlyHint=false sits awkwardly against a pure "get" framing, and the description does not explain the side effect the schema hints at (country is recorded for analytics) or what happens for an unknown product ID.

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

Conciseness4/5

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

Two sentences, with the core action front-loaded ahead of the usage condition. The second sentence is a long comma-separated inventory of returned fields, which is information-dense but slightly list-like and partly redundant given an output schema exists.

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?

For a three-parameter read tool with a full output schema and safety annotations, the definition covers the essentials: what it returns, when to reach for it, and which siblings precede it. The minor gaps are failure behavior for invalid IDs and the non-read-only annotation signal, neither of which blocks correct invocation.

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

Parameters3/5

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

Schema coverage is 100%, so all three parameters are already documented, including the currency and country codes, which sets a baseline of 3. The description only adds the phrase "in the requested currency," which clarifies that prices render in the currency parameter, but it never mentions country or the analytics-recording behavior of that field.

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

Purpose5/5

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

States a specific verb and resource ("Get the detailed response for a specific product ID") and then enumerates exactly what detail is returned: merchant description, store info, images, SKU-level variants, colorKey/size matrix, prices and purchase link. Naming discover_products and find_similar_products as the upstream producers makes it distinguishable from every sibling at a glance.

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

Usage Guidelines4/5

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

Gives an explicit precondition ("Use this after discover_products or find_similar_products") plus the condition that selects this tool over those: you need detail fields rather than a list. It stops short of stating when not to use it, e.g. whether to batch multiple IDs or avoid calling it for every result of a broad search.

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. 6 tool updates
    • Changeddiscover_brands1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changeddiscover_products19 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / page / minimum
        Added value: +-9007199254740991
      • removedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / $ref
        Removed value: -"#/properties/products/items/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / type
        Added value: +"object"
      • removedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / $ref
        Removed value: -"#/properties/products/items/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / type
        Added value: +"object"
      • removedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / $ref
        Removed value: -"#/properties/products/items/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / type
        Added value: +"object"
    • Changedfind_similar_brands1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedfind_similar_products18 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / page / maximum
        Added value: +9007199254740991
      • addedOutput schema / properties / page / minimum
        Added value: +-9007199254740991
      • removedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / $ref
        Removed value: -"#/properties/products/items/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / products / items / properties / availability / properties / color / items / properties / compareAtPriceRange / type
        Added value: +"object"
      • removedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / $ref
        Removed value: -"#/properties/products/items/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / compareAtPriceRange / type
        Added value: +"object"
      • removedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / $ref
        Removed value: -"#/properties/products/items/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / products / items / properties / availability / properties / sizes / items / properties / priceRange / type
        Added value: +"object"
    • Changedget_filters2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / brand_page / maximum
        Added value: +9007199254740991
    • Changedget_product16 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / availability / properties / color / items / properties / compareAtPriceRange / $ref
        Removed value: -"#/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / availability / properties / color / items / properties / compareAtPriceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / availability / properties / color / items / properties / compareAtPriceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / availability / properties / color / items / properties / compareAtPriceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / availability / properties / color / items / properties / compareAtPriceRange / type
        Added value: +"object"
      • removedOutput schema / properties / availability / properties / sizes / items / properties / compareAtPriceRange / $ref
        Removed value: -"#/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / availability / properties / sizes / items / properties / compareAtPriceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / availability / properties / sizes / items / properties / compareAtPriceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / availability / properties / sizes / items / properties / compareAtPriceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / availability / properties / sizes / items / properties / compareAtPriceRange / type
        Added value: +"object"
      • removedOutput schema / properties / availability / properties / sizes / items / properties / priceRange / $ref
        Removed value: -"#/properties/availability/properties/color/items/properties/priceRange"
      • addedOutput schema / properties / availability / properties / sizes / items / properties / priceRange / additionalProperties
        Added value: +false
      • addedOutput schema / properties / availability / properties / sizes / items / properties / priceRange / properties
        Added value: +{
        +  "currency": {
        +    "type": "string"
        +  },
        +  "max": {
        +    "type": "number"
        +  },
        +  "min": {
        +    "type": "number"
        +  }
        +}
      • addedOutput schema / properties / availability / properties / sizes / items / properties / priceRange / required
        Added value: +[
        +  "min",
        +  "max",
        +  "currency"
        +]
      • addedOutput schema / properties / availability / properties / sizes / items / properties / priceRange / type
        Added value: +"object"
  2. 2 tool updates
    • Changeddiscover_brands1 field changed
      • changedInput schema / properties / style / enum
        Previous value: -[
        -  "minimalist",
        -  "streetwear",
        -  "elegant",
        -  "avant-garde",
        -  "grunge",
        -  "vintage",
        -  "y2k",
        -  "techwear",
        -  "workwear",
        -  "preppy",
        -  "punk",
        -  "sportswear",
        -  "coquette",
        -  "quiet-luxury",
        -  "old-money",
        -  "gorpcore",
        -  "goth",
        -  "basics",
        -  "boho",
        -  "glam",
        -  "edgy",
        -  "classic",
        -  "western"
        -]New value: +[
        +  "minimalist",
        +  "streetwear",
        +  "elegant",
        +  "avant-garde",
        +  "grunge",
        +  "vintage",
        +  "y2k",
        +  "techwear",
        +  "workwear",
        +  "preppy",
        +  "punk",
        +  "sportswear",
        +  "coquette",
        +  "quiet-luxury",
        +  "old-money",
        +  "gorpcore",
        +  "goth",
        +  "basics",
        +  "boho",
        +  "glam",
        +  "classic",
        +  "western"
        +]
    • Changeddiscover_products1 field changed
      • changedInput schema / properties / styles / items / enum
        Previous value: -[
        -  "minimalist",
        -  "streetwear",
        -  "elegant",
        -  "avant-garde",
        -  "grunge",
        -  "vintage",
        -  "y2k",
        -  "techwear",
        -  "workwear",
        -  "preppy",
        -  "punk",
        -  "sportswear",
        -  "coquette",
        -  "quiet-luxury",
        -  "old-money",
        -  "gorpcore",
        -  "goth",
        -  "basics",
        -  "boho",
        -  "glam",
        -  "edgy",
        -  "classic",
        -  "western"
        -]New value: +[
        +  "minimalist",
        +  "streetwear",
        +  "elegant",
        +  "avant-garde",
        +  "grunge",
        +  "vintage",
        +  "y2k",
        +  "techwear",
        +  "workwear",
        +  "preppy",
        +  "punk",
        +  "sportswear",
        +  "coquette",
        +  "quiet-luxury",
        +  "old-money",
        +  "gorpcore",
        +  "goth",
        +  "basics",
        +  "boho",
        +  "glam",
        +  "classic",
        +  "western"
        +]
  3. 1 tool update
    • Changeddiscover_products2 fields changed
      • changedInput schema / properties / page / description
        Previous value: -"Page number."New value: +"Page number. Increment while the response indicates another page. Vistoya results are returned first; a later page may continue with an optional external catalog after owned results are exhausted. Provider failure does not fail normal discovery."
      • addedOutput schema / properties / externalCatalogStatus
        Added value: +{
        +  "enum": [
        +    "temporarily_unavailable",
        +    "continuation_expired"
        +  ],
        +  "type": "string"
        +}
  4. 2 tool updates
    • Changeddiscover_brands2 fields changed
      • changedInput schema / properties / limit / default
        Previous value: -8New value: +12
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of brands to return (1-20, default 8)."New value: +"Maximum number of brands to return (1-20, default 12)."
    • Changedfind_similar_brands1 field changed
      • changedInput schema / properties / limit / default
        Previous value: -8New value: +12
  5. 2 tool updates
    • Changeddiscover_brands6 fields changed
      • changedInput schema / properties / price_tier / description
        Previous value: -"Optional brand price-tier focus filter."New value: +"Optional public brand price-tier focus filter: budget, mid, premium, or luxury. Input \"budget\" maps to the brand-level output tier \"value\"."
      • changedInput schema / properties / query / description
        Previous value: -"Natural language brand search query, e.g. \"Italian streetwear brands\", \"Scandinavian minimalist brands\", \"Japanese technical outerwear\", or \"brands like Rick Owens\". Country adjectives are parsed server-side — no need to translate them into ISO codes. Optional: when omitted, results are filtered by the structured fields below."New value: +"Natural language brand search query, e.g. \"Italian streetwear brands\", \"Scandinavian minimalist brands\", \"Japanese technical outerwear\", or qualified similarity such as \"brands like Rick Owens for technical outerwear\". Use find_similar_brands for a plain \"brands like X\" request. Similarity seeds must resolve to an active catalog brand or merged alias; unknown or ambiguous seeds return no brands. Country adjectives are parsed server-side — no need to translate them into ISO codes. Optional: when omitted, results are filtered by the structured fields below."
      • changedInput schema / properties / ships_from_country / description
        Previous value: -"Optional ISO-3166 alpha-2 country filter for best-effort store shipping origin, e.g. \"IT\", \"US\", \"GB\". This is not the same as brand origin."New value: +"Optional ISO-3166-1 alpha-2 country filter for best-effort store shipping origin, e.g. \"IT\", \"US\", \"GB\". Lowercase input is accepted and normalized to uppercase. This is not the same as brand origin."
      • removedInput schema / properties / ships_from_country / maxLength
        Removed value: -2
      • removedInput schema / properties / ships_from_country / minLength
        Removed value: -2
      • addedInput schema / properties / ships_from_country / pattern
        Added value: +"^[A-Za-z]{2}$"
    • Changedfind_similar_brands1 field changed
      • changedInput schema / properties / limit / default
        Previous value: -12New value: +8
  6. 6 tool updates
    • Changeddiscover_brands1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional shopper location as an ISO-3166-1 alpha-2 country code (e.g. \"US\", \"GB\", \"DE\"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
    • Changeddiscover_products1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional shopper location as an ISO-3166-1 alpha-2 country code (e.g. \"US\", \"GB\", \"DE\"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
    • Changedfind_similar_brands1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional shopper location as an ISO-3166-1 alpha-2 country code (e.g. \"US\", \"GB\", \"DE\"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
    • Changedfind_similar_products1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional shopper location as an ISO-3166-1 alpha-2 country code (e.g. \"US\", \"GB\", \"DE\"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
    • Changedget_filters1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional shopper location as an ISO-3166-1 alpha-2 country code (e.g. \"US\", \"GB\", \"DE\"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}
    • Changedget_product1 field changed
      • addedInput schema / properties / country
        Added value: +{
        +  "description": "Optional shopper location as an ISO-3166-1 alpha-2 country code (e.g. \"US\", \"GB\", \"DE\"). Recorded for analytics and used to improve future offer geo-matching. Omit if unknown — absence preserves current behavior.",
        +  "pattern": "^[A-Za-z]{2}$",
        +  "type": "string"
        +}

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.