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
verifiedversion not recorded6 tools
failed observationversion not recorded—
failed observationversion not recorded—
failed observationversion not recorded—
failed observationversion not recorded—