A catalogue search behind an agent fails in a specific way: the model invents a plausible filter value, the API matches nothing, and the empty result reads as 'no such products exist' rather than 'that is not a token we use'. get_values, get_categories and get_countries are the fix, and spending half the tool surface on them is a deliberate trade. refine_search is the other considered piece — it carries the parsed intent forward instead of re-deriving it, so a follow-up narrows the search you actually ran rather than a fresh interpretation of the original sentence. Coverage is limited to Canada and the USA.
A search client for OriginSelect's curated catalogue, with six tools: two searches, one refinement, and three that enumerate the values you are allowed to filter on.
- search_products and search_brands take the same filters — country of origin, ethical values, category, brand and price — and return products or the brands behind them.
- refine_search takes the intent object from a previous search and applies changes to it, so narrowing a result does not re-parse the original question.
- get_values, get_categories and get_countries return the canonical tokens the filters accept, which is what stops a filter from silently matching nothing.
- Country coverage is Canada and the USA, stated by get_countries rather than left to be discovered.
Nothing to supply — npx runs it with no credentials. Running from source instead lets you point it at a different API host.
One command — npx originselect-mcp-server
