Skip to main content
Glama
chrischall

homes-mcp

by chrischall

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
homes_search_propertiesA

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. 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.

homes_get_propertyA

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. Read-only; safe to call repeatedly.

homes_calculate_mortgageA

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. 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.

homes_compare_propertiesA

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. Calls are concurrent. The raw description is omitted by default; pass include_description: true to keep the marketing prose. The cross-row summary table duplicates per-property fields (~30% of response weight); it is OPT-IN via include_summary: true.

homes_calculate_affordabilityA

Solve for the maximum home price you can afford under the standard 28/36 DTI rule. Inputs: monthly income, recurring monthly debts (car/student loans), down payment, interest rate, optional property-tax rate / insurance / HOA / loan term. Output: max home price, binding constraint (front-end vs back-end), and the PITI breakdown at that price. Identical math to zillow-mcp and redfin-mcp. No network — pure local math.

homes_get_property_photosA

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.

homes_healthcheckA

Round-trips a small public homes.com URL (/robots.txt) through the fetchproxy bridge and returns diagnostics: the bridge's role (host/peer/null), port, version, the elapsed round-trip time, and a plain-English hint that distinguishes 'bridge never came up' from 'extension not connected' from 'real homes.com-side problem'. Call this when a real homes.com tool times out and you want to know which hop failed. Read-only, no auth required.

homes_get_property_historyA

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.

homes_get_tax_historyA

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.

homes_get_historyA

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). Read-only; safe to call repeatedly.

homes_get_nearby_listingsA

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.

homes_get_market_reportA

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'). 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.

homes_get_saved_homesA

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.

homes_get_saved_searchesA

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.

homes_estimate_rent_vs_buyA

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 (renter invests it at investment_return_rate, default 6%/yr). Returns year-by-year cumulative costs, break-even year, and the net difference at horizon. 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.

homes_get_by_addressA

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). 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.

homes_register_sessionA

Register (or refresh) an authenticated Homes session keyed by signed-in account identity. Re-registering the same account_identity updates the existing session rather than creating a duplicate. Returns the session_id to use when routing per-tool calls. The first registered session becomes the default active_session_id. Pass mark_active: true to make the newly-registered session active in the same call.

homes_set_active_sessionA

Switch which registered session subsequent tool calls route through by default. Pass a session_id previously returned by homes_register_session. Tools that accept an explicit session_id parameter override this default per-call.

homes_get_session_contextA

Return the full set of registered sessions plus the current active_session_id. When no sessions are registered, sessions is empty and active_session_id is null.

homes_bulk_getA

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 / error / pending). 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. 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.

homes_resolve_addressesA

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. Results preserve input order. Use this instead of looping homes_get_by_address for any batch ≥ 3. Read-only; safe to call repeatedly.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/chrischall/homes-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server