Remote MCP connector for eBay, Shopify, Best Buy & Etsy marketplace data via the Commerce API
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A remote MCP server that wraps the live Commerce API β eBay, Shopify, Best Buy, and Etsy marketplace data behind one /v1 contract β as MCP tools any agent (Claude, ChatGPT, etc.) can call directly.
Live: https://commercebridge-isaiahduprees-projects.vercel.app/mcp (Vercel project commercebridge, team isaiahduprees-projects) β 14 tools, verified against real production data (Shopify live; eBay/Best Buy/Etsy honestly gated until their upstream app keys are provisioned). Naming note: the clean commercebridge.vercel.app alias is owned by an unrelated third-party product (a WhatsApp-commerce chatbot) β use the team-scoped URL above, same situation as commerce-api's alias collision.
CommerceBridge does no scraping and holds no data of its own: every tool is a thin, faithful fetch relay to the upstream Commerce API. Whatever that API returns comes back unmodified, including its errors.
This connector's underlying data β eBay/Shopify/Best Buy/Etsy marketplace listings β is fully public and carries zero per-user state. There is no account to log into, nothing to authorize, and nothing to bill per-seat. So, deliberately, CommerceBridge has:
/.well-known/oauth-* endpointsThis is the same architectural call this org made for StoreBridge, its sibling connector over App Store/Google Play data: public read-only marketplace data gets the lean, stateless build. It is deliberately leaner than this org's OAuth-based Bridge-family connectors (RemindersBridge, MessagesBridge, etc.), which proxy a signed-in user's own private data and do need auth.
14 tools, one per Commerce API endpoint, grouped by marketplace/engine:
EBAY_CLIENT_ID / EBAY_CLIENT_SECRET on the upstream deployment| Tool | Endpoint | What it does |
|---|---|---|
search_ebay | GET /v1/search | Search live eBay listings by keyword/category across 8 sites (US, GB, DE, AU, CA, FR, IT, ES) |
get_ebay_item | GET /v1/item | Get one eBay item's full detail by REST id or legacy id |
get_ebay_items | GET /v1/items | Bulk-fetch up to 20 eBay items in one call |
search_ebay_sold | GET /v1/sold | Sold/completed-item comps β needs eBay's separately-gated Marketplace Insights API |
| Tool | Endpoint | What it does |
|---|---|---|
search_shopify_products | GET /v1/shopify/products | List any public Shopify store's catalog from its own /products.json |
get_shopify_product | GET /v1/shopify/product | Get one product by handle |
get_shopify_collections | GET /v1/shopify/collections | List a store's collections |
search_shopify | GET /v1/shopify/search | Keyword-filter a store's catalog (title/vendor/type/tags) |
BESTBUY_API_KEY)| Tool | Endpoint | What it does |
|---|---|---|
search_bestbuy | GET /v1/bestbuy/search | Search Best Buy's US catalog by keyword/category |
get_bestbuy_product | GET /v1/bestbuy/product | Get one product by SKU |
ETSY_KEYSTRING + ETSY_SHARED_SECRET)| Tool | Endpoint | What it does |
|---|---|---|
search_etsy | GET /v1/etsy/search | Site-wide active-listing keyword search |
get_etsy_listing | GET /v1/etsy/listing | Get one listing (only endpoint where views is populated) |
get_etsy_shop | GET /v1/etsy/shop | Get one shop by shop_id or shop_name |
get_etsy_shop_listings | GET /v1/etsy/shop/listings | List a shop's active listings |
Every tool is annotated {readOnlyHint:true, destructiveHint:false, idempotentHint:true, openWorldHint:true} β read-only, non-destructive, idempotent, over an open/external data source.
Only Shopify is live today. Every other engine's tool call returns an MCP tool error (isError: true) whose text is the upstream's honest error envelope, verbatim β but the exact error differs by engine, because the upstream commerce-api production deployment currently lags its own source repo:
eBay (search_ebay*, get_ebay*) β the route is deployed, but app keys aren't provisioned, so you get:
search_ebay_sold additionally always returns a 501 not_enabled gate regardless of eBay keys β that endpoint needs eBay's separately-approved Marketplace Insights API, which the base Browse API keys don't grant.
Best Buy (search_bestbuy, get_bestbuy_product) and Etsy (search_etsy*, get_etsy*) β as of this writing, the code for these engines exists in the commerce-api source repo but the live production deployment has not been redeployed to include it yet, so these routes 404 at the HTTP layer, verified live:
Once commerce-api is redeployed, these will flip to credentials_required (BESTBUY_API_KEY / ETSY_KEYSTRING+ETSY_SHARED_SECRET missing) until those keys are provisioned, then to live data β with zero changes needed here.
CommerceBridge deliberately does not catch, hide, or fake around any of this β the tool handler passes whatever the upstream says straight through as {isError: true, content: [{type:'text', text: '<code>: <message>'}]}, whether that's not_found, credentials_required, or eventually real data.
| Env var | Default | Purpose |
|---|---|---|
COMMERCE_API_BASE_URL | https://commerce-api-isaiahduprees-projects.vercel.app | Upstream Commerce API base URL. Override to point at a staging/local Commerce API deployment. |
No other configuration. No secrets belong in this repo β API keys live only on the upstream commerce-api deployment.
That's it β no environment variables are required for CommerceBridge itself (only the upstream commerce-api deployment needs its marketplace app keys). After deploy, point any MCP client at:
npm test runs test/smoke.mjs, which connects a real MCP Client to buildServer() from lib/tools.js over an in-memory transport (the exact same server code api/mcp.js serves over HTTP) and checks:
initialize β server identifies itself as commercebridge v1.0.0tools/list β all 14 tools present, each with an object inputSchema and the expected RO annotationstools/call β search_shopify_products (store: "allbirds.com") β asserts isError is false and real products come back with marketplace: "shopify" β proves live data flows end-to-endtools/call β search_ebay β asserts isError is true and the error text contains credentials_required β proves the upstream honest gate surfaces as a clean MCP tool error, not a crashtest/local-server.mjs is a second, thinner check that runs the actual api/mcp.js / api/health.js handlers behind a plain http.Server, to confirm the Vercel-shaped handlers themselves (GET/DELETE β 405, /api/health β {ok, service, upstream}) work outside of the SDK's in-memory transport.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/commercebridge)<a href="https://allmcps.com/mcp/commercebridge"><img src="https://allmcps.com/api/badge/commercebridge?style=directory" alt="Commercebridge on AllMCPs" /></a>