Skip to main content
Glama

Cheapest Grocery Basket

Compare one grocery item across nearby stores

find_product

Compare a single grocery item across every collected store in a ZIP. Returns each store's actual current shelf price, whether it is on sale (and the regular price), the package size, the price normalized per comparable unit, stock, a purchase link, and when that price was last read. Use this to answer "who has the cheapest milk near me" — and note the answer reports BOTH the lowest sticker price and the best value per unit, which frequently disagree because the cheap sticker is a smaller package. For a whole shopping list use price_basket or cheapest_basket instead; calling this per item costs more and cannot optimize across stores. Costs $0.005 USDC per call via x402 on Base.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qYesThe item to price, in ordinary shopper language, e.g. 'milk', 'eggs', 'ground beef'.
zipYes5-digit US ZIP code to price against, e.g. '30501'. Coverage is per collected ZIP; an uncovered ZIP returns an explicit error and is not charged.
storesNoOptional comma-separated chains to restrict to, e.g. 'aldi,publix'. Omit to compare every collected store.
maxAgeDaysNoOptional freshness limit in days (default 14, max 120). A price read longer ago than this is withheld rather than returned as if current; raise it to accept older readings.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • addedInput schema / properties / maxAgeDays / examples
      Added value: +[
      +  14
      +]
    • addedInput schema / properties / q / examples
      Added value: +[
      +  "milk"
      +]
    • addedInput schema / properties / stores / examples
      Added value: +[
      +  "aldi,publix"
      +]
    • addedInput schema / properties / zip / examples
      Added value: +[
      +  "30501"
      +]
  2. Changed1 schema field changed
    • addedInput schema / properties / maxAgeDays
      Added value: +{
      +  "description": "Optional freshness limit in days (default 14, max 120). A price read longer ago than this is withheld rather than returned as if current; raise it to accept older readings.",
      +  "maximum": 120,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  3. First observed

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it enumerates return fields (shelf price, sale status, regular price, package size, normalized price, stock, purchase link, timestamp), discloses the caveat that lowest sticker price and best unit price can disagree, and states the $0.005 per-call cost. It does not mention auth or rate limits, but for a read-only comparison query the described behavior is substantial.

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?

Purpose appears in the first sentence, return values in the second, usage and caveat in the third, alternative routing in the fourth, and cost in the last. Each sentence earns its place and the most decision-relevant information is front-loaded.

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?

There is no output schema, but the description compensates by enumerating all major return fields and explaining the dual-price caveat. The input schema covers all four parameters including ZIP coverage and error behavior. Minor omissions like output format and authentication are not critical for this simple read-only tool.

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 the baseline is 3. The description references 'milk' as an example and relates per-item vs. basket cost, but does not add new parameter-level semantics beyond what the schema already documents for q, zip, stores, and maxAgeDays.

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: 'Compare a single grocery item across every collected store in a ZIP.' It also names sibling alternatives (price_basket, cheapest_basket) and clarifies this tool is for single-item comparison, so an agent can distinguish it from siblings without opening their schemas.

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 explicitly states when to use it ('who has the cheapest milk near me') and when not to: 'For a whole shopping list use price_basket or cheapest_basket instead; calling this per item costs more and cannot optimize across stores.' This provides both positive and negative selection criteria.

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