Commercebridge

io.github.IsaiahDupree由 GitHub 帳號 IsaiahDupree 發布v1.0.0更新於 Oct 25, 2026

Remote MCP connector for eBay, Shopify, Best Buy & Etsy marketplace data via the Commerce API

已驗證Streamable HTTP可網頁執行網頁搜尋與抓取商業與電商

概覽

AI 產生的概覽

遠端 MCP 連接器,讓助理透過統一的 Commerce API 搜尋與讀取 eBay、Shopify、Best Buy 與 Etsy 的公開商品資料。

可以做什麼
搜尋與讀取 eBay 商品,包含單筆與批次商品詳情以及成交價比較(受上游限制)。列出、搜尋並讀取任一公開 Shopify 商店的商品與商品系列,免金鑰,目前可用。搜尋 Best Buy 美國商品目錄並依 SKU 讀取詳情(上游尚未上線)。搜尋 Etsy 商品,並讀取商品、商店與商店商品列表(上游尚未上線)。所有工具皆為唯讀,原樣轉送上游回應與錯誤。
適用情境
適合助理需要即時公開市場資料的情境:比價、查看庫存、瀏覽 Shopify 商店目錄,或查詢商品與商店詳情。Shopify 目前可用;其他引擎在上游路由與金鑰設定完成前會回傳明確的錯誤。
執行需求
遠端 streamable HTTP 端點,無需本機安裝。連接器本身不需要驗證、帳號或金鑰。各市場 API 金鑰(EBAY_CLIENT_ID/EBAY_CLIENT_SECRET、BESTBUY_API_KEY、ETSY_KEYSTRING/ETSY_SHARED_SECRET)僅存在於上游部署。需要能存取託管端點與上游 Commerce API 的網路。
安裝前請注意
目前僅 Shopify 可用;eBay、Best Buy 與 Etsy 呼叫會回傳 credentials_required 或 not_found 等錯誤,成交價比較一律回傳 not_enabled 限制。所有工具皆唯讀且不具破壞性,但查詢內容與商店網域會轉送給第三方上游 API。README 提醒 commercebridge.vercel.app 這個簡潔別名屬於無關產品,應使用團隊專屬網址。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Commercebridge,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.IsaiahDupree%2Fcommercebridge/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "commercebridge": {
      "type": "http",
      "url": "https://commercebridge-isaiahduprees-projects.vercel.app/api/mcp"
    }
  }
}

README

CommerceBridge

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.

Why Authentication: None

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:

  • No OAuth — no login flow, no token exchange, no /.well-known/oauth-* endpoints
  • No Supabase — no user table, no session storage
  • No billing — no plans, no usage metering, no upgrade gate

This 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.

Tools

14 tools, one per Commerce API endpoint, grouped by marketplace/engine:

eBay — needs EBAY_CLIENT_ID / EBAY_CLIENT_SECRET on the upstream deployment

ToolEndpointWhat it does
search_ebayGET /v1/searchSearch live eBay listings by keyword/category across 8 sites (US, GB, DE, AU, CA, FR, IT, ES)
get_ebay_itemGET /v1/itemGet one eBay item's full detail by REST id or legacy id
get_ebay_itemsGET /v1/itemsBulk-fetch up to 20 eBay items in one call
search_ebay_soldGET /v1/soldSold/completed-item comps — needs eBay's separately-gated Marketplace Insights API

Shopify — keyless, live right now

ToolEndpointWhat it does
search_shopify_productsGET /v1/shopify/productsList any public Shopify store's catalog from its own /products.json
get_shopify_productGET /v1/shopify/productGet one product by handle
get_shopify_collectionsGET /v1/shopify/collectionsList a store's collections
search_shopifyGET /v1/shopify/searchKeyword-filter a store's catalog (title/vendor/type/tags)

Best Buy — not yet live upstream (route pending redeploy, then needs BESTBUY_API_KEY)

ToolEndpointWhat it does
search_bestbuyGET /v1/bestbuy/searchSearch Best Buy's US catalog by keyword/category
get_bestbuy_productGET /v1/bestbuy/productGet one product by SKU

Etsy — not yet live upstream (route pending redeploy, then needs ETSY_KEYSTRING + ETSY_SHARED_SECRET)

ToolEndpointWhat it does
search_etsyGET /v1/etsy/searchSite-wide active-listing keyword search
get_etsy_listingGET /v1/etsy/listingGet one listing (only endpoint where views is populated)
get_etsy_shopGET /v1/etsy/shopGet one shop by shop_id or shop_name
get_etsy_shop_listingsGET /v1/etsy/shop/listingsList 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.

Expected upstream errors — not a bug

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:

    credentials_required: eBay app credentials required — set EBAY_CLIENT_ID and EBAY_CLIENT_SECRET (free at developer.ebay.com). This API wraps eBay's free Browse API.

    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:

    not_found: No route for GET /v1/bestbuy/searchnot_found: No route for GET /v1/etsy/shop

    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.

Configuration

Env varDefaultPurpose
COMMERCE_API_BASE_URLhttps://commerce-api-isaiahduprees-projects.vercel.appUpstream 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.

Run locally

bash
npm installnpm test              # local smoke test — initialize, tools/list, 2x tools/call (see below)

Deploy

bash
npx vercel --yes --prod

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:

https://<your-deployment>.vercel.app/api/mcp

Local smoke test

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:

  1. initialize — server identifies itself as commercebridge v1.0.0
  2. tools/list — all 14 tools present, each with an object inputSchema and the expected RO annotations
  3. tools/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-end
  4. tools/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 crash

test/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.

Architecture

lib/tools.js   — buildServer(): McpServer + all 14 tool registrations + upstream fetch relayapi/mcp.js     — POST /api/mcp — stateless StreamableHTTPServerTransport, no authapi/health.js  — GET /api/health — {ok, service, upstream}test/          — smoke.mjs (in-memory client/server), local-server.mjs (HTTP handler check)

來源:README.md,提交 3863e01

工具

14

search_ebay

Search eBay listings

Search live eBay listings by keyword and/or category across 8 sites (US, GB, DE, AU, CA, FR, IT, ES), built on eBay's official Browse API. Returns id, title, price, condition, seller feedback, shipping, image, categories, and URL per listing. Returns an honest `credentials_required` error until the upstream deployment has EBAY_CLIENT_ID/EBAY_CLIENT_SECRET provisioned.

輸入參數qsortlimitoffsetcountrycategorycurrencypriceMaxpriceMinconditionfreeShippingbuyingOptions

get_ebay_item

Get one eBay item

Get one eBay item's full detail — description, brand/MPN/GTIN, color, item specifics, images, return terms, availability, item end date — by REST item id or legacy numeric id. Returns an honest `credentials_required` error until the upstream deployment has eBay app credentials provisioned.

輸入參數idcountrylegacy_id

get_ebay_items

Get up to 20 eBay items in one call

Bulk-fetch full item detail for up to 20 eBay items in a single call, given comma-separated item ids. Returns an honest `credentials_required` error until the upstream deployment has eBay app credentials provisioned.

輸入參數countryitem_ids必填

search_ebay_sold

Search sold/completed eBay listings (Marketplace Insights)

Sold/completed-item price comps. This needs eBay's Marketplace Insights API, which is a limited-release approval separate from the base Browse API. Until that is enabled on the upstream deployment, this always returns a 501 `not_enabled` gate rather than a fabricated result — that is expected, honest behavior, not a bug.

輸入參數q

search_shopify_products

List a Shopify store's catalog

List any public Shopify store's product catalog straight from that store's own /products.json — no keys, no auth, works today. Returns title, vendor, product type, tags, price range, variants, images, and URL per product. Pass a bare storefront domain, e.g. `allbirds.com`.

輸入參數pagelimitstore必填

get_shopify_product

Get one Shopify product by handle

Get one product from a public Shopify store by its handle (slug), from that store's own /products.json — keyless, live now.

輸入參數store必填handle必填

get_shopify_collections

List a Shopify store's collections

List a public Shopify store's collections (id, handle, title, product count, image) — keyless, live now.

輸入參數pagelimitstore必填

search_shopify

Keyword-filter a Shopify store's catalog

Filter a public Shopify store's catalog by keyword across title, vendor, product type, and tags — keyless, live now.

輸入參數q必填limitstore必填

search_bestbuy

Search Best Buy's product catalog

Search Best Buy's US product catalog by keyword and/or category, built on Best Buy's official Products API. Returns sku, title, sale/regular price, rating, manufacturer/model, image, online/in-store availability, and UPC per product. Errors honestly until this engine is fully live upstream: currently returns `not_found` (route not yet redeployed on the production commerce-api), then `credentials_required` once deployed without BESTBUY_API_KEY provisioned.

輸入參數qpagelimitcategory

get_bestbuy_product

Get one Best Buy product by SKU

Get one Best Buy product by SKU, full detail. Errors honestly until this engine is fully live upstream: currently returns `not_found` (route not yet redeployed on the production commerce-api), then `credentials_required` once deployed without BESTBUY_API_KEY provisioned.

輸入參數sku必填

search_etsy

Search Etsy's site-wide active listings

Search Etsy's site-wide active listings by keyword, built on Etsy's official Open API v3 (app-only, no OAuth). Returns title, description, price, quantity, tags/materials, favorites, images, and shop per listing. Errors honestly until this engine is fully live upstream: currently returns `not_found` (route not yet redeployed on the production commerce-api), then `credentials_required` once deployed without ETSY_KEYSTRING/ETSY_SHARED_SECRET provisioned.

輸入參數q必填limitoffsetis_safesort_oncurrencymax_pricemin_pricesort_ordertaxonomy_idbuyer_countryshop_location

get_etsy_listing

Get one Etsy listing by id

Get one Etsy listing by id, full detail — the only endpoint where Etsy's API populates `views` (search and shop-listings results always have `views: null`, since Etsy doesn't carry that field there). Errors honestly until this engine is fully live upstream: currently returns `not_found` (route not yet redeployed on the production commerce-api), then `credentials_required` once deployed without ETSY_KEYSTRING/ETSY_SHARED_SECRET provisioned.

輸入參數languagelisting_id必填

get_etsy_shop

Get one Etsy shop

Get one Etsy shop by shop_id or shop_name — name, listing counts, favorites, total sold, aggregate review count/average. Errors honestly until this engine is fully live upstream: currently returns `not_found` (route not yet redeployed on the production commerce-api), then `credentials_required` once deployed without ETSY_KEYSTRING/ETSY_SHARED_SECRET provisioned.

輸入參數shop_idshop_name

get_etsy_shop_listings

List a shop's active Etsy listings

List one Etsy shop's active listings, optionally keyword-filtered within the shop. Errors honestly until this engine is fully live upstream: currently returns `not_found` (route not yet redeployed on the production commerce-api), then `credentials_required` once deployed without ETSY_KEYSTRING/ETSY_SHARED_SECRET provisioned.

輸入參數qlimitoffsetshop_idsort_onshop_namesort_order

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。