realestate-mcp
This server integrates with Claude to search and retrieve Australian property listings from realestate.com.au, automatically handling anti-bot protection with a real Chrome browser.
Search listings: Find properties for sale, rent, or recently sold by location, with filters for price range, bedrooms, bathrooms, car spaces, land size, and property type (e.g., house, apartment, townhouse, villa, land, acreage, unit block). Exclude under-contract listings. Results include exact and surrounding suburbs, up to 25 per page.
Get listing details: Fetch comprehensive info (via URL or ID) including description, photos, floorplans, agent contacts, agency details, inspection times, auction dates, and suburb market insights.
Resolve locations: Convert vague/partial names (e.g., "bondi") into canonical suburb names with state and postcode for accurate searches.
View photos:
get_listing_photos(documented but not in current schema) retrieves image data at various resolutions to evaluate condition and layout; floorplans can be included.Bot bypass: Uses a warmed-up Chrome instance to navigate realestate.com.au's Kasada bot detection.
Click on "Install 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., "@realestate-mcpfind me 3-bed houses in Bondi under $5m"
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.
realestate-mcp
An MCP server that lets Claude Code search realestate.com.au — for-sale, rental, and sold listings, with full property detail.
> find me 3-bed houses in Bondi under $5m
25 listings, 64 total across 3 pages
1 Miller Street, Bondi NSW 2026 Onsite auction 29 August 5bd 4ba 3car House
25 Wellington Street, Bondi Auction 5bd 4ba 2car House
8B Castlefield Street, Bondi Buyers Guide $3,000,000 3bd 2ba 1car HouseRequirements
Node.js 20+
Google Chrome installed (the real browser — see How it works)
Related MCP server: Realty In Au MCP Server
Setup
npm install && npm run buildThen run the one-time warm-up. A Chrome window opens for a few seconds and closes itself:
node dist/index.js setupRegister with Claude Code:
claude mcp add realestate -- node "E:/Personal Projects/RealEstateMCP/dist/index.js"Tools
Tool | What it does |
| Search buy / rent / sold by location, with price, bed, bath, car, land-size and property-type filters. 25 results per page. |
| Full detail for one listing — description, all photos, floorplans, agents, agency ratings, suburb market insights. Takes a URL or bare listing ID. |
| Returns the actual photographs as images, so the model can judge condition, finish quality, natural light and layout rather than just numbers. Optionally includes the floorplan. |
| Turn |
Returned fields
Address (with suburb/state/postcode), price display, bedrooms, bathrooms, car spaces, studies, land and building size, property type, agency (with average rating and review count), agents (name, job title, profile URL), inspection times and auction dates as ISO 8601 with offset, description, photo and floorplan URLs.
Results include listings REA blends in from neighbouring suburbs; those are flagged isSurrounding: true. They can be across water from the suburb you searched, so filter on each listing's own suburb for anything geographic.
Photos and token cost
get_listing_photos sends real image data into the conversation, which is not free. REA's image URLs carry a {size} placeholder, so resolution is chosen at the CDN rather than downscaled locally. Cost is roughly (width × height) / 750 tokens per image:
| ~tokens each | 6 images |
| 100 | 600 |
| 230 | 1.4k |
| 410 | 2.5k |
| 640 | 3.8k |
| 1050 | 6.3k |
Keep limit small. It's a separate tool from get_listing precisely so routine lookups don't drag a dozen images into context.
Note that many REA listings are virtually staged — the furniture is digitally inserted and the listing usually says so in the description. Rooms are real, furnishings are not; use the floorplan for dimensions.
How it works
realestate.com.au is behind Kasada bot protection. Everything in this server is shaped by that:
Raw HTTP does not work. Every endpoint — including
lexa.realestate.com.au/graphqlandservices.realestate.com.au— returns429with ax-kpsdk-ctheader. Those APIs are scoped to signed mobile-app tokens.Headless does not work from a cold start. Plain Playwright, Playwright with anti-automation flags, and even patched Chrome all get
429on a fresh profile.What works: patchright driving your real installed Chrome with a persistent profile, warmed up headed once. Kasada issues its challenge, the browser solves it, and the token persists in the profile directory. Headless works from then on.
That's why setup opens a visible window once, and why bundled Chromium isn't used — it's fingerprinted and blocked.
Data is read from the page's server-side hydration blob rather than the DOM:
<script>window.ArgonautExchange={ "resi-property_listing-experience-web": {
"urqlClientCache": "{\"<hash>\":{\"data\":\"{…}\"}}" }}</script>
└─> buySearch.results.exact.items[].listing ← the real Lexa GraphQL objectsTwo things that will bite you if you modify the parser:
The app deletes
window.ArgonautExchangeafter hydration. Reading the live global returnsundefinedon a page that loaded perfectly fine. Parse the<script>tag's source text.Results are split into
results.exactandresults.surrounding. Reading onlyexactsilently drops up to two-thirds of a page.
Configuration
Env var | Default | Purpose |
|
| Where the warm browser profile lives |
|
| Browser channel; |
|
| Navigation timeout in ms |
|
| Idle ms before the browser closes and releases the profile lock |
Development
The server runs compiled JS, and Claude Code spawns it as a child process — so edits to src/ do nothing until that process is replaced.
./scripts/reload-mcp.ps1Rebuilds, kills any Chrome holding the browser profile, kills the server process(es), and reports whether the profile is still warm. -CheckOnly inspects without changing anything; -NoBuild skips compilation. It aborts before killing anything if the build fails.
It only targets node processes referencing this repo's dist/index.js and Chrome processes referencing the realestate-mcp profile — your normal browser is untouched.
Three different actions for three different changes:
Changed | Action |
Behaviour of an existing tool | reload script — the server respawns on the next tool call |
Added / renamed a tool, or changed its input schema | restart Claude Code |
Calls fail with the bot-protection error |
|
The MCP tool list is negotiated once during the connection handshake and cached for the session. Killing the server picks up new code immediately, but a newly added tool stays invisible until Claude Code restarts.
setup is independent of both — it warms a Kasada token into the profile directory, which survives restarts and reboots.
Ad-hoc scripts need their own profile. Chrome takes an exclusive lock on its user-data-dir, so anything calling fetchPage while the server is live will fight it for that lock:
$env:REALESTATE_MCP_PROFILE = "<scratch dir>"Verify new URL filters by result count, not status code. REA silently ignores malformed filter segments and still returns HTTP 200 with a normal-looking page. See CLAUDE.md for the segment grammar.
Troubleshooting
"Blocked by realestate.com.au bot protection" — the profile has gone cold. Re-run node dist/index.js setup. Token lifetime is not documented; expect to re-warm occasionally. Check current state without changing anything with ./scripts/reload-mcp.ps1 -CheckOnly.
"Could not open the browser profile — another process is using it" — Chrome allows one process per profile directory. Something else holds it: a setup run still open, a stray Chrome, or a script pointed at the same profile as the running server. ./scripts/reload-mcp.ps1 clears it.
setup appears to do nothing, and tools stay blocked — this was a real bug, now fixed. The server used to hold the profile lock for its whole lifetime, so setup in another terminal could never acquire it, and the running Chrome kept serving the cookies it loaded at startup. The browser now closes after REALESTATE_MCP_IDLE, and fetchPage retries once with a fresh context when it hits a block.
"Could not launch Google Chrome" — install Chrome, or set REALESTATE_MCP_CHANNEL=msedge.
Warm-up fails repeatedly — rapid requests raise your Kasada score and it takes a while to decay. Wait a few minutes, or try from a different network.
A filter seems to be ignored — it probably is. REA drops malformed filter segments silently and still returns 200. Compare totalResults against an unfiltered search.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables access to UK property listings, price estimates, agent information, and market data through the Zoopla API for searching properties for sale or rent with detailed filters and analytics.22MIT
- AlicenseBqualityDmaintenanceEnables access to Australian real estate data through the Realty In Au API, supporting property listings, agent/agency information, property details, school lookups, and property search with various filters.13MIT
- AlicenseAqualityAmaintenanceEnables natural-language access to Zillow real-estate data, including property search, details, Zestimate history, saved searches/homes, and market reports, by routing requests through the user's authenticated browser session.220289MIT
Related MCP Connectors
Stealth scraping & search. Bypasses Cloudflare, DataDome & LinkedIn via Cyborg HITL approach.
U.S. real-estate data: property records, AVM value + rent estimates, sale/rental listings.
AI-powered browser automation — navigate, click, fill forms, and extract data from any website.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ErrolMc/RealEstateMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server