UK Supermarkets

io.github.jbeshirPublished by GitHub account jbeshirv1.0.3Updated Oct 30, 2026

Search and compare grocery prices across UK supermarkets with product details.

Overview

AI-generated overview

Searches and compares grocery prices across nine UK supermarkets, with product details, category browsing and Tesco basket tools.

What you can do
  • List supported supermarkets and their status
  • Search products across one or more stores and compare prices for an item
  • Read product details such as price, description, ingredients and nutrition
  • Browse product categories for a supermarket
  • With Tesco login: read order history, view the basket, add items or change quantities, and remove items
When to use it
Useful when you want an assistant to price-check groceries, compare the same item across UK stores, or look up ingredients and nutrition while planning a shop. Tesco basket and order-history tools only matter if you shop at Tesco and enable login.
Requirements
Runs as a local process (Go binary, pre-built release, or Docker image). Chrome, Chromium or Edge is needed for Tesco, Asda and Waitrose and for any login; CHROME_EXEC_PATH can point at the browser binary. No environment variables are required for browsing without login; login is enabled per store with variables such as TESCO_LOGIN, and SUPERMARKET_COOKIE_DIR overrides where cookies are stored. Network access to the supermarket sites is required.
Before you install
Login opens a visible browser window for manual sign-in and caches session cookies to disk, so treat the cookie directory as sensitive. Basket tools add, change and remove items in a real Tesco account. Requests go directly to supermarket sites, which may rate-limit or block scraping, and sessions expire often, prompting repeated logins.

Installation

In SourceWeft

  1. Open UK Supermarkets in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

supermarkets-uk-mcp

An MCP server for searching and comparing grocery prices across 9 UK supermarkets. It provides product search, price comparison, category browsing, and (for Tesco) order history and basket management. Each supermarket is implemented as a pluggable datasource behind a common interface, with the server fanning out concurrent requests across stores and aggregating the results.

Getting Started

Requirements

  • Go 1.27.3+ (to build from source)

  • Chrome, Chromium, or Microsoft Edge — required for Tesco, Asda, and Waitrose (headless browser rendering), and for login to any supermarket. Sainsbury's, Ocado, Morrisons, and the Shopify stores work without a browser.

    On Linux, avoid snap-packaged Chromium (Ubuntu's default chromium package). It is known to hang indefinitely — both on graceful CDP tab-close and on OS-level process reaping after a forced kill — when launched as a descendant of certain parent processes (observed running under Claude Desktop's Electron process tree). The hang was 100% reproducible under that setup and never reproduced with the same code against a non-snap Chrome/Chromium build. Install Google Chrome or a non-snap Chromium build instead, and point CHROME_EXEC_PATH at it if it isn't picked up automatically.

Installation

Pre-built binaries are available from Releases.

Install from source:

go install github.com/jbeshir/mcp-servers/supermarkets-uk/cmd/supermarkets-uk-mcp@latest

Or build from the repo root:

make build

A Dockerfile is also provided, based on chromedp/headless-shell so that browser-based stores work out of the box:

docker build -t supermarkets-uk-mcp ./supermarkets-uk

Configuration

No environment variables are required to get started — all supermarkets work without login.

VariableRequiredDescription
CHROME_EXEC_PATHNoPath to the Chrome/Chromium binary to launch. Leave unset to use automatic detection. See the note above about snap-packaged Chromium on Linux.

See Login below for the additional variables that enable interactive login.

Claude Desktop
json
{  "mcpServers": {    "supermarkets-uk": {      "command": "/path/to/supermarkets-uk-mcp"    }  }}
Claude Code
claude mcp add supermarkets-uk /path/to/supermarkets-uk-mcp

Tools

ToolDescription
list_supermarketsList all supported supermarkets with IDs and status
search_productsSearch for products across one or more supermarkets
compare_pricesCompare prices for a product across all supermarkets
get_product_detailsGet detailed product info (price, description, ingredients, nutrition)
browse_categoriesBrowse product categories for a supermarket
get_order_historyGet past order history (Tesco only, requires login)
get_basketGet current shopping basket contents (Tesco only, requires login)
add_to_basketAdd a product to the basket or update its quantity (Tesco only, requires login)
remove_from_basketRemove a product from the basket (Tesco only, requires login)

Supported Supermarkets

SupermarketIDData SourceBrowser Required
TescotescoHTML (headless browser)Yes
Sainsbury'ssainsburysJSON APINo
OcadoocadoServer-rendered HTML (OSP)No
MorrisonsmorrisonsServer-rendered HTML (OSP)No
AsdaasdaAlgolia API (search) + HTML (details)Yes
WaitrosewaitroseHTML (headless browser)Yes
HiYoUhiyouShopify predictive search APINo
Tuk Tuk MarttuktukmartShopify predictive search APINo
MorueatsmorueatsShopify predictive search APINo

Product Information Coverage

Not all supermarkets provide the same level of detail:

FieldTescoSainsbury'sOcadoMorrisonsAsdaWaitroseShopify stores
Name / Price / URLYesYesYesYesYesYesYes
Price per unitYesYesYesYesYesYes--
PromotionsYesYesYesYesYesYes--
DescriptionYesYesYesYesYesYesYes
IngredientsYesYesYesYesYesYes--
NutritionYesYesYesYesYesYes--
Dietary info--------Yes----
Weight------YesYesYesYes

Login

Login is optional and enables personalised results (e.g. local stock, delivery availability), order history, and basket management. It requires running the server locally with a browser available.

To enable login, set <SUPERMARKET>_LOGIN=true for each supermarket you want to log in to. On first use, a visible browser window opens for you to complete login manually. Session cookies are cached to disk and reused across restarts. If cookies expire, the server clears them and triggers a fresh login automatically.

Login requires Chrome, Chromium, or Edge for all supermarkets, including those that do not otherwise need a browser. Supermarket sessions tend to expire frequently, so expect to be prompted to log in again regularly.

VariableDescription
TESCO_LOGINEnable Tesco login
SAINSBURYS_LOGINEnable Sainsbury's login
OCADO_LOGINEnable Ocado login
MORRISONS_LOGINEnable Morrisons login
ASDA_LOGINEnable Asda login
WAITROSE_LOGINEnable Waitrose login
SUPERMARKET_COOKIE_DIROverride cookie storage directory (default: OS config dir)

Example with login enabled:

json
{  "mcpServers": {    "supermarkets-uk": {      "command": "/path/to/supermarkets-uk-mcp",      "env": {        "TESCO_LOGIN": "true",        "WAITROSE_LOGIN": "true",        "SUPERMARKET_COOKIE_DIR": "/home/you/.supermarket-cookies"      }    }  }}

Key Concepts

  • Datasource — A pluggable adapter for a single supermarket. Each datasource implements a common ProductSource interface (search, product details, category browsing) using whatever transport the supermarket requires: JSON API, server-rendered HTML scraping, or headless Chrome rendering.
  • AuthProductSource — An extension of ProductSource that supports session cookie injection and validation. Six of the nine supermarkets implement this interface, allowing logged-in features like personalised results. The three Shopify-based stores are plain ProductSource implementations with no auth support.
  • Client orchestrator — The client.Client type wires together all nine datasources. It manages concurrent fan-out for searches, lazy authentication with session expiry detection, and per-host rate limiting.
  • Auth resolver — A per-supermarket wrapper that handles lazy login. On first use of a login-enabled supermarket, it opens a visible browser window for the user to complete login manually. Session cookies are persisted to disk and reused. If a request returns ErrSessionExpired, the resolver clears the cookies and triggers a fresh login.
  • Shared browser — A single headless Chrome instance (via chromedp) shared across all browser-based datasources. Each request opens a new tab within the shared browser context so that cookies persist between navigations.
  • OSP (Ocado Smart Platform) — Ocado and Morrisons share a common server-rendered HTML structure. A single osp package implements both, parameterised by store-specific config.

Architecture

mermaid
graph TD    MCP["MCP Client<br/>(Claude Desktop, etc.)"]    SRV["MCP Server<br/>9 tools"]    ORCH["Client Orchestrator<br/>concurrent fan-out + auth"]
    MCP -->|"stdio JSON-RPC"| SRV    SRV --> ORCH
    subgraph "Datasource Adapters"        direction LR        BROWSER["Browser-based<br/>Tesco, Asda, Waitrose"]        HTML["HTML scraping<br/>Ocado, Morrisons"]        API["JSON API<br/>Sainsburys"]        SHOPIFY["Shopify API<br/>HiYoU, TukTukMart, Morueats"]    end
    ORCH --> BROWSER    ORCH --> HTML    ORCH --> API    ORCH --> SHOPIFY
    CHROME["Headless Chrome"]    BROWSER --> CHROME

External Dependencies

mermaid
graph LR    SM["supermarkets-uk-mcp"]
    SM -->|"Headless Chrome"| TESCO["tesco.com"]    SM -->|"Headless Chrome"| ASDA_BR["asda.com"]    SM -->|"Headless Chrome"| WAITROSE["waitrose.com"]    SM -->|"HTTP + HTML parsing"| OCADO["ocado.com"]    SM -->|"HTTP + HTML parsing"| MORR["groceries.morrisons.com"]    SM -->|"JSON API"| SAINS["sainsburys.co.uk"]    SM -->|"Shopify predictive search API"| SHOPIFY["hiyou.co / tuktukmart.co.uk / morueats.co.uk"]

Data Flow

A search_products call with multiple supermarkets triggers concurrent requests across all targeted stores. Individual store failures are captured per-result rather than failing the entire request.

mermaid
sequenceDiagram    participant Client as MCP Client    participant Server as MCP Server    participant Orch as Orchestrator    participant Auth as Auth Resolver    participant DS as Datasource Adapters    participant Ext as Supermarket Sites
    Client->>Server: search_products(query, stores)    Server->>Orch: SearchAll(query, stores)
    par One goroutine per store        Orch->>Auth: ensureAuth(tesco)        Note over Auth: Lazy login on first use        Auth-->>Orch: ready        Orch->>DS: Tesco.SearchProducts        DS->>Ext: Headless Chrome        Ext-->>DS: Rendered HTML    and        Orch->>DS: Sainsburys.SearchProducts        DS->>Ext: JSON API        Ext-->>DS: JSON response    and        Orch->>DS: Ocado.SearchProducts        DS->>Ext: HTTP GET        Ext-->>DS: Server-rendered HTML    end
    DS-->>Orch: Parsed products (per store)    Orch-->>Server: Combined results    Server-->>Client: Formatted tool response

When a logged-in request fails with ErrSessionExpired, the auth resolver clears the cached cookies, opens a browser window for re-login, and retries the request transparently.

Source: supermarkets-uk/README.md at commit 27dc1b2

Tools

0
SourceWeft has not started this package in its sandbox yet, so its tools are not known.

Version history

2
  1. v1.0.3LatestOct 29, 2026
  2. v1.0.2Sep 16, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts