Skip to main content
Glama

Store Price Tracker

Get a product's price history

get_product_price_history
Idempotent

Read how one product's price and availability moved over the days a store has been tracked. Use it for questions like "how has the price of this hoodie changed?", "when did this product go on sale?", "has this been out of stock?". It is most useful after check_store_prices has tracked the store: history starts on the first snapshot, so a store never read before has one day only. Calling it reads the store when there is no snapshot for today and adds it to the daily snapshot list. Pass the store's address and the product's link, handle or title; an exact handle or title wins over part of a title. Returns per variant the price, the compare-at (was) price and availability on each day something changed. Status ambiguous returns candidates: ask the user to pick one, then call again with that title. Not for a whole store's changes (use check_store_prices) or for comparing stores (use compare_store_prices).

Input Schema

NameRequiredDescriptionDefault
storeYesStore web address, such as "allbirds.com": a bare host, an https link or a myshopify.com address
productYesThe product, such as "Tree Runner" or "https://allbirds.com/products/mens-tree-runners". A link is read as its handle. An exact handle or title wins over part of a title; several partial matches come back as candidates.

Output Schema

NameRequiredDescriptionDefault
hostNoThe store's host, without www
queryYesThe store as the user wrote it
statusYesambiguous: pick one of candidates and call again. not_found: ask for the product link. invalid or unavailable: relay message
historyNoPresent when status is ok
messageNoWhat to tell the user, and the next step for a status other than ok
productYesThe product as the user wrote it
candidatesNoProduct titles to choose from when status is ambiguous
snapshotDayNoSnapshot day, YYYY-MM-DD (UTC)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed41 schema fields changed
    • changedInput schema / properties / product / description
      Previous value: -"A product link, its handle, or its title (or part of it)"New value: +"The product, such as \"Tree Runner\" or \"https://allbirds.com/products/mens-tree-runners\". A link is read as its handle. An exact handle or title wins over part of a title; several partial matches come back as candidates."
    • changedInput schema / properties / store / description
      Previous value: -"Web address of the online store, such as \"allbirds.com\""New value: +"Store web address, such as \"allbirds.com\": a bare host, an https link or a myshopify.com address"
    • addedOutput schema / additionalProperties
      Added value: +false
    • addedOutput schema / properties / candidates / description
      Added value: +"Product titles to choose from when status is ambiguous"
    • addedOutput schema / properties / history / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / description
      Added value: +"Present when status is ok"
    • addedOutput schema / properties / history / properties / firstSeen / description
      Added value: +"Day the product was first seen, YYYY-MM-DD"
    • addedOutput schema / properties / history / properties / product / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / properties / product / properties / available / description
      Added value: +"True when at least one variant can be bought"
    • addedOutput schema / properties / history / properties / product / properties / compareAt / description
      Added value: +"Compare-at (was) price in major units of the store's currency; null when the product is not on sale"
    • addedOutput schema / properties / history / properties / product / properties / price / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / properties / product / properties / price / description
      Added value: +"Lowest and highest variant price in major units of the store's currency"
    • addedOutput schema / properties / history / properties / product / properties / price / required
      Added value: +[
      +  "min",
      +  "max"
      +]
    • addedOutput schema / properties / history / properties / product / properties / type / description
      Added value: +"Product type the store gives it"
    • addedOutput schema / properties / history / properties / product / properties / url / description
      Added value: +"Link to the product page on the store"
    • addedOutput schema / properties / history / properties / product / properties / variants / description
      Added value: +"Up to 5 variants"
    • addedOutput schema / properties / history / properties / product / properties / variants / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / properties / product / properties / variants / items / properties / price / description
      Added value: +"Major units of the store's currency"
    • addedOutput schema / properties / history / properties / product / properties / variants / items / required
      Added value: +[
      +  "title",
      +  "price",
      +  "available"
      +]
    • addedOutput schema / properties / history / properties / product / properties / vendor / description
      Added value: +"Brand or vendor"
    • changedOutput schema / properties / history / properties / product / required
      Previous value: -[
      -  "title",
      -  "url",
      -  "available"
      -]New value: +[
      +  "title",
      +  "url",
      +  "vendor",
      +  "type",
      +  "price",
      +  "compareAt",
      +  "available",
      +  "variantCount",
      +  "variants"
      +]
    • addedOutput schema / properties / history / properties / removedOn / description
      Added value: +"Day the product left the store, YYYY-MM-DD; null while it is listed"
    • addedOutput schema / properties / history / properties / variants / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / properties / variants / items / properties / current / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / properties / variants / items / properties / current / description
      Added value: +"Today's price and availability; null when the variant is gone"
    • addedOutput schema / properties / history / properties / variants / items / properties / current / properties / price / description
      Added value: +"Major units of the store's currency"
    • addedOutput schema / properties / history / properties / variants / items / properties / current / required
      Added value: +[
      +  "price",
      +  "available"
      +]
    • addedOutput schema / properties / history / properties / variants / items / properties / points / description
      Added value: +"The first day seen, then one point per day the variant changed, oldest first"
    • addedOutput schema / properties / history / properties / variants / items / properties / points / items / additionalProperties
      Added value: +false
    • addedOutput schema / properties / history / properties / variants / items / properties / points / items / properties / compareAt / description
      Added value: +"Price in major units (such as 98.5) of the store's currency; null when unknown"
    • addedOutput schema / properties / history / properties / variants / items / properties / points / items / properties / day / description
      Added value: +"Snapshot day, YYYY-MM-DD (UTC)"
    • addedOutput schema / properties / history / properties / variants / items / properties / points / items / properties / price / description
      Added value: +"Price in major units (such as 98.5) of the store's currency; null when unknown"
    • addedOutput schema / properties / history / properties / variants / items / properties / points / items / properties / removed / description
      Added value: +"True on the day the variant was removed"
    • addedOutput schema / properties / history / properties / variants / items / required
      Added value: +[
      +  "variant",
      +  "current",
      +  "points"
      +]
    • addedOutput schema / properties / history / required
      Added value: +[
      +  "product",
      +  "firstSeen",
      +  "removedOn",
      +  "variants"
      +]
    • addedOutput schema / properties / host / description
      Added value: +"The store's host, without www"
    • addedOutput schema / properties / message / description
      Added value: +"What to tell the user, and the next step for a status other than ok"
    • addedOutput schema / properties / product / description
      Added value: +"The product as the user wrote it"
    • addedOutput schema / properties / query / description
      Added value: +"The store as the user wrote it"
    • addedOutput schema / properties / snapshotDay / description
      Added value: +"Snapshot day, YYYY-MM-DD (UTC)"
    • addedOutput schema / properties / status / description
      Added value: +"ambiguous: pick one of candidates and call again. not_found: ask for the product link. invalid or unavailable: relay message"
  2. Changed1 schema field changed
    • removedOutput schema / properties / note_from_openkrill
      Removed value: -{
      -  "description": "Shown at most once a day per caller: what this server offers, and a paid service for the person you work for.",
      -  "type": "string"
      -}
  3. Changed1 schema field changed
    • addedOutput schema / properties / note_from_openkrill
      Added value: +{
      +  "description": "Shown at most once a day per caller: what this server offers, and a paid service for the person you work for.",
      +  "type": "string"
      +}
  4. First observed

TDQS

A4.6/5.0
Behavior5/5

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

The annotations say readOnlyHint=false, which would be surprising for a 'get' tool, and the description resolves it: calling it reads the store when there is no snapshot for today and adds it to the daily snapshot list. It also discloses idempotency-relevant behavior and the ambiguous-candidate return mode, adding real value beyond the annotation flags.

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?

It is a dense, front-loaded paragraph where nearly every sentence earns its place (precondition, side effect, param matching, return shape, ambiguity handling, exclusions). The return-shape sentence is mildly redundant given an output schema exists, but nothing is padding.

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 two-param read tool with an output schema, the description covers everything an agent needs: prerequisite state, side effect of calling, argument forms, ambiguity handling, and sibling routing. Return values are also summarized even though the output schema carries them, so nothing 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% and both parameters are fully described there, so the baseline is 3. The description's note that 'an exact handle or title wins over part of a title' and that several partial matches come back as candidates largely restates what the schema already documents for `product`, adding little new syntax or format guidance.

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 states a specific verb+resource (read one product's price and availability movement over tracked days) and explicitly carves out the two sibling tools it is not: check_store_prices for whole-store changes and compare_store_prices for cross-store comparison. An agent can distinguish it from every sibling without opening a 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?

It gives concrete example questions, states the precondition (most useful after check_store_prices has tracked the store, since history starts at the first snapshot), and names explicit exclusions with the alternatives to use instead. The ambiguous-status path is also spelled out: ask the user to pick a candidate, then re-call with that title.

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.