woolies-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_PATH_TOKEN | No | Unguessable path token for the HTTP MCP endpoint. Required when using the HTTP transport; generate with `openssl rand -hex 24`. | |
| PUBLIC_BASE_URL | No | Public base URL for the server, used when publishing with Tailscale Funnel (e.g. https://<node>.<tailnet>.ts.net). |
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 |
|---|---|
| search_productsA | Search the Woolworths New Zealand catalogue by keyword. Returns |
| get_product_labelA | Return the product's packaging photo as an image, for reading details the API does not publish — most importantly ingredients and allergens, which are frequently absent from get_product. Call this when get_product reports allergens or ingredients as 'notStated' and the answer matters. Images are token-expensive, so request them one product at a time and only when needed. A photo may still not show the panel, and reading a label from a photo is not a substitute for the physical packaging for allergy decisions. |
| search_products_batchA | Run several catalogue searches in one call and get the results grouped by query, so finding many products costs one round trip. Every group carries its own |
| get_productA | Fetch one product by SKU, with its price, size, unit price (a formatted string whose measure varies per product, and absent for many), availability, category breadcrumb, description, ingredients, allergens, claims, nutrition, origins and health star rating. |
| list_categoriesA | The browse tree. With no argument, lists the 13 departments and their slugs. With a department slug, lists that department's aisles and shelves. Use the slugs it returns as the arguments to browse_category. |
| browse_categoryA | List the products in a department, aisle or shelf, using the slugs from list_categories. A narrower level needs the wider ones too. Returns one page: read |
| get_specialsA | List products currently on special, optionally narrowed to one department. Each product carries wasPrice alongside the current price. Returns one page: read |
| find_storesA | List Woolworths New Zealand pick-up locations, filtered by a name or address fragment. Read |
| get_locationA | Report the delivery location this session is shopping from: suburb, fulfilment method and store id. Every price and availability answer from the other tools is for this location, so check it before trusting a result. |
| set_locationA | Switch the session to a New Zealand suburb, which changes the serving store and therefore the prices and availability that search_products and get_product return. If the suburb name matches several places, the matches are returned instead and you should ask for a more specific name. |
| sign_inA | Report whether the session is signed in, and if not, how to sign it in. Sign-in is not performed here and cannot be: it happens in a real browser via |
| auth_statusA | Report whether this session is signed in to a Woolworths account, and whether signing in is possible at all. The catalogue tools work signed out and are unaffected; the cart and purchase-history tools need a signed-in session. |
| get_cartA | List the trolley. Returns |
| set_cart_quantityA | Set one product's trolley line to an exact quantity, adding it if absent. Quantity is absolute, not a delta: the value you pass becomes the line's new quantity, and 0 removes the line. For pricingUnit, use the product's |
| remove_from_cartA | Remove a line from the trolley entirely, the same as setting its quantity to 0. No pricing unit is needed: a removal has none. Needs a signed-in session; run |
| set_cart_quantitiesA | Set many products' trolley lines in one call. Quantity is absolute, not a delta: the value you pass becomes the line's new quantity, and 0 removes the line. For pricingUnit, use the product's |
| get_past_purchasesA | Return the site's previously-purchased sections, kept separate and labelled. ONLY the section with isPurchaseHistory true reflects what this shopper actually bought; the other section is retailer advertising and must never be described as their purchases, habits or preferences. Read each section's |
| get_order_historyA | List the account's past orders with their references, dates, fulfilment slots, statuses and totals. Read |
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 18 tools
Most tools target a distinct resource, but sign_in and auth_status report nearly the same status, remove_from_cart duplicates set_cart_quantity(0), and search_products/search_products_batch are close variants. The descriptions clarify most boundaries, so selection is possible but not always obvious.
Tool names mostly follow a verb_noun snake_case pattern (get_cart, search_products, set_location). Minor deviations like auth_status (no verb), browse_category (singular), and search_products_batch (suffix) prevent a perfect score, but the pattern is predictable overall.
Eighteen tools is on the heavy side for a 3-15 tool well-scoped server, and several are redundant (auth_status vs sign_in, remove_from_cart vs set_cart_quantity, plus the batch search variant). The count is not chaotic, but it could be trimmed without losing functionality.
The surface covers catalogue browsing, product detail, search, specials, location, cart management, and order/purchase history. The main gap is the absence of checkout/order placement, but for a shopping-assistant domain the core workflows are present and workable.