homes-mcp
homes-mcp gives Claude read-only natural-language access to homes.com real estate data (search, property details, history, photos, market stats, saved homes) plus local mortgage/affordability/rent-vs-buy math, all routed through your own signed-in browser tab via the ContextMint Bridge extension.
Search listings (
homes_search_properties): free-text city/ZIP/neighborhood search filtered by property type, listing type (sale/sold/rent/open houses/new construction), sort, and price band; capped at ~40 SSR listings withtruncated/total_estimatedflags.Resolve addresses (
homes_get_by_address,homes_resolve_addresses): turn a US street address into a canonical homes.com property URL + hash, single or bulk up to 100, with typeahead → slug → search-fallback rungs.Get property details (
homes_get_property): full record — address, lat/lng, beds/baths, sqft, year built, price, status, agent/brokerage, highlights, schools, HOA, lot size, parking, HVAC, MLS id, features; optional inline price/tax history, description, agent contact.Bulk & compare (
homes_bulk_getup to 200 URLs,homes_compare_properties2–8 side-by-side with per-row errors and optional summary table).Photos (
homes_get_property_photos): full gallery scraped from the detail page (JSON-LD carries only one image).Nearby listings (
homes_get_nearby_listings): the "Homes for Sale Near This Property" cross-link cards, For Sale and optionally Rentals.History (
homes_get_history, plus deprecatedhomes_get_property_history/homes_get_tax_history): combined price, ownership, lien timelines, normalized events, and year-by-year tax records.Market reports (
homes_get_market_report): median/average price and $/sqft for a market from the sold-listing sample.Saved data (
homes_get_saved_homes,homes_get_saved_searches): the signed-in user's favorited homes and saved searches (auth-gated).Local calculators (no network):
homes_calculate_mortgage(PITI),homes_calculate_affordability(max price under 28/36 DTI),homes_estimate_rent_vs_buy(cumulative buy-vs-rent with break-even year — requires caller-suppliedmonthly_rent, as homes.com publishes no rental estimates).Diagnostics & session labels:
homes_healthcheck(bridge/extension diagnostics) andhomes_register_session/homes_set_active_session/homes_get_session_context(label-only account bookkeeping).
Note: read-only, personal non-commercial use; relies on homes.com's Terms of Use and your own signed-in browser session for all network calls.
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., "@homes-mcp find 3-bedroom homes in Denver under $600k"
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.
homes-mcp
homes.com real-estate access as an MCP server for Claude — search listings, resolve addresses, fetch property details, price/tax history, market reports, saved homes, photo galleries, and run affordability/mortgage math, all via natural language.
⚠️ homes.com does not publish a public consumer API. This server reads the same server-rendered HTML and Schema.org JSON-LD that homes.com itself ships to your browser, routed through your own signed-in browser tab via the ContextMint Bridge browser extension. Every request acts on behalf of your existing session — your cookies, your TLS, your JS context — exactly as if you'd clicked it in the browser yourself. Treat this as informal use of homes.com. Use at your own discretion.
Tools
Tool | Purpose |
| Search listings by free-text location (city/ZIP/neighborhood). Slugifies the input into homes.com's URL routing (a blank or unsluggable location is an error, not an empty result) and parses the JSON-LD |
| Resolve one US street address to its canonical homes.com property URL + opaque hash. Walks structured typeahead → slug → city/zip search-fallback with whole-token street + unit verification. Returns |
| Bulk |
| Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, agent (name/title/profile — telephone/email only with |
| Full photo gallery scraped from |
| Fetch up to 200 properties' structured records in one call (per-row errors, input order preserved). |
| Side-by-side comparison of 2–8 properties with an aligned summary table. Per-target errors captured per-row. Concurrent fetches. |
| The "Homes for Sale Near This Property" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only. |
| Combined price + tax history in one fetch: |
| Deprecated — price/ownership/lien timelines only. Prefer |
| Deprecated — year-by-year tax records only. Prefer |
| Median / average / $-per-sqft for a market, derived from the |
| The signed-in user's saved (favorited) homes. Auth-gated. |
| The signed-in user's saved searches. Auth-gated. |
| Local affordability calculator — max purchase price from income + DTI + rates. No network. |
| Local PITI calculator — principal+interest, taxes, insurance, HOA, PMI. No network. |
| Local rent-vs-buy model — you supply |
| Round-trips |
| List / register / switch account labels for your own bookkeeping. Label only: requests always use whichever account the fetchproxy browser tab is signed into. |
Known data gap: rental estimates
homes.com does NOT publish rental estimates anywhere on its consumer site — there's no rent_zestimate analogue, no "estimated rent" widget on property detail pages, and no comparable-rentals endpoint. The homes_estimate_rent_vs_buy tool exists for the math, but it requires the caller to pass monthly_rent directly (you can't fetch a rent estimate from homes.com to plug in).
For rental signals, use a sibling MCP: zillow_get_property carries rent_zestimate on detail records, and redfin_get_comparable_rentals returns rental comps by URL. See issue #28 for the feasibility investigation.
Related MCP server: mcp-server-attom
Acknowledgement of Terms
By using this MCP server, you acknowledge and agree to the following:
1. This server accesses your own homes.com session. Every request is dispatched through your own browser tab via the ContextMint Bridge extension — your cookies, your TLS, your session. It does not — and cannot — access anyone else's account.
2. homes.com's Terms of Use govern your use of this server, just as they govern your direct use of homes.com. The terms prohibit automated crawling without written permission, and IDX listing data is licensed for personal, non-commercial use only. You are agreeing to those terms every time you invoke a tool in this server.
3. Personal, non-commercial use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with homes.com or CoStar Group. It is a personal automation tool that reads the same server-rendered HTML and Schema.org JSON-LD homes.com ships to your browser. Do not use it to bulk-extract listings, redistribute IDX data, train AI models, populate a competing real-estate product, or for any commercial purpose.
4. Stability is not guaranteed. This server reads Schema.org JSON-LD (<script type="application/ld+json">) and DOM-side <img> tags from SSR pages whose URL conventions (/<city>-<state>/, /property/<slug>/<id>/) may change without notice. It may break. It may stop working. That's by design — the surface is not theirs to maintain on our behalf.
5. You accept full responsibility for any consequences of using this server in connection with your homes.com access — rate limiting, account suspension, IP blocks, AWS WAF challenges, or any enforcement action homes.com takes. If homes.com objects to your use, stop using this server.
This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede homes.com's actual ToU.
Install
Option A — npx (after first publish)
Add to .mcp.json:
{
"mcpServers": {
"homes": {
"command": "npx",
"args": ["-y", "homes-mcp"]
}
}
}Option B — from source
git clone https://github.com/chrischall/homes-mcp
cd homes-mcp
npm install
npm run build{
"mcpServers": {
"homes": {
"command": "node",
"args": ["/path/to/homes-mcp/dist/bundle.js"]
}
}
}One-time browser setup
homes-mcp talks to your browser through the ContextMint Bridge extension, which is shared across every fetchproxy-based MCP (zillow-mcp, opentable-mcp, resy-mcp, …) and installed separately — it is not bundled here. Get it from the ContextMint Bridge releases:
Chrome: download the Chrome zip, unzip it, then
chrome://extensions→ toggle Developer mode → Load unpacked → pick the unzipped folder.Safari: not available yet — the extension will ship inside the ContextMint app, which has no public download link. Use Chrome for now.
Where it comes from. ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer; fetchproxy's own README (Extension) points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256). There is no Chrome Web Store listing yet.
Open homes.com and sign in. That's all the auth this server needs.
How it works
┌────────────────┐ stdio ┌──────────────────┐ WS ┌──────────────────┐ fetch() ┌─────────────┐
│ MCP client │◀────────▶│ dist/bundle.js │◀──────▶│ ContextMint │◀────────────▶│ homes.com │
│ (Claude, etc.) │ │ (Homes MCP) │ :37149 │ Bridge │ (real TLS, │ (your tab) │
└────────────────┘ └──────────────────┘ │ (separate) │ cookies) └─────────────┘The MCP server runs in Node, but every HTTP call to homes.com is dispatched into your live browser tab through the ContextMint Bridge extension. Each request rides your existing session — TLS fingerprint, cookies, and JS execution context all match the page that's already on screen. No headless browser stand-in, no separate identity, no third-party proxy: just your real browser, acting on its own behalf, with the MCP server picking what to ask for.
homes.com's pages are SSR React with no public JSON API — every tool extracts data from the Schema.org JSON-LD block embedded in each page (<script type="application/ld+json">). Search pages put listings in CollectionPage.mainEntity.itemListElement[]; detail pages emit a RealEstateListing graph node with mainEntity (address, size, geo) and offers.offeredBy[] (listing agent). Photos are scraped from the DOM since the JSON-LD only carries one primary image. The client wraps that into the tool surface so callers never have to parse HTML themselves.
Commands
npm test # tsc typecheck + vitest, mocked transport, no network
npm run test:watch
npm run test:coverage
npm run build # tsc --noEmit + esbuild bundle → dist/bundle.js
npm run dev # node dist/bundle.js (after build)License
MIT
Available Tools
21 toolshomes_bulk_getBulk-fetch homes.com properties (structured records only)ARead-onlyIdempotent
Fetch up to 200 homes.com properties in one call and return their structured records. Pass urls: string[]. Results are ordered to match the input array and per-row errors are captured (one bad URL won't fail the whole call). Each row carries a status: ok, pending, or — on failure — the error kind (timeout / bridge_down / protocol / other, also in error_kind) with a retryable flag; the envelope reports count / ok / errored (+ pending when non-zero). Mirrors homes_get_property per-row, including extracted_features, hoa_fee, highlights, schools, lot_size_sqft + the derived lot_size_acres (null — never 0 — for condos / no-lot listings), and all standard listing fields. The raw description is omitted by default; opt back in via include_description: true. listing_agent omits the agent's telephone/email unless include_agent_contact: true. The whole call is bounded by an overall hard deadline: a single slow/hung URL never wedges the server — when the deadline is reached any unsettled row is returned with status: "pending" and a pending count so you can re-run just those URLs. Use this instead of looping homes_compare_properties (which caps at 8 + emits a redundant summary table) when you just want the records. Read-only; safe to call repeatedly.
Inputs: urls (required), view, include_description, include_agent_contact.
homes_calculate_affordabilityCalculate max affordable home priceARead-onlyIdempotent
Solve for the maximum home price you can afford under the standard 28/36 DTI rule. Inputs: monthly income, recurring monthly debts (car loans, student loans, etc.), down payment, interest rate, and optional property-tax rate / insurance / HOA / loan term. Output: max home price, the binding constraint (front-end vs back-end), and the full PITI breakdown at that price. Same math across the realty MCP cohort (@chrischall/realty-core). No network — pure local math.
Inputs: down_payment (required), interest_rate (required), monthly_income (required), hoa_monthly, +6 more.
homes_calculate_mortgageCalculate mortgage payment (local)ARead-onlyIdempotent
Local-only mortgage payment calculator. Returns a full PITI breakdown (principal + interest, property tax, insurance, HOA, PMI) and total interest over the life of the loan. No network call — fully deterministic, safe to use for scenario comparison without burning a fetch. Provide either down_payment OR down_payment_percent; defaults to 20%. Property tax can be given as property_tax_annual or property_tax_rate (% of home price). PMI applies automatically when LTV > 80% and pmi_rate is provided.
Inputs: home_price (required), interest_rate (required), pmi_rate, hoa_monthly, +6 more.
homes_compare_propertiesCompare homes.com properties side-by-sideARead-onlyIdempotent
Fetch 2 or more homes.com properties and align their facts side-by-side. Each target supplies a url — the full homes.com property URL (e.g. from a homes_search_properties result's url field). Returns the full per-property record (with server-side extracted_features, hoa_monthly_usd, days_on_market, price_drop_*, lot_size_sqft + the derived lot_size_acres, and portal_url_hyperlink). Per-target errors are captured per-row — one bad target will not fail the whole call: a failed row carries status = error_kind (timeout / bridge_down / protocol / other) plus retryable and error, and the envelope reports count / ok / errored. Calls are concurrent and bounded by an overall deadline: any row still unsettled comes back status: "pending" (retryable) with a top-level pending count — re-run just those targets. The raw description is omitted by default; pass include_description: true to keep the marketing prose. listing_agent omits the agent's telephone/email unless include_agent_contact: true. The cross-row summary table duplicates per-property fields (~30% of response weight); it is OPT-IN via include_summary: true.
Inputs: targets (required), view, include_summary, include_description, +1 more.
homes_estimate_rent_vs_buyProject cumulative buy-vs-rent cost over N yearsARead-onlyIdempotent
Project the cumulative cost of buying a home versus renting a comparable place over N years. Accounts for down payment, closing costs, monthly PITI, maintenance (~1%/yr default), appreciation (~3%/yr default), rent growth (~3%/yr default), and the opportunity cost of the down payment + closing costs (renter invests it at investment_return_rate, default 6%/yr). P&I stops once the loan term ends. Each year is the buyer's net position if they sold that year (cash out minus equity) versus the renter's net cost, so break-even year is independent of the horizon. Returns year-by-year cumulative net costs, break-even year, and the net difference at horizon (default horizon 7y). No network — pure local math. Same math contract as zillow_estimate_rent_vs_buy. NOTE: caller must supply monthly_rent — homes.com does not publish rental estimates anywhere on its consumer site (no rent_zestimate analogue, no comparable-rentals endpoint). For a rent estimate to plug in here, use zillow_get_property (its rent_zestimate field) or redfin_get_comparable_rentals.
Inputs: home_price (required), down_payment (required), monthly_rent (required), interest_rate (required), +11 more.
homes_get_by_addressResolve a street address to a homes.com property URLARead-onlyIdempotent
Resolve a US street address to its canonical homes.com property URL + opaque property hash. Pass address (street), city, state, and optional zip. Walks three rungs: first the structured smartsearch typeahead (POST /routes/res/consumer/smartsearch/autocomplete/ — the primary rung, the same address-suggest API homes.com's search box fires, returning the real /property/// URL directly), then a slug-routed page (parsing the embedded Schema.org JSON-LD — both the CollectionPage search-results shape and the single-RealEstateListing detail redirect), and finally a city/zip search page with street-token fuzzy match. Every candidate is verified against the input with a whole-token street match (plus a unit guard so a multi-unit building resolves to the exact unit, not a neighbour). Optional price_min / price_max (USD) bound ONLY the city/zip search-fallback rung — when an address is ambiguous or the typeahead misses and you know the listing's rough price, this narrows the area search (homes.com ?price-min=/?price-max= filter) so the fuzzy matcher picks from fewer, more-relevant candidates; omit for unchanged unbounded behaviour. Returns { url, property_hash, street_address, matched_via, resolved: true } on success — matched_via is 'typeahead' for the structured-API hit, 'slug' for a direct routing hit, 'search_fallback' for the search-page fuzzy match — or { resolved: false, error: 'no listing found' } when homes.com has no match (so the higher-level unified canonical-URL lookup can degrade gracefully). A retryable { resolved: false, status: 'timeout' | 'blocked', retryable: true } means homes.com never answered (bridge timeout) or refused (sign-in / AWS WAF challenge / HTTP 403-429) — NOT a confirmed miss; for blocked, have the user open homes.com and clear the challenge, then retry. KNOWN FAILURE MODE: rural addresses and very-new construction can still miss because homes.com hasn't indexed them yet. Compare the returned street_address against your input to confirm. For larger batches (≥ 3 addresses), prefer homes_resolve_addresses. Read-only; safe to call repeatedly.
Inputs: city (required), state (required), address (required), zip, +2 more.
homes_get_historyGet homes.com property + tax history (combined)ARead-onlyIdempotent
Combined history endpoint — replaces homes_get_property_history + homes_get_tax_history with a single fetch. Returns { property_id, url, listing_events, ownership_events, lien_events, events_normalized, tax_records }. Pass url — the full property detail URL. Series are [] when the listing doesn't carry that section. Cross-MCP-normalized events_normalized carries the same enum across siblings (Listed/PriceChange/Pending/Contingent/Sold/Withdrawn/Relisted/Delisted). Each events_normalized row is { date, type, price?, price_change_pct?, list_to_sale_pct? } — price_change_pct only on PriceChange rows; every other row carries homes.com's "List to Sale" figure as list_to_sale_pct (e.g. the sale-to-list ratio on a Sold row), never as a price change. Read-only; safe to call repeatedly.
Inputs: url (required).
homes_get_market_reportGet a homes.com market report for a locationARead-onlyIdempotent
Fetch homes.com's recently-sold listings for a city/ZIP/neighborhood and derive a market summary: count, median sale price, and average $/sqft across the sample. Pass location — free-text (e.g. 'Brooklyn, NY', '30311'). location is required and must contain Latin letters or digits — a blank or unsluggable location (e.g. only punctuation or non-Latin script) is rejected with an error rather than returning an empty result. Returns { region, slug, sold_summary, sample_sold }. Note: homes.com's sold page typically returns ~40 recent listings — this is a sample-based summary, not an exhaustive market index. Read-only.
Inputs: location (required), view.
homes_get_nearby_listingsGet nearby homes.com listings for a propertyARead-onlyIdempotent
Scrape the nearby-links section of a homes.com detail page (the tabbed list of <ul id="nb-Property"> near the bottom of the page) and return the nearby active listings. Pass url (the property whose neighborhood to inspect). By default returns the For Sale tab; pass include_rentals: true to also include the Rentals tab. Optional limit caps the count. Returns { property_id, url, count, listings: [{ property_id, url, address?, tab }] }. Note: the nearby section is a curated cross-link list, not a comparable-sales set — only URL + address are exposed (no price/beds/baths/sqft/photo). To enrich a row, call homes_get_property on its url. Read-only; safe to call repeatedly.
Inputs: url (required), limit, include_rentals.
homes_get_propertyGet homes.com property detailsARead-onlyIdempotent
Fetch a property's full homes.com record. Pass url — the full property detail URL (e.g. from a homes_search_properties result's url field). Parses the page's Schema.org JSON-LD plus DOM-side sections to return address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, estimated monthly payment, total views, Matterport tour URL, floorplan URLs, schools, HOA fee, lot_size_sqft plus the derived lot_size_acres (round(lot_size_sqft / 43560, 2); both null — never 0 — for condos and listings with no lot), parking, heating/cooling, MLS ID/source, and date posted/modified. Also returns extracted_features (lake_front, hot_tub, basement, furnished, dock, community) derived server-side from the listing description so callers don't have to keyword-parse marketing prose. Pass include_price_history: true to inline the same data homes_get_property_history returns (listing_events, ownership_events, lien_events, events_normalized) under price_history. Pass include_tax_history: true to inline homes_get_tax_history records under tax_history. Both are off by default; opting in costs nothing extra over the dedicated tools (same page fetch). The raw description is omitted by default; pass include_description: true to opt back in. listing_agent carries name / job title / profile url only; pass include_agent_contact: true for the agent's telephone and email. Read-only; safe to call repeatedly.
Inputs: url (required), view, include_description, include_tax_history, +2 more.
homes_get_property_historyGet homes.com property history (DEPRECATED — use homes_get_history)ARead-onlyIdempotent
DEPRECATED — prefer homes_get_history (combined timelines + tax) or homes_get_property({ url, include_price_history: true }). Same data, fewer round trips. Will be removed in a future major version. Three timelines for a homes.com property in one call: listing_events, ownership_events, lien_events. Also returns events_normalized mapped onto the cross-MCP enum. Each events_normalized row is { date, type, price?, price_change_pct?, list_to_sale_pct? } — price_change_pct only on PriceChange rows; every other row carries homes.com's "List to Sale" figure as list_to_sale_pct (e.g. the sale-to-list ratio on a Sold row), never as a price change.
Inputs: url (required).
homes_get_property_photosGet homes.com property photo galleryARead-onlyIdempotent
The full photo gallery for a homes.com listing. homes.com's JSON-LD only exposes one primary image, so this tool scrapes every tag on the property detail page and filters to the homes.com CDN. Pass url — the full homes.com property URL or path (e.g. from a homes_search_properties result's url field). Returns { property_id, url, count, photos: [{ url, position, alt? }] }. Read-only; safe to call repeatedly.
Inputs: url (required).
homes_get_saved_homesGet the signed-in user's saved homes on homes.comARead-onlyIdempotent
The signed-in user's saved (favorited) homes on homes.com. Scrapes /customer/dashboard/favorites/. Returns { count, homes: [{ property_id, url, address?, price?, beds?, baths?, sqft?, status? }] }. REQUIRES the user to be signed into homes.com in their browser tab — if not, the request throws SessionNotAuthenticatedError. Card fields (price/beds/baths/sqft) are best-effort DOM scrapes — they may be missing on some card variants; treat absence as 'not surfaced on the saved-homes card', not 'no value'. Call homes_get_property(url) per row when you need the canonical record. Read-only; safe to call repeatedly.
Inputs: no named parameters.
homes_get_saved_searchesGet the signed-in user's saved searches on homes.comARead-onlyIdempotent
The signed-in user's saved searches on homes.com. Scrapes /customer/dashboard/saved-searches/. Returns { count, searches: [{ name?, url, filters? }] }. REQUIRES the user to be signed into homes.com in their browser tab — if not, the request throws SessionNotAuthenticatedError. name and filters are DOM-scraped from the saved-search card; absence means homes.com didn't render them, not that the search has none. Read-only; safe to call repeatedly.
Inputs: no named parameters.
homes_get_session_contextList all registered Homes.com sessionsARead-onlyIdempotent
List every registered account label plus the current active_session_id. When none are registered, sessions is empty and active_session_id is null. The registry is a label only: it does not change which Homes.com account requests use. Every homes tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.
Inputs: no named parameters.
homes_get_tax_historyGet homes.com property tax history (DEPRECATED — use homes_get_history)ARead-onlyIdempotent
DEPRECATED — prefer homes_get_history (combined timelines + tax) or homes_get_property({ url, include_tax_history: true }). Same data, fewer round trips; note that homes_get_history returns the tax array as tax_records (not records). Will be removed in a future major version. Year-by-year property-tax records: tax paid, total assessed value, land/improvement split.
Inputs: url (required).
homes_healthcheckVerify the ContextMint Bridge connection end-to-endARead-onlyIdempotent
Round-trips a small public www.homes.com URL (/robots.txt) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real www.homes.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.
Inputs: no named parameters.
homes_register_sessionRegister a signed-in Homes.com sessionAIdempotent
Record (or refresh) which Homes.com account the signed-in session belongs to, keyed by account_identity. Re-registering the same identity updates the existing entry. Returns a session_id; pass mark_active: true to mark it as the current account in the same call. The registry is a label only: it does not change which Homes.com account requests use. Every homes tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.
Inputs: account_identity (required), mark_active, auth_expires_at.
homes_resolve_addressesBulk-resolve street addresses to homes.com property URLsARead-onlyIdempotent
Resolve up to 100 street addresses to canonical homes.com property URLs + opaque property hashes in one call. Pass addresses: [{ address, city, state, zip? }, ...]. Fans out to the same rungs homes_get_by_address runs (structured smartsearch typeahead → slug → city/zip search fallback), verifying each candidate with the same whole-token street + unit match. Per-row outcomes parallel homes_get_by_address (with property_hash renamed to property_id here so the field name lines up with homes_bulk_get): { resolved: true, url, property_id, street_address, matched_via } on success — matched_via is 'typeahead', 'slug', or 'search_fallback' — { resolved: false, error } otherwise; one bad row won't fail the whole call. Each row's status is resolved, unresolved, pending (deadline reached — retry it) or blocked (homes.com returned a sign-in / AWS WAF challenge or HTTP 403/429 — not a miss; clear the challenge in the browser and retry). Results preserve input order. Use this instead of looping homes_get_by_address for any batch ≥ 3. Read-only; safe to call repeatedly.
Inputs: addresses (required).
homes_search_propertiesSearch homes.com listingsARead-onlyIdempotent
Search homes.com listings by free-text location (city, ZIP, neighborhood). Optionally filter by property_type (single_family/condo/townhouse/land/mobile/multi_family), listing_type (for_sale/sold/for_rent/open_houses/new_construction), and sort (newest). Slugifies the location into homes.com's URL routing (e.g. 'Atlanta, GA' + condo + for_sale → /atlanta-ga/condos-for-sale/). Parses the embedded Schema.org JSON-LD to return each listing's address, price, beds/baths, sqft, primary photo, listing agent + brokerage, and the homes.com property URL. location is required and must contain Latin letters or digits — a blank or unsluggable location (e.g. only punctuation or non-Latin script) is rejected with an error rather than returning an empty result. KNOWN CAP: homes.com server-renders ~40 listings per page; the response carries truncated: true + total_estimated when the market has more. To enumerate a busy market, price-band or sub-area your search until each segment fits under the cap. Read-only; safe to call repeatedly.
Inputs: location (required), sort, view, limit, +4 more.
homes_set_active_sessionSet the active Homes.com sessionAIdempotent
Mark a previously registered session_id as the current account label, for your own bookkeeping across a conversation. The registry is a label only: it does not change which Homes.com account requests use. Every homes tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.
Inputs: session_id (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 21 tools
Several tools return overlapping property-history/tax data (homes_get_property_history, homes_get_history, homes_get_tax_history, and homes_get_property's include_price_history/include_tax_history flags), and batch/compare variants of get_property also overlap. Descriptions explicitly steer to preferred tools, but an agent must read carefully to avoid deprecated or redundant calls.
All tools use a homes_ prefix and snake_case, and most follow verb_noun (get_property, search_properties, calculate_mortgage). Exceptions are homes_bulk_get (noun_verb order) and homes_healthcheck (no verb), which slightly break the pattern.
21 tools is above the ideal 3-15 range and includes two deprecated tools that could be removed plus three session-management tools that are only loosely related to property data. Each tool does have a distinct niche, but the set feels heavier than necessary.
The surface covers search, detail, history, tax, photos, nearby listings, saved homes/searches, bulk/compare, address resolution, mortgage/affordability/rent-vs-buy calculators, healthcheck, and session management, leaving few gaps for a read-only homes.com client. Minor missing pieces include a direct home-value estimate tool and a true comparable-sales endpoint (market report is sample-based).
Maintenance
Related MCP Connectors
US property search and full listing detail (Redfin-sourced) as agent tools.
Pull property listings, prices, and details from real-estate sites as structured JSON.
Search real-estate deals, rank top areas, run rental/BRRRR/flip analysis, pull sold comps.
Redfin property search and full listing detail as agent tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides real-time access to Zillow real estate data, enabling property search, details, Zestimates, market trends, and mortgage calculations via natural language.11 npm56MIT
- FlicenseNot gradedqualityDmaintenanceExposes ATTOM's real estate API as MCP tools, enabling property details, valuations, assessments, sales, and area data via natural language.2-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to search, compare, and interact with Apartments.com rental listings, including scheduling tours and contacting property managers.10 npmMIT
- 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.21747 npmMIT