Kroger MCP — grocery products, prices, and store locations (developer.kroger.com)
Three well-defined tools with complete input schemas, clear descriptions, and proper parameter typing. Tool names follow verb_noun convention (search, get, locator). Descriptions are detailed (150-250 chars) and include examples. All parameters have type and description. However, output schemas are not documented, LLMs cannot see what fields to expect from responses. No error handling guidance for common failures (rate limits, auth, invalid ZIP). Parameters expose _apiKey as a string, violating secret-injection pattern (should use server-side injection). Missing pagination guidance for product_search results.
Get full detail for one grocery product by its product_id — price, promo price, stock level, size, categories, aisle location, images. Pass zip_code or location_id for store-specific price/stock. Example: kroger_product_details({ product_id: "0001111041700", zip_code: "45202" })
Search grocery products at Kroger-family supermarkets with real shelf prices, promo/sale prices, stock level, and aisle. Answers "how much does milk cost", "is X in stock", grocery price comparison. Give a zip_code (or location_id) to get store-specific prices; without one, only the national product catalog is returned (no prices). Example: kroger_product_search({ term: "whole milk", zip_code: "45202" })
Find Kroger-family grocery stores and supermarkets near a US ZIP code — covers Kroger, Ralphs, Fred Meyer, King Soopers, Fry's, Harris Teeter, QFC, Smith's, Dillons, Food 4 Less, Mariano's and more. Returns store names, addresses, phone, hours, and the location_id needed for price lookups. Example: kroger_store_locator({ zip_code: "45202" })
Output schemas not documented. LLMs cannot see what fields (store names, prices, stock levels, images) are returned, forcing them to guess downstream field names and breaking tool chaining.
_apiKey parameter exposes credentials as a tool input. Secrets in parameters are logged in traces and prompt history. Should use server-side injection via environment variables (PLATFORM_KROGER_KEY) only.
No error recovery guidance. Code includes krogerError() handler for 429 (rate limit), 401/403 (auth), and generic HTTP errors, but these are not surfaced in tool descriptions. LLMs need explicit guidance: 'Rate limited? Pass your own _apiKey' or 'Auth failed? Retry once.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
kroger_product_search lacks pagination parameters (page, limit, offset). No guidance on result limits or how to fetch additional products. Large result sets will blow context windows.
Parameter descriptions include example values ('45202', 'whole milk', 'Kroger'). LLMs tend to reuse examples literally rather than adapting to context. Use enums or format constraints instead.