# Amazon MCP

> Amazon search in 22 country stores, cross-store price comparison, one product's offers, all in PLN.

- name: ai.wondel/amazon
- version: 1.0.0
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 87/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.wondel%2Famazon
- tools: https://api.protogrid.dev/v1/servers/ai.wondel%2Famazon/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "amazon": {
      "type": "http",
      "url": "https://mcp.wondel.ai/amazon/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-98% +updated-12d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 87/100 (good)

### protocol: 100 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- pass `protocol.list_ttl`: tool list is cacheable (ttlMs 3600000)

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 69 (weight 30)

- pass `tools.descriptions`: every tool has a description
- warn `tools.description_length`: 3 tools have descriptions over 1,024 characters, which crowds the context
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: amazon_product (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); amazon_search (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); amazon_marketplaces (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 3,336 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump
- pass `tools.hidden_text`: no hidden text in tool names, descriptions, schemas or annotations

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name
- pass `stability.new_links`: no tool change named a new site

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 4, about 3,336 tokens to load them all
- tool set hash: 12875f149810297a251c8c6820ebaf34
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.wondel/amazon.svg)](https://protogrid.dev/servers/ai.wondel/amazon)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.wondel.ai/amazon/mcp (streamable-http, auth none, reachable true, uptime30d 0.9787234)

## Packages

_none_

## Tools (4)

- `amazon_compare`: Run one query on several Amazon stores in parallel (default pl, de, fr, it, es, nl; at most 10) and merge the results in PLN — the cheapest first by default. Costs one SerpAPI credit PER STORE (6 by default). By default foreign stores are asked to deliver to Poland (shipping_location 'PL'): they list only items they ship here, with the delivery cost in `delivery`, and usually print prices already in PLN (Amazon's conversion, Polish VAT) — shipping is never included in price_pln. shipping_location 'local' compares each store as its own customers see it (NBP-converted, no delivery guarantee). Identical ASINs across stores are grouped in `asin_matches` with each store's price and the cheapest one — the reliable way to compare the exact same product. Use a precise query (brand + model) and min_price_pln to keep accessories out of a price-sorted list. Result shape: { source, fetchedAt, query, marketplaces: [{ marketplace, country, currency, status ('ok' | 'no_results' | 'error'), total_results, count, search_url, error? }], count, products: [...], asin_matches?: [{ asin, title, offers: [{ marketplace, price, currency, price_pln, url }], cheapest: { marketplace, price_pln }, spread_pln }], fx: [...], note } — the list key is `products`; each product is { marketplace, position, asin, title, brand?, url, image?, price, price_text, currency, price_pln, old_price?, discount_percent?, rating, reviews, bought_last_month?, prime?, sponsored, delivery?, stock? }. A store that fails or finds nothing is reported in `marketplaces`, not as an error.
- `amazon_marketplaces`: List the 22 Amazon stores the other amazon_* tools support — code, domain, country, currency, the NBP table its currency converts with, default and available languages, and whether it is in the EU (no customs to Poland). Static and free: call it to pick marketplaces without guessing.
- `amazon_product`: Full details of one Amazon product by ASIN (or product URL — its store is used unless marketplace says otherwise) via SerpAPI's amazon_product engine; one credit, ~10–25 s. Returns every offer with PLN prices — the main price, each purchase option (new/used/…), other sellers — and the cheapest new one, plus variants (each with its own ASIN), rating histogram, specifications, bullet points, category path and a few top reviews. The same ASIN can be looked up on another store (ASINs are mostly shared across EU stores). Result shape: { source, fetchedAt, query, marketplace, asin, title, brand?, url, categories?, images?, rating, reviews, rating_histogram?: { '5': pct, … }, reviews_summary?, bought_last_month?, price, price_text, currency, price_pln, max_price?, old_price?, discount_percent?, coupons?, promotions?, delivery?, stock?, purchase_options?: [{ type, price, currency, price_pln, stock?, delivery?, features? }], other_sellers?: [{ sold_by, ship_from, price, currency, price_pln, delivery?, seller_rating?, seller_reviews?, seller_feedback? }], cheapest_offer?: { source, seller?, price_pln }, variants?: [{ dimension, options: [{ asin, name, selected? }] }], about_item?, specifications?, details?, top_reviews?, fx, note? }.
- `amazon_search`: Search one Amazon store (22 countries; default amazon.pl) via SerpAPI, with every price also in PLN at the official NBP mid rate. Costs one SerpAPI credit per call (a repeat within 5 minutes is cached and free). Refine with sort, page, min_price/max_price (store currency; enforced on the displayed price), brand, category_node, min_rating/min_reviews (applied to the returned page), include_sponsored, and any refinement Amazon offers on that page via `rh`: the result's `filters` lists each option's rh (Prime, 4★ & up, New condition, sold by Amazon, deals, features…) — pass them comma-separated. A store printing PLN itself (shipping_location 'PL' on a foreign store) is taken as-is. Use amazon_compare for several stores at once and amazon_product for one ASIN's offers, sellers and specs. Result shape: { source, fetchedAt, query, marketplace: { code, domain, country, currency, language }, search_url, total_results (Amazon's own count, before this page's post-filters), query_displayed?, page, next_page, count, products: [...], filters?: { <group>: [{ name, rh }] }, categories?: [{ name, node }], related_searches?, fx: [{ currency, rate, table, table_no, effective_date, source: 'NBP' }], note? } — the list key is `products`. Each product: { position, asin, title, brand?, url (https://www.<store>/dp/<ASIN>), image?, price (number, in `currency`), price_text (as displayed), currency (ISO, read from the displayed price), price_pln, old_price?, discount_percent?, rating, reviews, bought_last_month?, prime? (only stores that mark it), sponsored, badges?, delivery?, stock?, coupon?, offers?, more_buying_choices?, variants?: [{ asin, title }], purchase_options? }. price_pln is null when there is no price or no NBP rate (the note says why). A search Amazon answers with nothing is count: 0 plus a note on what to relax — a successful result, not an error.
