Swissgroceries MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DENNER_JWT | No | Optional pre-supplied Denner Bearer JWT. Without it, the adapter self-registers anonymously on first use and rotates the token automatically. | |
| LIDL_DEFAULT_STORE | No | Default Lidl store ID used when no storeIds are passed. | CH0149 |
| SWISSGROCERIES_LOG_LEVEL | No | silent, info, or debug. | info |
| SWISSGROCERIES_DISABLE_CACHE | No | Set to 1 to bypass the in-memory HTTP cache (useful for debugging). | |
| SWISSGROCERIES_USER_AGENT_COOP | No | Override the User-Agent for Coop calls if DataDome ever blocks the default. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| prompts | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| find_storesA | Find grocery stores near a location, filtered by chain and search radius. Accepts a Swiss ZIP code, GPS coordinates, or a free-text address as the search center. Returns store name, address, chain, location, and opening hours where available. Use for "find a Migros near me", "which Coop branches are in 8001?", or before checking stock. |
| search_productsA | Search for products across configured Swiss grocery chains (Migros, Coop, Aldi, Denner, Lidl, Volgshop, Otto's, Coop City) by keyword. The |
| get_productA | Fetch full product details for a specific chain + product ID pair. Returns { product, fetchedAt, fromCache }: the product carries price, brand, size, unit price, tags, category, image URL, and active promotions, while fetchedAt + fromCache report how fresh the data is. Obtain product IDs from search_products. Useful for drilling into a search result. Use for "get details for this Migros product" or "what is the unit price of this item?". |
| get_promotionsA | List current promotional deals across configured Swiss grocery chains. Filter by chain, keyword, store ID, or how many days until the promotion expires. Returns promotion name, discount, validity dates, and applicable stores. Use for "what is on sale this week?", "any Migros deals on cheese?", or "promotions ending today". |
| find_stockA | Check which stores of a given chain have a specific product in stock. Optionally filter by proximity to GPS coordinates or query a single store by ID. Not all chains support per-store stock queries; unsupported chains return a clear error. Use for "is this product available near Zurich HB?", "which Coop has item X in stock?". |
| health_checkA | Probe each registered chain adapter with a trivial query and report status, latency, and capability flags. Use this when a chain seems missing from results or when debugging adapter problems. |
| plan_shoppingA | Plan a multi-store shopping trip near a location, picking the best products across configured Swiss grocery chains. Items can be generic ("milch", "pasta") or pinned to a specific SKU. Returns a primary plan plus alternatives. Use when the user gives a list of items and asks "where should I shop?" or "what's cheapest?". Strategies: single_store (one chain), split_cart (multi-chain with stop penalty), absolute_cheapest (no penalty). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| weekly_deals_digest | Summarise this week's best grocery deals across all configured Swiss chains, optionally filtered by category, chain, or location. Lists the top discounts by % off and absolute saving, calling out Swiss household staples (laundry, dairy, drinks) when relevant. |
| compare_basket_across_chains | Compare the cost of a shopping basket across all configured Swiss grocery chains and recommend where to shop. Returns a per-chain total, identifies which chain is cheapest for each item, and produces a multi-store split-cart plan if it materially beats single-store shopping. |
| cheapest_recipe_ingredients | Given a recipe (list of ingredients with quantities, or a recipe URL), find the cheapest place to buy each ingredient across all configured Swiss grocery chains and produce a consolidated shopping plan. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Registered chains | List of currently registered grocery-chain adapters and their capabilities (productSearch, productDetail, storeSearch, promotions, perStoreStock, perStorePricing). |
TDQS
Scored across 7 tools
Each tool targets a clearly distinct user intent: store discovery, product search, product detail, promotions, per-store stock, adapter health, and trip planning. The only mild overlap is that search_products includes promotion info while get_promotions is dedicated to deals, but the tool descriptions make the boundary clear.
All names use clear snake_case and are readable, with paired patterns like find_stores/find_stock and get_product/get_promotions. However, verbs vary across find, search, get, plan, and health_check does not follow a verb_noun pattern, so it is mostly rather than fully consistent.
Seven tools is well-scoped for a Swiss grocery comparison and planning server. Each tool has a distinct role and none feels redundant or excessive.
The surface covers the full read-only shopping workflow: finding stores, searching and inspecting products, discovering promotions, checking stock, diagnosing chain issues, and planning multi-store trips. No obvious lifecycle gap exists for the stated grocery-assistant purpose.