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 这一简洁别名属于无关产品,应使用团队专属 URL。

安装

在 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 分

    请在仓库或注册中心条目中声明许可证。