mcpField
U
UK Supermarkets

UK Supermarkets

ローカル
github.com/jbeshir検索13 日前に更新

UK Supermarkets について

UK Supermarkets は、英国の 9 店舗で食品を比較する人向けの MCP サーバーです。複数店舗への並行検索や価格比較、商品詳細に加え、Tesco の注文履歴とバスケット機能も備えています。

主な機能

  1. 01複数スーパーの商品検索
  2. 02店舗間の価格比較
  3. 03カテゴリーと商品詳細の閲覧
  4. 04Tesco の注文履歴の取得
  5. 05Tesco のバスケットの確認と管理

活用シーン

  1. 01店舗間で食品価格を比較
  2. 02原材料と栄養情報の確認
  3. 03スーパーの商品カテゴリーの閲覧
  4. 04Tesco の注文確認やバスケット更新

MCP 対応

スーパーの商品検索、価格比較、商品情報、カテゴリー閲覧のツールを MCP クライアントに提供します。Tesco のログインを有効にすると、注文履歴の取得とバスケット操作も利用できます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbsupermarkets-uk-mcp.mcpb

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

supermarkets-uk-mcp

英国の9つのスーパーマーケットの食料品価格を検索・比較する MCP サーバーです。商品検索、価格比較、カテゴリーの閲覧に加え、Tesco では注文履歴とショッピングバスケットの管理ができます。各スーパーマーケットは共通インターフェースの背後にプラグイン可能なデータソースとして実装されており、サーバーは各店舗へのリクエストを並行して実行し、結果を集約します。

はじめに

要件
  • Go 1.27.3+(ソースからビルドする場合)

  • Chrome、Chromium、または Microsoft Edge — Tesco、Asda、Waitrose(ヘッドレスブラウザーでのレンダリング)および各スーパーマーケットへのログインに必要です。Sainsbury's、Ocado、Morrisons、Shopify ストアはブラウザーなしで動作します。

    Linux では、snap パッケージ版の Chromium(Ubuntu のデフォルトの chromium パッケージ)は使用しないでください。特定の親プロセスの子孫プロセスとして起動した場合(Claude Desktop の Electron プロセスツリー内で実行した際に確認)、正常な CDP タブのクローズ時と強制終了後の OS レベルでのプロセス回収時の両方で、無期限にハングすることが知られています。このハングはその環境で再現率 100% で発生しましたが、同じコードを snap 版ではない Chrome/Chromium ビルドで実行した場合は一度も再現しませんでした。代わりに Google Chrome または snap 版ではない Chromium ビルドをインストールし、自動検出されない場合は CHROME_EXEC_PATH をそのパスに設定してください。

インストール

ビルド済みバイナリは Releases から入手できます。

ソースからインストールする場合:

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

または、リポジトリのルートからビルドします:

make build

ブラウザーベースの店舗がすぐに動作するよう、chromedp/headless-shell をベースにした Dockerfile も用意されています:

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

使い始めるために必要な環境変数はありません。すべてのスーパーマーケットはログインなしで利用できます。

変数必須説明
CHROME_EXEC_PATHいいえ起動する Chrome/Chromium バイナリのパスです。自動検出を利用する場合は設定しないでください。Linux での snap パッケージ版 Chromium については、上記の注意を参照してください。

インタラクティブログインを有効にする追加の変数については、以下のログインを参照してください。

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

ツール

ツール説明
list_supermarketsサポート対象のスーパーマーケットを ID とステータス付きで一覧表示します
search_products1つ以上のスーパーマーケットで商品を検索します
compare_pricesすべてのスーパーマーケットで商品の価格を比較します
get_product_details商品の詳細情報(価格、説明、原材料、栄養成分)を取得します
browse_categoriesスーパーマーケットの商品カテゴリーを閲覧します
get_order_history過去の注文履歴を取得します(Tesco のみ、ログインが必要)
get_basket現在のショッピングバスケットの内容を取得します(Tesco のみ、ログインが必要)
add_to_basketバスケットに商品を追加するか、数量を変更します(Tesco のみ、ログインが必要)
remove_from_basketバスケットから商品を削除します(Tesco のみ、ログインが必要)

サポート対象のスーパーマーケット

スーパーマーケットIDデータソースブラウザーが必要
TescotescoHTML(ヘッドレスブラウザー)はい
Sainsbury'ssainsburysJSON APIいいえ
Ocadoocadoサーバー側レンダリング HTML(OSP)いいえ
Morrisonsmorrisonsサーバー側レンダリング HTML(OSP)いいえ
AsdaasdaAlgolia API(検索)+ HTML(詳細)はい
WaitrosewaitroseHTML(ヘッドレスブラウザー)はい
HiYoUhiyouShopify 予測検索 APIいいえ
Tuk Tuk MarttuktukmartShopify 予測検索 APIいいえ
MorueatsmorueatsShopify 予測検索 APIいいえ

商品情報の網羅状況

スーパーによって、提供される詳細情報の範囲は異なります。

項目TescoSainsbury'sOcadoMorrisonsAsdaWaitroseShopifyストア
商品名/価格/URLありありありありありありあり
単位あたりの価格ありありありありありあり--
プロモーションありありありありありあり--
説明ありありありありありありあり
原材料ありありありありありあり--
栄養情報ありありありありありあり--
食事に関する情報--------あり----
重量------ありありありあり

ログイン

ログインは任意です。ログインすると、パーソナライズされた結果(地域の在庫状況や配達可能状況など)、注文履歴、カート管理を利用できます。ログインするには、ブラウザーを利用できる環境でサーバーをローカル実行する必要があります。

ログインを有効にするには、ログインするスーパーごとに <SUPERMARKET>_LOGIN=true を設定します。初回利用時にブラウザーウィンドウが表示され、手動でログインできます。セッション Cookie はディスクにキャッシュされ、再起動後も再利用されます。Cookie の有効期限が切れると、サーバーは Cookie を消去し、自動的に新しいログインを開始します。

通常はブラウザーを必要としないスーパーも含め、すべてのスーパーでログインには Chrome、Chromium、または Edge が必要です。スーパーのセッションは頻繁に期限切れになる傾向があるため、定期的に再ログインを求められることを想定してください。

変数説明
TESCO_LOGINTescoのログインを有効にします
SAINSBURYS_LOGINSainsbury'sのログインを有効にします
OCADO_LOGINOcadoのログインを有効にします
MORRISONS_LOGINMorrisonsのログインを有効にします
ASDA_LOGINAsdaのログインを有効にします
WAITROSE_LOGINWaitroseのログインを有効にします
SUPERMARKET_COOKIE_DIRCookieの保存ディレクトリを上書きします(デフォルト:OSの設定ディレクトリ)

ログインを有効にする場合の例:

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

主な概念

  • データソース — 1つのスーパーに対応する、プラグイン可能なアダプターです。各データソースは、スーパーが必要とする通信方式(JSON API、サーバー側でレンダリングされたHTMLのスクレイピング、ヘッドレスChromeによるレンダリング)を用いて、共通の ProductSource インターフェース(検索、商品詳細、カテゴリ閲覧)を実装します。
  • AuthProductSource — セッション Cookie の注入と検証に対応する、ProductSource の拡張インターフェースです。9つのスーパーのうち6つがこのインターフェースを実装しており、ログイン後のパーソナライズされた結果などを利用できます。Shopifyベースの3つのストアは、認証に対応しない通常の ProductSource 実装です。
  • クライアントオーケストレーター — client.Client 型は、9つすべてのデータソースを接続します。検索時の並行リクエストの分配、セッション期限切れを検出する遅延認証、ホストごとのレート制限を管理します。
  • 認証リゾルバー — スーパーごとに、遅延ログインを処理するラッパーです。ログインを有効にしたスーパーを初めて利用する際に、ブラウザーウィンドウを表示し、ユーザーが手動でログインできるようにします。セッション Cookie はディスクに保存され、再利用されます。リクエストが ErrSessionExpired を返した場合、リゾルバーは Cookie を消去し、新しいログインを開始します。
  • 共有ブラウザー — ブラウザーを使用するすべてのデータソースで共有される、単一のヘッドレスChromeインスタンス(chromedp経由)です。各リクエストは共有ブラウザーコンテキスト内で新しいタブを開くため、ページ間の移動中も Cookie が保持されます。
  • OSP(Ocado Smart Platform) — OcadoとMorrisonsは、共通のサーバー側レンダリングHTML構造を使用します。1つの osp パッケージが、ストア固有の設定をパラメーターとして両方に対応します。

アーキテクチャ

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

外部依存関係

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"]

データフロー

複数のスーパーを指定して search_products を呼び出すと、対象となるすべてのストアに並行リクエストが送信されます。個々のストアで発生したエラーは、リクエスト全体を失敗させるのではなく、結果ごとに記録されます。

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

ログイン済みのリクエストが ErrSessionExpired で失敗すると、認証リゾルバーはキャッシュ済みの Cookie を消去し、再ログイン用のブラウザーウィンドウを開いて、リクエストを透過的に再試行します。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。