Skip to main content
Glama

carsales-mcp

An MCP server that lets an AI assistant search and act on Australian car marketplaces: carsales.com.au, Gumtree and Facebook Marketplace. Built for opencode and any MCP client.

It drives one real, headed Camoufox browser (never headless) so it passes Cloudflare and is as hard as possible for DataDome to fingerprint.

WARNING

Use at your own risk. Automated access can get your carsales, Gumtree or Facebook account suspended or permanently banned, and may block your IP or phone number. Do not use a primary account. Keep a human in the loop (the built-in confirm flag) and verify each listing independently (PPSR, rego, VIN, inspection) before committing. Contacting sellers is real money and real people.

Install

npx camoufox-js fetch

The browser runs headed, so you can watch it. To have the AI drive it without seeing a window, use the offscreen launcher (starts a virtual display for you):

bash scripts/launch-offscreen.sh

On a no-display server, install Xvfb (once) and the launcher handles the rest.

If Camoufox fails to launch on Linux: npx playwright install-deps firefox.

Related MCP server: MarketCheck MCP Apps

Configure your MCP client

Add it to your opencode config (~/.config/opencode/opencode.jsonc):

{
  "mcp": {
    "carsales": {
      "type": "local",
      "command": ["bash", "/home/YOU/carsales-mcp/scripts/launch-offscreen.sh"],
      "enabled": true
    }
  }
}

Configuration

Everything is optional; the defaults work out of the box.

Variable

What it does

CARS_PROXY

Residential proxy, or a comma-separated list rotated per request. The most reliable fix for DataDome blocks.

CARS_DISPLAY

An X display such as :99 to run the browser offscreen (invisible). The launcher sets this for you.

CARS_WATCH_WEBHOOK

Push price drops, sold cars and new matches to ntfy, Discord or Slack.

CARAPIS_API_KEY

Use the Carapis carsales API for search instead of scraping (falls back to the browser).

CARS_HUMANIZE

1 (default) for human-like traversal, 0 to disable.

CARS_ENGINE

Reserved. Only Camoufox is used; custom builds go in CARS_CAMOUFOX_BINARY.

State files (all in ~/.carsales-mcp/, settable): CARS_COOKIE_FILE (cookies), CARS_SAVED_FILE (saved cars), CARS_WATCH_FILE (watches), CARS_PREFS_FILE (preferences), CARS_OFFERS_FILE (sent offers).

Tools

Search

  • search_cars search carsales by make, model, state, body, transmission, fuel, condition, postcode/radius, keyword, price/year/odometer, and sort. Also filters to good deals.

  • search_facebook_cars / search_gumtree_cars native search for those sites.

  • search_all_cars one call across all three, deduped, sorted cheapest first (use sort: "price_high" to reverse).

Inspect a listing

  • get_listing_details full details by id or URL, any site. Pass includeImages: true to get photos so a vision model can see the car (images are token-heavy).

  • compare_listings put 2 or 3 listings side by side.

  • price_insight free fair-price band from comparable carsales listings.

  • vehicle_review full buyer review in one call: photos plus reliability, market average and new-car comparison.

Save and track

  • save_listing save any listing locally (all sites) with a note, and try the site's own save control. list_saved, remove_saved manage them.

  • check_saved re-fetches saved cars and reports a price drop or a sold listing.

  • watch_search / watch_listing watch a query or a single listing. check_watch reports anything new or a price change.

Contact and trust

  • make_offer contact a seller or make an offer. Requires confirm: true and will never send the same offer twice.

  • check_inbox best-effort check of a site's message inbox for replies. These sites have no stable message API, so verify replies in your actual inbox.

  • check_vehicle free rego and written-off check. dealer_info seller reputation.

Session

  • open_browser open the shared browser to a login page; you log in by hand and the server keeps that session. auth_status reports login state for all three sites.

  • The server never types your password and has no cookie-paste tool.

Learn

  • remember_preference (filter, like, avoid, reject), get_preferences, clear_preferences. The server applies learned preferences automatically, for example "no rust" or a max price.

Export

  • export_csv dump a search to CSV, no external service.

Getting the best results

  • Narrow with real facets first (state, body, transmission, postcode) instead of stacking price or year ranges. Fewer, cleaner page loads mean fewer blocks.

  • Keep limit modest and enable includeImages only when the model needs photos.

  • The preference system encodes things like "no rust, dents are fine" so they auto-apply; always pass the reason when you record a preference or rejection.

Honest limits

  • DataDome can challenge after several requests from one IP. If a search reports a block, wait a couple of minutes or reduce page depth. A logged-in session with your own cookies reduces how often this happens.

  • Cheap used cars are old and high-Km; a per-make search returns few matches, so search several makes.

  • Facebook and Gumtree have no stable offer or messaging API, so make_offer and check_inbox are best-effort there. The local save and check_saved tracker is the reliable fallback and always works.

  • This scrapes public pages with a real browser. It uses no official carsales API.

Skills

Three bundled skills (loaded on demand, so they stay cheap on context):

  • carsales-search how to run precise searches.

  • car-inspection how to judge a listing's photos for damage, rust, accident signs.

  • buyers-guide a beginner's guide to buying a used car in Australia.

Self-test

node scripts/selftest.mjs live-fetches all three sites and asserts the parsers work. Use --offline to re-parse saved fixtures without the network.

License

MIT

Available Tools

19 tools
auth_statusA

Check whether the current session is logged in to carsales.com.au (i.e. whether authenticated actions like save_vehicle / make_offer will work).

Inputs: no named parameters.

check_vehicleA

Free vehicle trust check (FOSS, NO paid PPSR). Points at the official state-transport registration check (registration validity + written-off status) and attempts a best-effort automated lookup. Encumbrance (finance owed) is ONLY on paid PPSR and is intentionally out of scope. The manual URL is always returned for independent human verification.

Inputs: plate (required), state.

check_watchA

Re-run a saved watch and report what changed. For search watches: NEW listings since the last check. For listing watches: a PRICE DROP (or any price change). Pure local diff over free search results - no paid alert service.

Inputs: name (required).

compare_listingsA

Side-by-side comparison of 2–3 listings (by listingId or url). Pulls full details for each and renders a comparison table so the model can surface differences.

Inputs: listings (required), includeImages.

dealer_infoA

Look up a seller/dealer reputation. For carsales dealer pages this scrapes the star rating + review count (best-effort). Facebook and Gumtree are mostly PRIVATE sellers with no dealer rating - for those it just confirms the seller type. Use before contacting anyone.

Inputs: url, name.

export_csvA

Export a carsales search to CSV (free, no external service) so results can be opened in a spreadsheet. Returns the CSV as a text block.

Inputs: make (required), limit, model, state, +6 more.

get_listing_detailsA

Get full details for a single carsales.com.au listing using its listing id (e.g. OAG-AD-26099426) or the full listing URL. Falls back to the summary card data (price, year, odometer, location, etc.) when the full detail page is blocked by anti-bot protection.

Inputs: url, listingId, includeImages.

list_watchesA

List all saved watches (search watches and listing price-drop watches).

Inputs: no named parameters.

make_offerA

Contact the seller / make an offer on a carsales listing (requires an authenticated session via set_auth). Best-effort: opens the contact/enquire form and submits your message. HIGH-RISK: contacts a real person and may involve money. Requires confirm: true (human-in-the-loop) - the first call returns a warning and does nothing.

Inputs: message (required), url, price, confirm, +1 more.

price_insightB

Free, FOSS valuation. Derives a fair-price band (median + 25th/75th percentile) from free comparable carsales listings for the same make/model/year - no paid RedBook/CarHistory. Optionally judges a specific target price.

Inputs: make (required), model, state, maxYear, +2 more.

remove_watchB

Delete a saved watch (search or listing) by name.

Inputs: name (required).

save_vehicleA

Save/watchlist a carsales listing to YOUR account (requires an authenticated session via set_auth). Best-effort: clicks the Save/Watchlist control on the listing page. Requires confirm: true (human-in-the-loop) before any account action is taken.

Inputs: url, confirm, listingId.

search_all_carsA

Search BOTH carsales.com.au and Facebook Marketplace for cars at once and return combined, de-duplicated-where-possible results tagged by source, with good-deal flags. Use this as the one-shot "find me a car" tool.

Inputs: make (required), limit, model, state, +8 more.

search_carsA

Search carsales.com.au for used and new cars. Supports make/model, state, body style, transmission, fuel type, condition, badge, and keyword. Price, year and odometer are filtered in-memory from the listing cards. Returns matching listings with price, year, odometer, location and a link.

Inputs: make (required), page, sort, badge, +17 more.

search_facebook_carsA

Search Facebook Marketplace for cars (native, hardened through the same browser/proxy engine as carsales). Returns listings with price, title, location, seller and a photo. Best-effort: depends on Facebook not blocking the request from your IP.

Inputs: query (required), limit, location, maxPrice, +1 more.

search_gumtree_carsC

Search Gumtree.com.au for cars (native, FOSS - no paid API). Returns listings with price, title, location and a link. Best-effort: depends on Gumtree not blocking the request from your IP.

Inputs: query (required), limit, radius, location, +2 more.

set_authA

Import a carsales.com.au login session by pasting cookies exported from your own browser (so the server can save vehicles, make offers, and contact sellers). Pass the cookies array from DevTools > Application > Cookies (or a cookie export extension). Stored at: /root/.carsales-mcp/cookies.json.

Inputs: cookies (required).

watch_listingA

Watch a SINGLE listing for a PRICE DROP (FOSS alerts - no paid service). Re-run check_watch later to see if the price changed (especially a drop). Works for carsales, Facebook and Gumtree listing URLs.

Inputs: name (required), url, listingId.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.8/5.0

    Scored across 19 tools

    Disambiguation5/5

    Every tool has a clearly distinct purpose: search tools are separated by source (carsales, Facebook, Gumtree, all), watch tools distinguish between watching a search vs. a single listing, and auth/actions are separate. The only potential overlap is search_all_cars vs. individual searches, but it's explicitly a combined one-shot tool and not ambiguous.

    Naming Consistency4/5

    Most tools follow a verb_noun pattern (search_cars, get_listing_details, save_vehicle, watch_listing, check_watch, etc.), but a few use noun_noun forms (auth_status, price_insight, dealer_info). These deviations are minor and the verbs are consistently lowercase with underscores, so the pattern is mostly predictable.

    Tool Count4/5

    With 19 tools, the set is slightly above the ideal 3-15 range but still well-scoped for a car sales assistant that handles search, details, comparisons, watches, authentication, and vehicle checks. No tool feels redundant, and the count is justifiable given the domain's breadth.

    Completeness5/5

    The tool surface covers the full lifecycle of a car-buying workflow: search across platforms, view details, compare listings, get price insights, save vehicles, make offers, watch listings/searches for changes, and check vehicle history and dealer reputation. No obvious gaps; even the missing 'list saved vehicles' is handled externally via the account, and watch management is fully covered (create, list, check, remove).

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      D
      maintenance
      An MCP server that integrates with the Carvana marketplace to enable vehicle searching, financing estimation, and trade-in value assessments. It allows AI assistants to retrieve detailed vehicle information, history reports, and market insights directly from Carvana's inventory.
      10
      10 npm
      1
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides 25 interactive automotive intelligence tools for real-time market data, including VIN decoding, price predictions, and inventory analytics. It enables AI assistants to perform car searches, trade-in estimations, and market trend analysis using the Model Context Protocol.
      2
      -
    • F
      license
      A
      quality
      D
      maintenance
      An MCP server that enables searching for jobs across Australian platforms (Seek and LinkedIn) from Claude or any MCP-compatible client, with filters for location, salary, employment type, and more.
      1
      4
      -
    • F
      license
      Not graded
      quality
      D
      maintenance
      Provides 42+ MCP tools for browser automation, web scraping, and search, enabling AI agents like Claude and Cursor to browse, extract data, and run research agents on the live web.
      9
      -