shopping-research
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SERPAPI_KEY | No | SerpApi API key for cross-retailer search and per-merchant offers. | |
| EBAY_CLIENT_ID | No | eBay Browse API client ID for marketplace listings. | |
| BESTBUY_API_KEY | No | Best Buy Developer API key for products, prices, and availability. | |
| BEST_PRICE_STATE | No | Override the state directory used for the SerpApi monthly counter and cache. Defaults to ~/.best-price/. | |
| EBAY_CLIENT_SECRET | No | eBay Browse API client secret for marketplace listings. |
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
} |
| logging | {} |
| prompts | {
"listChanged": true
} |
| resources | {
"subscribe": false,
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_productsB | Find candidate products across Google Shopping (SerpApi), eBay, Best Buy, and Target. data: [{title, price, merchant, url, product_id}] sorted by price ascending. |
| compare_pricesA | Per-merchant offers for one product. Pass the SerpApi product_id from search_products, or a query (the retailer APIs are searched by it too). data: [{merchant, price, url}] ascending. |
| extract_productB | Title, price, currency, availability from any product page: Shopify JSON, schema.org JSON-LD, OpenGraph, then a headless-browser fallback. |
| get_price_historyB | Amazon price history from CamelCamelCamel. Accepts an ASIN or an amazon.com product URL. data: {lowest, highest, average, current, verdict} or None with skip reason not_amazon. |
| get_dealsC | Community-vetted deals from Slickdeals RSS (US). data: [{title, price, store, url, votes}]. |
| c1_checkB | Optional Capital One Shopping cross-check on one finalist URL. Off unless [c1] enabled = true; returns sources_skipped disabled_in_settings otherwise. data: {c1_best, offers}. |
| get_statusA | Coverage before spending quota: which sources are configured, SerpApi searches left this month, whether the C1 cross-check is enabled. |
| reload_settingsA | Re-read settings.toml without restarting. A running C1 browser is closed if enabled flips to false. |
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
Each tool has a fairly distinct role: search_products finds candidates, compare_prices drills into per-merchant offers for one item, extract_product scrapes a single page, get_deals pulls a separate community feed, and c1_check is an optional cross-check. The boundaries between search_products and get_deals overlap somewhat (both surface deals/products), but descriptions make the distinction clear enough.
Most tools follow a consistent verb_noun pattern (search_products, compare_prices, extract_product, get_price_history, get_deals, get_status, reload_settings). The only deviation is c1_check, which uses a vendor prefix instead of a verb and breaks the pattern.
Eight tools is well-scoped for a shopping research workflow, with each tool earning its place across search, comparison, extraction, history, deals, cross-check, status, and config. No redundancy or filler.
The surface covers the core research lifecycle: discovery, price comparison, page extraction, price history, deals, quota/status, and config reload. Minor gaps exist (no result saving/watchlist or persistent alerting, and price history is Amazon-only), but agents can work around these.