grocery-deals-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GROCERY_ZIP | No | Default ZIP, so tools don't need the argument | |
| GROCERY_STORES | No | Comma-separated allowlist, e.g. Aldi,Lidl,Costco | |
| GROCERY_DB_PATH | No | Where the cache and price history live | ./data/deals.db |
| KROGER_CLIENT_ID | No | Enables kroger_search | |
| KROGER_LOCATION_ID | No | Default Kroger-banner store | |
| KROGER_CLIENT_SECRET | No | Enables kroger_search | |
| GROCERY_CACHE_TTL_HOURS | No | How long the index stays fresh | 12 |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_storesA | List grocery stores near a ZIP code that have an active weekly ad, with how many deals each is running. Start here. Args: zip_code: 5-digit US ZIP code, e.g. "12345". Optional if the server has a GROCERY_ZIP default configured. |
| search_dealsA | Search this week's ads across every local grocery store for a product. Args: query: what you're looking for, e.g. "chicken breast", "greek yogurt". zip_code: 5-digit US ZIP code. Optional if GROCERY_ZIP is set. stores: optional store names to restrict to, e.g. ["Aldi", "Costco"]. max_price: only return items at or below this price. limit: max results (default 25). |
| store_circularA | Show everything in one store's current weekly ad. Args: store: store name, e.g. "Giant Food", "Aldi", "Costco". zip_code: 5-digit US ZIP code. Optional if GROCERY_ZIP is set. limit: max items to return (default 150). |
| shopping_planA | Turn a shopping list into a trip plan: which store to buy each item at. Args: items: things you want to buy, e.g. ["chicken thighs", "blueberries"]. zip_code: 5-digit US ZIP code. Optional if GROCERY_ZIP is set. max_stores: how many stores you're willing to visit (default 2). |
| price_checkA | Judge whether a current price is actually good, using the price history this server accumulates. Gets more useful the longer it has been running. Args: item: the product to evaluate, e.g. "boneless chicken breast". zip_code: 5-digit US ZIP code. Optional if GROCERY_ZIP is set. |
| refresh_dealsA | Force a rebuild of the deal index from Flipp. Takes 10-20 seconds. Only needed mid-week; the index otherwise refreshes itself. Args: zip_code: 5-digit US ZIP code. Optional if GROCERY_ZIP is set. |
| kroger_searchA | Exact SKU-level prices (regular and promo) from a Kroger-banner store via Kroger's official API — Kroger, Harris Teeter, Ralphs, Fred Meyer, King Soopers, QFC, Smith's. More precise than the circular. Requires Kroger API credentials; without them the other tools still work. Args: query: product term, e.g. "greek yogurt". location_id: store ID from kroger_find_stores. Optional if KROGER_LOCATION_ID is set. limit: max products (default 15). |
| kroger_find_storesA | Find nearby Kroger-banner store IDs, needed once to use kroger_search. Args: zip_code: 5-digit US ZIP code. Optional if GROCERY_ZIP is set. chain: optional banner filter, e.g. "Harris Teeter", "Kroger", "Ralphs". Matched against store name and chain code, so the everyday spelling works. |
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 8 tools
Most tools have distinct purposes, but there is overlap between list_stores and kroger_find_stores (both find stores) and between search_deals and kroger_search (both search for products, though against different data sources). Descriptions clarify the differences well enough.
Naming style is mixed: list_stores, search_deals, price_check, and refresh_deals follow verb_noun, while store_circular and shopping_plan are noun phrases, and kroger_search/kroger_find_stores add a brand prefix. All use snake_case, but the inconsistent verb/prefix usage is noticeable.
Eight tools is well-scoped for a grocery deals server. Each tool serves a clear purpose within the domain, and none feel redundant or excessive.
The set covers the core lifecycle: discover stores, search deals, view circulars, plan shopping, check price history, and refresh data. The Kroger-specific tools add precision. Minor gaps exist (e.g., no store details or deal detail endpoint), but agents can accomplish primary workflows.