Documentation
One endpoint speaks MCP, another speaks plain HTTP. Both need the same free API key.
Quickstart
- Sign in with your email and create a key. It is shown once.
- Paste the snippet for your client below.
- Ask for something: “where is chicken breast cheapest near M4C 1B5?”
https://grocery-price-mcp.vercel.app/mcp?api_key=gpm_live_your_key_hereWorks 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/mcpsearch_groceries | A 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_prices | Where a product is cheapest across every store and flyer, ranked by unit price. |
cheapest_in_category | The best in-stock offer for each common item in fruit or vegetables. |
store_search | One store's live catalogue, in that store's own ranking. |
flyer_deals | This week's flyer deals for a product, optionally at one merchant. |
list_stores | Every source, the nearest Loblaw-family locations, and flyers near a postal code. |
tnt_specials | T&T's current Price Drop and Multi-Save promotions. |
tnt_browse / tnt_categories | Browse T&T by category id, and list the category tree. |
instacart_markup / instacart_check | Which Toronto stores charge more on Instacart than in store. |
Most tools take an optional postalCode; the default is downtown Toronto (M5V 2T6).
REST API
/v1/compareEvery matching offer across all sources, ranked by unit price.
params: q (required), postal, sources, strict, limit
/v1/category/{category}Best in-stock offer per item for fruit or vegetables.
params: postal
/v1/stores/{store}/searchOne store's own catalogue, unfiltered and in its own ranking.
params: q (required), postal, limit
/v1/flyersGrocery flyers currently running near a postal code.
params: postal
/v1/sourcesSource ids, coverage notes and available categories.
params: —
/healthLiveness. The only endpoint that needs no key.
params: —
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"{
"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:superstoreNo Frills
Full online catalogue at the store nearest your postal code (PC Express)
pcx:nofrillsLoblaws
Full online catalogue at the store nearest your postal code (PC Express)
pcx:loblawsFortinos
Full online catalogue at the store nearest your postal code (PC Express)
pcx:fortinosWholesale Club
Full online catalogue at the store nearest your postal code (PC Express)
pcx:wholesaleclubValu-mart
Full online catalogue at the store nearest your postal code (PC Express)
pcx:valumartYour Independent Grocer
Full online catalogue at the store nearest your postal code (PC Express)
pcx:independentSobeys (Voila)
Sobeys online grocery catalogue (GTA)
voilaGiant Tiger
Online catalogue, Ontario pricing
gianttigerFlyers: 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)
flippPC 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_key | Missing, malformed or revoked key. |
429 rate_limited | More than 30 requests in a minute. Retry-After says when. |
429 quota_exceeded | The monthly allowance for this key is spent. |
502 upstream_error | A retailer failed. Other sources still answer. |
503 auth_unavailable | Key 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
urlpointing at the retailer's product page. Flyer items don't: Flipp publishes no per-item link, so those come with the clipping image instead.