migros-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MIGROS_ZIP | No | Postcode to shop from (sets your region and prices). | |
| MIGROS_LANGUAGE | No | Language to use. Valid values are de, fr, it, en. | de |
| MIGROS_APP_LIBRARY | No | Path to the app binary (loads the OAuth secret for login). | |
| MIGROS_IMPERSONATE | No | Browser impersonation profile, e.g. safari18_0, if the gateway blocks plain requests (needs pip install '.[impersonate]'). | off |
| MIGROS_FIREBASE_PLIST | No | Path to the app's GoogleService-Info.plist (shopping-list items). |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Read-mostly access to the Migros mobile API (products, stores, Cumulus loyalty, orders, shopping lists, recipes). Guest tools need no login. State-changing calls require confirm=true and act on the real account.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| migros_statusC | Report environment, gateway, device identity and login state. |
| migros_endpointsA | List the verified endpoint catalogue (method, path, auth requirement). Args: service: optional prefix filter, e.g. "product-discovery", "retentionapi", "checkout", "shopping-list", "onelist", "recipe". |
| migros_unroutedA | Paths recovered from the binary that the live gateway does not route. Kept for transparency: the literals exist in the app, but no candidate service prefix resolved (plain 404), so they are not exposed as tools. |
| migros_requestA | Call any gateway route directly (advanced escape hatch). Args:
path: path relative to the gateway base, e.g.
"product-discovery/v1/promotions/weekend". Absolute URLs and
".." segments are refused.
method: HTTP verb. Defaults to the catalogue verb for |
| migros_login_urlA | Show the OAuth authorize URL and client parameters this device would use. Complete the flow locally with |
| set_locationA | Shop as if located at a Swiss postcode (sets cooperative, warehouse, prices). Without it, a guest gets a location the backend guesses. Signed-in users default to their own fulfilment selection; setting a postcode overrides it. |
| my_locationC | The shopping context used for catalogue calls: cooperative, warehouse, postcode. |
| search_productsA | Search the Migros catalogue: name, price, unit price, promotion, stock. Uses your account's region when logged in, else the guest location (see set_location). Args:
query: free text, e.g. "hafermilch" or "ovomaltine".
limit: products per page (1-50, default 10).
offset: pagination offset (use |
| search_products_guestB | Anonymous product search (never sends a token). Same arguments as search_products. |
| autocompleteB | Search-as-you-type: suggested terms, matching categories and top products. |
| scan_barcodeC | Look up products by barcode (EAN/GTIN), e.g. ["7614500010013"]. |
| product_detailA | Product detail by uid (the Args: product_id: product uid, e.g. "100006357". full: return the raw response (ingredients, nutrients, origin, ...). store_type: ONLINE or OFFLINE. |
| product_cardsB | Priced summaries for a list of product uids (one call per 50). |
| category_productsC | Products in a category (ids come from autocomplete, product breadcrumbs or store_map). |
| category_breadcrumbC | Category for a slug path, e.g. "milchprodukte-eier-frische-ferti/milch-butter-eier". |
| product_filtersB | Facets available for a search (ids and counts), optionally with filters applied. The facet ids are what search_products accepts in |
| promotionsC | Current Migros promotions (Aktionen): discount, dates, product ids. |
| weekend_promotionsC | This weekend's promotions, optionally with their products priced. |
| promotion_detailC | Detail of a single promotion id (from promotions). |
| promotion_detailsC | Details for a comma-separated list of promotion ids. |
| brand_detailC | Brand page by slug, e.g. "m-budget", "migros-bio", "v-love". |
| brand_productsC | Products of a brand, priced and paginated. |
| label_detailC | Label (certification) page by slug, e.g. "bio-knospe". |
| label_productsC | Products carrying a label, priced and paginated. |
| new_productsC | Products newly added to the assortment, priced. |
| home_productsC | The product slider on the app's home screen. |
| find_storesC | Find stores by town, postcode or name (or coordinates). |
| store_availabilityA | In-store stock of a product. Args:
product_id: product uid.
store_ids: store cost-centre ids ( |
| store_mapB | The in-store category layout (aisles) for your cooperative. |
| address_searchC | Swiss address lookup: postcode/town, optionally street and house number. |
| cooperativesB | The Migros cooperative serving a postcode or town, e.g. "8001" -> gmzh. |
| fulfilment_selectionC | Delivery context for a postcode (or the guessed location): cooperative, warehouse, slot. |
| my_fulfilment_selectionB | The signed-in user's fulfilment selection. Requires login. |
| delivery_infoC | Delivery information and cut-off times. Requires login. |
| my_delivery_slotsB | Available delivery slots for the user. Requires login. |
| cumulus_profileB | Your Cumulus profile: card number, memberships, lifestage. Requires login. |
| cumulus_walletC | Wallet overview: points, and coupon / voucher / stampcard counts. Requires login. |
| cumulus_pointsB | Cumulus points and spend for the current and previous periods. Requires login. |
| cumulus_wrappedB | Your Cumulus 'year in review': top products, categories, shop, savings. Requires login. |
| cumulus_couponsB | Your Cumulus coupons (activated and available). Requires login. |
| cumulus_couponB | A single Cumulus coupon by unique id. Requires login. |
| activate_couponA | Activate a Cumulus coupon by EAN. Changes account state; needs confirm=true. |
| deactivate_couponA | Deactivate a Cumulus coupon by EAN. Changes account state; needs confirm=true. |
| partner_couponsC | Cumulus partner coupons. Requires login. |
| cumulus_bonsC | Your Cumulus bons (cash vouchers). Requires login. |
| cumulus_bonC | A single Cumulus bon. Requires login. |
| activate_bonA | Activate a Cumulus bon. Changes account state; needs confirm=true. |
| stampcardsC | Your Cumulus stampcards: progress and rewards. Requires login. |
| stampcard_catalogueB | All stampcards that exist (not just yours). Requires login. |
| apple_wallet_passB | Create an Apple Wallet pass for your Cumulus card (.pkpass). Needs confirm=true. |
| google_wallet_passB | Create a Google Wallet pass JWT for your Cumulus card. Needs confirm=true. |
| google_wallet_pass_statusA | Whether your Cumulus card is saved to Google Wallet. Requires login. |
| receiptsA | Your digital till receipts (in-store and online), newest first. Requires login. Args: start_date: ISO date (YYYY-MM-DD) to list receipts from; defaults to two years ago (the endpoint requires it). full: return raw receipts instead of the summary. |
| receipt_detailB | One digital receipt (HTML/JSON as the gateway returns it). Requires login. |
| receipt_productsC | The line items of a digital receipt. Requires login. |
| inboxB | Your message-center inbox (campaign messages). Requires login. |
| mark_messages_readB | Mark inbox messages as read. Needs confirm=true. |
| delete_messagesB | Delete inbox messages. Needs confirm=true. |
| my_profileB | Your customer profile. Requires login. |
| my_phone_numbersA | Phone numbers on your profile. Requires login. |
| my_addressesC | Your saved addresses. Requires login. |
| my_addressB | A single saved address. Requires login. |
| my_ordersB | Your online orders, newest first. Requires login. |
| order_detailC | A single order with its line items. Requires login. |
| order_authorization_stateC | Payment authorization state of an order. Requires login. |
| order_invoiceC | Invoice document for an order. Requires login. |
| order_payment_slipB | Payment slip (QR-bill) for an order. Requires login. |
| last_orderB | Your most recently placed order. Requires login. |
| cancel_orderA | Cancel an order. Destructive; needs confirm=true. |
| shopping_list_itemsB | The items on a shopping list (from Firestore): name, quantity, note, done. Needs the Firebase Web API key — set MIGROS_FIREBASE_PLIST to the app's
GoogleService-Info.plist (see README). |
| shopping_lists_firestoreB | Your shopping lists from Firestore (names, sharing). Requires login + Firebase key. |
| add_shopping_list_itemC | Add an item to a shopping list (Firestore write). Needs confirm=true. |
| complete_shopping_list_itemC | Tick (or untick) a shopping-list item (Firestore write). Needs confirm=true. |
| remove_shopping_list_itemA | Delete a shopping-list item (Firestore write). Needs confirm=true. |
| shopping_list_userB | Shopping-list user state (shared lists, invitations). Requires login. |
| favouritesB | Your favourite products, priced. Requires login. |
| is_favouriteA | Whether a product is a favourite. Requires login. |
| add_favouriteB | Add a product to favourites. Changes account state; needs confirm=true. |
| remove_favouriteB | Remove a product from favourites. Changes account state; needs confirm=true. |
| my_productsB | Your frequently bought products, by how often you buy them. Requires login. |
| shopping_list_categoriesA | The shopping-list category tree (aisles). No login required. |
| shopping_list_membersC | Members of a shared shopping list. Requires login. |
| add_order_to_shopping_listA | Add every product of a past order to your shopping list. Needs confirm=true. |
| credits_balanceB | Your Migros account credit balance. Requires login. |
| purchase_analyticsC | Online-shopping status: first order, ongoing delivery pass. Requires login. |
| recipes_by_categoryB | Recipes grouped by category (Migusto). No login required. |
| recipe_detailB | A single recipe with ingredients and steps. No login required. |
| recipe_taxonomiesB | Recipe taxonomies (cuisines, diets, ...). No login required. |
| search_recipesC | Search Migusto recipes by text and/or taxonomy ids (see recipe_taxonomies). |
| my_recipesC | Your favourite recipes. Requires login. |
| home_layoutC | CMS home layout for guests. |
| content_pageC | A CMS content page by id. |
| greeting_messagesA | The app's greeting texts for your cooperative (morning/afternoon/evening). |
| teasersC | [Unreliable: answers HTTP 500 server-side with the recovered parameters (2026-10-29).] Marketing teasers for guests. |
| display_panelsC | Retail-media display panels for a page id. |
| checkout_contextB | Checkout context (v4): basket, slot, payment, totals. Requires login. |
| checkout_summaryC | Verified checkout summary. Requires login. |
| checkout_payment_optionsC | Available payment options. Requires login. |
| checkout_delivery_addressesB | Delivery addresses available at checkout. Requires login. |
| checkout_timeslotsB | Available checkout timeslots. Requires login. |
| checkout_cumulus_bonsA | Cumulus bons that can be redeemed in the current checkout. Requires login. |
| apply_voucherB | Apply a voucher/promo code to the current basket. Changes checkout; needs confirm=true. |
| redeem_cumulus_bonA | Redeem a Cumulus bon into the current basket. Changes checkout; needs confirm=true. |
| place_orderC | Place an order. Spends money; requires confirm=true. |
| authorize_orderB | Authorise an order's payment. Requires confirm=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 105 tools
Despite the large surface, the tool set is organized by domain prefixes (cumulus_, checkout_, order_, shopping_list_, product_) and list-vs-single pairs (promotions/promotion_detail, cumulus_coupons/cumulus_coupon) are consistently delineated. A few boundaries remain fuzzy: search_products vs search_products_guest, checkout_context vs checkout_summary, and the promotions/weekend_promotions/promotion_detail/promotion_details cluster can still lead to misselection.
Names consistently use snake_case with a predictable prefix scheme (my_, cumulus_, shopping_list_, checkout_, order_, product_/category_/brand_/label_) and verb-first actions for mutations (add_, remove_, activate_, cancel_, place_, redeem_). Minor deviations exist: bare-noun read tools (receipts, inbox, favourites, promotions, teasers) and the tech-flavoured suffix in shopping_lists_firestore break the otherwise uniform pattern.
105 tools is far beyond the 3-15 sweet spot and even beyond the 25+ 'heavy' band; an agent must reason over a very large catalogue to pick correctly. The domain is genuinely broad (catalogue, loyalty, checkout, orders, content, recipes), but many adjacent read tools could have been consolidated (e.g. checkout_* group, promotion_* group) to keep the surface navigable.
Coverage is unusually deep: product discovery, categories, promotions, stores, fulfilment, full checkout and order lifecycle (place, authorize, cancel, invoice, payment slip), receipts, Cumulus loyalty, shopping lists, recipes and CMS content are all represented. Remaining gaps are minor: shopping-list lifecycle is partial (no create/rename/delete list or edit item quantity), and login is exposed only as a URL hint plus an external CLI rather than an in-server tool.