Skip to main content
Glama
Veselin15

CartScout MCP server

by Veselin15
README.md
# CartScout MCP server

[![Tests](https://github.com/Veselin15/cartscout-mcp/actions/workflows/tests.yml/badge.svg)](https://github.com/Veselin15/cartscout-mcp/actions/workflows/tests.yml)

<!-- mcp-name: io.github.Veselin15/cartscout-mcp -->

Give Claude, Cursor or any MCP-capable AI agent **live product prices, stock, variants and deal
ratings** from online stores. Paste a product link into the chat and ask "is this a good price?",
"which of these three stores is cheapest and in stock?" or "does it come in size 10?".

Works with **Shopify, WooCommerce, Walmart and eBay** stores, with **Amazon in beta**. The data comes
from the [CartScout API](https://rapidapi.com/veselinveselinov06/api/cartscout-api), which handles
fetching, bot filters and parsing. [Try the API in your browser](https://api.vesflow.dev) first,
no sign-up needed.

## Tools

| Tool | What the agent gets | Uses |
|---|---|---|
| `get_product` | Price, list price and discount, stock, variants (sizes, colours) with their own price and stock, SKU / GTIN, rating, optional reviews and description | 1 extraction |
| `compare_products` | 2-10 pages ranked: cheapest, cheapest in stock, best rated, biggest discount, price spread, same product by GTIN | 1 extraction per URL, PRO plan or higher |
| `check_deal` | Deal rating of the current price against its recorded history, with average, lowest and highest price | 1 extraction (or none with `refresh: false`) |
| `get_price_history` | Recorded price and stock changes with current, lowest and highest price | No extractions |

Every tool is read-only and returns structured JSON with an output schema. Responses are trimmed
for agents: bulky parts such as all variants, reviews and the description are included only when
the agent asks for them.

## Setup

1. Subscribe to CartScout on RapidAPI. The **free plan includes 300 extractions a month**:
   [plans](https://rapidapi.com/veselinveselinov06/api/cartscout-api/pricing).
2. Copy your `X-RapidAPI-Key` from the RapidAPI dashboard.
3. Add the server to your client. It runs with [uv](https://docs.astral.sh/uv/), which installs it on
   first use.

### Claude Code

```bash
claude mcp add cartscout -e RAPIDAPI_KEY=your-rapidapi-key -- uvx --from git+https://github.com/Veselin15/cartscout-mcp cartscout-mcp
```

### Claude Desktop

Settings → Developer → Edit config, then add:

```json
{
  "mcpServers": {
    "cartscout": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/Veselin15/cartscout-mcp", "cartscout-mcp"],
      "env": { "RAPIDAPI_KEY": "your-rapidapi-key" }
    }
  }
}
```

### Cursor

Add the same `mcpServers` block to `~/.cursor/mcp.json` (all projects) or `.cursor/mcp.json` (one project).

## Example prompts

- "What does https://www.allbirds.com/products/mens-tree-runner-nz-ochre cost, and is size 10 in stock?"
- "Is $79 a good price for this air fryer? https://www.walmart.com/ip/844320666"
- "Compare these three listings and tell me the cheapest one I can buy today: …"
- "Show me how the price of this product changed over the last two weeks."

CartScout reads product pages; it does not search stores. Give the agent product URLs, or let it find
them with a web search tool first.

## Configuration

| Variable | Default | Purpose |
|---|---|---|
| `RAPIDAPI_KEY` | required | Your RapidAPI key |
| `CARTSCOUT_RAPIDAPI_HOST` | `cartscout-api.p.rapidapi.com` | RapidAPI host of the API |
| `CARTSCOUT_API_URL`, `CARTSCOUT_API_KEY` | unset | Use a directly issued CartScout key instead of RapidAPI |

The server sends only the product URLs your agent asks about to the CartScout API. Without a key
it still starts and lists its tools (handy for MCP inspectors); each tool call then explains how to
add `RAPIDAPI_KEY`.

### Docker

```bash
docker build -t cartscout-mcp .
docker run -i --rm -e RAPIDAPI_KEY=your-rapidapi-key cartscout-mcp
```

### HTTP transport

`cartscout-mcp --transport streamable-http --port 8000` serves the tools at
`http://127.0.0.1:8000/mcp`. Every client connected to it uses the key from the environment, so keep
it on a private address.

## Good to know

- Prices follow each store's own region and currency.
- Results can be cached for up to 60 minutes (`cached: true`).
- Price history and deal ratings build up as products are read. A product seen for the first time
  has little history to compare against.
- History range depends on the plan: 14 days on the free plan, up to 365 days on MEGA.
- When a store blocks a request, the tool returns an error explaining it, and the failed request is
  not billed.

## Development

```bash
uv sync
uv run pytest
```

## License

MIT

TDQS

A4.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool targets a clear, distinct operation: one product snapshot, multi-product comparison, deal rating, and historical data. While check_deal and get_price_history both use history, check_deal provides a computed verdict while get_price_history returns raw data, so there is no real ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with lowercase snake_case: get_product, compare_products, check_deal, get_price_history. The verb choice clearly conveys the action and the object is always the resource involved.

Tool Count5/5

Four tools is an appropriately tight scope for a price-tracking and product-research server. Each tool covers a distinct core need—single product lookup, comparison, deal assessment, and history—without redundancy or bloat.

Completeness4/5

The core product research and price history lifecycle is covered well, including starting history via get_product. Minor gaps exist such as no search/discovery tool or watchlist/alerts, but the available tools support the main workflows without dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues