Amazon product API & MCP server: search, prices, reviews, sellers, deals, and ASIN lookup by Canopy.
A type-safe MCP (Model Context Protocol) server that provides Amazon product data through the Canopy API. Built with xmcp and deployed on Cloudflare Workers.
/mcp (current MCP spec)src/tools/openapi-typescriptYou'll need a Canopy API key from canopyapi.co.
npm install
npm run dev # xmcp watcher + wrangler dev (local Workers runtime)
npm run deploy # build + wrangler deploy --env production
Use the MCP Inspector and connect to http://localhost:8787/mcp (or your deployed URL). Provide the API key as a request header:
npx -y @modelcontextprotocol/inspector@latest
Or with curl:
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "CANOPY-API-KEY: $CANOPY_API_KEY" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
Every request must carry credentials. Two modes are supported:
1. OAuth 2.1 (recommended for MCP clients). OAuth-capable clients discover the flow automatically: an unauthenticated request returns 401 with WWW-Authenticate: Bearer resource_metadata="https://mcp.canopyapi.co/.well-known/oauth-protected-resource". Supabase is the authorization server (dynamic client registration supported); consent lives at canopyapi.co. The verified user's Canopy API key is resolved server-side.
2. API key headers. Any of these forms works (checked in this order):
CANOPY-API-KEY: your-api-keyAPI-KEY: your-api-keyX-API-KEY: your-api-keyAuthorization: Bearer your-api-keyA missing or invalid credential returns HTTP 401 with a JSON-RPC error before the request reaches the MCP transport (see src/middleware.ts).
All 17 tools are read-only (readOnlyHint: true) and annotated with a title.
get_amazon_product — product details by ASIN, URL, or GTINget_amazon_product_variants — product variantsget_amazon_product_offers — seller offers and Buy Box infoget_amazon_product_stock — stock level estimatesget_amazon_product_sales — sales estimates (weekly, monthly, annual)get_amazon_product_top_reviews — top customer reviews (title, body, rating, helpful votes, images/videos)search_amazon_products — search with filters and sortingget_amazon_autocomplete — search term suggestionsget_amazon_deals — current dealsget_amazon_bestsellers — best-selling products for a categoryget_amazon_bestseller_categories — best seller category listget_amazon_categories — root category taxonomyget_amazon_category — category details with products and subcategoriesget_amazon_seller — seller information and product listingsget_amazon_author — author information and book listingsget_amazon_asin_from_gtin — ASIN lookup by ISBN/UPC/EANget_amazon_gtin_from_asin — GTIN lookup by ASINcanopy-api-mcp/
├── src/
│ ├── tools/ # one file per tool (auto-discovered by xmcp)
│ │ ├── get-amazon-product.ts
│ │ └── ...
│ ├── lib/
│ │ └── api-key.ts # reads API key from extra.authInfo
│ ├── middleware.ts # auth middleware (lifts header → authInfo.token)
│ ├── api-client.ts # type-safe Canopy REST client
│ └── types/
│ └── api.d.ts # generated from OpenAPI
├── xmcp.config.ts # xmcp config (endpoint, CORS, paths)
├── wrangler.jsonc # Cloudflare Workers config
├── tsconfig.json
└── package.json
src/types/api.d.ts is generated from the Canopy OpenAPI spec. Regenerate when the API changes:
npm run generate
npm run dev — xmcp watcher + wrangler dev (local Workers runtime)npm run build — xmcp build --cf (emits worker.js for Cloudflare)npm run deploy — build + wrangler deploy --env productionnpm run delete — remove the deployed Workernpm run generate — regenerate API types from the OpenAPI specv2.0 replaces ModelFetch with xmcp. The MCP endpoint moved from /sse/mcp (deprecated SSE transport mount) to /mcp (current Streamable HTTP convention). Update any clients accordingly.
This listing does not have a supported local package template. Use the maintainer’s documentation for its hosted endpoint, authentication, and client-specific setup. No install command has been inferred.