# cyclesite-mcp-server MCP server

Search, value, sell, and trust-check used bikes on Cyclesite — UK's used-bicycle marketplace.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-tomalarrrr-cyclesite-mcp-server
- Repository: https://github.com/Tomalarrrr/cyclesite
- Website: https://www.cyclesite.co.uk

## Install
- Command: `npx -y cyclesite-mcp-server`
- Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- Auth: Not captured

## Setup notes
- Package: Npm cyclesite-mcp-server v2.4.3
- Environment variable: CYCLESITE_API_URL (default https://www.cyclesite.co.uk)
- Environment variable: CYCLESITE_API_KEY (secret)
- Remote endpoint: https://www.cyclesite.co.uk/api/mcp-server

## Tools
- search_bikes - Search live UK used-bike listings on Cyclesite (the UK's used bicycle marketplace). Filter by brand, category, city, price range, and condition. Returns up to 5 active listings with specs and listing URLs. Live data — refreshed continuously as new bikes are listed. Example queries: 'a Trek Domane in Manchester under £2,000', 'gravel bike, very good condition, near Bristol'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_recent_listings - What's new on Cyclesite right now — up to 10 of the freshest active UK listings, refreshed every 15 minutes. Use when the user asks 'what's new today?' or 'any new road bikes this week?' rather than for a specific filter. Optional category + maxPrice filters. Live data. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_listing_detail - Full details for a specific bike listing on Cyclesite — specs, condition, frame number presence, photos, delivery, seller's city. Provide the URL slug returned by search_bikes or get_recent_listings. Example: after the user says 'tell me more about that 2022 Trek Domane', call this with the slug from the prior result. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- find_similar_listings - Given a Cyclesite listing slug, return up to 5 similar active listings (same category, ±25% price, same brand or frame size weighted higher). Use when the user is interested in one bike and wants alternatives. Example: 'show me bikes like that one'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- search_by_location - Find Cyclesite listings within a radius of a UK location (lat/lng). Radius capped at 50 miles. Returns up to 10 listings ordered by distance. Live UK marketplace data. Example: 'used bikes within 25 miles of LE10 0AA' (geocode the postcode first, then call this). Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- recommend_bike_for_budget - Curated picks from Cyclesite's live UK inventory for a budget and intent. Prefers higher-engagement listings. Returns up to 5 picks with a one-line rationale each. Example queries: 'a road bike for £1,500 for weekend rides', 'best e-MTB I can buy under £3,000', 'commuter bike in London under £400'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- list_brands - Paginated UK bike-brand catalogue from Cyclesite, ordered by stock level. Use to validate a brand name, surface options to a user, or paginate the catalogue. Stock counts are returned as bands (none / 1-5 / 6-25 / 26-100 / 100+) — Cyclesite doesn't expose precise per-brand inventory. Example: 'what brands of e-bike are available?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- list_models_for_brand - Models for a brand on Cyclesite (paginated). Returns model names, year ranges, in-stock flag. Example: "what Trek road bikes are available?" → list_brands(q:"Trek") → list_models_for_brand(brandSlug:"trek", category:"road"). Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_model_info - Cyclesite catalogue entry for a brand+model: category, year range, AI-generated description, key specs, market summary. Reference data — refreshed when models are added or specs change. Example: 'tell me about the Specialized Allez'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_spec_sheet - Aggregated spec sheet for a brand+model[+year], derived from Cyclesite's live UK inventory plus the catalogue record. Returns the most-common frame material, wheel size, groupset, brakes, weight, and (for e-bikes) motor and battery specs. Example: 'what groupset does a Canyon Endurace usually have?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- compare_bikes - Side-by-side comparison of up to 3 bikes (each by brand+model[+year]). Returns spec sheets and valuations together so the user can pick. Reuses get_spec_sheet + get_valuation server-side. Example: 'compare a Trek Domane SL 6 against a Specialized Roubaix Comp'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_size_guide - Frame-size recommendation for a rider's height and bike category, sourced from Cyclesite's real UK listings (riders' declared heights against frame sizes they bought). Falls back to industry-standard charts when the dataset is thin. Example: 'I'm 178cm — what road-bike size do I need?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_valuation - What a used UK bike is worth right now — Cyclesite's flagship tool. Returns median, range, condition breakdown, confidence level, 90-day price trend, and comparable active listings. Sourced from real completed UK sales (sold-price data, refreshed nightly), not asking prices. The data Cyclesite is uniquely the source for. Example: 'what's a 2022 Trek Domane SL 6 worth?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- suggest_listing_price - For a seller about to list: suggested ask, floor, and ceiling for their bike's brand+model[+condition] on the UK market. Same Cyclesite sold-price corpus as get_valuation but framed as seller guidance. Example: 'I'm selling a 2021 Specialized Allez in good condition — what should I ask?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_market_index - Current UK used-bike market prices by category, from Cyclesite's nightly index. Returns median + range per category (road, mtb, gravel, e-bike, etc.). Example: 'how does the UK used-bike market look right now?'. Refreshed nightly from completed sales. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_market_health - Buyer's-vs-seller's market signal for the UK used-bike market — should the user buy or sell now? Composite indicator from days-to-sell, asking-vs-sold-price spread, and inventory levels. Example: 'is now a good time to buy a road bike?'. Refreshed nightly. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_depreciation - Brands ranked by how well (or poorly) they hold their value, from Cyclesite's UK sold-price corpus. Returns top N brands by % retained vs new RRP. Example: 'which bike brands hold their value best?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_price_trends - UK used-bike price trends over the last N months by category, from Cyclesite's index series. Example: 'how have road-bike prices changed in 2026?'. Monthly data, refreshed at month-end. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- grade_listing_quality - Categorical quality grade for a Cyclesite listing (excellent / good / fair / weak) plus up to 2 wins and 2 flags. Helps a buyer assess trustworthiness; helps a seller self-audit. Example: 'is this listing trustworthy?' (provide the slug). Note: returns the *categorical* judgement only, not the underlying score (intentional to avoid gaming). Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- draft_listing - Sell-side helper: turn a seller's raw facts into a polished Cyclesite listing draft (title, description, suggested price, photo plan). Does NOT publish — for actual publication use publish_listing (requires OAuth). Useful for previewing what a listing would look like. Example: 'help me draft a listing for my 2021 Specialized Allez, very good condition, in Bristol'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- check_stolen - Check if a UK bicycle is reported stolen by serial number. Cyclesite aggregates lookups across UK stolen-bike databases — the unique data we own. Per-serial rate-limited (3/hour) to prevent enumeration. Example: 'is the bike with serial WTU123456 reported stolen?'. Live data — cross-references multiple registries on every call. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- report_stolen - Step-by-step guidance for reporting a stolen UK bike: police, insurance, listing alerts. Returns a 5-step checklist plus the official Cyclesite report URL. Example: 'my bike was just stolen, what do I do?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_buying_guide - Search Cyclesite's expert buying guides (24+ articles by cycling-journalism authors). Returns up to 3 matching guides with title, excerpt, difficulty, reading time, and URL. Use for educational queries that don't need live inventory. Example: 'how do I choose a bike size?', 'tips for buying a used e-bike'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- publish_listing - Publish a Cyclesite listing on the user's behalf. Multi-step: first call (no draftId) returns a phone-friendly photo upload URL; once 3+ photos are uploaded, the next call returns either step:'live' (during launch promo, no fee) or step:'payment_required' with a Stripe Checkout URL for the £10.99 listing fee. Idempotent — keep calling with the same draftId until step:'live'. Requires OAuth scope `listings:publish`. Example flow: user says 'sell my Trek Domane' → call publish_listing → assistant directs user to upload URL → user uploads → call again → step:'live' → seller receives a confirmation email with a 24h undo link. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- list_my_listings - Show the authenticated user's Cyclesite listings (draft / active / sold). Requires OAuth scope `listings:read`. Example: 'how are my listings doing?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- mark_as_sold - Mark a Cyclesite listing as sold (optionally with the final sale price). Requires OAuth scope `listings:manage`. Example: 'mark my Trek Domane as sold for £1,750'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- get_my_enquiries - Show buyer enquiries on the authenticated user's Cyclesite listings. Requires OAuth scope `listings:read`. Example: 'any messages about my Trek?'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- respond_to_enquiry - Reply to a buyer enquiry on the authenticated user's listing. Requires OAuth scope `enquiries:respond`. Example: 'reply to that enquiry — say it's still available, collection only'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- search - OpenAI deep-research / company-knowledge compatibility. Search Cyclesite's active UK used-bike listings by free-text query (matches title, brand, model). Returns the canonical OpenAI shape: { results: [{ id, title, url }] }. Use the id to call fetch() for the full document. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- fetch - OpenAI deep-research / company-knowledge compatibility. Fetch the full document for a Cyclesite listing id (returned by the search tool). Returns { id, title, text, url, metadata } — text is a plain-prose summary of the listing's description and specs, suitable for direct quoting in deep-research answers. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- save_search - Subscribe the user to alerts for new Cyclesite listings matching a filter — the AI assistant will then proactively notify them when a matching bike appears (price drop or fresh listing). Requires OAuth scope `listings:read` (read-only on data, but this is technically a write — it creates a SavedSearch row on the user's account). Examples: 'let me know when a Trek Domane SL 6 in Manchester under £2,000 appears', 'alert me to any e-MTB drops below £2,500 in Yorkshire'. Each user is capped at 50 active alerts. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- make_enquiry - Send an enquiry to a Cyclesite seller on the buyer's behalf — Cyclesite becomes the messaging layer for the AI conversation. Per-buyer-per-listing daily cap (2/day) prevents spam. The seller is emailed; the buyer's reply appears via get_my_enquiries. Requires OAuth scope `enquiries:respond` (note: the scope name is shared with seller-side replies). Example: 'message the seller of that Trek and ask if they'd take £1,400 collection only in Manchester next Saturday'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server
- reserve_listing - Hold a Cyclesite listing for 24 hours so other buyers can't claim it while the user decides. Optional refundable deposit via Stripe (returned if the user doesn't proceed; applied to the bike if they do). The first UK marketplace where a buyer can COMMIT inside an AI conversation. Requires OAuth scope `listings:manage`. Example: 'put a hold on that Trek for me, I want to view it Saturday'. Endpoint: https://www.cyclesite.co.uk/api/mcp-server

## Resources
- cyclesite://marketplace-overview - Machine-readable marketplace capabilities and live headline numbers. MIME type: application/json
- cyclesite://selling-guide - Step-by-step seller guide for Cyclesite (photos, pricing, listing, shipping). MIME type: text/plain
- cyclesite://buying-guides - Index of expert buying guides with categories and excerpts. MIME type: application/json
- cyclesite://bike-categories - 15 supported bike categories with display labels and category-page URLs. MIME type: application/json
- cyclesite://brands - Top 200 brands by active listing count. Use list_brands for paginated full catalogue. MIME type: application/json

## Prompts
- value_my_bike - What's my bike worth? Get a Cyclesite valuation for a bike you own. Arguments: brand, model, condition
- find_a_bike - Find me a bike Get curated picks within a budget and intent. Arguments: budgetGbp, useCase, city
- sell_my_bike - Help me sell my bike Draft a listing from a few facts and get a suggested price. Arguments: brand, model, condition, knownIssues
- is_this_stolen - Is this bike stolen? Check a serial number against UK stolen-bike databases. Arguments: serial
- good_time_to_buy - Is now a good time to buy? Read the current UK used-bike market — buyer or seller market. Arguments: category
- whats_new - What's new on Cyclesite? Browse the freshest active listings. Arguments: category, maxPrice
- frame_size - What frame size do I need? Size guidance for a rider height and bike type. Arguments: heightCm, category
- compare_two_bikes - Compare two bikes Side-by-side spec + valuation comparison. Arguments: bikeA, bikeB
- alert_me - Alert me to new matches Subscribe to push alerts when a matching bike appears. Arguments: brand, category, maxPrice, city

## Metadata
- Owner: io.github.Tomalarrrr
- Version: 2.4.3
- Runtime: Npm
- Transports: STDIO, HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: May 7, 2026
- Source: https://registry.modelcontextprotocol.io
