Skip to main content
Glama

Plendio price comparison

Compare prices

compare_prices
Read-onlyIdempotent

Returns the shops selling one product, one offer per shop (its best, with a count of its other offers), cheapest first by total price including shipping (price alone where a shop's shipping is unknown), with each amount also converted to the market's currency. Offers that are in stock come first. Out-of-stock offers are left out unless include_out_of_stock is true, and only shops that ship to the market are listed unless include_other_markets is true. The result includes the url of the product's Plendio page.

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": "compare_prices"
  }
}

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).
include_out_of_stockNoAlso list offers that are out of stock or discontinued. Default false: only offers a shopper can order now.
include_other_marketsNoAlso list shops not known to ship to the market. Default false.

Output Schema

NameRequiredDescriptionDefault
idYes
urlYesThe product's page on Plendio, listing all its offers.
notesNo
titleYes
marketYes
offersYesCheapest first, by total price including shipping (price alone where shipping is unknown).
currencyYesCurrency of the market.
price_historyNo
offers_omittedYesOffers left out because their shop does not ship to the market.
out_of_stock_omittedYesOffers left out because they are out of stock or discontinued (set include_out_of_stock to list them).

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. Changed1 schema field changed
    • addedOutput schema / properties / price_history
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "average": {
      +      "type": "number"
      +    },
      +    "currency": {
      +      "type": "string"
      +    },
      +    "current": {
      +      "description": "Cheapest price now; absent when nobody sells it.",
      +      "type": [
      +        "null",
      +        "number"
      +      ]
      +    },
      +    "days": {
      +      "description": "Length of the recorded history in days (at most 365).",
      +      "type": "integer"
      +    },
      +    "highest": {
      +      "type": "number"
      +    },
      +    "lowest": {
      +      "type": "number"
      +    },
      +    "scope": {
      +      "description": "What the history covers.",
      +      "type": "string"
      +    },
      +    "since": {
      +      "description": "First day of the recorded history (YYYY-MM-DD).",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "currency",
      +    "lowest",
      +    "average",
      +    "highest",
      +    "since",
      +    "days",
      +    "scope"
      +  ],
      +  "type": [
      +    "null",
      +    "object"
      +  ]
      +}
  3. First observed

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still earns credit by disclosing result-shaping behavior annotations cannot: one offer per shop with a count of the others, sort order with a shipping-unknown fallback, currency conversion, and the inclusion of the Plendio product page URL.

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 behavior (shops, best offer each, cheapest first) is front-loaded before the conditional filters and the trailing note about the product URL. It is one dense, slightly run-on block with no filler sentences, but it could be split for easier scanning.

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?

With read-only/idempotent annotations, 100% schema coverage and an output schema covering return shape, an agent has everything needed: ordering rules, dedup rule, currency behavior, default filter states, and the product page URL. Nothing essential to a correct call is missing.

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

Parameters3/5

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

Schema coverage is 100%, so all four parameters are already documented. The description mostly restates the flag semantics, though it does add useful meaning by tying 'market' to currency conversion and by explaining the shipping-unknown price fallback that determines ordering. Baseline 3 is appropriate when the schema carries the parameter burden.

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: it returns the shops selling one product, one best offer per shop, cheapest first by total price including shipping. That level of detail lets an agent distinguish it from get_product (product details) and search_products (discovery) 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 Guidelines3/5

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

The description explains what the two filtering flags do in context (out-of-stock offers excluded unless include_out_of_stock is true; non-shipping shops excluded unless include_other_markets is true), which implies when to flip them. It never states when to pick this tool over siblings like get_product or search_products, leaving that inference to the agent.

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