Model Context Protocol server for retailerapi.com — unified product data across major US retailers (Walmart, Amazon, eBay, Target, Best Buy, Lowe's, Home Depot) plus universal URL passthrough for every Shopify store and any retailer that ships Product JSON-LD. Submit a UPC/EAN/ASIN/item_id or any retailer PDP URL. Tools: lookup_product (with Bucket-1 facts + computed marketplace fees + weight/dims merged from the best retailer source) + get_offers (live marketplace sellers). Works with Claude Desktop, Claude Code, Cursor.
Two tools with well-structured schemas and detailed descriptions. lookup_product has comprehensive parameter documentation (identifier, identifier_type, include_cross_retailer, include_seller_context, retailer, force_refresh) with clear enums and constraints. get_offers is simpler but properly defined. Both descriptions exceed 100 chars and explain WHAT/WHEN/HOW. However, output schemas are not documented, LLMs cannot see what fields to expect in responses. No tool annotations (readOnlyHint/destructiveHint) despite both being read-only operations. Error handling is server-side (RetailerApiError classification) but tool descriptions lack recovery guidance (e.g., 'If retailer not found, try another retailer slug').
List the current sellers on a Walmart product. Returns each offer with seller_id, seller_name, price, in_stock, and an is_buy_box flag. Use to compare seller prices or find the buy-box holder.
Look up a product by UPC, EAN, ISBN, GTIN, ASIN, Walmart item_id, OR any retailer PDP URL. URL submission works on: the 7 vetted retailers with dedicated parsers (Amazon /dp/, Walmart /ip/, Target /p/, Home Depot /p/, Lowe's /pd/, Best Buy /product/, eBay /itm/), every Shopify-hosted store globally via the public /products/<handle>.json endpoint, and any other retailer that ships Product JSON-LD or OpenGraph product tags in its initial HTML. Base call (1 token) returns title, brand, image, current price, offers_count, identifiers, retailer_links (other retailers carrying this product, URLs only), Bucket-1 facts (sold_tag, estimated_sales, is_best_seller, pack_count, hazmat), and computed marketplace fees (referral_fee_usd, wfs_fee_usd). Add include_cross_retailer=true (+2 tokens) for the cross_retailer block — cached per-retailer cells, read-only. Add include_seller_context=true (+3 tokens) for live seller-side state (is_restricted, WFS eligibility) on marketplace retailers. To force fresh data for a specific retailer, call with retailer=<slug> and force_refresh=true. Marketplace fees are FREE in base call (Keepa parity).
Output schemas not documented. LLMs cannot see what fields lookup_product and get_offers return, forcing them to guess at response structure and breaking downstream tool chaining.
No tool annotations despite both tools being read-only. lookup_product and get_offers should declare readOnlyHint=true to signal to agents that these are safe to call without side effects.
Error recovery guidance missing from descriptions. lookup_product mentions 'retailer_unavailable' and 'retailer_pending' status codes but does not tell LLMs what to do when they occur (e.g., 'Try force_refresh=true or select a different retailer').
get_offers description is generic and lacks context. Does not explain when to call it vs lookup_product, what 'buy_box' means, or whether results are paginated.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
lookup_product description is very long (1000+ chars) and buries key details in token-cost explanations. Simplify to 200-300 chars with token costs in a separate 'cost' field or documentation link.