Install
openclaw skills install @chrischall/compassLook up real-estate listings, property details, photos, price history, and resolve addresses on Compass via MCP. Triggers on phrases like "find homes on compass in", "compass property details for", "compass photos for", "compass price history for", "resolve this address on compass", "compare these compass listings", "what does compass say about", or any request involving Compass properties, prices, or comparisons. Requires compass-mcp installed and the ContextMint Bridge extension active (see Setup below).
openclaw skills install @chrischall/compassMCP server for Compass — natural-language access to listings, property records, photos, price history, and address resolution. Routes every request through your signed-in compass.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.
⚠️ Compass does not publish a public consumer API. Unlike portals with a JSON API surface, compass.com is a server-rendered React app — there are no
/api/...data endpoints to call. Every tool extracts state from the inline scripts each page server-renders (global.uc.sharedReactAppProps.initialResultsfor search,window.__INITIAL_DATA__.props.listingRelation.listingfor homedetails). Requests are dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.
.mcp.json (project) or ~/.claude/mcp.json (global):
{
"mcpServers": {
"compass": {
"command": "npx",
"args": ["-y", "compass-mcp"]
}
}
}
Get it from the ContextMint Bridge releases:
chrome://extensions → Developer mode → Load unpacked → pick the unzipped folder.ContextMint Bridge is the fetchproxy extension renamed, from the same maintainer (fetchproxy's README points to it); its source is public, so build it yourself or verify a release zip with shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256.
That's it. No API keys, no env vars.
compass_search_properties — Search by location + filters (price band, beds/baths min, home type). Slugifies free-text into Compass's /homes-for-sale/<slug>/<filters>/ URL routing and extracts the SSR listings array. Returns matching listings with price, beds/baths, sqft, address, and the Compass home URL.compass_get_property — Full record by url (a Compass homedetails URL or path) or listing_id_sha alone. When only the sha is supplied, the tool resolves the canonical path internally via the WAF-immune omnisuggest typeahead, then fetches the /homedetails/<slug>/<sha>_lid/ page. Returns address, neighborhood, beds/baths, sqft, lot size, price + $/sqft, monthly charges, MLS status, amenities, schools, parcel number, listing agent, and extracted_features parsed from the description.compass_get_property_photos — Full photo gallery from listing.media[] — original + thumbnail URLs and pixel dimensions. Floorplans/other media gated behind include_all_categories.compass_get_price_history — Listing-history events (Listed / Sold / Pending / Price Change / Delisted) with date, price, status, MLS attribution. Returns both this-listing and prior-listing aggregates.compass_get_comparable_rentals — Nearby rental listings for a property: lifts the target's city/state/zip, then searches rentals in the same locality. Returns rentals: [] (with target context) when none come back.compass_get_agent_listings — Other listings by the same agent, from /agents/<slug>/ (active by default; closed deals via include_closed).compass_get_by_address — Resolve a free-text street address to the canonical Compass URL, listing_id_sha, and pid. Walks the structured typeahead first (WAF-immune), then SSR fallbacks; verifies each candidate against the query before accepting. Returns { resolved: false, error } rather than leaking a wrong URL.compass_resolve_addresses — Bulk version of get_by_address — concurrent server-side resolution of many addresses in one round trip, sharing the same rung walker and per-row error contract.compass_bulk_get — Unbounded structured fetch (up to 200 targets) by url or listing_id_sha. One row per target; per-target errors captured per-row. No summary table.compass_compare_properties — Fetch and align up to 25 properties side-by-side. Per-target errors captured per-row; an opt-in pivoted summary table via include_summary.status: "pending", retryable: true with a top-level pending count — not a miss; re-run just those rows.compass_calculate_mortgage — PITI calculator. Provide home price, interest rate, optional down payment / taxes / insurance / HOA / PMI; returns a full monthly breakdown + total interest over the term.compass_calculate_affordability — Max purchase price under the 28/36 DTI rule from income, debts, down payment, and rates.compass_healthcheck — Round-trips a no-op request (/robots.txt) through the full bridge to confirm the WebSocket bridge is up, the extension is connected, and the signed-in tab is responsive — in one call.compass_register_session — Registers (or refreshes) a logical session keyed by account identity, so several signed-in accounts can be switched between.compass_get_session_context — Lists every registered session and the active one.compass_set_active_session — Flips which registered session answers future requests.compass_get_saved_homes / compass_get_saved_searches — Compass renders /overview/favorites and saved searches via an auth-scoped GraphQL endpoint that isn't reachable from a one-shot fetch. Both throw a clear "not yet supported" error today.compass_search_propertiescompass_get_by_address → compass_get_propertycompass_get_property_photoscompass_get_price_historycompass_compare_propertiescompass_calculate_mortgageSessionNotAuthenticatedError. Local-math tools work either way./listing/<sha>/view redirect; solving a challenge in the Chrome tab once unblocks the SSR pages.