Skip to content
grocery prices mcp

Documentation

One endpoint speaks MCP, another speaks plain HTTP. Both need the same free API key.

Quickstart

  1. Sign in with your email and create a key. It is shown once.
  2. Paste the snippet for your client below.
  3. Ask for something: “where is chicken breast cheapest near M4C 1B5?”
Customize → Connectors → Add custom connector
https://grocery-price-mcp.vercel.app/mcp?api_key=gpm_live_your_key_here

Works in Claude on the web, desktop and mobile. Claude can't send headers, so the key is part of this URL. Keep it private.

Authentication

Send your key one of three ways. The header forms are preferred; the query parameter exists for clients that cannot set headers, and it does end up in server logs and browser history, so treat a key used that way as lower-trust and rotate it if it leaks.

# preferred
curl -H "Authorization: Bearer gpm_live_..." "https://grocery-price-mcp.vercel.app/v1/compare?q=eggs"

# also accepted
curl -H "x-api-key: gpm_live_..." "https://grocery-price-mcp.vercel.app/v1/compare?q=eggs"

# last resort, for header-less clients
curl "https://grocery-price-mcp.vercel.app/v1/compare?q=eggs&api_key=gpm_live_..."

Every reply carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (seconds).

MCP endpoint

Streamable HTTP, stateless, JSON replies. Point any MCP client at:

https://grocery-price-mcp.vercel.app/mcp
search_groceriesA city-aware shopping list: up to ten ingredients with real prices, product photos and retailer links. Supports Toronto, Edmonton, Calgary, Vancouver, Winnipeg, Montréal, Halifax and Saskatoon.
compare_pricesWhere a product is cheapest across every store and flyer, ranked by unit price.
cheapest_in_categoryThe best in-stock offer for each common item in fruit or vegetables.
store_searchOne store's live catalogue, in that store's own ranking.
flyer_dealsThis week's flyer deals for a product, optionally at one merchant.
list_storesEvery source, the nearest Loblaw-family locations, and flyers near a postal code.
tnt_specialsT&T's current Price Drop and Multi-Save promotions.
tnt_browse / tnt_categoriesBrowse T&T by category id, and list the category tree.
instacart_markup / instacart_checkWhich Toronto stores charge more on Instacart than in store.

Most tools take an optional postalCode; the default is downtown Toronto (M5V 2T6).

REST API

GET/v1/compare

Every matching offer across all sources, ranked by unit price.

params: q (required), postal, sources, strict, limit

GET/v1/category/{category}

Best in-stock offer per item for fruit or vegetables.

params: postal

GET/v1/stores/{store}/search

One store's own catalogue, unfiltered and in its own ranking.

params: q (required), postal, limit

GET/v1/flyers

Grocery flyers currently running near a postal code.

params: postal

GET/v1/sources

Source ids, coverage notes and available categories.

params:

GET/health

Liveness. The only endpoint that needs no key.

params:

Example request
curl -H "Authorization: Bearer gpm_live_your_key_here" \
  "https://grocery-price-mcp.vercel.app/v1/compare?q=2%25%20milk%204L&postal=M5V2T6&limit=5"
Trimmed response
{
  "query": "2% milk 4L",
  "postalCode": "M5V2T6",
  "basis": "perL",
  "offers": [
    {
      "store": "No Frills",
      "source": "pcx:nofrills",
      "kind": "store",
      "name": "2% Milk",
      "size": "4 L",
      "price": 5.79,
      "priceUnit": "each",
      "onSale": false,
      "unit": { "perL": 1.45 },
      "inStock": true,
      "location": "Toronto — Dufferin",
      "image": "https://assets.shop.loblaws.ca/...",
      "url": "https://www.nofrills.ca/2-milk/p/20039684_EA"
    }
  ],
  "stores": [
    { "store": "No Frills", "source": "pcx:nofrills", "matches": 3 },
    { "store": "Metro", "source": "flipp", "matches": 1 }
  ]
}

Sources and coverage

Prices come from public retailer listings and weekly flyers. Live searches are cached for about 15 minutes, while store directories and flyers are cached longer. A source failing never prevents the others from returning results.

Real Canadian Superstore

Full online catalogue at the store nearest your postal code (PC Express)

pcx:superstore

No Frills

Full online catalogue at the store nearest your postal code (PC Express)

pcx:nofrills

Loblaws

Full online catalogue at the store nearest your postal code (PC Express)

pcx:loblaws

Fortinos

Full online catalogue at the store nearest your postal code (PC Express)

pcx:fortinos

Wholesale Club

Full online catalogue at the store nearest your postal code (PC Express)

pcx:wholesaleclub

Valu-mart

Full online catalogue at the store nearest your postal code (PC Express)

pcx:valumart

Your Independent Grocer

Full online catalogue at the store nearest your postal code (PC Express)

pcx:independent

Sobeys (Voila)

Sobeys online grocery catalogue (GTA)

voila

Giant Tiger

Online catalogue, Ontario pricing

gianttiger

Flyers: Metro, Food Basics, FreshCo, Sobeys, Longo's, Farm Boy, Costco, Adonis, Nations and ~40 more

This week's flyer deals near your postal code (Flipp)

flipp

PC Express provides Loblaw-family catalogues at the store nearest your postal code. Other integrations use T&T's Magento catalogue, Walmart search listings, Sobeys' Voila catalogue and Giant Tiger's Shopify listings. Flipp supplies current weekly promotions from grocers including Metro, Food Basics, FreshCo, Longo's, Farm Boy and Costco.

The hosted service disables T&T and Walmart live catalogues because they block datacenter IPs. Their flyer deals may still appear through Flipp. A locally run MCP server can use their live catalogues from your own connection. No browser automation or bot-protection bypasses are used.

Errors

401 invalid_api_keyMissing, malformed or revoked key.
429 rate_limitedMore than 30 requests in a minute. Retry-After says when.
429 quota_exceededThe monthly allowance for this key is spent.
502 upstream_errorA retailer failed. Other sources still answer.
503 auth_unavailableKey verification was briefly unavailable.

A retailer being down never fails the whole request: that source comes back with an error in the stores array while the others return offers.

Limits and fair use

  • 30 requests per minute and 5,000 per calendar month, per key.
  • Up to 5 active keys per account.
  • The website includes one free AI question per visitor. Sign in or use an API key for more, up to 6 website questions per account per hour. Cloudflare’s shared free AI allowance can also limit availability. Direct API and MCP usage have their own per-key limits above.
  • Results are cached briefly server-side. Hammering the same query does not get you fresher prices, only a faster 429.
  • Prices are informational. They come from public store endpoints and weekly flyers, can lag the shelf, and are not a substitute for checking.
  • T&T and Walmart block datacenter IP ranges, so the hosted API skips their live catalogues and uses their flyers instead. Running the MCP server locally reaches both from your own connection.
  • Store offers carry a url pointing at the retailer's product page. Flyer items don't: Flipp publishes no per-item link, so those come with the clipping image instead.