Real-time Swiss grocery shopping over MCP. Search products and compare prices across Migros, Coop, Aldi, Denner, and Lidl, see weekly promotions, and plan multi-store shopping trips with three optimisation strategies. Works with any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Cline, Continue).
Overview
swissgroceries-mcp gives any MCP-compatible client (Claude Desktop, Claude Code, Cursor, Cline, Continue, VS Code) real-time access to Swiss grocery chain catalogs.
What you can ask
- "Where is milk cheapest near 8001 Zürich right now?"
- "I need milk, bread, eggs, chicken, and pasta near 8050. Where should I shop to keep costs down?"
- "What is on sale at Aldi this week?"
- "Find Coop stores within 3 km of Bern Hauptbahnhof."
Install
{
"mcpServers": {
"swissgroceries": {
"command": "npx",
"args": ["-y", "@nicktcode/swissgroceries-mcp"]
}
}
}
No accounts, no tokens, no API keys. The Denner adapter self-registers an anonymous client on first use; everything else uses public endpoints.
For Claude Desktop one-click install, download the .mcpb from the GitHub Releases page.
Tools
| Tool | What it does |
|---|---|
find_stores | Find grocery stores near a location, filtered by chain and radius. |
search_products | Cross-chain product search with normalised price, unit price, size, and tags. |
get_product | Full product details for a chain plus product ID pair. |
get_promotions | Current promotional deals, filterable by chain, keyword, store, or expiry. |
find_stock | Stores of a chain that have a given product in stock. |
plan_shopping | Plan a multi-store trip for a shopping list near a location. |
health_check | Probe each registered chain adapter and report status, latency, and capabilities. |
Chain coverage
| Chain | Product search | Promotions | Per-store stock | Auth |
|---|---|---|---|---|
| Migros | Full catalog | Yes | Yes | Guest token (auto-rotated) |
| Coop | Full catalog (coopathome) | Yes | Yes (geo) | None |
| Aldi | Full catalog | Yes | No | None |
| Denner | Full catalog | Yes | No | Anonymous self-auth |
| Lidl | Weekly leaflet | Yes | No | None |
Highlights
- Cross-store unit-price comparison - compares CHF/kg, CHF/l, CHF/piece across chains so multi-pack and single-bottle prices are evaluated fairly.
- Three planning strategies:
single_store(fewest stops),split_cart(cheapest with stop penalty),absolute_cheapest(no penalty). - Multipack annotation - every product exposes per-bottle/per-unit estimates derived from pack patterns like
6x1.5l. - Category-canonicality filter - when one chain returns a real apple and another returns apple juice, the juice is dropped from the cross-chain comparison automatically.
- Resilience built in - in-memory cache, retry with exponential backoff, per-host rate limiting, and a per-host circuit breaker.
Disclaimer
Not affiliated with Migros, Coop, Aldi, Denner, or Lidl. Uses publicly accessible mobile-app endpoints. APIs are unofficial and can change at any time. MIT licensed.
Server Config
{
"mcpServers": {
"swissgroceries": {
"command": "npx",
"args": [
"-y",
"@nicktcode/swissgroceries-mcp"
]
}
}
}