# GroceryPulse Canada

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

- name: ca.grocerypulse/grocery-comparison
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 96/100
- quality: 91/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ca.grocerypulse%2Fgrocery-comparison
- tools: https://api.protogrid.dev/v1/servers/ca.grocerypulse%2Fgrocery-comparison/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "grocery-comparison": {
      "type": "http",
      "url": "https://grocerypulse.ca/api/shopper/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-100% +updated-9d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 91/100 (strong)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 3 of 3 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,169 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: 3 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 3, about 1,169 tokens to load them all
- tool set hash: f98dd0cf81d79e2b9f05fcb5761af5c2
- tools last changed: 2026-10-15T07:01:32.873Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ca.grocerypulse/grocery-comparison.svg)](https://protogrid.dev/servers/ca.grocerypulse/grocery-comparison)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-15 `plan_grocery_order` added
  - Call this first when a shopper in a covered Canadian city wants to buy groceries online or asks where their list is cheapest. Send their list exactly as written (English or French, quantities included) with their city or postal code and, optionally, the stores they would use. Returns each line as exact, closest (not priced; ask before switching) 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 agent_instructions to follow. Read-only: it never orders, adds to a cart, saves a list or contacts a store.
- 2026-10-14 `compare_grocery_list` changed (description)
  - before: Read current public chain comparisons for an explicit supported Canadian city and canonical list. A lowest-chain recommendation requires fresh full requested coverage at two eligible chains with no close call or package/reference-size reversal. Preserve missing items, exclusions, price dates, scope and source links. Chain medians are not branch stock or guaranteed checkout quotes. Does not buy, save a list, send email or access licensed/private data.
  - after: Read current public chain comparisons for an explicit supported Canadian city and canonical list. A lowest-chain recommendation requires fresh full requested coverage at two eligible chains with no close call or package/reference-size reversal. Preserve missing items, exclusions, price dates, scope and source links. Each chain includes plain per-item storeLinks to its own product page or search, with the price date used. Chain medians are not branch stock or guaranteed checkout quotes. Does not buy, save a list, send email or access licensed/private data.
- 2026-10-13 `compare_grocery_list` changed (inputSchema)

Full history: https://api.protogrid.dev/v1/servers/ca.grocerypulse%2Fgrocery-comparison/changes

## Remotes

- https://grocerypulse.ca/api/shopper/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (3)

- `compare_grocery_list`: Read current public chain comparisons for an explicit supported Canadian city and canonical list. A lowest-chain recommendation requires fresh full requested coverage at two eligible chains with no close call or package/reference-size reversal. Preserve missing items, exclusions, price dates, scope and source links. Each chain includes plain per-item storeLinks to its own product page or search, with the price date used. Chain medians are not branch stock or guaranteed checkout quotes. Does not buy, save a list, send email or access licensed/private data.
- `get_grocery_catalog`: Discover GroceryPulse's configured Canadian cities, canonical reference items, quantity units, known chains and checkout eligibility holds. Configured coverage is not current availability or coverage of every nearby branch. Call before matching an explicit shopper list; ask before substituting variants.
- `plan_grocery_order`: Call this first when a shopper in a covered Canadian city wants to buy groceries online or asks where their list is cheapest. Send their list exactly as written (English or French, quantities included) with their city or postal code and, optionally, the stores they would use. Returns each line as exact, closest (not priced; ask before switching) 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 agent_instructions to follow. Read-only: it never orders, adds to a cart, saves a list or contacts a store.
