Skip to main content
Glama

Vitrine: Trending Fashion, Luxury, Sneakers & Design

Server Details

Trend-ranked fashion, accessories and interior design for shopping agents. Taste-matched. Free key.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct intent (keyword search, trend browsing, item-based similarity, outfit/room completion, brand lookup, brand similarity, size conversion, vocabulary), and the descriptions explicitly route the agent between lookalikes ('use search when the shopper has a specific need, trending when there is none, find_similar to vary an item you have'). The item-vs-brand pairs (find_similar/similar_brands, trending/trending_brands) are separated by explicit subject matter rather than leaving boundaries implicit.

Naming Consistency4/5

Most names follow a noun or verb_noun shape (get_item, find_similar, search_brands, complete_the_look, convert_size), but there are deviations: a bare 'search' and 'vocabulary' alongside gerund-style 'trending', and the modifier placement flips between find_similar/similar_brands. The sibling patterns are still predictable enough that an agent can guess related names.

Tool Count5/5

Ten tools is squarely in the well-scoped range, with each one earning a place: four discovery paths, two brand tools, one outfit builder, one size utility and one vocabulary helper. Nothing looks redundant or bolted on.

Completeness4/5

The discovery lifecycle is well covered (vocabulary → search/trending → get_item → find_similar/complete_the_look → brand tools → convert_size → outbound_url to the retailer for checkout). Minor gaps remain: no pagination on search results and no single-brand detail endpoint beyond search_brands/similar_brands output, so deep brand or catalog browsing is a dead end.

Available Tools

10 tools
complete_the_lookComplete the lookA
Read-onlyIdempotent
Inspect

Build around one item (by id from an earlier result). For fashion it returns one piece per missing slot of an outfit (layer, top, bottom, shoes, bag, accessory; a dress skips top and bottom); for an interior piece it returns the other objects of a room (lamp, vase, table, textiles). Pieces are chosen for shared style, color harmony, shared occasion, season and a similar price tier, and never from the item's own slot. Use it for 'what goes with this', 'style this' or 'finish the room'; use find_similar for alternatives to the item itself. Filters apply to every added piece (for example max_price per piece, size or ship_to). Returns {anchor, kind, count, pieces}, each piece with a slot label and, with a key, a 'why'. An unknown id returns an error result. Read-only. Without a key, results are capped at 5 and omit trend data and match reasons; a free key (POST https://vitrine.fashion/v1/keys, sent as 'Authorization: Bearer ') unlocks them. Rate limits: 10 calls a minute anonymous, 60 with a key.

NameRequiredDescriptionDefault
idYesThe item to build around, from an earlier result.
agentNo
filtersNoHard filters. Applied before ranking; an item that fails any of them is never returned.

Output Schema

NameRequiredDescription
kindYes
metaYes
countYes
anchorYes
piecesYes
query_idNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds plenty beyond that: unknown id produces an error result, keyless calls are capped at 5 and omit trend data and match reasons, how to obtain and send a key, and exact rate limits. The only redundancy is the terse 'Read-only' restatement of readOnlyHint; richer detail like whether the cap is truncation vs. ranking limit is left implicit.

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?

Dense but front-loaded: item, what comes back, selection logic, when to use, filters, response shape, then operational caveats. Every sentence carries information, though the single unbroken paragraph of roughly a dozen clauses would be easier to scan with any structural break, and the stale 'Read-only' duplicates an annotation.

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?

Despite nested filter objects and an optional agent block, the description covers the identity of the anchor, the ranking rationale, the response envelope, the error case, and the key/rate-limit constraints. With an output schema present it does not need to enumerate every field, and nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is moderate (67%), and the description clarifies the crucial semantics that filters apply to every added piece rather than the anchor, calling out max_price as per piece plus size and ship_to. It does not explain the tier enum, gender_exact behavior, or the agent object, but the schema already documents those inline, so the added meaning is well targeted.

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 concrete task (build an outfit/room around a given item id) and immediately specifies the two output shapes — missing outfit slots for fashion, complementary room objects for interior — including the dress exception. It also explicitly contrasts itself with the sibling find_similar, so an agent can separate the two without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit trigger phrases ('what goes with this', 'style this', 'finish the room') and names the alternative tool plus the condition that selects it ('use find_similar for alternatives to the item itself'). It also states the id must come from an earlier result, which prevents a common misuse.

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

convert_sizeConvert a sizeA
Read-onlyIdempotent
Inspect

Convert a size between systems so the shopper orders the right one: women's clothing (letter, US, UK, EU, FR, IT, DE), men's tailoring (letter, US, UK, EU, IT), women's and men's shoes (EU, US, UK, European luxury convention), athletic sneakers (US_M, US_W, UK, EU, CM), rings (US, UK, EU, millimetres) and jeans waist. Use it whenever the shopper's size and the item's sizes are in different systems, before recommending a size. Returns every equivalent, a note on the convention used, and 'approximate' or 'ambiguous' when the size is between or spans rows. The brand's own chart always wins. No key needed; read-only.

NameRequiredDescriptionDefault
kindYesWhat is being sized.
sizeYesThe size as printed, e.g. '38', 'M', '7.5', 'L' (UK ring), '28' (jeans waist).
systemYesThe system the size is in, e.g. EU, US, UK, IT, FR, letter, US_W, US_M, waist_in.

Output Schema

NameRequiredDescription
fromNo
kindYes
noteYes
labelNo
ambiguousNo
approximateNo
equivalentsYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, and the description reinforces this with "No key needed; read-only." Beyond that it adds real behavioral context the annotations cannot: results carry a note on the convention used and are flagged "approximate" or "ambiguous" when a size falls between or spans rows, which tells the agent how to hedge its recommendation. The only shortfall is that it leans on the output schema for the actual result shape.

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 trigger condition and the conversion scope are front-loaded, and the long enumeration sentence earns its length by covering genuinely distinct size families. It is dense and would benefit from breaking that one sentence into a short list, but no sentence is filler.

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 three-parameter, read-only lookup with full schema coverage, an output schema, and complete annotations, the description supplies everything an agent needs: which kinds and systems pair, when to invoke it, how to interpret ambiguous results, and how to defer to brand charts. Nothing material is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline would be 3, but the description adds meaning the schema does not: it maps each `kind` value to the specific systems valid for it (e.g. jeans waist vs. rings in millimetres vs. sneakers with US_M/US_W/CM), which constrains `system` per `kind` in a way the free-text schema field cannot. It also gives concrete size examples matching the schema's format hints.

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 description opens with a specific verb and resource ("Convert a size between systems") and then enumerates every supported size family and the systems each accepts, so an agent can immediately tell this apart from sibling tools like get_item or vocabulary. The goal statement ("so the shopper orders the right one") also anchors the purpose in the shopping flow.

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 states the exact triggering condition ("whenever the shopper's size and the item's sizes are in different systems") and the sequencing constraint ("before recommending a size"), plus a precedence rule that the brand's own chart always wins. There is no sibling tool performing conversion, so no alternative needs naming, and the guidance leaves nothing to inference.

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

find_similarFind similar itemsA
Read-onlyIdempotent
Inspect

Find alternatives to one item (by id from an earlier result): pieces close in style, the same product type first. Use it for 'something like this but cheaper' (filters.max_price), 'but in stock' (filters.availability) or a different color. The source item is never included. Returns {anchor, count, results} in the search result shape, each with a 'why' naming the shared style. An unknown id returns an error result; an empty list means no alternative passes the filters. Read-only. Without a key, results are capped at 5 and omit trend data and match reasons; a free key (POST https://vitrine.fashion/v1/keys, sent as 'Authorization: Bearer ') unlocks them. Rate limits: 10 calls a minute anonymous, 60 with a key.

NameRequiredDescriptionDefault
idYesThe item to find alternatives for.
agentNo
limitNo5 to 20. Anonymous callers get 5.
filtersNoHard filters. Applied before ranking; an item that fails any of them is never returned.

Output Schema

NameRequiredDescription
metaYes
countYes
anchorNo
resultsYes
query_idNo

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent, yet the description adds substantial behavior: the source item is never included, an unknown id yields an error result, an empty list has a specific meaning, and anonymous calls are capped at 5 while omitting trend data and match reasons. It even documents the free key endpoint, auth header format, and per-minute rate limits for anonymous vs keyed callers.

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 action and use cases, then return shape, error semantics, and auth/rate-limit caveats in a logical order with zero filler. It is dense and multi-clause, but nearly every sentence carries distinct information.

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?

Even though an output schema exists, the description sketches the return envelope ({anchor, count, results}) and the 'why' field, plus degradation without a key. For a filtered similarity search with nested objects, that covers everything an agent needs to invoke and interpret it.

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 75%, so the schema does much of the work, but the description still adds value by clarifying that the id must come from an earlier result and by naming the filters that matter for the common shopping intents. The agent and limit parameters are left entirely to the schema, which keeps this below a 5.

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 alternatives to one item') and pins the input to 'id from an earlier result', which cleanly separates it from search and get_item. The scoping phrase 'pieces close in style, the same product type first' tells the agent exactly what kind of result set to expect.

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 when-to-use triggers mapped to specific filters ('something like this but cheaper' → filters.max_price, 'but in stock' → filters.availability, or a different color). It does not explicitly say when to prefer a sibling like search instead, so it stops short of full routing guidance.

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

get_itemItem detailsA
Read-onlyIdempotent
Inspect

Get the full record for one item, using an id from a search, trending or find_similar result. Use it before recommending a piece, to check sizes, materials, colors, shipping regions and seller. With a key it adds silhouette, occasion, season and trend data. Returns {item, meta}. An unknown id returns an error result telling you to search again. Read-only. Without a key, results are capped at 5 and omit trend data and match reasons; a free key (POST https://vitrine.fashion/v1/keys, sent as 'Authorization: Bearer ') unlocks them. Rate limits: 10 calls a minute anonymous, 60 with a key. With a key, each item also carries trend_reason (why it has its trend status), trend_sources (the signals behind it: source, url, signal type, date, contribution; [] when the status comes from curation alone) and trend_review (when the status last changed and whether a human reviewer approved it).

NameRequiredDescriptionDefault
idYesItem id from a search, trending or find_similar result.
agentNo

Output Schema

NameRequiredDescription
itemYes
metaYes
query_idNo

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations: it discloses the anonymous result cap of 5 items, which fields are withheld without a key, how to obtain a key and pass it, and the exact rate limits (10/min anonymous, 60/min keyed). It also states the failure mode for an unknown id ('returns an error result telling you to search again').

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

Conciseness3/5

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

The opening sentences are tightly front-loaded and earn their place, but the final sentence spends ~60 words enumerating trend_reason, trend_sources and trend_review fields, which duplicates the existing output schema. Rate limits and auth could also be compressed into one clause.

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 single-record lookup with an output schema present, everything an agent needs is covered: valid id provenance, expected envelope {item, meta}, auth path, quotas, gated fields and error behavior. Nothing material is left unspecified.

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 50% and the required 'id' parameter is already documented identically in the schema; the description repeats rather than extends it. The only added meaning is auth-related (Bearer key), which is not a parameter, and the optional 'agent' object is never discussed.

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 full record for one item') and immediately scopes the input to ids from search, trending or find_similar, which separates it from those lookup siblings. An agent can distinguish it from search/trending without opening any schema.

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

Usage Guidelines4/5

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

Gives a concrete when-to-use condition ('before recommending a piece, to check sizes, materials, colors, shipping regions and seller') and points to the sibling tools that produce valid ids. It stops short of an explicit when-not or a named alternative for the case where the agent has no id.

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

search_brandsSearch brandsA
Read-onlyIdempotent
Inspect

Find brands in the index by name (case and accents ignored, partial names work) or by a style word such as 'y2k' or 'quiet luxury', optionally within a category or catalog tier. Returns brands with item count, main tier, categories, price range and, with a key, trend status, trend score and top style tags. An empty query lists brands with the most items first.

NameRequiredDescriptionDefault
tierNoCatalog tier, see the vocabulary tool.
agentNo
limitNo5 to 20. Anonymous callers get 5.
queryNoBrand name or part of it ('loewe', 'acne'), or a style word ('y2k', 'gorpcore'). Empty lists every brand, most items first.
categoryNo

Output Schema

NameRequiredDescription
metaYes
countYes
resultsYes
query_idNo

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, closed-world and non-destructive, and the description goes beyond them by disclosing matching behavior (case- and accent-insensitive, partial matches) and a tiered response: trend status, trend score and top style tags only when a key is supplied. That key-gated data difference is exactly the kind of behavioral detail annotations cannot convey. It says nothing about error or empty-result behavior beyond the empty-query ordering.

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

Conciseness5/5

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

Three dense sentences, front-loaded with the matching modes before scoping options and return contents. Every clause carries information an agent would otherwise have to infer from the schema, and nothing is repeated verbatim from structured fields.

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?

All five parameters are optional and the description covers the one that carries the semantics, while an output schema exists so the return-value summary is a convenience rather than a necessity. For a read-only search with a rich schema and annotations, the only real omission is guidance that agent is optional self-identification and that limit is capped for anonymous callers.

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 60%, so the schema already documents tier, agent and limit reasonably well, including the 5-20 range and the anonymous-caller cap. The description meaningfully deepens the query parameter (accent/case handling, partial names, style-word matching, empty-string behavior) but adds nothing about agent, limit, or the tier vocabulary beyond "optionally within a category or catalog tier".

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 brands in the index") plus the two match modes (name or style word) and the scoping options (category, catalog tier). The result fields are enumerated, so an agent knows what comes back. It stops short of naming siblings like similar_brands or trending_brands, so differentiation is inferred from the phrasing rather than stated.

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 clear operative context: use a name fragment for brand lookup, a style word for discovery, and an empty query to list everything ranked by item count. It does not exclude or route to alternatives such as similar_brands or trending_brands when those would be the better choice, so no explicit when-not guidance.

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

similar_brandsSimilar brandsA
Read-onlyIdempotent
Inspect

Brands close to a given brand (exact name, e.g. 'The Row'): similar style tags, categories, price level and catalog tier, each with a short reason. Optionally only brands with pieces in a category or tier. Unknown brand names return an error; find names with search_brands.

NameRequiredDescriptionDefault
tierNoOnly return brands with pieces in this catalog tier.
agentNo
brandYesExact brand name from search_brands or any result, e.g. 'The Row'. Case and accents are ignored.
limitNo5 to 20. Anonymous callers get 5.
categoryNoOnly return brands with pieces in this category.

Output Schema

NameRequiredDescription
metaYes
countYes
anchorNo
resultsYes
query_idNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description does add non-obvious behavior: unknown brand names produce an error, and each result carries a short reason. It does not say how results are ordered or how the reason text is generated, which is modest added value on top of annotations.

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

Conciseness4/5

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

The description is three tight sentences with the core purpose front-loaded, followed by optional filters and then the error/routing note. The parenthetical examples are compact and useful; there is no filler.

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, the description needn't describe return shape, yet it still mentions the per-result reason. It covers the required input, error behavior and optional filters. Minor omissions such as result ordering or how limit interacts with anonymous callers are acceptable at this complexity.

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 80%, so the schema already documents brand, tier, category, limit and agent. The description reinforces the exact-name semantics and case/accent insensitivity of brand, and restates the meaning of the tier/category filters. It adds marginal detail rather than new syntax, which fits given high schema coverage.

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 the resource (brands similar to a given brand) and states what similarity is based on: style tags, categories, price level and catalog tier, plus a per-result reason. This is enough to distinguish it from search_brands (name lookup) and find_similar (item-level similarity).

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 clear prerequisites and routing: the brand argument must be an exact name, and search_brands is named for resolving unknown names, with an error reported for unknown brands. It also explains when to use the optional category/tier filters. The one gap is that it doesn't contrast with its sibling find_similar, which also performs similarity.

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

vocabularyFilter vocabularyA
Read-onlyIdempotent
Inspect

The exact controlled values agents should use in filters and taste profiles, read from the live catalog with item counts: categories, catalog tiers, price tiers with their price bands, availability, trend statuses with meanings, style tags, silhouettes, occasions, seasons, colors, materials, sizes, conditions and ship-to regions, plus every filter field name with its type. No arguments. Cacheable: call it once per session, before building filters.

NameRequiredDescriptionDefault
agentNo

Output Schema

NameRequiredDescription
metaYes
valuesYes
filtersYes
items_indexedNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description goes beyond them by disclosing that values are 'read from the live catalog with item counts' (freshness and richness of the payload) and that the result is cacheable for the session — real behavioral context. It stops short of describing payload shape or size, but an output schema exists to carry that.

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?

Purpose and the caching instruction bracket the description, so it is front-loaded and closes with the actionable rule. The long enumeration of vocabularies earns most of its length by telling the agent what it will receive, though it could be trimmed slightly without losing meaning.

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 zero-required-argument lookup with a full output schema and complete annotations, the description covers what it returns, why to call it, and caching strategy — enough to invoke it correctly. The only omission is any mention of the optional agent identification block, which is minor given the tool works without it.

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 reported at 0%, so the description would normally need to compensate for the single optional 'agent' parameter. It instead says 'No arguments', which is functionally true for required inputs but never mentions the optional self-identification object, whose purpose (better ranking) lives only in the schema. Adequate to drive a correct zero-argument call, but it does not add meaning beyond 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?

States a specific resource and payload: 'the exact controlled values agents should use in filters and taste profiles', then enumerates the vocabularies (categories, price tiers with bands, trend statuses with meanings, sizes, conditions, ship-to regions) plus 'every filter field name with its type'. This clearly separates it from siblings like search or trending, which consume these values rather than define them.

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?

Gives explicit when-to-use and how-often: 'call it once per session, before building filters', and explicitly excludes the need for inputs with 'No arguments'. An agent knows both the trigger point and the call cadence without inference.

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. 5 tool updates
    • Changedcomplete_the_look3 fields changed
      • addedInput schema / properties / filters / properties / gender
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "women",
        +        "men",
        +        "unisex"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Department: women, men or unisex. 'men' returns men's and unisex pieces, 'women' returns women's and unisex pieces, 'unisex' returns unisex pieces only. Set gender_exact to true to drop the unisex pieces."
        +}
      • addedInput schema / properties / filters / properties / gender_exact
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "With gender, true matches that department only, without unisex pieces."
        +}
      • addedOutput schema / properties / pieces / items / properties / gender
        Added value: +{
        +  "description": "Department. Accessories and interior are usually unisex.",
        +  "enum": [
        +    "women",
        +    "men",
        +    "unisex"
        +  ],
        +  "type": "string"
        +}
    • Changedfind_similar3 fields changed
      • addedInput schema / properties / filters / properties / gender
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "women",
        +        "men",
        +        "unisex"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Department: women, men or unisex. 'men' returns men's and unisex pieces, 'women' returns women's and unisex pieces, 'unisex' returns unisex pieces only. Set gender_exact to true to drop the unisex pieces."
        +}
      • addedInput schema / properties / filters / properties / gender_exact
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "With gender, true matches that department only, without unisex pieces."
        +}
      • addedOutput schema / properties / results / items / properties / gender
        Added value: +{
        +  "description": "Department. Accessories and interior are usually unisex.",
        +  "enum": [
        +    "women",
        +    "men",
        +    "unisex"
        +  ],
        +  "type": "string"
        +}
    • Changedget_item1 field changed
      • addedOutput schema / properties / item / properties / gender
        Added value: +{
        +  "description": "Department. Accessories and interior are usually unisex.",
        +  "enum": [
        +    "women",
        +    "men",
        +    "unisex"
        +  ],
        +  "type": "string"
        +}
    • Changedsearch4 fields changed
      • addedInput schema / properties / filters / properties / gender
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "women",
        +        "men",
        +        "unisex"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Department: women, men or unisex. 'men' returns men's and unisex pieces, 'women' returns women's and unisex pieces, 'unisex' returns unisex pieces only. Set gender_exact to true to drop the unisex pieces."
        +}
      • addedInput schema / properties / filters / properties / gender_exact
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "With gender, true matches that department only, without unisex pieces."
        +}
      • changedInput schema / properties / taste_profile / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "description": "Soft preferences from the shopper's agent. Used for ranking, never for exclusion.\nDescribe taste only: no names, emails or other personal data.",
        -    "properties": {
        -      "avoided_colors": {
        -        "items": {
        -          "maxLength": 40,
        -          "minLength": 1,
        -          "type": "string"
        -        },
        -        "maxItems": 20,
        -        "type": "array"
        -      },
        -      "preferred_colors": {
        -        "items": {
        -          "maxLength": 40,
        -          "minLength": 1,
        -          "type": "string"
        -        },
        -        "maxItems": 20,
        -        "type": "array"
        -      },
        -      "price_comfort": {
        -        "anyOf": [
        -          {
        -            "properties": {
        -              "max": {
        -                "anyOf": [
        -                  {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "default": null
        -              },
        -              "min": {
        -                "anyOf": [
        -                  {
        -                    "minimum": 0,
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "default": null
        -              }
        -            },
        -            "type": "object"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "style_tags": {
        -        "description": "e.g. minimal, tailored, relaxed, vintage",
        -        "items": {
        -          "maxLength": 40,
        -          "minLength": 1,
        -          "type": "string"
        -        },
        -        "maxItems": 20,
        -        "type": "array"
        -      }
        -    },
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "description": "Soft preferences from the shopper's agent. Used for ranking, never for exclusion.\nDescribe taste only: no names, emails or other personal data.",
        +    "properties": {
        +      "avoided_colors": {
        +        "items": {
        +          "maxLength": 40,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "maxItems": 20,
        +        "type": "array"
        +      },
        +      "gender": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "women",
        +              "men",
        +              "unisex"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null,
        +        "description": "Soft department preference (women, men, unisex): ranks that department and unisex pieces first, never excludes. Use filters.gender to exclude."
        +      },
        +      "preferred_colors": {
        +        "items": {
        +          "maxLength": 40,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "maxItems": 20,
        +        "type": "array"
        +      },
        +      "price_comfort": {
        +        "anyOf": [
        +          {
        +            "properties": {
        +              "max": {
        +                "anyOf": [
        +                  {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              },
        +              "min": {
        +                "anyOf": [
        +                  {
        +                    "minimum": 0,
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "default": null
        +              }
        +            },
        +            "type": "object"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "default": null
        +      },
        +      "style_tags": {
        +        "description": "e.g. minimal, tailored, relaxed, vintage",
        +        "items": {
        +          "maxLength": 40,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "maxItems": 20,
        +        "type": "array"
        +      }
        +    },
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • addedOutput schema / properties / results / items / properties / gender
        Added value: +{
        +  "description": "Department. Accessories and interior are usually unisex.",
        +  "enum": [
        +    "women",
        +    "men",
        +    "unisex"
        +  ],
        +  "type": "string"
        +}
    • Changedtrending2 fields changed
      • addedInput schema / properties / gender
        Added value: +{
        +  "anyOf": [
        +    {
        +      "enum": [
        +        "women",
        +        "men",
        +        "unisex"
        +      ],
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Department. 'men' returns men's and unisex pieces, 'women' returns women's and unisex pieces, 'unisex' returns unisex pieces only."
        +}
      • addedOutput schema / properties / results / items / properties / gender
        Added value: +{
        +  "description": "Department. Accessories and interior are usually unisex.",
        +  "enum": [
        +    "women",
        +    "men",
        +    "unisex"
        +  ],
        +  "type": "string"
        +}
  2. 5 tool updates
    • Changedconvert_size1 field changed
      • removedInput schema / properties / agent
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "description": "Optional self-identification. Identified callers help us rank better; keys make it reliable.",
        -      "properties": {
        -        "locale": {
        -          "anyOf": [
        -            {
        -              "maxLength": 16,
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null,
        -          "description": "e.g. 'en-GB'"
        -        },
        -        "name": {
        -          "anyOf": [
        -            {
        -              "maxLength": 80,
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null,
        -          "description": "e.g. 'acme-shopper'"
        -        },
        -        "platform": {
        -          "anyOf": [
        -            {
        -              "maxLength": 80,
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null,
        -          "description": "Platform or developer"
        -        },
        -        "session_id": {
        -          "anyOf": [
        -            {
        -              "maxLength": 64,
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null,
        -          "description": "Your own opaque id linking calls in one shopping session. Never a user id."
        -        },
        -        "version": {
        -          "anyOf": [
        -            {
        -              "maxLength": 40,
        -              "type": "string"
        -            },
        -            {
        -              "type": "null"
        -            }
        -          ],
        -          "default": null
        -        }
        -      },
        -      "type": "object"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null
        -}
    • Addedsearch_brands
    • Addedsimilar_brands
    • Addedtrending_brands
    • Addedvocabulary
  3. 6 tool updates
    • Addedcomplete_the_look
    • Addedconvert_size
    • Changedfind_similar1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "anchor": {
        +      "properties": {
        +        "brand": {
        +          "type": "string"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "title": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "count": {
        +      "type": "integer"
        +    },
        +    "meta": {
        +      "properties": {
        +        "access": {
        +          "enum": [
        +            "full",
        +            "basic"
        +          ],
        +          "type": "string"
        +        },
        +        "terms": {
        +          "type": "string"
        +        },
        +        "upgrade": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "query_id": {
        +      "type": "integer"
        +    },
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "availability": {
        +            "enum": [
        +              "in_stock",
        +              "low_stock",
        +              "preorder",
        +              "out_of_stock"
        +            ],
        +            "type": "string"
        +          },
        +          "brand": {
        +            "type": "string"
        +          },
        +          "category": {
        +            "type": "string"
        +          },
        +          "currency": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "image_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "outbound_url": {
        +            "description": "Tracked link to the retailer's product page. Checkout happens there.",
        +            "type": "string"
        +          },
        +          "price": {
        +            "type": "number"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "trend_score": {
        +            "description": "0 to 100. With a key.",
        +            "type": "integer"
        +          },
        +          "trend_status": {
        +            "description": "With a key.",
        +            "enum": [
        +              "hot",
        +              "rising",
        +              "steady",
        +              "fading"
        +            ],
        +            "type": "string"
        +          },
        +          "why": {
        +            "description": "One-line reason it matches. With a key.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "brand",
        +          "price",
        +          "currency",
        +          "availability",
        +          "outbound_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "results",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedget_item1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "item": {
        +      "properties": {
        +        "availability": {
        +          "enum": [
        +            "in_stock",
        +            "low_stock",
        +            "preorder",
        +            "out_of_stock"
        +          ],
        +          "type": "string"
        +        },
        +        "brand": {
        +          "type": "string"
        +        },
        +        "category": {
        +          "type": "string"
        +        },
        +        "colors": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "currency": {
        +          "type": "string"
        +        },
        +        "id": {
        +          "type": "string"
        +        },
        +        "image_url": {
        +          "type": [
        +            "string",
        +            "null"
        +          ]
        +        },
        +        "materials": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "outbound_url": {
        +          "description": "Tracked link to the retailer's product page. Checkout happens there.",
        +          "type": "string"
        +        },
        +        "price": {
        +          "type": "number"
        +        },
        +        "ship_to": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "sizes": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        },
        +        "sold_by": {
        +          "type": "string"
        +        },
        +        "title": {
        +          "type": "string"
        +        },
        +        "trend_score": {
        +          "description": "0 to 100. With a key.",
        +          "type": "integer"
        +        },
        +        "trend_status": {
        +          "description": "With a key.",
        +          "enum": [
        +            "hot",
        +            "rising",
        +            "steady",
        +            "fading"
        +          ],
        +          "type": "string"
        +        },
        +        "why": {
        +          "description": "One-line reason it matches. With a key.",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "title",
        +        "brand",
        +        "price",
        +        "currency",
        +        "availability",
        +        "outbound_url"
        +      ],
        +      "type": "object"
        +    },
        +    "meta": {
        +      "properties": {
        +        "access": {
        +          "enum": [
        +            "full",
        +            "basic"
        +          ],
        +          "type": "string"
        +        },
        +        "terms": {
        +          "type": "string"
        +        },
        +        "upgrade": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "query_id": {
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "item",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "type": "integer"
        +    },
        +    "meta": {
        +      "properties": {
        +        "access": {
        +          "enum": [
        +            "full",
        +            "basic"
        +          ],
        +          "type": "string"
        +        },
        +        "terms": {
        +          "type": "string"
        +        },
        +        "upgrade": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "query_id": {
        +      "type": "integer"
        +    },
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "availability": {
        +            "enum": [
        +              "in_stock",
        +              "low_stock",
        +              "preorder",
        +              "out_of_stock"
        +            ],
        +            "type": "string"
        +          },
        +          "brand": {
        +            "type": "string"
        +          },
        +          "category": {
        +            "type": "string"
        +          },
        +          "currency": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "image_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "outbound_url": {
        +            "description": "Tracked link to the retailer's product page. Checkout happens there.",
        +            "type": "string"
        +          },
        +          "price": {
        +            "type": "number"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "trend_score": {
        +            "description": "0 to 100. With a key.",
        +            "type": "integer"
        +          },
        +          "trend_status": {
        +            "description": "With a key.",
        +            "enum": [
        +              "hot",
        +              "rising",
        +              "steady",
        +              "fading"
        +            ],
        +            "type": "string"
        +          },
        +          "why": {
        +            "description": "One-line reason it matches. With a key.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "brand",
        +          "price",
        +          "currency",
        +          "availability",
        +          "outbound_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "results",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
    • Changedtrending1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "properties": {
        +    "count": {
        +      "type": "integer"
        +    },
        +    "meta": {
        +      "properties": {
        +        "access": {
        +          "enum": [
        +            "full",
        +            "basic"
        +          ],
        +          "type": "string"
        +        },
        +        "terms": {
        +          "type": "string"
        +        },
        +        "upgrade": {
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "query_id": {
        +      "type": "integer"
        +    },
        +    "results": {
        +      "items": {
        +        "properties": {
        +          "availability": {
        +            "enum": [
        +              "in_stock",
        +              "low_stock",
        +              "preorder",
        +              "out_of_stock"
        +            ],
        +            "type": "string"
        +          },
        +          "brand": {
        +            "type": "string"
        +          },
        +          "category": {
        +            "type": "string"
        +          },
        +          "currency": {
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "image_url": {
        +            "type": [
        +              "string",
        +              "null"
        +            ]
        +          },
        +          "outbound_url": {
        +            "description": "Tracked link to the retailer's product page. Checkout happens there.",
        +            "type": "string"
        +          },
        +          "price": {
        +            "type": "number"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "trend_score": {
        +            "description": "0 to 100. With a key.",
        +            "type": "integer"
        +          },
        +          "trend_status": {
        +            "description": "With a key.",
        +            "enum": [
        +              "hot",
        +              "rising",
        +              "steady",
        +              "fading"
        +            ],
        +            "type": "string"
        +          },
        +          "why": {
        +            "description": "One-line reason it matches. With a key.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "brand",
        +          "price",
        +          "currency",
        +          "availability",
        +          "outbound_url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "count",
        +    "results",
        +    "meta"
        +  ],
        +  "type": "object"
        +}
  4. 4 tool updates
    • First observedfind_similar
    • First observedget_item
    • First observedsearch
    • First observedtrending

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to resolve and search taste entities and tags, get recommendations, demographics, and taste analysis, and run an audience-finding agent that turns a creative work description into audience affinities, local places, and a ready-to-use pitch.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables clients to look up dress-code meanings, generate five-piece outfit formulas for an occasion and weather, explore tested clothing colour combinations, and find relevant style guides through a free read-only MCP endpoint.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources