Skip to main content
Glama

WEM Price Compare

Get one product

get_product
Read-only

Provide at least one of: wem_id, or provider and product_id. Returns one product's details. Given provider and product_id from a search result, it returns that listing as its retailer source supplies it (title, price and link, with rating, shipping or features where the source has them); when the source cannot be reached it falls back to WEM's catalogue record of the listing, and an unknown listing is an error. Given wem_id, it returns that catalogue product with the retailer offers WEM holds for it.

Input Schema

NameRequiredDescriptionDefault
wem_idNoWEM ID (W + 10 Crockford characters + check). Active catalogue products only.
providerNoRetailer source of the listing, as given in the search result (e.g. "amazon", "awin").
product_idNoThe listing's `id` from the search result.

Output Schema

NameRequiredDescriptionDefault
idNo
urlYesThe page this price was read on. Give this url to the user when you name the price; a different url can be a different listing or price. The full URL; a shortened form is a different link. WEM never takes payment.
brandNo
imageNo
linksNoThe prices in this result as lines, cheapest first. Give these to the user when you name a price from this result. Each line opens the retailer page for that price; a retailer URL found elsewhere may be a different listing or price.
priceNoIndicative price. The retailer sets the final price at checkout. Null, with `priceNote`, when WEM may not show this listing’s price: the note stands in place of a figure.
titleNo
badgesNo
ratingNo
sellerNo
channelNoretailer is a named shop (Boots, Currys). marketplace is AliExpress/Temu-style parallel listings. A marketplace cluster is not a set of competing authorised retailers.
inStockNo
currencyNoISO 4217 code.
featuresNo
providerNoRetailer slug, e.g. "amazon", "currys".
shippingNoDelivery as the retailer stated it: `free`, or `cost` in the offer currency. Absent or null means not stated: say delivery is shown at the shop, never that it is free. Offers are ordered by item price; add a stated cost before calling one cheaper delivered.
affiliateNoFalse when this link earns WEM nothing: the shop has no affiliate programme with WEM, or this link does not carry one. It is still a real offer, and its link is not affiliate-tracked. Absent (or true) means the link is affiliate-tracked. `disclosure` states whether all, some or none of the links are tracked.
priceNoteNoPresent only when `price` is null: the words that stand in its place, e.g. "See price at Amazon". An Amazon price is shown only when Amazon’s API supplied it just now.
unitPriceNoPrice per 100ml, 100g, litre, kg or item, from the size this row's title states. Present only when the rows differ in size, in one unit across all of them, and only for things bought by the amount (beauty, food, supplements), never an appliance's capacity. Across sizes, value is compared on these, not on the prices: a smaller size is not cheaper because its price is lower. It reads beside the price ("£29.95, £99.83 per 100ml"). Absent does not mean the price is per unit.
disclosureYesWEM’s affiliate disclosure for this answer, written to be quoted as it is. Its wording changes with the rows: it states whether every outbound link is affiliate-tracked, only some are, or none are. A version from an earlier answer may not fit this one: a row marked `affiliate: false` earns WEM nothing.
descriptionNo
priceStatusNo`current`: WEM read this price within the last 14 days; only a current price may lead, be called the cheapest or lowest, be compared or enter a saving. `stale`: read longer ago. `undated`: WEM cannot say when. Those two read as "last seen £X on 8 Sep" or "price not dated", come after the current ones, and are not compared. Absent on a row a provider answered just now.
reviewCountNo
priceQualifierNoPresent when `price` is the OPENING price of a range, not the price of this item: a multi-variation listing where the seller advertises its cheapest variant and the shopper picks a size on the page. It reads as "from £X"; it is not the item's price or the cheapest. Absent means the price is firm for the row as described.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • removedInput schema / anyOf
      Removed value: -[
      -  {
      -    "required": [
      -      "wem_id"
      -    ]
      -  },
      -  {
      -    "required": [
      -      "provider",
      -      "product_id"
      -    ]
      -  }
      -]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / links
      Added value: +{
      +  "description": "The prices in this result as lines, cheapest first. Give these to the user when you name a price from this result. Each line opens the retailer page for that price; a retailer URL found elsewhere may be a different listing or price.",
      +  "items": {
      +    "properties": {
      +      "currency": {
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "markdown": {
      +        "description": "The same link as `[Retailer — £0.00](url)`, for hosts rendering markdown.",
      +        "type": "string"
      +      },
      +      "price": {
      +        "description": "Null when the row has no figure. The markdown then says where to see the price.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "retailer": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "description": "The page this price was read on. The full URL; a shortened or rewritten form is a different link.",
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / url / description
      Previous value: -"WEM tracked link to the retailer page for this offer. WEM never takes payment."New value: +"The page this price was read on. Give this url to the user when you name the price; a different url can be a different listing or price. The full URL; a shortened form is a different link. WEM never takes payment."
  3. Changed3 schema fields changed
    • changedInput schema / properties / provider / description
      Previous value: -"Retailer source of the listing, as given in the search result (e.g. \"ebay\", \"awin\")."New value: +"Retailer source of the listing, as given in the search result (e.g. \"amazon\", \"awin\")."
    • changedOutput schema / properties / channel / description
      Previous value: -"retailer is a named shop (Boots, Currys). marketplace is eBay/AliExpress/Temu-style parallel listings. A marketplace cluster is not a set of competing authorised retailers."New value: +"retailer is a named shop (Boots, Currys). marketplace is AliExpress/Temu-style parallel listings. A marketplace cluster is not a set of competing authorised retailers."
    • changedOutput schema / properties / provider / description
      Previous value: -"Retailer slug, e.g. \"ebay\", \"currys\"."New value: +"Retailer slug, e.g. \"amazon\", \"currys\"."
  4. Changed1 schema field changed
    • addedOutput schema / properties / shipping / description
      Added value: +"Delivery as the retailer stated it: `free`, or `cost` in the offer currency. Absent or null means not stated: say delivery is shown at the shop, never that it is free. Offers are ordered by item price; add a stated cost before calling one cheaper delivered."
  5. Changed11 schema fields changed
    • changedInput schema / properties / product_id / description
      Previous value: -"Product ID from search results"New value: +"The listing's `id` from the search result."
    • changedInput schema / properties / provider / description
      Previous value: -"Provider name (e.g. \"ebay\", \"awin\")"New value: +"Retailer source of the listing, as given in the search result (e.g. \"ebay\", \"awin\")."
    • changedOutput schema / properties / affiliate / description
      Previous value: -"False when this link earns WEM nothing: the shop has no affiliate programme with WEM, or this link does not carry one. Still a real offer: list it with the others, and never call its link affiliate-tracked. Absent (or true) means the link is affiliate-tracked. `disclosure` already states whether all, some or none of the links are tracked; relay that rather than your own wording."New value: +"False when this link earns WEM nothing: the shop has no affiliate programme with WEM, or this link does not carry one. It is still a real offer, and its link is not affiliate-tracked. Absent (or true) means the link is affiliate-tracked. `disclosure` states whether all, some or none of the links are tracked."
    • changedOutput schema / properties / channel / description
      Previous value: -"retailer is a named shop (Boots, Currys). marketplace is eBay/AliExpress/Temu-style parallel listings. Do not present a marketplace cluster as competing authorised retailers."New value: +"retailer is a named shop (Boots, Currys). marketplace is eBay/AliExpress/Temu-style parallel listings. A marketplace cluster is not a set of competing authorised retailers."
    • changedOutput schema / properties / disclosure / description
      Previous value: -"Disclosure to relay once per answer, verbatim. Its wording changes with the rows: it states whether every outbound link is affiliate-tracked, only some are, or none are. Never substitute the version you saw last time — a row marked `affiliate: false` earns WEM nothing, and saying otherwise misdescribes it to the shopper."New value: +"WEM’s affiliate disclosure for this answer, written to be quoted as it is. Its wording changes with the rows: it states whether every outbound link is affiliate-tracked, only some are, or none are. A version from an earlier answer may not fit this one: a row marked `affiliate: false` earns WEM nothing."
    • changedOutput schema / properties / price / description
      Previous value: -"Indicative price. The retailer sets the final price at checkout. Null, with `priceNote`, when WEM may not show this listing’s price: show the note and the link, never a figure of your own."New value: +"Indicative price. The retailer sets the final price at checkout. Null, with `priceNote`, when WEM may not show this listing’s price: the note stands in place of a figure."
    • changedOutput schema / properties / priceNote / description
      Previous value: -"Present only when `price` is null: the words to show in its place, e.g. \"See price at Amazon\". An Amazon price is shown only when Amazon’s API supplied it just now."New value: +"Present only when `price` is null: the words that stand in its place, e.g. \"See price at Amazon\". An Amazon price is shown only when Amazon’s API supplied it just now."
    • changedOutput schema / properties / priceQualifier / description
      Previous value: -"Present when `price` is the OPENING price of a range, not the price of this item: a multi-variation listing where the seller advertises its cheapest variant and the shopper picks a size on the page. Quote it as \"from £X\", never as the price or the cheapest. Absent means the price is firm for the row as described."New value: +"Present when `price` is the OPENING price of a range, not the price of this item: a multi-variation listing where the seller advertises its cheapest variant and the shopper picks a size on the page. It reads as \"from £X\"; it is not the item's price or the cheapest. Absent means the price is firm for the row as described."
    • changedOutput schema / properties / priceStatus / description
      Previous value: -"`current`: WEM read this price within the last 14 days; only a current price may lead, be called the cheapest or lowest, be compared or enter a saving. `stale`: read longer ago. `undated`: WEM cannot say when. Show those two as \"last seen £X on 8 Sep\" or \"price not dated\", after the current ones, and never compare them. Absent on a row a provider answered just now."New value: +"`current`: WEM read this price within the last 14 days; only a current price may lead, be called the cheapest or lowest, be compared or enter a saving. `stale`: read longer ago. `undated`: WEM cannot say when. Those two read as \"last seen £X on 8 Sep\" or \"price not dated\", come after the current ones, and are not compared. Absent on a row a provider answered just now."
    • changedOutput schema / properties / unitPrice / description
      Previous value: -"Price per 100ml, 100g, litre, kg or item, from the size this row's title states. Present only when the rows differ in size, in one unit across all of them, and only for things bought by the amount (beauty, food, supplements), never an appliance's capacity. When comparing value across sizes, compare these, never the prices: a smaller size is not cheaper because its price is lower. Quote it beside the price (\"£29.95, £99.83 per 100ml\"). Absent does not mean the price is per unit."New value: +"Price per 100ml, 100g, litre, kg or item, from the size this row's title states. Present only when the rows differ in size, in one unit across all of them, and only for things bought by the amount (beauty, food, supplements), never an appliance's capacity. Across sizes, value is compared on these, not on the prices: a smaller size is not cheaper because its price is lower. It reads beside the price (\"£29.95, £99.83 per 100ml\"). Absent does not mean the price is per unit."
    • changedOutput schema / properties / url / description
      Previous value: -"WEM tracked link to the retailer. Send the user here — WEM never takes payment."New value: +"WEM tracked link to the retailer page for this offer. WEM never takes payment."
  6. Changed4 schema fields changed
    • changedOutput schema / properties / price / description
      Previous value: -"Indicative price. The retailer sets the final price at checkout."New value: +"Indicative price. The retailer sets the final price at checkout. Null, with `priceNote`, when WEM may not show this listing’s price: show the note and the link, never a figure of your own."
    • changedOutput schema / properties / price / type
      Previous value: -"number"New value: +[
      +  "number",
      +  "null"
      +]
    • addedOutput schema / properties / priceNote
      Added value: +{
      +  "description": "Present only when `price` is null: the words to show in its place, e.g. \"See price at Amazon\". An Amazon price is shown only when Amazon’s API supplied it just now.",
      +  "type": "string"
      +}
    • addedOutput schema / properties / priceStatus
      Added value: +{
      +  "description": "`current`: WEM read this price within the last 14 days; only a current price may lead, be called the cheapest or lowest, be compared or enter a saving. `stale`: read longer ago. `undated`: WEM cannot say when. Show those two as \"last seen £X on 8 Sep\" or \"price not dated\", after the current ones, and never compare them. Absent on a row a provider answered just now.",
      +  "enum": [
      +    "current",
      +    "stale",
      +    "undated"
      +  ],
      +  "type": "string"
      +}
  7. Changed1 schema field changed
    • changedOutput schema / properties / affiliate / description
      Previous value: -"False when this is a retailer page WEM observed without a programme. Still a real listing; the click is not commission-bearing. Absent means the usual partner path."New value: +"False when this link earns WEM nothing: the shop has no affiliate programme with WEM, or this link does not carry one. Still a real offer: list it with the others, and never call its link affiliate-tracked. Absent (or true) means the link is affiliate-tracked. `disclosure` already states whether all, some or none of the links are tracked; relay that rather than your own wording."
  8. Changed1 schema field changed
    • addedOutput schema / properties / unitPrice
      Added value: +{
      +  "description": "Price per 100ml, 100g, litre, kg or item, from the size this row's title states. Present only when the rows differ in size, in one unit across all of them, and only for things bought by the amount (beauty, food, supplements), never an appliance's capacity. When comparing value across sizes, compare these, never the prices: a smaller size is not cheaper because its price is lower. Quote it beside the price (\"£29.95, £99.83 per 100ml\"). Absent does not mean the price is per unit.",
      +  "properties": {
      +    "amount": {
      +      "type": "number"
      +    },
      +    "currency": {
      +      "description": "ISO 4217 code.",
      +      "type": "string"
      +    },
      +    "per": {
      +      "enum": [
      +        "100ml",
      +        "litre",
      +        "100g",
      +        "kg",
      +        "item"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  9. Changed1 schema field changed
    • changedOutput schema / properties / disclosure / description
      Previous value: -"Affiliate disclosure to relay once per answer. Outbound links are tracked at no extra cost to the buyer."New value: +"Disclosure to relay once per answer, verbatim. Its wording changes with the rows: it states whether every outbound link is affiliate-tracked, only some are, or none are. Never substitute the version you saw last time — a row marked `affiliate: false` earns WEM nothing, and saying otherwise misdescribes it to the shopper."
  10. Changed1 schema field changed
    • addedOutput schema / properties / priceQualifier
      Added value: +{
      +  "description": "Present when `price` is the OPENING price of a range, not the price of this item: a multi-variation listing where the seller advertises its cheapest variant and the shopper picks a size on the page. Quote it as \"from £X\", never as the price or the cheapest. Absent means the price is firm for the row as described.",
      +  "enum": [
      +    "from"
      +  ],
      +  "type": "string"
      +}
  11. Changed2 schema fields changed
    • addedOutput schema / properties / channel
      Added value: +{
      +  "description": "retailer is a named shop (Boots, Currys). marketplace is eBay/AliExpress/Temu-style parallel listings. Do not present a marketplace cluster as competing authorised retailers.",
      +  "enum": [
      +    "retailer",
      +    "marketplace"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / shipping / properties / estimate
      Added value: +{
      +  "description": "Delivery window when the feed stated one.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
  12. Changed1 schema field changed
    • addedOutput schema / properties / affiliate
      Added value: +{
      +  "description": "False when this is a retailer page WEM observed without a programme. Still a real listing; the click is not commission-bearing. Absent means the usual partner path.",
      +  "type": "boolean"
      +}
  13. Changed2 schema fields changed
    • addedInput schema / anyOf
      Added value: +[
      +  {
      +    "required": [
      +      "wem_id"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "provider",
      +      "product_id"
      +    ]
      +  }
      +]
    • removedInput schema / required
      Removed value: -[
      -  "provider",
      -  "product_id"
      -]
  14. Changed1 schema field changed
    • addedInput schema / properties / wem_id
      Added value: +{
      +  "description": "WEM ID (W + 10 Crockford characters + check). Active catalogue products only.",
      +  "type": "string"
      +}
  15. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "description": "Full provider record for one product, plus a WEM tracked link.",
      +  "properties": {
      +    "badges": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "brand": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "currency": {
      +      "description": "ISO 4217 code.",
      +      "type": "string"
      +    },
      +    "description": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "disclosure": {
      +      "description": "Affiliate disclosure to relay once per answer. Outbound links are tracked at no extra cost to the buyer.",
      +      "type": "string"
      +    },
      +    "features": {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": [
      +        "array",
      +        "null"
      +      ]
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "image": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "inStock": {
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    },
      +    "price": {
      +      "description": "Indicative price. The retailer sets the final price at checkout.",
      +      "type": "number"
      +    },
      +    "provider": {
      +      "description": "Retailer slug, e.g. \"ebay\", \"currys\".",
      +      "type": "string"
      +    },
      +    "rating": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "reviewCount": {
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "seller": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "shipping": {
      +      "properties": {
      +        "cost": {
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "free": {
      +          "type": "boolean"
      +        }
      +      },
      +      "type": [
      +        "object",
      +        "null"
      +      ]
      +    },
      +    "title": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "description": "WEM tracked link to the retailer. Send the user here — WEM never takes payment.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "url",
      +    "disclosure"
      +  ],
      +  "type": "object"
      +}
  16. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare this a safe read-only operation, and the description goes further by disclosing fallback behavior (retailer data preferred, WEM catalogue used when the source is unreachable) and that an unknown listing is an error. It does not cover latency, rate limits, or whether the fallback is signaled in the response, which keeps it short of a 5.

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 precondition is front-loaded in the first clause, followed by the two-mode explanation. Sentences are long and dense but every clause carries functional information; minor trimming of the parenthetical field list would improve it.

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 the description's recap of returned fields (title, price, link, rating) is somewhat redundant, but the fallback and error semantics are genuinely necessary context a schema cannot express. Nothing required for correct invocation 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 is 3, but the description earns more by explaining what each key combination retrieves — provider+product_id returns the source-supplied listing, wem_id returns the catalogue product with its offers. It also anchors provider/product_id to a prior search result, which the schema does not convey.

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?

The description states a specific verb and resource ('Returns one product's details') and immediately decomposes it into two distinct lookup modes keyed on input. It does not explicitly contrast itself with siblings like lookup_products or search_products, so an agent must infer that this is the single-item retrieval path.

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?

'Provide at least one of: wem_id, or provider and product_id' gives a clear calling precondition and implicitly tells the agent which input combination selects which mode. There is no explicit statement of when to prefer this over lookup_products or search_products, and no mention of what happens if both key sets are supplied.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources