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
访问服务器

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.

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选