About listingdata
listingdata is a local bridge to Redfin real-estate data, for searching listings by location and retrieving property details by URL. It relays read-only calls to the hosted HasData Redfin MCP server and returns its results as received.
Key features
- 01Search for-sale, rental, and sold listings
- 02Filter listings by property criteria
- 03Retrieve property details by URL
- 04View price history and estimates
- 05Access tax, school, and listing data
Use cases
- 01Find listings in a specified area
- 02Filter homes by price or features
- 03Review a property’s price history
- 04Retrieve details from a Redfin URL
MCP support
It exposes the captured Redfin tools as a local MCP server and forwards calls to the hosted HasData server, returning upstream results unchanged.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
Tools
2Saved tool list · updated 2d ago
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | number | No | The page number of the results to retrieve. |
| sort | enum | No | The sorting option for the search results.recommended | newest | oldest | priceLowToHigh | priceHighToLow | minSquareFeet | maxSquareFeet | bedrooms | bathrooms | lotSize | squareFeetPrice | mostRecentlySold |
| type | enum | Yes | The type of listing.forSale | forRent | sold |
| baths | enum | No | The minimum number of bathrooms.one | oneAndHalf | two | twoAndHalf | three | four |
| pets__ | array | No | An array of pet types allowed. |
| keyword | string | Yes | The location to search for listings. Accepts a zipcode (`33321`), a city (`Austin` or `Austin, TX`), a neighborhood (`East Austin`), a school (`BASIS Austin`), a school district (`Austin Independent School District`), an apartment building by its name (`Maizon Brickell`), or a full street address (`5805 Woodview Ave, Austin, TX 78756`), including a single unit (`221 SW 12th St Unit 1716, Miami, FL`). An address or a building returns a single property card instead of a list of listings, and the `type` parameter does not apply to it. |
| beds_max_ | number | No | The maximum number of bedrooms. |
| beds_min_ | number | No | The minimum number of bedrooms. |
| cost_hoa_ | number | No | The maximum monthly Homeowners Association (HOA) fee. |
| moveInDate | string | No | The desired move-in date in MM/DD/YYYY format. |
| price_max_ | number | No | The maximum price of the listing. |
| price_min_ | number | No | The minimum price of the listing. |
| homeTypes__ | array | No | An array of home types to filter the listings. Allowed values depend on the listing `type`. |
| lotSize_max_ | enum | No | The maximum lot size.2000 sqft | 4500 sqft | 6500 sqft | 8000 sqft | 9500 sqft | 0.25 acres | 0.5 acres | 1 acres | 2 acres | 3 acres | 4 acres | 5 acres | 10 acres | 20 acres | 40 acres | 100 acres |
| lotSize_min_ | enum | No | The minimum lot size.2000 sqft | 4500 sqft | 6500 sqft | 8000 sqft | 9500 sqft | 0.25 acres | 0.5 acres | 1 acres | 2 acres | 3 acres | 4 acres | 5 acres | 10 acres | 20 acres | 40 acres | 100 acres |
| stories_max_ | enum | No | The maximum number of stories.1 | 2 | 3 | 4 | 5 | 10 | 15 | 20 |
| stories_min_ | enum | No | The minimum number of stories.1 | 2 | 3 | 4 | 5 | 10 | 15 | 20 |
| timeOnRedfin | enum | No | How long the listing has been on Redfin.newListing | lessThan3Days | lessThan7Days | lessThan14Days | lessThan30Days | moreThan7Days | moreThan14Days | moreThan30Days | moreThan45Days | moreThan60Days | moreThan90Days | moreThan180Days |
| yearBuilt_max_ | enum | No | The maximum year the property was built.2026 | 2025 | 2024 | 2023 | 2022 | 2021 | 2020 | 2019 | 2018 | 2017 | 2016 | 2015 | 2010 | 2005 | 2000 | 1990 | 1980 | 1970 | 1960 | 1950 | 1940 | 1920 | 1900 |
| yearBuilt_min_ | enum | No | The minimum year the property was built.2026 | 2025 | 2024 | 2023 | 2022 | 2021 | 2020 | 2019 | 2018 | 2017 | 2016 | 2015 | 2010 | 2005 | 2000 | 1990 | 1980 | 1970 | 1960 | 1950 | 1940 | 1920 | 1900 |
| statusOptions__ | array | No | An array of listing statuses. |
| soldWithinOption | enum | No | Filter sold listings by how recently they were sold.lastOneWeek | lastOneMonth | lastThreeMonth | lastSixMonth | lastYear | lastTwoYear | lastThreeYear | lastFiveYear |
| rentalAmenities__ | array | No | An array of rental amenities to filter the listings. |
| cost_priceReduced_ | enum | No | Filter listings by when the price was reduced.inTheLastDay | inTheLast3Days | inTheLast7Days | inTheLast14Days | inTheLast30Days | moreThan30Days | moreThan60Days | moreThan120Days |
| rentalOtherTerms__ | array | No | An array of additional rental terms. |
| monthlyPayment_max_ | number | No | The maximum monthly payment. |
| monthlyPayment_min_ | number | No | The minimum monthly payment. |
| schools_schoolType___ | array | No | An array of school types. |
| forSaleSquareFeet_max_ | enum | No | The maximum square footage for for-sale listings.750 | 1000 | 1100 | 1200 | 1300 | 1400 | 1500 | 1600 | 1700 | 1800 | 1900 | 2000 | 2250 | 2500 | 2750 | 3000 | 4000 | 5000 | 7500 | 10000 |
| forSaleSquareFeet_min_ | enum | No | The minimum square footage for for-sale listings.750 | 1000 | 1100 | 1200 | 1300 | 1400 | 1500 | 1600 | 1700 | 1800 | 1900 | 2000 | 2250 | 2500 | 2750 | 3000 | 4000 | 5000 | 7500 | 10000 |
| homeFeatures_basement_ | enum | No | The basement type.finished | unfinished |
| homeFeatures_poolType_ | enum | No | The type of pool.privatePool | communityPool | privateOrCommunityPool | noPrivatePool |
| cost_acceptedFinancing_ | enum | No | The accepted financing type.FHA | VA |
| cost_excludeLandLeases_ | boolean | No | If set to true, listings with land leases will be excluded. |
| cost_pricePerSqft__max_ | enum | No | The maximum price per square foot.50 | 100 | 150 | 200 | 250 | 300 | 400 | 500 | 600 | 800 | 1000 | 1400 | 1800 | 2200 | 2600 | 3000 |
| cost_pricePerSqft__min_ | enum | No | The minimum price per square foot.50 | 100 | 150 | 200 | 250 | 300 | 400 | 500 | 600 | 800 | 1000 | 1400 | 1800 | 2200 | 2600 | 3000 |
| homeFeatures_options___ | array | No | An array of home feature flags to filter the listings. |
| listingType_category___ | array | No | An array of listing categories. |
| onlyWithDealOrPromotion | boolean | No | If set to true, only listings with a deal or promotion will be included. |
| exclude55PlusCommunities | boolean | No | If set to true, 55+ communities will be excluded. |
| forRentSquareFootage_max_ | number | No | The maximum square footage for for-rent listings. |
| forRentSquareFootage_min_ | number | No | The minimum square footage for for-rent listings. |
| schools_greatSchoolRating_ | number | No | The minimum GreatSchools rating (1-10). |
| transportScores_bikeScore_ | number | No | The minimum bike score (1-100). |
| transportScores_walkScore_ | number | No | The minimum walk score (1-100). |
| cost_maxPropertyTaxPerYear_ | number | No | The maximum property tax per year. |
| homeFeatures_keywordSearch_ | string | No | A free-text keyword search applied to listing descriptions. |
| openHouseAndTour_openHouse_ | enum | No | Filter listings with an open house.thisWeekend | anytime |
| openHouseAndTour_videoTour_ | boolean | No | If set to true, only listings with a video tour will be included. |
| homeFeatures_garageSpotsMin_ | enum | No | The minimum number of garage spots.1 | 2 | 3 | 4 | 5 |
| monthlyPayment_interestRate_ | number | No | The mortgage interest rate (percent) used to calculate the monthly payment. |
| monthlyPayment_mortgageTerm_ | enum | No | The mortgage term used to calculate the monthly payment.fixed15Years | fixed20Years | fixed30Years | fixed30YearsFha | fixed30YearsVa | fixed30YearsJumbo |
| monthlyPayment_insuranceRate_ | number | No | The home insurance rate (percent) used to calculate the monthly payment. |
| transportScores_transitScore_ | number | No | The minimum transit score (1-100). |
| listingType_excludeShortSales_ | boolean | No | If set to true, short sales will be excluded. |
| schools_includeUnratedSchools_ | boolean | No | If set to true, unrated schools will be included. |
| listingType_redfinListingsOnly_ | boolean | No | If set to true, only Redfin-listed properties will be included. |
| monthlyPayment_downPaymentAmount_ | number | No | The down payment as an absolute amount. |
| monthlyPayment_downPaymentPercent_ | number | No | The down payment as a percentage of the home price. |
Details
From the project READMElistingdata
listingdata is a small local bridge to the hosted HasData Redfin MCP server, which returns Redfin real-estate data as JSON. It can look up for-sale, for-rent, or sold listings for a place, and it can pull one property in full from its Redfin URL: the address, list and sold prices and their history, the Redfin Estimate, beds and baths, size and lot, year built, tax and school data, and the listing agent's name as published on the page.
The bridge holds no listings of its own. It answers the tool list locally, exactly as captured from the live endpoint, and forwards each tool call upstream, returning whatever comes back untouched. The captured surface is two read-only fetches over public listing data: there is no booking, offer, contact-extraction, or payment tool in it.
Tools
hasdata_redfin_listing_getRealEstateListings— search Redfin listings. Required:keyword(a zipcode, city, neighborhood, school, school district, apartment-building name, or full street address) andtype(forSale,forRent, orsold). Optional filters cover price and monthly-payment ranges, sorting, home types, beds and baths, square footage, lot size, year built, listing category and status, time on Redfin, home features, rental amenities and pet terms, school ratings, walk / transit / bike scores, and apagenumber for paging. An address or building returns a single property card instead of a list. Returns listings with address, Redfin URL, list price, beds/baths, square footage, year built, days on market, status, coordinates, photos, and MLS number.hasdata_redfin_property_getPropertyDetails— fetch one property in full. Required:url(the Redfin property URL). Returns address, list/sold price, price history, Redfin Estimate, beds/baths, square footage, lot size, year built, property type, HOA, days on market, school ratings, tax history, listing agent, full description, photos, and nearby comparables.
Configuration
HASDATA_REDFIN_MCP_URL(optional) — override the upstream endpoint. Defaults tohttps://mcp.hasdata.com/mcp?apis=redfin. (The override hook is this rebuild's own labelled reconstruction.)HASDATA_API_KEY(optional) — when set, every upstream request carries anx-api-key: <key>header, for the caller's own HasData API key. When it is not set, no key header is sent. (The header name and the env name are pinned by the original's registry record; forwarding the key from this env var is a labelled reconstruction — the original surface was captured keyless.)
Forwarding mechanics
On the first tool call the client opens a streamable
HTTP session upstream: a JSON-RPC initialize request
(protocolVersion 2025-03-26, clientInfo name
listingdata), then a notifications/initialized
notification, then the tools/call request carrying
the caller's arguments unchanged. When the upstream
answers initialize with an Mcp-Session-Id header,
that value rides on every later request of the
session, which is reused for the life of the process.
Replies may arrive as plain JSON or as server-sent
events; both are read.
Successful upstream results pass through verbatim,
including any isError flag the upstream sets.
Failures — a JSON-RPC error, a non-2xx status, an
unreadable response, or a request that cannot be
completed — come back as an isError result whose
text starts with listingdata error: (this rendering
is this rebuild's own labelled reconstruction).
CLI
Each tool is also a subcommand taking one JSON argument string:
npx @reneturcios/listingdata hasdata_redfin_listing_getRealEstateListings '{"keyword":"Austin, TX","type":"forSale"}'
npx @reneturcios/listingdata hasdata_redfin_property_getPropertyDetails '{"url":"https://www.redfin.com/example"}'
npx @reneturcios/listingdata --version
Exit codes: 0 on success, 1 on an isError
result, 2 on a usage error.
MCP server
npx -y @reneturcios/listingdata mcp
MCP client config:
{
"mcpServers": {
"listingdata": {
"command": "npx",
"args": ["-y", "@reneturcios/listingdata", "mcp"]
}
}
}
Docker
docker run -i ghcr.io/cloudcorprecords/listingdata
docker run --rm ghcr.io/cloudcorprecords/listingdata --version
The container's default command is mcp, so the first
form is a stdio MCP server; any other arguments reach
the CLI normally.
Development
npm install
npm run build
npm test
npm run dev
The test suite runs entirely against a stubbed JSON-RPC upstream — no live network calls.
License
MIT — see LICENSE.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.