Shopping Deals MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Shopping Deals MCP Serverfind the cheapest PlayStation 5 Digital Edition"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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, 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 4PvsPocket 4.Can run locally over stdio or remotely as a Cloudflare Worker MCP endpoint.
Related MCP server: Bargainer MCP Server
MCP Tools
Tool | Purpose |
| Show configured sources and setup requirements. |
| Return normalized listings across selected platforms. |
| Rank strongest deals using price, relevance, condition, source, and warnings. |
| Filter exact-model offers and sort by shipped total plus estimated tax when supplied. |
| Group comparable listings and summarize observed price ranges. |
| Fetch source-specific listing details where supported. |
Sources
Source | Coverage | Requires |
eBay Browse API | Official eBay item search, shipping, and detail lookups |
|
Craigslist static search HTML | Local used marketplace listings | none, configure |
OfferUp public search | Local used marketplace listings | none |
Amazon public search | Amazon product search HTML parser |
|
Google Shopping via SerpApi | Broad retail coverage such as Amazon, Walmart, Target, eBay, merchant sites |
|
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
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 .envEdit .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=trueRun over stdio:
shopping-deals-mcp --transport stdioRun over Streamable HTTP for local testing:
shopping-deals-mcp --transport streamable-http --host 127.0.0.1 --port 8000Local HTTP MCP endpoint:
http://127.0.0.1:8000/mcpAdd To Codex
Local stdio server:
codex mcp add shopping-deals -- /absolute/path/to/shopping-deals-mcp-server/.venv/bin/shopping-deals-mcp --transport stdioRemote Streamable HTTP server:
codex mcp add shopping-deals-remote --url https://your-worker.your-subdomain.workers.dev/mcpVerify:
codex mcp get shopping-deals-remoteAdd 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://your-worker.your-subdomain.workers.dev/mcpCloudflare 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 8787Test locally:
http://127.0.0.1:8787/health
http://127.0.0.1:8787/mcpBefore 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_IDDeploy:
npm run deployYour remote MCP endpoint will be:
https://your-worker.your-subdomain.workers.dev/mcpOptional 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=trueOr 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:
priceshipping_costtotal_priceestimated_taxtotal_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", "craigslist", "offerup", "amazon"],
"max_results": 10,
"max_results_per_source": 20,
"condition": "any"
}Compare prices:
{
"query": "macbook air m2 16gb",
"sources": ["ebay", "craigslist", "offerup"],
"location": "newyork",
"max_results_per_source": 15
}Configuration
Variable | Required | Description |
| optional | Existing eBay OAuth access token. |
| recommended | eBay client ID for OAuth client credentials. |
| recommended | eBay client secret for OAuth client credentials. |
| optional | eBay dev ID, stored for account completeness. |
| optional | Defaults to |
| optional | Set |
| optional | Enables Google Shopping via SerpApi. |
| optional | Comma-separated Craigslist sites. |
| optional | Enables Amazon public HTML parsing. |
| optional | Request timeout. Defaults to |
| optional | Default per-source search size. |
| optional | Default tax estimate rate. |
| optional | Whether shipping is included in estimated tax base. Defaults to |
Development
Python checks:
source .venv/bin/activate
pytest
ruff check .Worker checks:
npm install
npm run typecheckLicense
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, and OfferUp public parsers may break if those sites change markup or block traffic.
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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jongan69/shopping-deals-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server