shelfatlas-catalog

Danish grocery catalog as MCP tools: live offers across all major chains, stores, EAN lookup, stock.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
83%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,117Tokens (tool definitions)
~1.3 KBTypical response size
Moderate attention impact (0.87% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "shelfatlas-catalog": {
      "url": "https://api.shelfatlas.com/api/v1/mcp"
    }
  }
}

Remote endpoints

https://api.shelfatlas.com/api/v1/mcpstreamable-http

What it can do

Tool inventory

Tools (6)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢list_chains

List all retail chains available in the ShelfAtlas catalog.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_stores(chain_slug, lat, lng, radius_km, limit, ...)

List stores in the ShelfAtlas catalog. Filter by chain slug, or pass lat/lng for a nearest-first geo search (optionally capped by radius_km; geo results are not paginated).

Input Schema

{
  "type": "object",
  "properties": {
    "chain_slug": {
      "type": "string",
      "maxLength": 64,
      "description": "Chain slug, e.g. \"rema\". Omit for all chains."
    },
    "lat": {
      "type": "number",
      "minimum": -90,
      "maximum": 90,
      "description": "Latitude for nearest-first search."
    },
    "lng": {
      "type": "number",
      "minimum": -180,
      "maximum": 180,
      "description": "Longitude for nearest-first search."
    },
    "radius_km": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 500,
      "description": "Only stores within this many km (requires lat/lng)."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Max results (1–50). Default: 20."
    },
    "cursor": {
      "type": "string",
      "maxLength": 128,
      "description": "Pagination cursor from previous response (ignored for geo search)."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search_catalog_offers(chain_slug, ean, product_id, include_expired, limit, ...)

Search catalog offers (promotions and listed products) from Danish retail chains. Returns ONLY currently-valid offers unless include_expired is set. Filter by chain slug, product id, or EAN. Offers carry chainId — resolve names via list_chains. Self-serve keys see published campaign offers (tilbudsaviser, month-campaigns) only — not everyday shelf prices, which are Salling-only and restricted to partner keys.

Input Schema

{
  "type": "object",
  "properties": {
    "chain_slug": {
      "type": "string",
      "maxLength": 64,
      "description": "Filter to one chain, e.g. \"rema\"."
    },
    "ean": {
      "type": "string",
      "pattern": "^\\d{13}$",
      "description": "Filter to offers matched to this EAN-13."
    },
    "product_id": {
      "type": "string",
      "format": "uuid",
      "description": "Filter to offers matched to this product id."
    },
    "include_expired": {
      "type": "boolean",
      "description": "Include offers past their validity window. Default: false."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Max results (1–50). Default: 20."
    },
    "cursor": {
      "type": "string",
      "maxLength": 128,
      "description": "Pagination cursor from previous response."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_cheapest_offers(ean, product_id, limit)

Answer 'where is this product cheapest right now?' in one call: the currently-valid offers for one product (by EAN or product id), cheapest first, with chain slug and name resolved. Combine with get_stores(lat/lng, chain_slug) to find the nearest store carrying the winning chain's offer. Self-serve keys see published campaign offers only — not everyday shelf prices, which are Salling-only and restricted to partner keys.

Input Schema

{
  "type": "object",
  "properties": {
    "ean": {
      "type": "string",
      "pattern": "^\\d{13}$",
      "description": "EAN-13 barcode of the product."
    },
    "product_id": {
      "type": "string",
      "format": "uuid",
      "description": "ShelfAtlas product id (alternative to ean)."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 50,
      "description": "Max offers (1–50). Default: 20."
    }
  },
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_product_by_ean(ean)

Look up a product in the ShelfAtlas catalog by its EAN barcode.

Input Schema

{
  "type": "object",
  "properties": {
    "ean": {
      "type": "string",
      "pattern": "^\\d{13}$",
      "description": "EAN-13 barcode, e.g. \"5700382342773\"."
    }
  },
  "required": [
    "ean"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search_products(q, limit)

Resolve a product NAME to its ShelfAtlas id and EAN — use this BEFORE calling find_cheapest_offers or search_catalog_offers when you only have a product name (e.g. from a user question) and not an id or barcode. Matches on the canonical product name, case-insensitive, substring match. Returns id, name, ean (null for self-serve keys — every EAN is Salling-sourced and restricted to partner keys), and size (volumeMl/unitCount/quantityUnit) where known.

Input Schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "Product name (or part of it) to search for, e.g. \"Pepsi Max 50cl\". Minimum 2 characters."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 20,
      "description": "Max results (1–20). Default: 10."
    }
  },
  "required": [
    "q"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded6 tools
failed observationversion not recorded—
failed observationversion not recorded—
failed observationversion not recorded—
failed observationversion not recorded—