ah-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AH_REMOTE | No | Don't open a browser on login. Use on servers (same as --remote). | false |
| AH_LOG_FILE | No | Also append logs to this file. Logs always go to stderr. | |
| AH_MCP_HOST | No | Interface the HTTP server listens on. Keep the default behind a reverse proxy. | 127.0.0.1 |
| AH_MCP_PORT | No | HTTP server port. | 3000 |
| AH_MCP_TOKEN | No | Secret required on every HTTP request, as Authorization: Bearer … or ?token=…. Required for the HTTP transport, which doesn't start without it. | |
| AH_TOKENS_PATH | No | Where to store login tokens. Defaults to a per-OS location: macOS ~/Library/Application Support/ah-mcp/tokens.json, Linux ~/.config/ah-mcp/tokens.json, Windows %AppData%\ah-mcp\tokens.json. | |
| AH_MCP_BASE_URL | No | Public URL of the HTTP server. Set it on a server: for a non-local URL, the localhost-only Host check is turned off so a reverse proxy can forward requests. | http://localhost:3000 |
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 | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ah_loginA | Log in to Albert Heijn in two steps. 1) Call without arguments: returns the AH login link and instructions to show the user. 2) After the user logs in, the browser shows a link like appie://login-exit?code=...; call ah_login again with code set to that link (or just the code) to finish. Codes are single-use and expire quickly. If already logged in, returns the account name. |
| ah_logoutA | Log out of Albert Heijn by deleting the stored tokens. Use this to switch accounts or reset a broken session. After logout, call ah_login to authenticate again. |
| ah_get_member_profileA | Get your Albert Heijn member profile. Returns name, email (masked), and bonus_card_number (last 4 digits only). |
| ah_search_productsA | Search Albert Heijn (Dutch supermarket) products by keyword. Pass one or more queries (max 10) to search for several products in one call. Prefer Dutch search terms for best results: e.g. 'melk' (milk), 'kaas' (cheese), 'brood' (bread), 'kip' (chicken), 'appel' (apple). Set bonus=true to return only products currently on promotion. filters narrows results to products matching all of them, e.g. ['organic', 'gluten_free']: organic, prijsfavoriet (AH's budget label), new, frozen, a diet (vegan, vegetarian, low_sugar, low_fat, low_salt), or free from an allergen (gluten_free, lactose_free, milk_free, egg_free, nut_free, peanut_free, soy_free, fish_free, shellfish_free, sesame_free, celery_free, mustard_free, lupin_free, sulphite_free). sort orders results: relevance (default), price_low_high, price_high_low, most_bought (by this user), nutriscore. Returns, per query: id, title, price, bonus_price, unit, is_bonus, bonus_mechanism, image_url. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_productsA | Get detailed information about one or more Albert Heijn products by ID (max 20). Returns title, brand, category, description, price, unit size, bonus info, NutriScore, property icons. Set include_nutritional_info=true to also return calories, fat, protein, etc. Get product IDs from ah_search_products. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_product_alternativesA | Get products Albert Heijn suggests instead of a given product: similar products and substitutes, e.g. when it is sold out or to find a cheaper or organic option. Returns the same fields as ah_search_products. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_bonus_offersA | Get Albert Heijn bonus/promotional offers. Use this (not ah_search_products) when the user asks what is on bonus/sale/discount. Returns this week's bonus by default; set period='next' for next week's bonus, which AH publishes a few days before the new bonus week starts. Supports optional keyword filter to find e.g. cheese on bonus: set query='kaas'. Set previously_bought=true for offers on products the user bought before (AH's 'Eerder gekocht'). Group deals (e.g. '2+1 gratis', 'Alle yoghurt 25% korting') have no id but a bonus_segment_id — pass that to ah_get_bonus_group_products to see the individual products in the group. Returns id, bonus_segment_id, title, original_price, bonus_price, discount_percentage, bonus_mechanism. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_bonus_group_productsA | Get all individual products belonging to a specific Albert Heijn bonus promotion group. Use this to drill into a deal like '2+1 gratis kaas' or 'Alle yoghurt 25% korting'. Get segment_id from the bonus_segment_id field in ah_get_bonus_offers results. For an offer from next week's bonus, set period='next'. Returns the same fields as ah_search_products. When you mention a product or recipe from the result, link its name to its url. |
| ah_search_recipesA | Search Allerhande, Albert Heijn's recipe collection. Dutch search terms work best, e.g. 'pasta', 'vegetarisch', 'stamppot', 'kip curry'. Returns id, title, url, cook_minutes, servings, courses, nutri_score, rating. Use the id with ah_get_recipe for ingredients and steps. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_recipeA | Get an Allerhande recipe by id: ingredients, preparation steps, and nutrition per serving. Set servings to scale the ingredient quantities. To shop for it, search the ingredients with ah_search_products and add them with ah_add_to_shopping_list. When you mention a product or recipe from the result, link its name to its url. |
| ah_add_recipe_to_shopping_listA | Put the ingredients of an Allerhande recipe on the shopping list in one step. Each ingredient is matched to the AH product whose name fits it best (among equally good matches, one on bonus unless prefer_bonus=false); one unit of each product is added. Water is always skipped; pass skip for anything the user already has (e.g. olive oil, salt). Set dry_run=true to show the matches without adding them. Returns the added, skipped and unmatched ingredients, and any whose search failed (worth retrying). When you mention a product or recipe from the result, link its name to its url. |
| ah_search_storesA | Find Albert Heijn stores near a Dutch postal code. If no postal_code is given, automatically uses the address from the member profile. Returns store id (use this for ah_get_last_chance_items), name, type, and address. |
| ah_get_last_chance_itemsA | Get last-chance / vandaag-af / clearance items from an Albert Heijn store. Requires a store_id (use ah_search_stores to find stores, or provide postal_code to find the nearest store). Uses the dedicated bargainItems GraphQL endpoint which returns today-only markdown deals. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_shopping_listA | Get the contents of the Albert Heijn shopping list (boodschappenlijst). In the AH app this is the basket the user fills while shopping; choosing a delivery slot moves its products into an order, after which the list is unavailable until the order is done (use ah_get_cart then). Returns item names, quantities, and product IDs. When you mention a product or recipe from the result, link its name to its url. |
| ah_add_to_shopping_listA | Add one or more products to your Albert Heijn shopping list. Pass an array of items, each with product_id (int) and quantity (int). Returns confirmation listing the names of successfully added products. |
| ah_add_free_text_to_shopping_listA | Add a free-text item to the Albert Heijn shopping list (no product ID needed). Use for reminders like 'verse bloemen', 'any good wine', or items not found in search. Free-text items have no quantity: put amounts in the text, e.g. '2 bossen bloemen'. |
| ah_remove_from_shopping_listA | Remove one or more items from the Albert Heijn Boodschappenlijst. For product items pass product_ids; for free-text items pass names. Get product_ids from ah_get_shopping_list. |
| ah_clear_shopping_listA | Remove ALL items from the Albert Heijn shopping list. Irreversible — requires confirm="yes". |
| ah_get_favorite_listsA | List all Albert Heijn favorite/saved shopping lists with their names and item counts. Use the returned list ID with ah_add_to_favorite_list, ah_remove_from_favorite_list or ah_delete_favorite_list. |
| ah_add_to_favorite_listA | Add products to a named Albert Heijn favorite list. Get list_id from ah_get_favorite_lists. |
| ah_remove_from_favorite_listA | Remove products from a named Albert Heijn favorite list. Get list_id from ah_get_favorite_lists. |
| ah_create_favorite_listA | Create a new, empty Albert Heijn favorite list with the given name; AH drops some punctuation, such as '-'. Returns its id; add products with ah_add_to_favorite_list. |
| ah_delete_favorite_listA | Delete an Albert Heijn favorite list and everything on it. Irreversible — requires confirm="yes". Get list_id from ah_get_favorite_lists. |
| ah_get_cartA | View the items in the active Albert Heijn delivery order (the order cart). An order only exists after the user has chosen a delivery or pick-up slot; the products the user is collecting before that are on the shopping list (use ah_get_shopping_list). Returns the order state, items with names and quantities, total price, and total discount. When you mention a product or recipe from the result, link its name to its url. |
| ah_update_cart_itemA | Set the quantity of a product in the active Albert Heijn delivery order. Requires an order (started by choosing a delivery slot in the AH app or on ah.nl, which moves the shopping list into it); to collect products before that, use ah_add_to_shopping_list. Use product_id from ah_search_products or ah_get_cart. Set quantity=0 to remove the item (or use ah_remove_from_cart). |
| ah_remove_from_cartA | Remove a single product from the active Albert Heijn delivery order. Use product_id from ah_get_cart. To remove products from the shopping list, use ah_remove_from_shopping_list. |
| ah_clear_cartA | Remove ALL items from the active Albert Heijn delivery order (not the shopping list). Irreversible — requires confirm="yes" to prevent accidental use. |
| ah_get_delivery_slotsA | List the delivery time windows Albert Heijn offers at the member's address, per day (Dutch time). Booking a slot is only possible in the AH app or on ah.nl; this shows when delivery is possible. Returns date and windows like '15:00-17:00'. |
| ah_get_ordersA | List Albert Heijn online delivery orders. By default returns upcoming orders (with a modifiable flag); set past=true for delivered orders. Returns id, date, time_window, total_price, status. Use the returned id with ah_get_order_details to see the items. |
| ah_get_order_detailsA | Get the full item list for a specific Albert Heijn delivery order by its ID. Returns all products with names, quantities, and prices. Get order_id from ah_get_orders. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_frequent_itemsA | Get frequently ordered products by analysing order history. Fetches all fulfillments, expands each order's items, counts per product, and returns products ordered at least min_order_count times. Returns product_name, product_id, order_count, last_ordered_date. When you mention a product or recipe from the result, link its name to its url. |
| ah_get_receiptsA | List recent Albert Heijn in-store receipts (kassabonnen). Returns receipt id, date, and total amount. Use ah_get_receipt_details with the id to see individual items. |
| ah_get_receipt_detailsA | Get full details of a single Albert Heijn in-store receipt (kassabon) by its id. Returns all purchased items with name, quantity, unit price and line total, plus any discounts and payment method. Get the id from ah_get_receipts first. |
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 33 tools
Most tools target clearly distinct resources and actions, and the descriptions explicitly distinguish tricky areas like shopping list vs. cart vs. orders. Minor overlap remains: update_cart_item can remove an item via quantity=0 while remove_from_cart exists, and add_to_shopping_list vs. add_recipe_to_shopping_list could blur for some workflows.
All tools use a consistent ah_ prefix with snake_case and a predictable verb_noun or verb_object pattern. Long names like ah_add_free_text_to_shopping_list are still readable and fit the same convention.
33 tools is high, and the set exceeds the rubric's 25+ threshold for being too large. Although the Albert Heijn domain is broad, many adjacent lifecycle operations could be consolidated or kept behind fewer tools.
Coverage is strong across auth, lists, cart, orders, products, bonuses, recipes, stores, delivery slots, and receipts. Minor gaps exist: there is no explicit add-to-cart for an active order, no checkout/order-placement operation, and delivery slot booking is intentionally unsupported.