Shopping Deals MCP Server

Shopping Deals MCP Server

MCP server for finding, comparing, and ranking the cheapest real offers across eBay, Amazon, Craigslist, OfferUp, and Google Shopping, with tax estimation and exact-model filtering.

Category
Visit Server

README

Shopping Deals MCP Server

Shopping Deals MCP Server is a Model Context Protocol server for finding products, comparing marketplace listings, and ranking the cheapest real offers across eBay, Facebook Marketplace, Amazon, Craigslist, and OfferUp.

It is built for agents that need to answer questions like:

  • "Find the cheapest DJI OSMO Pocket 4P shipped to me."
  • "Compare exact-model prices across marketplaces."
  • "Avoid accessory listings, wrong variants, and fake low prices with high shipping."
  • "Estimate tax and sort by final landed cost."

What It Does

  • Searches multiple shopping sources from one MCP interface.
  • Normalizes listings into a common schema.
  • Separates item price, shipping cost, shipped total, estimated tax, and estimated final total.
  • Penalizes accessories, parts, and wrong model variants.
  • Handles edge cases like Pocket 4P vs Pocket 4.
  • Can run locally over stdio or remotely as a Cloudflare Worker MCP endpoint.

MCP Tools

Tool Purpose
list_sources Show configured sources and setup requirements.
search_products Return normalized listings across selected platforms.
find_best_deals Rank strongest deals using price, relevance, condition, source, and warnings.
find_cheapest_offers Filter exact-model offers and sort by shipped total plus estimated tax when supplied.
compare_prices Group comparable listings and summarize observed price ranges.
get_listing_details Fetch source-specific listing details where supported.

Sources

Source Coverage Requires
eBay Browse API Official eBay item search, shipping, and detail lookups EBAY_ACCESS_TOKEN or EBAY_APP_ID + EBAY_CERT_ID
Facebook Marketplace public search Local used marketplace listings location as latitude,longitude or SHOPPING_FACEBOOK_MARKETPLACE_LATITUDE/LONGITUDE; experimental
Craigslist static search HTML Local used marketplace listings none, configure CRAIGSLIST_SITES
OfferUp public search Local used marketplace listings none
Amazon public search Amazon product search HTML parser SHOPPING_ENABLE_AMAZON_SCRAPE=true; may be blocked
Google Shopping via SerpApi Broad retail coverage such as Amazon, Walmart, Target, eBay, merchant sites SERPAPI_API_KEY

Scraped/public sources can change or block automated traffic. Official APIs are more reliable.

Requirements

  • Python 3.10+
  • Node.js 20+ for the Cloudflare Worker version
  • eBay developer credentials for reliable eBay results
  • Optional: SerpApi key for broad Google Shopping coverage
  • Optional: Cloudflare account for remote hosting

Use The Hosted MCP Server

You can use the public hosted MCP server without cloning this repo:

https://shopping-deals-mcp.jonathang132298.workers.dev/mcp

Add it to Codex:

codex mcp add shopping-deals-remote --url https://shopping-deals-mcp.jonathang132298.workers.dev/mcp
codex mcp get shopping-deals-remote

Use it from any MCP client that supports Streamable HTTP:

{
  "mcpServers": {
    "shopping-deals": {
      "url": "https://shopping-deals-mcp.jonathang132298.workers.dev/mcp"
    }
  }
}

Health and source status:

https://shopping-deals-mcp.jonathang132298.workers.dev/health

The hosted Worker uses the maintainer's configured API keys and public marketplace parsers. If you want to use your own eBay, SerpApi, or Cloudflare account, follow the local setup or deployment steps below.

Quick Start: Local MCP Server

git clone https://github.com/jongan69/shopping-deals-mcp-server.git
cd shopping-deals-mcp-server
python3 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env

Edit .env with your own credentials:

EBAY_APP_ID=your-ebay-client-id
EBAY_CERT_ID=your-ebay-client-secret
EBAY_DEV_ID=your-ebay-dev-id
EBAY_MARKETPLACE_ID=EBAY_US
EBAY_USE_SANDBOX=false
SHOPPING_ENABLE_AMAZON_SCRAPE=true
SHOPPING_FACEBOOK_MARKETPLACE_LATITUDE=40.7128
SHOPPING_FACEBOOK_MARKETPLACE_LONGITUDE=-74.0060

Run over stdio:

shopping-deals-mcp --transport stdio

Run over Streamable HTTP for local testing:

shopping-deals-mcp --transport streamable-http --host 127.0.0.1 --port 8000

Local HTTP MCP endpoint:

http://127.0.0.1:8000/mcp

Add To Codex

Local stdio server:

codex mcp add shopping-deals -- /absolute/path/to/shopping-deals-mcp-server/.venv/bin/shopping-deals-mcp --transport stdio

Remote Streamable HTTP server:

codex mcp add shopping-deals-remote --url https://shopping-deals-mcp.jonathang132298.workers.dev/mcp

Verify:

codex mcp get shopping-deals-remote

Add To Any MCP Client

Use the local stdio command:

{
  "mcpServers": {
    "shopping-deals": {
      "command": "/absolute/path/to/shopping-deals-mcp-server/.venv/bin/shopping-deals-mcp",
      "args": ["--transport", "stdio"]
    }
  }
}

Or use a remote Streamable HTTP endpoint:

https://shopping-deals-mcp.jonathang132298.workers.dev/mcp

Cloudflare Worker Deployment

This repo includes a TypeScript Worker implementation for remote MCP clients.

Install dependencies:

npm install
cp .env .dev.vars
npm run typecheck
npm run dev -- --port 8787

Test locally:

http://127.0.0.1:8787/health
http://127.0.0.1:8787/mcp

Before deploying, change the Worker name in wrangler.jsonc if shopping-deals-mcp is already taken in your Cloudflare account:

{
  "name": "your-shopping-deals-mcp"
}

Upload secrets:

printf '%s' "$EBAY_APP_ID" | npx wrangler secret put EBAY_APP_ID
printf '%s' "$EBAY_CERT_ID" | npx wrangler secret put EBAY_CERT_ID
printf '%s' "$EBAY_DEV_ID" | npx wrangler secret put EBAY_DEV_ID

Deploy:

npm run deploy

Your remote MCP endpoint will be:

https://your-worker.your-subdomain.workers.dev/mcp

Optional Tax Estimates

eBay Browse search results do not return the buyer's final checkout tax amount. This server supports estimated tax when you provide a tax rate.

Set defaults:

SHOPPING_ESTIMATED_TAX_RATE_PERCENT=8.875
SHOPPING_TAX_SHIPPING=true

Or pass per tool call:

{
  "query": "DJI OSMO Pocket 4P",
  "sources": ["ebay"],
  "max_results": 5,
  "max_results_per_source": 50,
  "tax_rate_percent": 8.875,
  "tax_on_shipping": true
}

Returned listings can include:

  • price
  • shipping_cost
  • total_price
  • estimated_tax
  • total_with_tax

Use find_cheapest_offers when the goal is the lowest estimated final cost.

Example Tool Calls

Find the cheapest exact-model offer by shipped total plus estimated tax:

{
  "query": "DJI OSMO Pocket 4P",
  "sources": ["ebay"],
  "max_results": 10,
  "max_results_per_source": 50,
  "tax_rate_percent": 8.875,
  "tax_on_shipping": true
}

Find ranked deals across marketplaces:

{
  "query": "sony wh-1000xm5 headphones",
  "sources": ["ebay", "facebook_marketplace", "craigslist", "offerup", "amazon"],
  "location": "40.7128,-74.0060",
  "max_results": 10,
  "max_results_per_source": 20,
  "condition": "any"
}

Search Facebook Marketplace near New York City:

{
  "query": "used bike",
  "sources": ["facebook_marketplace"],
  "location": "40.7128,-74.0060",
  "max_results_per_source": 10
}

Compare prices:

{
  "query": "macbook air m2 16gb",
  "sources": ["ebay", "craigslist", "offerup"],
  "location": "newyork",
  "max_results_per_source": 15
}

Configuration

Variable Required Description
EBAY_ACCESS_TOKEN optional Existing eBay OAuth access token.
EBAY_APP_ID recommended eBay client ID for OAuth client credentials.
EBAY_CERT_ID recommended eBay client secret for OAuth client credentials.
EBAY_DEV_ID optional eBay dev ID, stored for account completeness.
EBAY_MARKETPLACE_ID optional Defaults to EBAY_US.
EBAY_USE_SANDBOX optional Set true for sandbox eBay APIs.
SERPAPI_API_KEY optional Enables Google Shopping via SerpApi.
CRAIGSLIST_SITES optional Comma-separated Craigslist sites.
SHOPPING_FACEBOOK_MARKETPLACE_LATITUDE optional Default Facebook Marketplace search latitude.
SHOPPING_FACEBOOK_MARKETPLACE_LONGITUDE optional Default Facebook Marketplace search longitude.
SHOPPING_FACEBOOK_MARKETPLACE_RADIUS_KM optional Facebook Marketplace search radius. Defaults to 16.
SHOPPING_ENABLE_AMAZON_SCRAPE optional Enables Amazon public HTML parsing.
SHOPPING_HTTP_TIMEOUT_SECONDS optional Request timeout. Defaults to 15.
SHOPPING_MAX_RESULTS_PER_SOURCE optional Default per-source search size.
SHOPPING_ESTIMATED_TAX_RATE_PERCENT optional Default tax estimate rate.
SHOPPING_TAX_SHIPPING optional Whether shipping is included in estimated tax base. Defaults to true.

Development

Python checks:

source .venv/bin/activate
pytest
ruff check .

Worker checks:

npm install
npm run typecheck

License

MIT

Notes And Limitations

  • Deal scores are triage signals, not purchase guarantees.
  • Always verify seller reputation, return policy, warranty, shipping, taxes, and authenticity before buying.
  • Amazon, Craigslist, Facebook Marketplace, and OfferUp public parsers may break if those sites change markup or block traffic.
  • Facebook Marketplace support is experimental. It uses Facebook's public Marketplace web feed with an anonymous page token and requires a local search center.
  • Craigslist RSS returns HTTP 403 from Cloudflare Worker egress, so the Worker uses Craigslist static search HTML cards.
  • Tax is estimated from a supplied rate. Final checkout tax may differ.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured