UK Supermarkets

io.github.jbeshir由 GitHub 账号 jbeshir 发布v1.0.3更新于 Oct 30, 2026

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

概览

AI 生成的概览

在九家英国超市之间搜索和比较食品杂货价格,并提供商品详情、分类浏览和 Tesco 购物篮工具。

可以做什么
  • 列出支持的超市及其状态
  • 在一家或多家超市搜索商品,并比较同一商品的价格
  • 查看商品详情,如价格、描述、配料和营养成分
  • 浏览某家超市的商品分类
  • 登录 Tesco 后可读取历史订单、查看购物篮、添加商品或修改数量、移除商品
适用场景
适合让助手核对食品杂货价格、比较同一商品在不同英国超市的售价,或在规划采购时查询配料与营养信息。Tesco 购物篮和订单历史工具仅在你在 Tesco 购物并启用登录时才有意义。
运行要求
以本地进程运行(Go 二进制、预编译版本或 Docker 镜像)。Tesco、Asda 和 Waitrose 以及任何登录都需要 Chrome、Chromium 或 Edge,可用 CHROME_EXEC_PATH 指定浏览器路径。不登录浏览无需任何环境变量;登录需按超市设置 TESCO_LOGIN 等变量,SUPERMARKET_COOKIE_DIR 可覆盖 Cookie 存储目录。需要能访问各超市网站的网络。
安装前请注意
登录会打开可见的浏览器窗口供手动登录,并把会话 Cookie 缓存到磁盘,应把该 Cookie 目录视为敏感数据。购物篮工具会在真实的 Tesco 账户中添加、修改和删除商品。请求直接发往超市网站,可能被限流或屏蔽;会话经常过期,需要反复登录。

安装

在 SourceWeft 中

  1. 打开 控制台中的 UK Supermarkets,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:supermarkets-uk/README.md,提交 27dc1b2

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v1.0.3最新Oct 29, 2026
  2. v1.0.2Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分