carsales-mcp
This MCP server lets an AI assistant search and act on Australian car marketplaces (carsales, Gumtree, Facebook Marketplace) using a real headed browser to bypass anti-bot protections.
Search cars:
search_cars(carsales with filters like make, model, state, price, year, odometer, body, transmission, fuel, keyword, good-deal flags),search_facebook_cars,search_gumtree_cars, orsearch_all_carsfor combined, deduped, source-tagged results.Inspect listings:
get_listing_details(including photos),compare_listings,price_insight(fair-price band),vehicle_review(from README).Save and track:
save_listing/save_vehicle, list/remove saved cars,check_saved, watch searches or single listings for new matches/price drops viawatch_search,watch_listing,check_watch,list_watches,remove_watch.Contact and trust:
make_offer(requires human confirm),check_inbox,check_vehicle(rego/written-off check),dealer_info(seller reputation).Session/auth:
open_browserfor manual login,set_authto import cookies,auth_statusto check login state.Learn preferences: remember filters/likes/avoidances and auto-apply them in future searches.
Export:
export_csvto dump search results to CSV.Built-in safety: human-in-the-loop confirm flags, no duplicate offers, warnings about account bans and real-money contact.
Supports sending watch alerts for new car listings and price changes to a Discord webhook.
Enables searching and scraping Facebook Marketplace for car listings, with deal quality assessment and cross-source search across carsales and Gumtree.
Enables searching and scraping Gumtree for car listings, with deal quality assessment and cross-source search across carsales and Facebook.
Supports sending watch alerts for new car listings and price changes to an ntfy webhook.
Supports sending watch alerts for new car listings and price changes to a Slack webhook.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@carsales-mcp Find me used Toyota Corollas under $15,000 in Melbourne"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
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 fetchThe 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.shOn 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 |
| Residential proxy, or a comma-separated list rotated per request. The most reliable fix for DataDome blocks. |
| An X display such as |
| Push price drops, sold cars and new matches to ntfy, Discord or Slack. |
| Use the Carapis carsales API for search instead of scraping (falls back to the browser). |
|
|
| Reserved. Only Camoufox is used; custom builds go in |
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_carssearch 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_carsnative search for those sites.search_all_carsone call across all three, deduped, sorted cheapest first (usesort: "price_high"to reverse).
Inspect a listing
get_listing_detailsfull details by id or URL, any site. PassincludeImages: trueto get photos so a vision model can see the car (images are token-heavy).compare_listingsput 2 or 3 listings side by side.price_insightfree fair-price band from comparable carsales listings.vehicle_reviewfull buyer review in one call: photos plus reliability, market average and new-car comparison.
Save and track
save_listingsave any listing locally (all sites) with a note, and try the site's own save control.list_saved,remove_savedmanage them.check_savedre-fetches saved cars and reports a price drop or a sold listing.watch_search/watch_listingwatch a query or a single listing.check_watchreports anything new or a price change.
Contact and trust
make_offercontact a seller or make an offer. Requiresconfirm: trueand will never send the same offer twice.check_inboxbest-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_vehiclefree rego and written-off check.dealer_infoseller reputation.
Session
open_browseropen the shared browser to a login page; you log in by hand and the server keeps that session.auth_statusreports 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_csvdump 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
limitmodest and enableincludeImagesonly 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_offerandcheck_inboxare 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-searchhow to run precise searches.car-inspectionhow to judge a listing's photos for damage, rust, accident signs.buyers-guidea 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 toolsauth_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.
watch_searchA
Save a search to watch for NEW listings (FOSS alerts - no paid service). Re-run check_watch later to see what appeared since the last check. Sources: carsales (default), gumtree, facebook.
Inputs: make (required), name (required), model, state, +5 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
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.
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.
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.
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
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Live AI-native web search with citations. One tool for every MCP client. Flat per-request pricing.
Web search, browser automation, scraping, crawling and CAPTCHA solving for AI agents.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn 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.1010 npm1MIT
- FlicenseNot gradedqualityDmaintenanceProvides 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-
- FlicenseAqualityDmaintenanceAn 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.14-
- FlicenseNot gradedqualityDmaintenanceProvides 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-