Skip to main content
Glama

Plendio price comparison

Get product details

get_product
Read-onlyIdempotent

Returns one product by its Plendio id: specifications, one offer per shop (its best) with price, shipping, total, the same amounts in the market's currency, availability, condition and whether the shop ships to the market, a summary of the product's price history over the last year, and the url of its Plendio page. A product that was merged into another resolves to the current one.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "product_id": "<product_id>"
    },
    "name": "get_product"
  }
}

Input Schema

NameRequiredDescriptionDefault
marketNoMarket the shopper is in: dk, se, de or no. Default: the market of the site you connected to.
product_idYesPlendio product id (the id field of a search result, or the number at the end of a Plendio product URL).

Output Schema

NameRequiredDescriptionDefault
idYes
urlYesThe product's page on Plendio, listing all its offers.
brandNo
notesNo
specsNo
titleYes
imagesNo
marketYes
offersYesCheapest first.
categoryNo
currencyYesCurrency of the market.
in_stockYes
descriptionNo
merged_fromNoSet when product_id was merged into this product.
offer_countYesNumber of offers listed (shops that ship to the market, unless the tool was asked otherwise).
price_historyNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changed
    • addedOutput schema / properties / price_history / properties / low_90d
      Added value: +{
      +  "description": "Lowest cheapest-price in the last 90 days (or all the history if shorter).",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / price_history / properties / median_1y
      Added value: +{
      +  "description": "Median cheapest-price over the recorded span (at most a year), weighted by how long each price held.",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / price_history / properties / median_90d
      Added value: +{
      +  "description": "Median cheapest-price over the last 90 days, weighted by how long each price held.",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / price_history / properties / points
      Added value: +{
      +  "description": "At most 24 evenly spaced samples of the cheapest price, oldest first.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "date": {
      +        "description": "YYYY-MM-DD.",
      +        "type": "string"
      +      },
      +      "price": {
      +        "description": "Cheapest price that day in major units; null when nobody sold the product.",
      +        "type": [
      +          "null",
      +          "number"
      +        ]
      +      }
      +    },
      +    "required": [
      +      "date",
      +      "price"
      +    ],
      +    "type": "object"
      +  },
      +  "type": [
      +    "null",
      +    "array"
      +  ]
      +}
    • addedOutput schema / properties / price_history / properties / signal
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "above_low_percent": {
      +      "description": "How far over the lowest price of the period the price now is, in per cent.",
      +      "type": "number"
      +    },
      +    "basis": {
      +      "description": "The period the comparison covers, e.g. \"1 year\" or \"90 days\" or \"41 days\" (all the history there is).",
      +      "type": "string"
      +    },
      +    "good_price": {
      +      "description": "True for lowest_in_period, near_lowest and below_typical: a price at or under what the product usually costs.",
      +      "type": "boolean"
      +    },
      +    "summary": {
      +      "description": "The signal in one sentence.",
      +      "type": "string"
      +    },
      +    "verdict": {
      +      "description": "lowest_in_period, near_lowest (within 5% of the low), below_typical (3% or more under the median), typical, above_typical (more than 3% over the median) or unknown.",
      +      "type": "string"
      +    },
      +    "vs_median_percent": {
      +      "description": "The price now against the median price of the period, in per cent; negative is cheaper than usual.",
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "verdict",
      +    "good_price",
      +    "basis",
      +    "summary"
      +  ],
      +  "type": [
      +    "null",
      +    "object"
      +  ]
      +}
  2. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. Beyond that, the description adds genuinely useful behavior: a merged product id resolves to the current product, and cross-market currency conversion is applied. It stops short of mention of error behavior for unknown ids or rate limits.

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 core action and identifier are front-loaded in the first clause, followed by the payload contents and the merge behavior. It is a single dense sentence that earns most of its length, though the long enumeration of returned fields could be tightened since 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 two-parameter read tool with an output schema, the description covers identity, resolution semantics and payload shape. The only real gap is guidance on choosing this tool over compare_prices when the user wants price comparison rather than a single product.

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 both parameters are already fully documented, including the market enum and the default market. The description reinforces product_id as the key and hints at the market's-currency effect, but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

The description opens with a specific verb and resource ('Returns one product by its Plendio id'), which makes single-item retrieval clearly distinct from the list-oriented siblings like search_products and list_categories. It does not explicitly name a sibling, which keeps it 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?

Usage is only implied: an agent must infer it should call this when it already has a product_id (from a search result or a URL). There is no explicit statement of when to prefer compare_prices or search_products instead, and no prerequisites are stated.

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