Skip to main content
Glama

shopping-research

A local MCP server that gives Claude Code live product search, cross-retailer prices, Amazon price history, community deals, and an optional Capital One Shopping cross-check, over free sources only. Every tool reports its own coverage: the response envelope is {data, sources_checked, sources_skipped}, so the calling skill can never claim a best price over a source it never saw.

Install as a plugin

Requires uv on your PATH; the server runs under uv run and creates its own environment on first start.

/plugin install shopping-research --marketplace tannerorourke/shopping-research-mcp

Claude Code prompts for the API keys when the plugin is enabled (SerpApi, eBay client ID and secret, Best Buy); each is optional and a blank one leaves that source registered and reported as disabled_in_settings. Edit them later under /plugin, Installed, Configure options. The SerpApi monthly budget and the Target toggle are options there too. Anything else from settings.toml.example (the C1 cross-check, cache TTL) goes in settings.toml inside the plugin's data directory, ~/.claude/plugins/data/<plugin id>/, where the server also keeps its SerpApi counter and eBay token. uv run playwright install chromium inside the installed plugin directory enables the headless-browser fallback.

The skill arrives as /shopping-research:shopping-research.

Related MCP server: Amazon MCP App

Run from a clone

  1. uv sync installs the environment (Python 3.12 or newer).

  2. cp settings.toml.example settings.toml and fill the keys you have. Each key can also come from the environment variable named in the file. A blank key leaves that source registered and reported as disabled_in_settings.

  3. uv run playwright install chromium enables the headless-browser fallback in extract_product and the optional c1_check.

  4. Register the server. Project scope: the shipped .mcp.json runs uv run server.py from this directory. User scope, so the tools are available from any directory:

claude mcp add --scope user shopping-research -- uv run --directory /absolute/path/to/shopping-research server.py
  1. Copy or symlink skills/shopping-research/ into ~/.claude/skills/ to make the skill available outside this repository.

Pass condition: get_status from a Claude Code session returns serpapi_remaining and the configured flags.

Sources

Source

Provides

Free tier

Key

SerpApi google_shopping / google_product

cross-retailer search and per-merchant offers

250 searches a month

SERPAPI_KEY

eBay Browse API

marketplace listings

5,000 calls a day

EBAY_CLIENT_ID, EBAY_CLIENT_SECRET

Best Buy Developer API

products, prices, availability

free key

BESTBUY_API_KEY

Target RedSky

price, availability

undocumented public key

none

Shopify /products/<handle>.json, schema.org JSON-LD, OpenGraph, Playwright

any product page

none

none

CamelCamelCamel

Amazon price history

polite scrape, one request

none

Slickdeals RSS

community deals (US)

hourly feed

none

Capital One Shopping extension via Playwright

coupon-adjusted cross-check on finalists

free account, off by default

sign in once in the profile

The SerpApi monthly counter and cache persist in ~/.best-price/ (override with BEST_PRICE_STATE). The server refuses SerpApi calls past monthly_budget.

Tools

search_products, compare_prices, extract_product, get_price_history, get_deals, c1_check, get_status, reload_settings. Signatures and the skip-reason vocabulary are documented in skills/shopping-research/SKILL.md; the vocabulary itself is sources/envelope.py.

Enabling the C1 cross-check

  1. Unpack the Capital One Shopping extension into extensions/c1shopping-unpacked/ (an unpacked directory, never a .crx).

  2. Set [c1] enabled = true and headless = false in settings.toml, run reload_settings, call c1_check on an Amazon product URL, and sign in when the extension asks.

  3. In chrome://extensions, open the extension's service worker and read the price-comparison endpoint from its Network tab. Write a unique substring of it into api_url_filter.

  4. Set headless = true and reload_settings. c1/parsers.py is written against the common payload shapes; adjust it once if the endpoint's shape differs.

Tests

uv run pytest -q. The suite uses httpx.MockTransport and launches no browser.

Sources and their terms

SerpApi, eBay, Best Buy, and Slickdeals RSS are used through their published interfaces. Target's search endpoint is undocumented and CamelCamelCamel is read as a web page, one request per call and never retried; both sites may refuse automated requests, and the server reports that as blocked rather than working around it. The Capital One Shopping cross-check drives a browser extension in your own signed-in profile and is off by default. Use each source within its terms.

Available Tools

8 tools
c1_checkC1 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}.

NameRequiredDescriptionDefault
urlYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It does disclose genuinely useful behavior — the feature-flag gating and the specific 'sources_skipped / disabled_in_settings' result when disabled — but says nothing about permissions, cost, latency, or external-service dependency for the enabled path.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the purpose and then the gating condition; nothing is padding. The bracketed '[c1]' and 'data: {c1_best, offers}' fragments are terse to the point of being cryptic, which slightly hurts readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With a single parameter and an existing output schema, the description needn't explain return values, and it covers purpose plus skip behavior. It still leaves the call ordering (only after finalists are chosen) and the meaning of the returned fields implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single url parameter. The description adds partial meaning by specifying 'one finalist URL', implying it must be a single previously-selected product URL rather than an arbitrary link, but gives no format, validation, or domain expectations.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action and target — a Capital One Shopping cross-check on a single finalist URL — which is distinguishable from the sibling search/compare/extract tools. The 'c1' shorthand is jargon but the surrounding phrase makes the resource clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives one usable condition ('Off unless [c1] enabled = true') and explains the fallback, which tells the agent when the call is a no-op. However, it never says when to prefer this over compare_prices or other siblings, nor that the URL must come from an earlier selection step.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_pricesCompare 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.

NameRequiredDescriptionDefault
queryNo
product_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden. It discloses one useful behavioral fact — a query also fans out to the retailer APIs, implying extra cost/latency — but says nothing about SerpApi quota, auth, or what happens when neither optional parameter is supplied.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded and only two sentences plus a compact output fragment, with no filler. The trailing 'data: [{merchant, price, url}] ascending' fragment is slightly telegraphic but informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a simple two-optional-parameter read tool with an output schema (so return values needn't be spelled out). Gaps remain around the both/neither parameter case and external API prerequisites, which matter since no annotations exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate, and it does: product_id is identified as the SerpApi id from search_products, and query is described as also hitting retailer APIs. It omits whether the two are mutually exclusive or what occurs if both/neither are passed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb-like outcome ('Per-merchant offers for one product') with clear scope, which distinguishes it from search_products and get_price_history. It stops short of explicitly naming which sibling to use instead, but the resource and granularity are unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context: pass the product_id returned by search_products, or fall back to a query. This implies the search_products -> compare_prices workflow. No explicit when-not guidance (e.g. vs. get_deals or get_price_history) is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_productExtract ProductB

Title, price, currency, availability from any product page: Shopify JSON, schema.org JSON-LD, OpenGraph, then a headless-browser fallback.

NameRequiredDescriptionDefault
urlYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does disclose a real behavioral trait: the extraction ladder (Shopify JSON → JSON-LD → OpenGraph → headless browser). That tells the agent there is a gradual fallback and that the call may be slow when the browser path is used. It does not cover failure modes, timeouts, rate limits, or auth requirements, which is a notable gap for a scraper with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One compact sentence that front-loads the extracted fields and appends the strategy chain. No filler, though it reads as a clipped fragment rather than a polished directive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema is provided, so return values need no explanation, and the method is covered. What remains missing is input qualification—what constitutes a valid product page URL—and any behavioral caveats around the browser fallback. Adequate but not complete for a tool with no annotations and an undocumented parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter (url) at 0% schema description coverage, and the description never names or describes it. 'From any product page' only loosely implies a page URL; it does not say whether non-product URLs are accepted or what the expected URL format is. Minimal compensation for an undocumented required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates exactly what is returned (title, price, currency, availability) and from what (a product page), which clearly separates it from siblings like search_products, compare_prices, and get_price_history. It is a fragment rather than a full verb+resource statement, but the name supplies the verb and the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: you call this when you have a concrete product URL to scrape. However, there is no explicit when-to-use guidance, no stated prerequisites, and no mention of when this is preferable to the price/comparison siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_dealsGet DealsC

Community-vetted deals from Slickdeals RSS (US). data: [{title, price, store, url, votes}].

NameRequiredDescriptionDefault
queryNo
categoryNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does disclose the data provenance (Slickdeals RSS) and region (US), which is genuinely useful, but says nothing about freshness, rate limits, caching, or whether the feed is live versus static. For a zero-annotation tool this leaves the mutation/read profile and operational constraints largely undisclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the source and scope, then the payload shape. Nothing is padded or redundant, though the return-shape fragment is arguably unnecessary given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be spelled out, yet the description repeats the data shape anyway. What is missing is more consequential: no parameter semantics, no freshness or scope caveats beyond 'US'. It is minimally viable for a two-optional-parameter read tool but not fully informative.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and neither of the two parameters (query, category) is mentioned in the description. With low coverage the description is expected to compensate, but it provides no meaning, format, or filtering behavior for either parameter, leaving the agent to guess how query and category affect results.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and source: community-vetted deals from Slickdeals RSS (US). This is enough to distinguish it from siblings like search_products, compare_prices, and get_price_history, which operate on broader product/price data. The verb is only implied by the tool name, but the resource and scope are concrete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over search_products or compare_prices, nor any stated preconditions or exclusions. The only implicit signal is the 'Slickdeals RSS (US)' scope, which an agent must infer as a usage boundary on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_price_historyGet 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.

NameRequiredDescriptionDefault
asinNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose one genuine behavioral trait: a failure mode ('None with skip reason not_amazon'). However, it omits auth/rate-limit behavior, coverage limits of CamelCamelCamel data, and any indication of latency or failure modes beyond the non-Amazon case.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the source and accepted inputs front-loaded; nothing is padded. The return-value fragment is telegraphic but readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter lookup with an output schema present, the essentials are covered and return values need not be re-explained. What is missing is positioning against the sibling price/deal tools and any note on data source limits, which leaves the agent without routing guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'asin' parameter has no description, so the schema alone would leave the agent guessing. The description compensates by stating the parameter accepts either an ASIN or an amazon.com product URL, which is real meaning beyond the structured field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Amazon price history') plus the upstream source (CamelCamelCamel), which pins down exactly what is returned. It does not explicitly distinguish itself from siblings like compare_prices or get_deals, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus compare_prices, get_deals, or extract_product; usage is only implied by the phrase 'price history'. No prerequisites, no exclusions, no alternative routing are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_statusGet StatusA

Coverage before spending quota: which sources are configured, SerpApi searches left this month, whether the C1 cross-check is enabled.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully implies the call is non-consuming ('before spending quota'), which is real behavioral context, and an output schema documents the response. However it never states permissions, caching, or that calls are free/idempotent, leaving gaps for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted clauses; the colon-led list is efficient. The phrasing 'Coverage before spending quota' is slightly clipped but still readable in one pass.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with an output schema, the description need not explain return values, and it goes further by naming the categories of status reported. Only the absence of explicit usage routing and safety/permission notes keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate and it correctly avoids inventing parameter detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description enumerates the specific status fields returned (configured sources, remaining SerpApi searches, C1 cross-check state), which is far more informative than the tautological title 'Get Status'. It implicitly distinguishes itself from the search/compare siblings as the configuration-and-quota inspection tool, though it never names that contrast explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Coverage before spending quota' hints at when to call it – prior to consuming searches – but no alternative is named and no explicit when/when-not guidance is given. Usage must be inferred from the phrase rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reload_settingsReload SettingsA

Re-read settings.toml without restarting. A running C1 browser is closed if enabled flips to false.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose a genuine, non-obvious side effect: a running C1 browser is closed when the 'enabled' flag flips to false. It does not cover other consequences of a reload (in-flight state, whether other settings changes take effect immediately), so it is helpful but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler, and the core action is front-loaded ahead of the caveat. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter reload action with an output schema present, the description covers the essential action and the main destructive side effect. It is slightly thin on when the reload is appropriate, but nothing critical to invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is nothing for the description to clarify beyond what the empty schema already conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Re-read settings.toml') plus the distinguishing constraint ('without restarting'), so the agent knows exactly what side effect this performs. Siblings (search_products, compare_prices, c1_check) are in unrelated domains, so no explicit differentiation is needed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'without restarting' implies the scenario (apply config edits live), but it never states when to call this versus alternatives such as c1_check or get_status, nor any preconditions. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsSearch ProductsB

Find candidate products across Google Shopping (SerpApi), eBay, Best Buy, and Target. data: [{title, price, merchant, url, product_id}] sorted by price ascending.

NameRequiredDescriptionDefault
numNo
queryYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that results are aggregated across four merchants and sorted by price ascending, but says nothing about authentication, rate limits, partial-source failures, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the purpose front-loaded and no filler. The return-shape sentence is somewhat redundant given an output schema exists, which keeps it from a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema covers return values, so restating the data shape is optional, but the description still omits query format and result-count semantics. For a 2-parameter search tool with no annotations, that leaves a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description explains neither parameter. It never says what form the query takes (keyword, UPC, model number) or what num controls, leaving both parameters opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Find candidate products') and names the exact sources searched (Google Shopping, eBay, Best Buy, Target). It does not explicitly distinguish itself from siblings like compare_prices or get_deals, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus compare_prices, get_deals, or extract_product, nor any stated prerequisites. The agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 8 tool updatesv0.1.0
    • First observedc1_check
    • First observedcompare_prices
    • First observedextract_product
    • First observedget_deals
    • First observedget_price_history
    • First observedget_status
    • First observedreload_settings
    • First observedsearch_products

TDQS

A3.5/5.0

Scored across 8 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI models to find the best online deals by browsing and interacting with multiple shopping platforms like Amazon and eBay across various regions. It uses Playwright to automate searches and retrieve product information from compatible e-commerce and deal-tracking websites.
    8 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Lets Claude search Amazon products via multiple keyword queries and present curated results in an interactive carousel widget with add-to-cart functionality.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude to search and analyze product listings from multiple French marketplaces, evaluating price, delivery, and distance to a reference point to find the best value.
    -
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables product comparison and analysis for any MCP-compatible AI assistant, with tools like compare_products and list_products.
    -