Reference for every Gridscoot MCP tool — inputs, outputs, example calls, and the error modes worth handling.
Overview
The Gridscoot MCP server publishes seven tools — six price-discovery tools (parity with best-in-class aggregators per ADR-0006) and one novel alternatives engine (find_alternatives, Phase 14.4). Each is documented below with its input schema, output schema, and an example call. Schemas are returned by the live server’s tools/list response in the canonical machine-readable form; this page is the human-readable companion.
The free tier (60 requests / minute, anonymous) covers six of the seven tools. find_alternatives requires a Bearer key (no demo tier — the alternatives engine is heavier per request than search and the cost would be prohibitive to expose anonymously). Authenticated tiers raise the rate limit on all tools and unlock track_price's alert subscription.
search_products
Search the deduped catalogue by free-text query, with optional price + retailer + GTIN filters.
Given a baseline product (the user’s current pick) + a buyer country, return the qualifying equal-or-better alternatives ranked by delivered total. Phase 14.4 addition, extended in Phase 14.4.1a (DB-lookup mode); the surface is novel — no other DACH/AU/EU aggregator exposes a strict meets-or-exceeds + cross-border delivered-total comparison via a typed agent surface. Use aftersearch_products when you want to evaluate a baseline against alternatives, either with your own candidate set (inline mode) or against the Gridscoot catalog (DB-lookup mode).
Two input modes
Inline mode (Phase 14.4 default). You pass baseline + candidates[] + the usual options. Use when you already have a candidate set in hand — e.g. you ran search_products and curated the results to a same-category subset.
DB-lookup mode (Phase 14.4.1a). You pass baselineProductId + buyerCountry (+ optional categorySchemaSlug / maxCandidates). The server resolves both the baseline and same-category candidates from the catalog itself, synthesises shipping / OSS where data is missing, and discloses what was synthesised on the response under catalogResolution.synthesizedFields[]. Massively simpler agent payload — ~5 lines vs a 50+ line inline payload.
Server-enforced invariants
List price only. Vouchers, promo codes, loyalty pricing — never read. Pass the catalogue list price (incl. seller-country VAT, the EU B2C-published shape) on listPriceInclSellerVat.
Strict meets-or-exceeds. Every declared baseline spec is a hard floor. IP67 ≠ IP69; IP68 fails an IP69 baseline. Numeric specs honour lowerIsBetter (e.g. accuracy_celsius: ±0.1°C beats ±0.5°C).
Honest unknowns. Undeclared candidate specs disqualify with a spec_unknown reason. We refuse to assume.
Cross-border VAT differential. Delivered total is computed as list_price + cheapest_ship_to_buyer + vat_diff under EU OSS rules. A €59.99 (DE 19%) list price delivered to HU (27%) becomes ~€64.02 — the differential is real and you should never compare bare list prices across borders.
Ranking (ADR-0007)
Default trustWeight=0 sorts by delivered total ascending — pure cheapest. Opt-in trustWeight ∈ (0,1] blends in a merchant trust_score with the formula weighted = (1 - tw) × price_score + tw × trust_score. Both the formula and the per-candidate inputs travel back in the response. See /rankings for the full algorithm disclosure.
{
"baseline": {
"id": "amazon-de:B0F3X7M2LM",
"deliveredTotal": 92.91,
"deliveredCurrency": "EUR",
"breakdown": {
"listPriceInclSellerVat": 87.13,
"sellerCountryVatPct": 19,
"buyerCountryVatPct": 27,
"shippingMajor": 0,
"vatDifferentialMajor": 5.78
}
},
"alternatives": [
// qualifying candidates, sorted by ranking policy
// each row has: id, displayName, deliveredTotal, breakdown,
// matchedSpecs[], trustScore (when trustWeight > 0)
],
"skipped": [
{
"id": "amazon-de:B0BW8B6LDG",
"reason": "spec_below_floor",
"detail": "ip_rating=IP67 < baseline IP69"
}
// ... one row per candidate that failed
],
"surveyedCount": 3,
"rankingPolicy": {
"trustWeight": 0,
"formula": "sort by deliveredTotal ascending (pure-cheapest default per ADR-0007)"
},
"honestEmpty": true, // true when zero candidates qualified
"honestEmptyReason": "Of 3 surveyed, 3 skipped. No candidate meets-or-exceeds every declared baseline spec while shipping to HU.",
// Only present in DB-lookup mode — discloses what was real catalog
// data vs best-effort synthesis (because the catalog doesn't yet
// store multi-carrier shipping or per-retailer OSS status):
"catalogResolution": {
"baselineProductId": 1,
"resolvedCategorySchemaSlug": "kitchen-appliances/meat-thermometer",
"synthesizedFields": ["sellerOssStatus", "shippingQuotes"],
"surveyedProductCount": 2,
"notes": [
"shippingQuotes synthesised from single offers.shipping_cents per offer...",
"sellerOssStatus best-effort: known large EU sellers hard-coded; otherwise 'unknown'."
]
}
}
Category schemas
The categorySchemaSlug field selects which spec keys are treated as required hard floors. Registered slugs: kitchen-appliances/blender, kitchen-appliances/meat-thermometer, garden/hose, household/kids-sprinkler, household/cabinet-hardware/knob, energy-rated-appliance, tyre, wine, cosmetic, pharma.
Common errors
Errors follow JSON-RPC convention. The top-level shape: