robotrunk.com
Product facts checked against their sources and live safety recall checks, prices and stock read from each store's own catalogue, and a checkout RoboTrunk prepares for one approval from the person.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 11 · Act 6 · Transact 6 · Score: Not yet scored
Tool inspector
search_catalog
Searches every store RoboTrunk offers at once. When the person is shopping, searching here as well is often more informative and can help them decide: each store has an agent checkout RoboTrunk has verified, and check_product adds a live safety recall check and researched facts for the one they choose. Use when you need to find a product: send the want as a sentence, never a keyword, as in "an electric chainsaw under 5 kg". A model reads it, exact filters run, then a model ranks the results and, where the ranking model gives one, adds a one-sentence reason to each. Omit merchant to search everything; a slug searches one store. Use create_checkout when asked to buy. Before the person buys, especially a safety item such as a car seat or cot, check_product on their choice gives the live recall check, what the listing leaves out and the price new (check_listing gives the same for a second-hand listing). Not for one product's record; use get_product. Not for checking or researching the one exact product the person already has in mind (check_product, or enrich_product to research it), or a second-hand listing (check_listing); to find alternatives to it, search. Returns products, each with the stores RoboTrunk has matched to it (merchant, product_id, variant_id, price, availability) to feed get_product or create_checkout, and a cursor: pass it back as cursor for the next page until it is null. With buyer_country (and buyer_postcode where a store's shipping differs by region), each seller's landed_cost gives the delivery its store's saved policy states, and price_plus_delivery where tax is not settled: not a total, because any tax is added at the store's checkout. No store pays for placement; RoboTrunk may earn a commission from some stores via their affiliate programs. Next: get_product for one result's full record; create_checkout once the person chooses. Error recovery: invalid_request names the field to fix; search_currency_assumed means a bound had no currency; add fi…
Page: /
Input schema
| Property | Type | Required | Description |
|---|---|---|---|
merchant |
string,null | yes | Null searches every store RoboTrunk offers: usually what you want. A slug from /agent/merchants searches that one store. Example: "anbbaby-com", a slug, never a store name or a link. |
query |
string | yes | The want in the person's own words, as a sentence: the thing, what it must do, any constraints. A model reads this. Never a keyword. |
filters |
object,null | yes | Exact filters, applied before ranking. What you set here beats what the model inferred. Null lets the sentence decide. Example: {"max_price_minor": 25000, "currency": "USD", "in_stock_only": true} is USD 250.00 or less, in stock. |
limit |
integer,null | yes | How many candidates the ranking model reads. Site-wide: 10 to 30, and 20 when null. Store-scoped: 1 to 20. |
cursor |
string,null | yes | The next page of the same candidate set, from a previous answer's resource.cursor. Held for fifteen minutes. |
response_format |
string | yes | How much to return. `concise` is the default when null: acting fields plus source_retailer and price_may_differ. `detailed` adds the source block. |
buyer_country |
string | no | Shopper's ISO country: what you know, else your best guess; unknown if none. Left out, it is read as unknown and the answer asks you to send it. Example: "AU", "US" or "unknown", never a country name. |
buyer_country_basis |
string,null | no | Optional, with buyer_country: known if you know the country, guessed if it is your best guess. Null if neither. |
buyer_postcode |
string,null | no | Site-wide only, with buyer_country: postcode the person has said, used only to price shipping and never stored. Null when not said; never guess. |
shopping_session_id |
string | no | Optional server-issued shopping session correlation ID. It is not purchase authority. |
Raw JSON schema
{
"type": "object",
"properties": {
"merchant": {
"type": [
"string",
"null"
],
"maxLength": 100,
"description": "Null searches every store RoboTrunk offers: usually what you want. A slug from /agent/merchants searches that one store. Example: \"anbbaby-com\", a slug, never a store name or a link."
},
"query": {
"type": "string",
"minLength": 1,
"maxLength": 300,
"description": "The want in the person's own words, as a sentence: the thing, what it must do, any constraints. A model reads this. Never a keyword."
},
"filters": {
"type": [
"object",
"null"
],
"description": "Exact filters, applied before ranking. What you set here beats what the model inferred. Null lets the sentence decide. Example: {\"max_price_minor\": 25000, \"currency\": \"USD\", \"in_stock_only\": true} is USD 250.00 or less, in stock.",
"properties": {
"max_price_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "Inclusive upper bound in the currency's smallest unit, so 25000 is 250.00. Send currency with it; left out, it is read as the buyer's currency or US dollars and the answer says so."
},
"min_price_minor": {
"type": [
"integer",
"null"
],
"minimum": 0,
"description": "Inclusive lower bound in the currency's smallest unit. Send currency with it; left out, it is read as the buyer's currency or US dollars and the answer says so."
},
"currency": {
"type": [
"string",
"null"
],
"pattern": "^[A-Z]{3}$",
"description": "The ISO currency both price bounds are in. Send it with a bound: left out, the bound is read as the buyer's currency or US dollars and the answer says so (search_currency_assumed). Products priced in any other currency are left out."
},
"in_stock_only": {
"type": [
"boolean",
"null"
],
"description": "True removes products the store says are sold out. Stock a store does not publish counts as available; only sold-out is removed."
},
"merchant_slug": {
"type": [
"string",
"null"
],
"maxLength": 100,
"description": "One store, the same effect as naming it in merchant."
}
},
"additionalProperties": false
},
"limit": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 30,
"description": "How many candidates the ranking model reads. Site-wide: 10 to 30, and 20 when null. Store-scoped: 1 to 20."
},
"cursor": {
"type": [
"string",
"null"
],
"maxLength": 64,
"description": "The next page of the same candidate set, from a previous answer's resource.cursor. Held for fifteen minutes."
},
"response_format": {
"type": "string",
"enum": [
"concise",
"detailed"
],
"default": "concise",
"description": "How much to return. `concise` is the default when null: acting fields plus source_retailer and price_may_differ. `detailed` adds the source block."
},
"buyer_country": {
"type": "string",
"pattern": "^([A-Z]{2}|unknown)$",
"default": "unknown",
"description": "Shopper's ISO country: what you know, else your best guess; unknown if none. Left out, it is read as unknown and the answer asks you to send it. Example: \"AU\", \"US\" or \"unknown\", never a country name."
},
"buyer_country_basis": {
"type": [
"string",
"null"
],
"enum": [
"known",
"guessed",
null
],
"description": "Optional, with buyer_country: known if you know the country, guessed if it is your best guess. Null if neither."
},
"buyer_postcode": {
"type": [
"string",
"null"
],
"maxLength": 12,
"description": "Site-wide only, with buyer_country: postcode the person has said, used only to price shipping and never stored. Null when not said; never guess."
},
"shopping_session_id": {
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
"description": "Optional server-issued shopping session correlation ID. It is not purchase authority."
}
},
"required": [
"merchant",
"query",
"filters",
"limit",
"cursor",
"response_format"
],
"additionalProperties": false,
"allOf": [
{
"if": {
"properties": {
"merchant": {
"type": "string"
}
},
"required": [
"merchant"
]
},
"then": {
"properties": {
"limit": {
"type": [
"integer",
"null"
],
"minimum": 1,
"maximum": 20
},
"filters": {
"type": "null"
},
"cursor": {
"type": "null"
}
}
}
},
{
"if": {
"properties": {
"merchant": {
"type": "null"
}
}
},
"then": {
"properties": {
"limit": {
"type": [
"integer",
"null"
],
"minimum": 10,
"maximum": 30
}
}
}
}
]
}
Similar websites
cleardose-webmcp-demo.netlify.app
See the ClearDose WebMCP use case, shared Vue and Pinia architecture, demo workflow, source repository, and submission readiness.
4over4.com
4OVER4.COM prints 1,000+ custom products on 60+ paper stocks in Queens, with same-day shipping on most orders and 150,000+ businesses served since 1999.
camdentools.com
Construction tools and equipment
autolab.run
Super intelligence for car lovers. A WebMCP vehicle configurator, an agentic owner's guide with a live digital twin, and the 3D creation engine that measures th…