Skip to main content
Glama

Server Details

Read-only grocery-list comparisons for supported Canadian cities, with dated prices and coverage.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 14 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.1/5.0

Scored across 3 tools

Disambiguation4/5

compare_grocery_list and plan_grocery_order both compare prices across chains and could be confused at a glance, but the descriptions explicitly draw the line: one takes catalogue ids, the other takes a free-text list. get_grocery_catalog is clearly distinct as the id/coverage lookup feeding the others.

Naming Consistency5/5

All three tools follow a clean verb_noun snake_case pattern (get_grocery_catalog, compare_grocery_list, plan_grocery_order) with no deviations in style or casing.

Tool Count4/5

Three tools is on the lean side but well-scoped for a deliberately read-only price comparison service: catalog lookup, structured comparison, and free-text planning each earn their place with no filler.

Completeness4/5

The read-only lifecycle is coherent: discover items/cities, compare by id, and plan from natural language, with clear exclusions for ordering or saving. Only minor gaps exist (e.g. no way to inspect chain/branch metadata beyond catalog listings), but nothing blocks the stated purpose.

Available Tools

3 tools
compare_grocery_listCompare a Canadian grocery listA
Read-onlyIdempotent
Inspect

Compares current public chain prices for a list of catalogue item ids (from get_grocery_catalog) and quantities in one supported Canadian city; plan_grocery_order is the form that takes a list in the shopper's own words. A lowest-chain recommendation requires fresh full requested coverage at two eligible chains with no close call or package/reference-size reversal. Results keep missing items, exclusions, price dates, scope and source links, and each chain includes plain per-item storeLinks to its own product page or search, with the price date used. Each id is one product at its catalogue size (for example 4 L milk); a different size, variant or brand is a different product. Chain medians are not branch stock or guaranteed checkout quotes. Read-only: it does not buy, save a list, send email or access licensed or private data.

NameRequiredDescriptionDefault
cityYes
itemsYesIDs must be unique. Each id is one product at one package size (its catalogue name and referenceSize); a different size, variant or brand is a different product (for example, the catalogue's 4 L milk is not 2 L milk).
storesNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/openWorldHint/destructiveHint=false, so the safety profile is covered; the description adds genuinely useful caveats beyond that (chain medians are not branch stock or guaranteed checkout quotes, price dates, source links). The closing read-only sentence partially restates the annotations, which keeps it from 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?

Purpose is front-loaded and every sentence conveys a constraint or caveat, but the description is dense and the final read-only clause largely duplicates the annotation hints.

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?

No output schema exists, and the description does explain what results retain (missing items, exclusions, price dates, scope, per-chain storeLinks), which is solid. Only minor gap is the unexplained stores filter.

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 only 33%, and the description compensates for the items parameter well (each id is one product at its catalogue size; a different size/variant/brand is a different product). However the 'stores' parameter is never mentioned in the description, leaving that filter entirely to the enum, so compensation is incomplete.

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?

States a specific verb (compares) and resource (current public chain prices for catalogue item ids in one Canadian city), and explicitly distinguishes itself from plan_grocery_order, which handles free-text lists.

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?

Names the sibling alternative and the condition selecting it, plus states the prerequisite that ids come from get_grocery_catalog and that a lowest-chain recommendation needs fresh full coverage at two eligible chains. An agent knows when this tool applies versus the others.

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

get_grocery_catalogCanadian grocery comparison catalogueA
Read-onlyIdempotent
Inspect

Lists GroceryPulse's configured Canadian cities, canonical reference items with their ids, quantity units, known chains and checkout eligibility holds: the ids that compare_grocery_list takes. Configured coverage is not current availability or coverage of every nearby branch. Each item is one product at one package size (its name and referenceSize); a different size, variant or brand is a different product.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is covered. The description adds genuinely non-obvious domain context: that coverage is configuration, not live availability, and that a size/variant/brand difference constitutes a distinct product. This meaningfully reduces misinterpretation risk.

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?

Two sentences, front-loaded with the enumerated content and followed by the two most important caveats. Dense but every clause carries information; the 'checkout eligibility holds: the ids that compare_grocery_list takes' phrasing is slightly convoluted.

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?

With no output schema, the description must explain the return shape, and it does so thoroughly (cities, items with names/ids/referenceSize, units, chains, eligibility holds). It omits nothing critical, though the relationship between 'checkout eligibility holds' and the chain list could be clearer.

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?

The tool takes zero parameters, so there is nothing for the description to disambiguate. The schema is empty with additionalProperties false, and per the zero-parameter baseline a 4 is appropriate.

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 uses a concrete verb ('Lists') and enumerates the exact resource contents (cities, reference items with ids, quantity units, chains, checkout eligibility holds). It distinguishes itself from compare_grocery_list by noting the ids it returns are the ones that tool consumes, though it says nothing about plan_grocery_order.

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 implied rather than stated: the note that these are 'the ids that compare_grocery_list takes' hints this is a prerequisite lookup, but there is no explicit 'call this before X' instruction or when-not guidance. The caveat that configured coverage is not current availability is a useful scoping note but not a usage directive.

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

plan_grocery_orderPlan a Canadian grocery orderA
Read-onlyIdempotent
Inspect

Plans a grocery order from a shopping list as the shopper wrote it, in a covered Canadian city. Use when a shopper asks where their list is cheapest or wants to buy groceries online. Takes the list as text (English or French, quantities included, up to 60 lines), the city or the first three characters of a postal code inside it and, optionally, the stores the shopper uses. Returns each line as exact, closest (a different size, variant or brand: not priced and in no total) or not tracked; per-store totals with coverage and price dates; a cheapest store only when every compared item is priced at two or more chains with a clear lead (or, when the only obstacle is a pack item whose count no store's listing gives, a store labelled cheapest for the other lines, with those lines listed apart), otherwise the reason; per-item links to each store's own product page or search; and interpretation notes that state what the result does and does not cover. Read-only: it never orders, adds to a cart, saves a list or contacts a store.

NameRequiredDescriptionDefault
cityNoThe covered Canadian city whose chain prices are compared (the price market): its English or French name, or its slug. Give this or postalCode.
listYesThe shopper's grocery list exactly as they wrote it, one item per line (or comma-separated), English or French, with quantities if they gave them: "2L milk", "dozen eggs", "3 lbs lean ground beef", "oeufs".
storesNoOptional: only the stores the shopper is willing to use (names like "No Frills" or catalogue keys). Omit to compare every tracked chain in the city.
languageNoLanguage for item names and store links. Default en.
postalCodeNoThe first three characters of a Canadian postal code (the forward sortation area, for example K1P), used only to choose the covered city. Areas outside the covered cities are refused, never moved to the nearest one. A full postal code is accepted; only its first three characters are read.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare read-only/idempotent/no-destruction, and the description still adds substantial context: the exact/closest/not-tracked classification, per-store totals with coverage and price dates, the strict conditions for declaring a cheapest store, and the 'cheapest for the other lines' partial case. It also explicitly restates the side-effect boundary ('never orders, adds to a cart, saves a list or contacts a store'), which reinforces rather than contradicts the annotations.

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?

Purpose and usage trigger are front-loaded in the first sentence, and every clause maps to something the agent needs (inputs, return shape, side-effect boundary). The return-value sentence is very long and run-on, though, packing cheapest-store conditions into one dense block.

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?

There is no output schema, so the description carries the full burden of describing returns, and it does: per-line classifications, per-store totals, cheapest-store logic and its exceptions, per-item links and interpretation notes. Combined with the declared side-effect boundary, an agent has everything needed to call and interpret this 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 largely mirrors the schema ('the list as text', 'the city or the first three characters of a postal code', 'optionally, the stores'), adding only the 'up to 60 lines' list-size hint and the quantity/language guidance that the schema already covers.

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 ('Plans a grocery order from a shopping list') and scopes it to 'a covered Canadian city', so the agent knows exactly what the tool produces. It does not name or contrast itself with the siblings compare_grocery_list or get_grocery_catalog, which is the only thing keeping it from 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 Guidelines4/5

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

It gives clear triggering conditions: 'Use when a shopper asks where their list is cheapest or wants to buy groceries online.' That is actionable context, but no explicit exclusion ('do not use for X') and no reference to the alternative sibling tools for near-miss cases.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updates
    • Changedcompare_grocery_list1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"IDs must be unique; ask the shopper before substituting a canonical item for a different variant or branded product."New value: +"IDs must be unique. Each id is one product at one package size (its catalogue name and referenceSize); a different size, variant or brand is a different product (for example, the catalogue's 4 L milk is not 2 L milk)."
    • Changedplan_grocery_order3 fields changed
      • changedInput schema / properties / city / description
        Previous value: -"A covered Canadian city (name in English or French, or its slug). Give this or postalCode."New value: +"The covered Canadian city whose chain prices are compared (the price market): its English or French name, or its slug. Give this or postalCode."
      • changedInput schema / properties / postalCode / description
        Previous value: -"A Canadian postal code inside a covered city. Used only to choose the city; areas outside covered cities are refused, never moved to the nearest one."New value: +"The first three characters of a Canadian postal code (the forward sortation area, for example K1P), used only to choose the covered city. Areas outside the covered cities are refused, never moved to the nearest one. A full postal code is accepted; only its first three characters are read."
      • changedInput schema / properties / postalCode / maxLength
        Previous value: -60New value: +10
  2. 1 tool update
    • Addedplan_grocery_order
  3. 1 tool update
    • Changedcompare_grocery_list1 field changed
      • changedInput schema / properties / city / enum
        Previous value: -[
        -  "vancouver",
        -  "calgary",
        -  "edmonton",
        -  "saskatoon",
        -  "winnipeg",
        -  "toronto",
        -  "ottawa",
        -  "montreal",
        -  "quebec-city",
        -  "moncton",
        -  "halifax",
        -  "charlottetown",
        -  "st-johns"
        -]New value: +[
        +  "vancouver",
        +  "victoria",
        +  "calgary",
        +  "edmonton",
        +  "saskatoon",
        +  "regina",
        +  "winnipeg",
        +  "toronto",
        +  "ottawa",
        +  "montreal",
        +  "quebec-city",
        +  "moncton",
        +  "fredericton",
        +  "halifax",
        +  "charlottetown",
        +  "st-johns"
        +]
  4. 2 tool updates
    • First observedcompare_grocery_list
    • First observedget_grocery_catalog

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables searching public Kupi.cz discount offers, comparing store prices, and approximating shopping list optimization through a read-only MCP interface.
    3
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables searching products, comparing prices, and building optimal shopping lists across major Chilean supermarkets, using your local machine to access real-time prices and loyalty deals.
    14
    285 npm
    66
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables searching and comparing product prices across major Indian quick-commerce and e-commerce platforms, ranking results by landed price, returning product links, storing price history, and providing 15–30 day price direction forecasts with best-buy recommendations.
    -
  • F
    license
    A
    quality
    A
    maintenance
    A Model Context Protocol server for real-time Swiss grocery shopping that searches and compares products across 8 major Swiss retailers (Migros, Coop, Aldi, Denner, Lidl, Farmy, Volgshop, Otto’s), normalizes per-unit prices, surfaces promotions, computes optimal multi-store shopping plans, and works with any MCP-compatible client without API keys or accounts.
    2
    7
    132 npm
    37
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources