Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MIGROS_ZIPNoPostcode to shop from (sets your region and prices).
MIGROS_LANGUAGENoLanguage to use. Valid values are de, fr, it, en.de
MIGROS_APP_LIBRARYNoPath to the app binary (loads the OAuth secret for login).
MIGROS_IMPERSONATENoBrowser impersonation profile, e.g. safari18_0, if the gateway blocks plain requests (needs pip install '.[impersonate]').off
MIGROS_FIREBASE_PLISTNoPath 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

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 key, else GET. key: a catalogue key from migros_endpoints(); used instead of path. params: values for {placeholders} in a catalogue key's path. query: query-string parameters. body: JSON body. confirm: required for every non-GET call, catalogue keys included.

migros_login_urlA

Show the OAuth authorize URL and client parameters this device would use.

Complete the flow locally with migros-login (PKCE needs a browser).

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 next_offset from the previous page). sort: relevance | price | price_per_unit | discount_percentage | brand. direction: asc | desc. filters: facet ids -> values, e.g. {"product_bio": true}, {"promotion": true}, {"product_of_switzerland": true}, {"new": true}, {"product_special_nutrition": ["vegan"]}. product_filters lists them. store_type: ONLINE (Migros Online assortment) or OFFLINE (in store).

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 uid in search results).

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 filters.

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 (costCenterId from find_stores). near: town/postcode; checks the closest stores there when store_ids is not given (defaults to your location).

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). list_id comes from shopping_lists.

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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

C2.9/5.0

Scored across 105 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count2/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues