Amazon
Amazon in 22 country stores, live via SerpAPI, with every price also converted to PLN. Search one store with amazon_search, or run the same query on several stores at once with amazon_compare, which groups identical ASINs into asin_matches so you can see one product’s price store by store and pick the cheapest. amazon_product pulls one ASIN’s full listing — every purchase option, other sellers, variants and rating histogram. Because a foreign store often prints its own PLN conversion when asked to ship to Poland, each price’s currency is read from what’s actually displayed, not assumed from the store, and the National Bank of Poland’s official rate only fills in the rest.
Thirty seconds, any client.
claude mcp add --transport http amazon https://mcp.wondel.ai/amazon/mcp One command in your terminal — the server is available in every Claude Code session.
https://mcp.wondel.ai/amazon/mcp Works on every Claude plan that supports custom connectors.
{
"mcpServers": {
"amazon": {
"url": "https://mcp.wondel.ai/amazon/mcp"
}
}
} Add to .cursor/mcp.json, VS Code's mcp.json, or any client that takes an mcpServers map.
npx mcp-remote https://mcp.wondel.ai/amazon/mcp For stdio-only clients: mcp-remote bridges the remote endpoint to a local process. Streamable HTTP-capable clients can hit the URL directly.
This server works with Claude, Claude Code, Claude Desktop, Claude Cowork, Cursor, VS Code, Windsurf — and any other MCP client. Stdio-only clients connect through npx mcp-remote.
4 tools, fully typed.
Parameters below are transcribed from the server’s own zod schemas — what you see is what the tool validates.
amazon_search Search one Amazon store (default amazon.pl) with Amazon’s own sort, price, brand, category and rating filters. Every price also comes back converted to PLN.
| Param | Type | Description |
|---|---|---|
| query | string | What you’d type in Amazon’s search box, e.g. 'sony wh-1000xm5'. Required unless category_node is set. |
| marketplace | string = pl | Amazon store: its code (pl, de, fr, it, es, nl, be, se, uk, tr, us, ca, mx, br, au, jp, in, cn, sg, ae, sa, eg) or domain (amazon.de, amazon.co.uk…). |
| language | string | Store language as <language>_<REGION>, e.g. 'en_GB' for English titles on amazon.de. Default: the store’s own (de_DE on amazon.de) — each store only offers a few (amazon_marketplaces lists them). |
| sort | enum = relevance | Amazon’s sort: relevance (Amazon’s "Featured"), price_asc, price_desc, rating (avg. customer review), newest, bestsellers. relevanceprice_ascprice_descratingnewestbestsellers |
| page | integer = 1 | Result page, 1–20. |
| min_price | number | Lowest price in the STORE’s currency (EUR on amazon.de), applied by Amazon. |
| max_price | number | Highest price in the store’s currency, applied by Amazon. |
| brand | string | One brand name as Amazon spells it, e.g. 'Sony' (Amazon’s brand filter). |
| category_node | string | Amazon browse-node id (digits) to search within — from a result’s `categories`, or node=… in an Amazon category URL. Ids differ per store. Without a query this browses the category. |
| rh | string | Amazon refinements, comma-separated key:value pairs exactly as a previous result’s `filters` list them (e.g. 'p_n_condition-type:776949031,p_72:419117031'). Ids are store-specific. |
| exclude_autocorrected | boolean = false | Drop results Amazon adds from an auto-corrected spelling of the query. |
| shipping_location | string = local | Deliver-to country as an ISO code, e.g. 'PL': a foreign store then lists only items it delivers there, adds delivery cost to `delivery`, and usually prints prices already converted to PLN by Amazon (VAT of the destination). 'local' (or omitted) = the store’s own country. |
| delivery_zip | string | Delivery postal code within shipping_location’s country (or the store’s), e.g. '00-001'. |
| min_rating | number | Keep products rated at least this (0–5), filtered on the returned page. |
| min_reviews | integer | Keep products with at least this many ratings, filtered on the returned page. |
| include_sponsored | boolean = false | Keep sponsored slots (marked sponsored: true) — ads repeat and distort ranking. |
| include_filters | boolean = true | Return the page’s refinement `filters` (name + rh per option). |
| limit | integer = 20 | Max products returned (1–60). |
| convert_to_pln | boolean = true | Add price_pln at the NBP mid rate. |
| no_cache | boolean = false | Force a fresh fetch, bypassing this server’s 5-minute result cache. |
amazon_compare Run one query across up to 10 Amazon stores in parallel and merge them ranked by price in PLN, grouping identical ASINs so the same product’s price is compared store by store.
| Param | Type | Description |
|---|---|---|
| query * | string | Search query, ideally brand + model, e.g. 'sony wh-1000xm5'. |
| marketplaces | string[] = pl, de, fr, it, es, nl | Stores to compare, codes or domains (pl, de, fr, it, es, nl, be, se, uk, tr, us, ca, mx, br, au, jp, in, cn, sg, ae, sa, eg). At most 10 — one SerpAPI credit each. |
| order_by | enum = price_pln | Order of the merged list: price_pln (cheapest first, unpriced last), relevance (the stores’ own rankings interleaved) or rating. price_plnrelevancerating |
| sort | enum = relevance | Sort sent to every store. Amazon’s sort: relevance (Amazon’s "Featured"), price_asc, price_desc, rating, newest, bestsellers. relevanceprice_ascprice_descratingnewestbestsellers |
| min_price_pln | number | Lowest price in PLN: sent to each store in its currency (NBP rate, 10% slack) and enforced exactly on price_pln. |
| max_price_pln | number | Highest price in PLN, applied like min_price_pln. |
| brand | string | One brand name, e.g. 'Sony' (Amazon’s brand filter on every store). |
| min_rating | number | Keep products rated at least this (0–5). |
| min_reviews | integer | Keep products with at least this many ratings. |
| include_sponsored | boolean = false | Keep sponsored slots. |
| exclude_autocorrected | boolean = false | Drop results from an auto-corrected spelling of the query. |
| shipping_location | string = PL | Deliver-to country for the foreign stores. 'local' = each store’s own country (prices in its currency and VAT, delivery to Poland unchecked). |
| delivery_zip | string | Delivery postal code within shipping_location’s country (or the store’s), e.g. '00-001'. |
| limit_per_marketplace | integer = 10 | Max products kept per store (1–60). |
| limit | integer = 40 | Max products in the merged list (1–200). |
| match_asin | boolean = true | Group the same ASIN found on 2+ stores into asin_matches. |
| no_cache | boolean = false | Force a fresh fetch, bypassing this server’s 5-minute result cache. |
amazon_product Full details for one ASIN: main price, every purchase option, other sellers, variants and rating histogram — all converted to PLN.
| Param | Type | Description |
|---|---|---|
| asin * | string | ASIN (10 characters, e.g. 'B09Y2MYL5C', from an amazon_search result) or an Amazon product URL containing /dp/<ASIN>. |
| marketplace | string = pl | Amazon store: its code (pl, de, fr, it, es, nl, be, se, uk, tr, us, ca, mx, br, au, jp, in, cn, sg, ae, sa, eg) or domain (amazon.de, amazon.co.uk…). Overrides a URL’s own store — to look the ASIN up elsewhere. |
| language | string | Store language as <language>_<REGION>, e.g. 'en_GB' for English titles on amazon.de. Default: the store’s own (de_DE on amazon.de) — each store only offers a few (amazon_marketplaces lists them). |
| shipping_location | string = local | Deliver-to country as an ISO code, e.g. 'PL': a foreign store then lists only items it delivers there, adds delivery cost to `delivery`, and usually prints prices already converted to PLN by Amazon (VAT of the destination). 'local' (or omitted) = the store’s own country. |
| delivery_zip | string | Delivery postal code within shipping_location’s country (or the store’s), e.g. '00-001'. |
| other_sellers | boolean = true | Include the other sellers’ offers. |
| include_reviews | boolean = true | Include up to 3 top reviews (600 chars each). |
| convert_to_pln | boolean = true | Add price_pln at the NBP mid rate. |
| no_cache | boolean = false | Force a fresh fetch, bypassing this server’s 5-minute result cache. |
amazon_marketplaces List the 22 Amazon stores the other tools support — code, domain, country, currency, NBP table, languages and EU membership. Static and free.
| Param | Type | Description |
|---|
Prompts that just work.
Where is the Kindle Paperwhite cheapest across EU Amazons, in złoty?
amazon_compareSony WH-1000XM5 on amazon.de, delivered to Poland — what does it actually cost?
amazon_searchDetails and other sellers for ASIN B09Y2MYL5C on amazon.de.
amazon_productWhat comes back
amazon_compare · live response, captured 2026-09-29 from production, abridged
{
"source": "serpapi/amazon",
"fetchedAt": "2026-09-29T13:33:24.143Z",
"query": { "query": "kindle paperwhite", "marketplaces": ["amazon.pl", "amazon.de", "amazon.it"], "shipping_location": "PL", … },
"marketplaces": [
{ "marketplace": "amazon.pl", "country": "Poland", "currency": "PLN", "status": "ok", "total_results": 1622, "count": 5 },
{ "marketplace": "amazon.de", "country": "Germany", "currency": "EUR", "status": "ok", "total_results": 316, "count": 5 },
{ "marketplace": "amazon.it", "country": "Italy", "currency": "EUR", "status": "ok", "total_results": 15347, "count": 5 }
],
"count": 15,
"products": [
{
"marketplace": "amazon.de",
"asin": "B0CFPWLGF2",
"title": "Amazon Kindle Paperwhite (neueste Generation) – 16 GB – ohne Werbung – schwarz",
"price": 722.91,
"price_text": "722,91 PLN",
"currency": "PLN",
"price_pln": 722.91,
"old_price": 1016.64,
"discount_percent": 29,
"rating": 4.6,
"reviews": 17015,
"delivery": ["Lieferung für 26,19 PLN Fr., 2. Okt.", "Wird versendet nach Polen"]
},
…
],
"asin_matches": [
{
"asin": "B0CFPWLGF2",
"title": "Amazon Kindle Paperwhite (najnowsza generacja) – 16 GB – Czarny",
"offers": [
{ "marketplace": "amazon.de", "price": 722.91, "currency": "PLN", "price_pln": 722.91, "url": "https://www.amazon.de/dp/B0CFPWLGF2" },
{ "marketplace": "amazon.pl", "price": 969.99, "currency": "PLN", "price_pln": 969.99, "url": "https://www.amazon.pl/dp/B0CFPWLGF2" },
{ "marketplace": "amazon.it", "price": 224.99, "currency": "EUR", "price_pln": 983.84, "url": "https://www.amazon.it/dp/B0CFPWLGF2" }
],
"cheapest": { "marketplace": "amazon.de", "price_pln": 722.91 },
"spread_pln": 260.93
},
…
],
"fx": [
{ "currency": "EUR", "rate": 4.3728, "table": "A", "table_no": "189/A/NBP/2026", "effective_date": "2026-09-29", "source": "NBP" }
],
"note": "Foreign stores were asked to deliver to PL (shipping_location=PL): they list only items they deliver to Poland, and usually print prices already converted to PLN by Amazon (destination VAT included) — shipping costs are in `delivery`, not in price_pln."
}
Fetching tools share one envelope — source says where the data came from,
fetchedAt says when, query echoes what you asked.
asin_matches only appears from amazon_compare — amazon_search and amazon_product share the same envelope without the multi-store fields. Every store in amazon_compare costs one SerpAPI credit (a repeat call within 5 minutes is cached and free); amazon_product runs ~10–25 s.
Compact JSON in one text block, exactly how agents like it.
Add Amazon
to your agent.
mcp.wondel.ai/amazon/mcp Authless · Read-only public data · Streamable HTTP at /mcp