---
title: "Recommend bikes for a budget"
method: GET
path: "/api/mcp/recommend"
tags: ["MCP API"]
---

# Recommend bikes for a budget

`GET /api/mcp/recommend`

## Request

- Base URL: `https://www.cyclesite.co.uk`
- URL: `https://www.cyclesite.co.uk/api/mcp/recommend`
- Auth: none required

Curated picks for a budget + optional use-case, preferring higher-engagement listings and leaving ~10% budget headroom for shipping/accessories. Each pick carries a short plain-language rationale. No authentication required.

## Query parameters

- `budgetGbp` number, nullable: Buyer budget in GBP (max 50000)
- `category` string
- `useCase` string: Free-text intent, e.g. "commuting", "weekend road rides"
- `city` string
- `limit` number, nullable: Max picks (1-10, default 5)

## Response `200`

Recommended picks

- object
  - `attribution` string, required
  - `budgetGbp` number, required
  - `budgetUsed` number, required
  - `category` string, required
  - `picks` object[], required
    - `brand` string, nullable, required
    - `city` string, nullable, required
    - `condition` string, nullable, required
    - `delivery` string, nullable, required
    - `ebikeBatteryWh` number, nullable
    - `ebikeMotor` string, nullable
    - `frameMaterial` string, nullable, required
    - `frameSize` string, nullable, required
    - `groupset` string, nullable, required
    - `imageUrl` string, nullable, required
    - `isEbike` boolean, required
    - `model` string, nullable, required
    - `negotiable` boolean, nullable, required
    - `offer` object, required: UCP/Schema.org-shaped offer signal agents can read deterministically
      - `availability` 'in_stock', required
      - `itemCondition` 'new' | 'used', required
      - `price` number, nullable, required
      - `priceCurrency` 'GBP', required
    - `priceGbp` number, nullable, required
    - `title` string, required
    - `url` string, nullable, required
    - `wheelSize` string, nullable, required
    - `year` number, nullable, required
    - `rationale` string, required
  - `resultsCount` number, required
  - `useCase` string, nullable, required

## Other responses

- `429`: Rate limited

---

[API](https://skmtc.dev/cyclesite/apis/cyclesite-public-api.md) · [All operations](https://skmtc.dev/cyclesite/apis/cyclesite-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cyclesite/apis/cyclesite-public-api/revisions/a0dc604cce71?raw)
