{"id":"96869ef5-bd2d-4f2d-8d64-e295a453f768","entityType":"agent","slug":"clawhub-chrischall-homes","name":"homes","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-homes","canonicalPath":"/agent/clawhub-chrischall-homes","generatedAt":"2026-10-10T11:51:48.393Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:22:18.243Z","emptyReason":null},"description":"Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.5K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:homes","sourceUrl":"https://clawhub.ai/chrischall/homes","homepage":"https://clawhub.ai/chrischall/skills/homes","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/homes","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/homes","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"homes technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:22:18.243Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:22:18.243Z","emptyReason":null},"stars":null,"forks":null,"downloads":1528,"packageName":null,"latestVersion":"2.1.10","tractionLabel":"1.5K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:22:18.242Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T09:22:18.243Z","lastCrawledAt":"2026-10-10T09:22:18.242Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T09:22:18.242Z","lastVerifiedAt":null,"highlights":[{"version":"2.1.10","createdAt":"2026-10-09T23:24:40.819Z","changelog":"- Removed the skill-card.md file. - No changes to functionality or usage; this release only removes documentation.","fileCount":3,"zipByteSize":6579},{"version":"2.1.9","createdAt":"2026-10-07T13:40:56.586Z","changelog":"- Removed the file skill-card.md from the skill package. - No changes to user-facing features or functionality. - All setup and usage instructions remain unchanged.","fileCount":3,"zipByteSize":6666},{"version":"2.1.8","createdAt":"2026-10-05T02:49:37.960Z","changelog":"- Removed the skill-card.md file. - No changes to functionality or features. - Documentation and setup instructions remain unchanged.","fileCount":3,"zipByteSize":6608},{"version":"2.1.7","createdAt":"2026-10-03T01:46:17.153Z","changelog":"- Removed the file skill-card.md. - No changes to functionality or documentation, only a file cleanup.","fileCount":3,"zipByteSize":6729},{"version":"2.1.6","createdAt":"2026-09-28T13:56:03.016Z","changelog":"- Updated setup instructions to require the ContextMint Bridge extension instead of the fetchproxy extension. - All mentions of \"fetchproxy extension\" replaced with \"ContextMint Bridge\" throughout documentation. - Clarified installation and Chrome/Safari availability of ContextMint Bridge. - Removed the redundant skill-card.md file.","fileCount":3,"zipByteSize":6642},{"version":"2.1.5","createdAt":"2026-09-25T15:51:37.680Z","changelog":"- Removed the skill-card.md file. - No user-facing features or behavior changed. This is a minor maintenance update.","fileCount":3,"zipByteSize":6319},{"version":"2.1.4","createdAt":"2026-09-24T15:05:44.815Z","changelog":"- The skill card file (skill-card.md) was removed. - Minor updates to SKILL.md, especially in the Diagnostics & sessions section: clarified that session label switching does not change which account is used; requests always route through the signed-in account in the fetchproxy browser tab. - No user-facing feature changes.","fileCount":3,"zipByteSize":6438},{"version":"2.1.3","createdAt":"2026-09-23T21:41:36.218Z","changelog":"- Removed sample documentation file skill-card.md. - No changes to skill functions, features, or setup instructions. - Documentation now only available in SKILL.md.","fileCount":3,"zipByteSize":6505}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:homes","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:homes` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/chrischall/homes before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T11:51:48.389Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-homes/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T09:22:18.243Z","emptyReason":null},"readme":"Skill: homes\n\nOwner: chrischall\n\nSummary: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n\nTags: latest:2.1.10\n\nVersion history:\n\nv2.1.10 | 2026-10-09T23:24:40.819Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or usage; this release only removes documentation.\n\nv2.1.9 | 2026-10-07T13:40:56.586Z | auto\n\n- Removed the file skill-card.md from the skill package.\n- No changes to user-facing features or functionality.\n- All setup and usage instructions remain unchanged.\n\nv2.1.8 | 2026-10-05T02:49:37.960Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or features.\n- Documentation and setup instructions remain unchanged.\n\nv2.1.7 | 2026-10-03T01:46:17.153Z | auto\n\n- Removed the file skill-card.md.\n- No changes to functionality or documentation, only a file cleanup.\n\nv2.1.6 | 2026-09-28T13:56:03.016Z | auto\n\n- Updated setup instructions to require the ContextMint Bridge extension instead of the fetchproxy extension.\n- All mentions of \"fetchproxy extension\" replaced with \"ContextMint Bridge\" throughout documentation.\n- Clarified installation and Chrome/Safari availability of ContextMint Bridge.\n- Removed the redundant skill-card.md file.\n\nv2.1.5 | 2026-09-25T15:51:37.680Z | auto\n\n- Removed the skill-card.md file.\n- No user-facing features or behavior changed. This is a minor maintenance update.\n\nv2.1.4 | 2026-09-24T15:05:44.815Z | auto\n\n- The skill card file (skill-card.md) was removed.\n- Minor updates to SKILL.md, especially in the Diagnostics & sessions section: clarified that session label switching does not change which account is used; requests always route through the signed-in account in the fetchproxy browser tab.\n- No user-facing feature changes.\n\nv2.1.3 | 2026-09-23T21:41:36.218Z | auto\n\n- Removed sample documentation file skill-card.md.\n- No changes to skill functions, features, or setup instructions.\n- Documentation now only available in SKILL.md.\n\nv2.1.2 | 2026-09-23T15:41:26.634Z | auto\n\n- Removed the sample file: skill-card.md.\n- No changes to core features or setup; documentation remains the same.\n- No user-facing functionality affected in this version.\n\nv2.1.1 | 2026-09-21T16:35:58.363Z | auto\n\n## homes 2.1.1\n\n- Removed the skill-card.md file.\n- No changes to user-facing functionality.\n\nv2.1.0 | 2026-09-20T02:50:30.395Z | auto\n\n- Removed the skill card file (skill-card.md).  \n- No changes to functional capabilities or user-facing features.  \n- Documentation and setup instructions remain unchanged.  \n- This update removes auxiliary documentation only.\n\nv2.0.0 | 2026-09-17T17:51:22.462Z | auto\n\n- removed 1 file(s).\n- Updated SKILL.md and bundle contents.\n\nv1.4.5 | 2026-09-15T18:26:27.950Z | auto\n\n- Removed the file: skill-card.md\n- No other user-facing changes.\n\nv1.4.4 | 2026-09-14T19:58:57.235Z | auto\n\n- Removed the skill-card.md file.\n- No changes to core functionality or user-facing features.\n\nv1.4.3 | 2026-09-10T17:49:56.383Z | auto\n\n- Removed the skill-card.md file.\n- No functional changes to the skill code or features.\n- Documentation and setup instructions remain unchanged.\n\nv1.4.2 | 2026-09-09T21:16:16.356Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or user-facing features.\n- Internal documentation cleanup only.\n\nv1.4.1 | 2026-09-05T00:51:26.878Z | auto\n\n**homes v1.4.1 Changelog**\n\n- Added documentation for the new `view` parameter, clarifying default and full response shapes for five key tools.\n- Explained the distinction between `compact` and `full` responses, including which fields are media-stripped by default.\n- Noted that `primary_photo_url` and `floorplan_urls` are omitted in the compact view unless `view: \"full\"` is specified.\n- Removed the redundant `skill-card.md` file.\n- General documentation improvements for usage clarity and expected behavior.\n\nv1.4.0 | 2026-09-04T22:20:48.137Z | auto\n\n- Removed the skill summary card file (skill-card.md).\n- No user-facing features or tool changes.\n- All existing setup instructions, tools, and docs remain unchanged.\n\nv1.3.0 | 2026-09-02T23:27:07.139Z | auto\n\n- Updated diagnostics section: The `homes_healthcheck` tool now specifies error output for extension pairing states (e.g., \"extension not connected / pair code pending\").\n- Removed the unneeded `skill-card.md` file.\n\nv1.2.0 | 2026-08-29T13:54:20.342Z | auto\n\n- Removed the skill description card file (skill-card.md).\n- No changes to core functionality or documentation within SKILL.md.\n- All features and setup instructions remain unchanged.\n\nv1.1.5 | 2026-08-28T21:07:31.589Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to features or functionality.\n\nv1.1.4 | 2026-08-28T11:34:56.854Z | auto\n\n- Updated skill identifier from \"homes-mcp\" to \"homes\" throughout documentation.\n- Removed the redundant skill-card.md file.\n- No functional or API changes; this is a documentation and cleanup update only.\n\nv1.1.3 | 2026-08-06T00:43:10.154Z | auto\n\n- Removed the skill-card.md file.\n- No changes to skill capabilities or usage.\n- Documentation and tooling otherwise unchanged.\n\nv1.1.2 | 2026-07-30T12:53:55.155Z | auto\n\n**homes-mcp 1.1.2**  \n\n- Clarified SKILL.md with detailed setup and usage instructions, tool descriptions, and gotchas for the homes-mcp integration with homes.com.\n- Triggers and capabilities clearly documented for property searches, details, history, market data, saved items, calculators, and diagnostics via natural language.\n- Emphasizes requirement for the fetchproxy browser extension and a signed-in homes.com tab.\n- Deprecation notices for superseded tools.\n- No changes to code or functionality described. Documentation improvements focus.\n\nArchive index:\n\nArchive v2.1.10: 3 files, 6579 bytes\n\nFiles: skill-card.md (1958b), SKILL.md (11858b), _meta.json (125b)\n\nFile v2.1.10:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the ContextMint Bridge extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension is installed separately — it is **not** bundled in this repo. Get it from the [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases):\n\n- **Chrome:** unzip the Chrome zip, then `chrome://extensions` → Developer mode → Load unpacked.\n- **Safari:** not available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now.\n\nContextMint Bridge is the renamed fetchproxy extension from the same maintainer ([fetchproxy's README](https://github.com/chrischall/fetchproxy#extension) points to it); its source is public, so build it yourself or verify a release zip with `shasum -a 256 -c <zip>.sha256`.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.10:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.10\",\n  \"publishedAt\": 1791588280819\n}\n\nFile v2.1.10:skill-card.md\n\n## Description:\n\nLooks up homes.com listings, property details, price and tax history, market reports, saved homes, and photos through a browser-connected MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHome buyers, real-estate professionals, and other agents use this skill to research US property listings, compare homes, inspect price and tax history, and access their saved homes and searches.\n\n### Deployment Geography for Use:\n\nGlobal (US property data)\n\n## Known Risks and Mitigations:\n\nRisk: Installation runs the homes-mcp npm package and requires the ContextMint Bridge browser extension.\n\nMitigation: Review the package and extension before installation.\n\nRisk: The bridge uses the active homes.com browser session, including access to signed-in saved homes and searches.\n\nMitigation: Use only when comfortable granting read-only access to listing data and account-gated saved items through that session.\n\n## Reference(s):\n\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n- [ClawHub homes release](https://clawhub.ai/chrischall/skills/homes)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Guidance]\n\n**Output Format:** [Natural-language responses with property data and comparisons]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Listing and photo details depend on homes.com page data; saved items require a signed-in browser session.]\n\n## Skill Version(s):\n\n2.1.10 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.9: 3 files, 6666 bytes\n\nFiles: skill-card.md (2044b), SKILL.md (11858b), _meta.json (124b)\n\nFile v2.1.9:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the ContextMint Bridge extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension is installed separately — it is **not** bundled in this repo. Get it from the [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases):\n\n- **Chrome:** unzip the Chrome zip, then `chrome://extensions` → Developer mode → Load unpacked.\n- **Safari:** not available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now.\n\nContextMint Bridge is the renamed fetchproxy extension from the same maintainer ([fetchproxy's README](https://github.com/chrischall/fetchproxy#extension) points to it); its source is public, so build it yourself or verify a release zip with `shasum -a 256 -c <zip>.sha256`.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.9:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.9\",\n  \"publishedAt\": 1791380456586\n}\n\nFile v2.1.9:skill-card.md\n\n## Description:\n\nLooks up Homes.com listings, property details, price and tax history, market reports, saved homes, and photo galleries through a browser-connected MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHomebuyers, real-estate professionals, and other users can ask an agent to research Homes.com listings, compare properties, review price and tax history, and estimate housing costs.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external MCP package and browser extension can access the Homes.com browser session used for lookups.\n\nMitigation: Verify package and extension sources or release hashes before installation, and use only an account or session you are comfortable exposing to this integration.\n\nRisk: The skill reads Homes.com pages rather than an official public API, so retrieved details may be incomplete or change when pages change.\n\nMitigation: Check consequential property details against the live listing before relying on them.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Guidance]\n\n**Output Format:** [Natural-language responses summarizing property data and calculations]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Property and photo links may be included; saved-home information requires a signed-in session.]\n\n## Skill Version(s):\n\n2.1.9 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.8: 3 files, 6608 bytes\n\nFiles: skill-card.md (2007b), SKILL.md (11858b), _meta.json (124b)\n\nFile v2.1.8:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the ContextMint Bridge extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension is installed separately — it is **not** bundled in this repo. Get it from the [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases):\n\n- **Chrome:** unzip the Chrome zip, then `chrome://extensions` → Developer mode → Load unpacked.\n- **Safari:** not available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now.\n\nContextMint Bridge is the renamed fetchproxy extension from the same maintainer ([fetchproxy's README](https://github.com/chrischall/fetchproxy#extension) points to it); its source is public, so build it yourself or verify a release zip with `shasum -a 256 -c <zip>.sha256`.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.8:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.8\",\n  \"publishedAt\": 1791168577960\n}\n\nFile v2.1.8:skill-card.md\n\n## Description:\n\nHelps agents explore homes.com listings, property records, market reports, saved homes, and photos through a browser session.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHomebuyers, real-estate professionals, and their agents can search and compare homes.com properties, review price and tax history, inspect market reports and photos, and retrieve saved homes or searches from a signed-in account.\n\n### Deployment Geography for Use:\n\nUnited States\n\n## Known Risks and Mitigations:\n\nRisk: The external homes-mcp package and ContextMint Bridge extension access listing data through the active browser session.\n\nMitigation: Review and trust both components before installation, and use only a browser session you intend to share with the agent.\n\nRisk: Saved-home and saved-search requests can expose data from the account signed in to the active homes.com tab.\n\nMitigation: Confirm the signed-in account and request saved data only when it is needed.\n\n## Reference(s):\n\n- [ClawHub homes skill release](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp package](https://www.npmjs.com/package/homes-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Markdown with property details, comparisons, calculations, and links]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Photo URLs require the photo tool or full view; saved homes and searches require a signed-in homes.com tab.]\n\n## Skill Version(s):\n\n2.1.8 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.7: 3 files, 6729 bytes\n\nFiles: skill-card.md (2266b), SKILL.md (11858b), _meta.json (124b)\n\nFile v2.1.7:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the ContextMint Bridge extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension is installed separately — it is **not** bundled in this repo. Get it from the [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases):\n\n- **Chrome:** unzip the Chrome zip, then `chrome://extensions` → Developer mode → Load unpacked.\n- **Safari:** not available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now.\n\nContextMint Bridge is the renamed fetchproxy extension from the same maintainer ([fetchproxy's README](https://github.com/chrischall/fetchproxy#extension) points to it); its source is public, so build it yourself or verify a release zip with `shasum -a 256 -c <zip>.sha256`.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.7:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.7\",\n  \"publishedAt\": 1790991977153\n}\n\nFile v2.1.7:skill-card.md\n\n## Description:\n\nLooks up homes.com listings, property details, price and tax history, market reports, saved homes, and photo galleries through an MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHomebuyers, real-estate professionals, and developers use this skill to research US listings, compare properties, review price and tax history, and access their saved homes and searches.\n\n### Deployment Geography for Use:\n\nUnited States\n\n## Known Risks and Mitigations:\n\nRisk: Using the external package and browser extension requires trust in both components.\n\nMitigation: Review the package and extension before installation and use only releases you trust.\n\nRisk: Saved homes and searches can expose private data from whichever homes.com account is signed in to the active browser tab.\n\nMitigation: Confirm the signed-in account before requesting saved data and avoid sharing its results unintentionally.\n\nRisk: Listing and financial details from page content may be incomplete or outdated.\n\nMitigation: Verify consequential property and cost details against current primary records before acting.\n\n## Reference(s):\n\n- [Homes skill release on ClawHub](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp package](https://www.npmjs.com/package/homes-mcp)\n- [homes-mcp project source linked in the skill](https://github.com/chrischall/homes-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Guidance]\n\n**Output Format:** [Text or Markdown summaries of property records, histories, market data, and calculations]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Photo links are available in full view; saved homes and searches reflect the active browser account.]\n\n## Skill Version(s):\n\n2.1.7 (source: server-resolved ClawHub release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.6: 3 files, 6642 bytes\n\nFiles: skill-card.md (1979b), SKILL.md (11858b), _meta.json (124b)\n\nFile v2.1.6:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the ContextMint Bridge extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension is installed separately — it is **not** bundled in this repo. Get it from the [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases):\n\n- **Chrome:** unzip the Chrome zip, then `chrome://extensions` → Developer mode → Load unpacked.\n- **Safari:** not available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now.\n\nContextMint Bridge is the renamed fetchproxy extension from the same maintainer ([fetchproxy's README](https://github.com/chrischall/fetchproxy#extension) points to it); its source is public, so build it yourself or verify a release zip with `shasum -a 256 -c <zip>.sha256`.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.6:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.6\",\n  \"publishedAt\": 1790603763016\n}\n\nFile v2.1.6:skill-card.md\n\n## Description:\n\nHelps agents look up homes.com listings, property details, price and tax history, market reports, saved homes, and photos through MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople and agents researching US real estate can retrieve homes.com listings, property and market information, saved items, and photos using a browser-connected MCP server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external npm server and browser extension can access homes.com pages available in the signed-in browser session.\n\nMitigation: Verify that you trust both components before installation and limit use of the signed-in session to appropriate data.\n\nRisk: Scraped listings and calculated housing figures may be incomplete or unsuitable as financial advice.\n\nMitigation: Check important property and pricing details against authoritative sources; do not treat results as financial advice.\n\n## Reference(s):\n\n- [ClawHub homes skill release](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [ContextMint Bridge extension releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, Configuration instructions]\n\n**Output Format:** [Markdown with JSON configuration and shell command examples]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only property information; photo links require the full view or photo tool.]\n\n## Skill Version(s):\n\n2.1.6 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.5: 3 files, 6319 bytes\n\nFiles: skill-card.md (1836b), SKILL.md (11456b), _meta.json (124b)\n\nFile v2.1.5:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the fetchproxy extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the fetchproxy browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the fetchproxy extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the fetchproxy extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension lives in its own repo and is installed separately — it is **not** bundled in this repo. Follow the install instructions at [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then load the built extension in Chrome via `chrome://extensions` → Developer mode → Load unpacked.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.5:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.5\",\n  \"publishedAt\": 1790351497680\n}\n\nFile v2.1.5:skill-card.md\n\n## Description:\n\nHelps agents research homes.com listings, property details, price and tax history, market reports, saved homes, and photo galleries.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHomebuyers, real-estate professionals, and their agents use this skill to research US property listings, compare homes, review price and tax histories, and calculate housing costs using homes.com data.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The separate server package and browser extension can access listing data through a signed-in homes.com tab, including saved homes and searches.\n\nMitigation: Review both external components before installing, limit use to read-only property research, and avoid using a sensitive browser session.\n\n## Reference(s):\n\n- [Homes skill listing](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp project](https://github.com/chrischall/homes-mcp)\n- [fetchproxy browser extension](https://github.com/chrischall/fetchproxy)\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Markdown summaries of property data and housing calculations]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Property photos may be returned as URLs; saved homes and searches require a signed-in homes.com tab.]\n\n## Skill Version(s):\n\n2.1.5 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.4: 3 files, 6438 bytes\n\nFiles: skill-card.md (2139b), SKILL.md (11456b), _meta.json (124b)\n\nFile v2.1.4:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the fetchproxy extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the fetchproxy browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the fetchproxy extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the fetchproxy extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension lives in its own repo and is installed separately — it is **not** bundled in this repo. Follow the install instructions at [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then load the built extension in Chrome via `chrome://extensions` → Developer mode → Load unpacked.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch account *labels* for your own bookkeeping. Label only: switching does not change which account requests use; they always go through whichever account the fetchproxy browser tab is signed into.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.4\",\n  \"publishedAt\": 1790262344815\n}\n\nFile v2.1.4:skill-card.md\n\n## Description:\n\nLook up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, developers, and real-estate researchers use this skill to query homes.com listings, property details, price and tax history, market reports, saved homes, and photo galleries through the homes-mcp server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on the external homes-mcp npm package and a separate fetchproxy browser extension.\n\nMitigation: Install only if you trust those components and review their behavior before use.\n\nRisk: A signed-in browser session can expose saved homes and saved searches from the user's homes.com account.\n\nMitigation: Use an account and browser session appropriate for the task, and request saved-home or saved-search data only when that access is intended.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [homes-mcp source linked by artifact](https://github.com/chrischall/homes-mcp)\n- [fetchproxy source linked by artifact](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON configuration examples and MCP tool usage descriptions]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The skill guides agents toward read-only MCP tools and local calculator outputs; compact views strip media URLs by default.]\n\n## Skill Version(s):\n\n2.1.4 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.3: 3 files, 6505 bytes\n\nFiles: skill-card.md (2403b), SKILL.md (11291b), _meta.json (124b)\n\nFile v2.1.3:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the fetchproxy extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the fetchproxy browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the fetchproxy extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the fetchproxy extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension lives in its own repo and is installed separately — it is **not** bundled in this repo. Follow the install instructions at [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then load the built extension in Chrome via `chrome://extensions` → Developer mode → Load unpacked.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch logical homes.com sessions.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.3\",\n  \"publishedAt\": 1790199696218\n}\n\nFile v2.1.3:skill-card.md\n\n## Description:\n\nLook up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and agents use this skill to search homes.com listings, inspect property details, compare homes, retrieve history and market data, and work with saved homes or searches through a signed-in browser session.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill relies on an external npm package and a separate Chrome extension that are not bundled in the artifact.\n\nMitigation: Review the homes-mcp package and fetchproxy extension before installation, and install them only from sources you trust.\n\nRisk: Some tools can use a signed-in homes.com browser session to read saved homes or saved searches.\n\nMitigation: Use the skill only in browser sessions where this account-level access is intended, and avoid invoking saved-home or saved-search tools when that data should remain private.\n\nRisk: homes.com may present AWS WAF challenges or session-authentication failures that interrupt data retrieval.\n\nMitigation: Confirm the homes.com tab is signed in and has cleared any browser challenge before relying on returned listing or history data.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [fetchproxy extension setup](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, configuration, guidance]\n\n**Output Format:** [Markdown or text responses with structured property data and setup snippets when needed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include listing URLs, property records, history rows, market summaries, saved-home data, photo URLs, or local calculator results depending on the invoked MCP tool.]\n\n## Skill Version(s):\n\n2.1.3 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.2: 3 files, 6494 bytes\n\nFiles: skill-card.md (2416b), SKILL.md (11291b), _meta.json (124b)\n\nFile v2.1.2:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the fetchproxy extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the fetchproxy browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the fetchproxy extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the fetchproxy extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension lives in its own repo and is installed separately — it is **not** bundled in this repo. Follow the install instructions at [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then load the built extension in Chrome via `chrome://extensions` → Developer mode → Load unpacked.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch logical homes.com sessions.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.2\",\n  \"publishedAt\": 1790178086634\n}\n\nFile v2.1.2:skill-card.md\n\n## Description:\n\nLooks up real-estate listings, property details, price and tax history, market reports, saved homes, and photo galleries on homes.com through the homes-mcp server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, developers, and real-estate analysts use this skill to ask an agent for homes.com search results, property records, market reports, saved homes, photos, and local mortgage or affordability calculations.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on an external npm MCP package and the fetchproxy browser extension using a signed-in homes.com tab.\n\nMitigation: Install only if that browser-backed access model is acceptable, prefer project-level MCP configuration, and keep the active session scoped to the intended task.\n\nRisk: Saved-homes and saved-searches tools can expose signed-in account data to the agent.\n\nMitigation: Use saved-homes or saved-searches tools only when that account data is intended to be shared with the agent.\n\nRisk: homes.com pages can require a browser challenge, and some tools require a full property URL or user-supplied rent value.\n\nMitigation: Resolve browser session issues in the signed-in tab and provide required inputs before relying on detail, history, comparison, or rent-vs-buy outputs.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/homes)\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [homes-mcp source repository](https://github.com/chrischall/homes-mcp)\n- [fetchproxy extension repository](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, JSON, guidance]\n\n**Output Format:** [Markdown summaries with structured MCP tool results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Some tools require a signed-in homes.com browser session; photo and full-view responses can include homes.com media URLs.]\n\n## Skill Version(s):\n\n2.1.2 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.1: 3 files, 6274 bytes\n\nFiles: skill-card.md (1968b), SKILL.md (11291b), _meta.json (124b)\n\nFile v2.1.1:SKILL.md\n\n---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the fetchproxy extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the fetchproxy browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the fetchproxy extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the fetchproxy extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension lives in its own repo and is installed separately — it is **not** bundled in this repo. Follow the install instructions at [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then load the built extension in Chrome via `chrome://extensions` → Developer mode → Load unpacked.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each listing's address, price, beds/baths, sqft, listing agent + brokerage — and, on `view: \"full\"`, `primary_photo_url` (the default compact rung strips it; see [Response shape](#response-shape-view)). Caps at the ~40-listing SSR page; sets `truncated`/`total_estimated` when the market has more.\n- **`homes_get_by_address`** — Resolve a single US street address to its canonical homes.com property URL + opaque property hash. Walks structured smartsearch typeahead → slug routing → city/zip search-fallback, verifying each candidate with a whole-token street + unit match. Returns `matched_via` and degrades gracefully to `{ resolved: false }`.\n- **`homes_resolve_addresses`** — Bulk version of `homes_get_by_address` (up to 100 addresses, input order preserved, per-row outcomes). Prefer for any batch ≥ 3.\n\n### Property details\n\n- **`homes_get_property`** — Full record for a property by URL. Parses JSON-LD + DOM-side sections: address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, schools, HOA (raw + normalized monthly), lot size (sqft + derived acres), parking, heating/cooling, MLS id/source, tax, days-on-market, price drops, and server-derived `extracted_features`. Optional inline `price_history` / `tax_history`.\n- **`homes_get_property_photos`** — Full photo gallery scraped from `<img>` tags on the detail page (JSON-LD carries only one image). Returns `{ url, position, alt? }` per photo, filtered to the homes.com CDN.\n- **`homes_bulk_get`** — Fetch up to 200 properties' structured records in one call (per-row errors captured, input order preserved). Use instead of looping when you just want the records.\n- **`homes_compare_properties`** — Side-by-side comparison of 2–8 properties with an aligned summary table. Concurrent fetches, per-row errors.\n- **`homes_get_nearby_listings`** — The \"Homes for Sale Near This Property\" cross-link cards from a detail page (For Sale, optionally Rentals). URL + address only.\n\n### History & market\n\n- **`homes_get_history`** — Combined price + tax history in one fetch: `listing_events`, `ownership_events`, `lien_events`, cross-MCP-normalized `events_normalized`, and `tax_records`. (Preferred over the two split tools below.)\n- **`homes_get_property_history`** — *Deprecated* — price/ownership/lien timelines only. Prefer `homes_get_history`.\n- **`homes_get_tax_history`** — *Deprecated* — year-by-year tax records only. Prefer `homes_get_history`.\n- **`homes_get_market_report`** — Median / average / $-per-sqft for a market, derived from the `sold` search page's JSON-LD.\n\n### Saved (auth-gated)\n\n- **`homes_get_saved_homes`** — The signed-in user's saved (favorited) homes. Requires an authenticated homes.com tab.\n- **`homes_get_saved_searches`** — The signed-in user's saved searches. Requires an authenticated homes.com tab.\n\n### Local calculators (no network)\n\n- **`homes_calculate_mortgage`** — Local PITI calculator (price, rate, down payment, taxes, insurance, HOA, PMI → monthly breakdown).\n- **`homes_calculate_affordability`** — Local affordability calculator — max purchase price under standard 28/36 DTI.\n- **`homes_estimate_rent_vs_buy`** — Local rent-vs-buy model. **You must supply `monthly_rent`** — homes.com publishes no rental estimate to impute it (see Gotchas).\n\n### Diagnostics & sessions\n\n- **`homes_healthcheck`** — Round-trips `/robots.txt` through the fetchproxy bridge; distinguishes \"bridge down\" vs \"extension not connected / pair code pending\" (`bridge.session_state`, `error.kind: session_not_ready`) vs \"homes.com-side problem.\"\n- **`homes_get_session_context`**, **`homes_register_session`**, **`homes_set_active_session`** — List / register / switch logical homes.com sessions.\n\n## Response shape (`view`)\n\nFive tools take `view: \"compact\" | \"full\"`, and **`compact` is the default** —\nyou get the slim shape without asking for it: `homes_search_properties`,\n`homes_get_property`, `homes_bulk_get`, `homes_compare_properties`,\n`homes_get_market_report`.\n\n**Compact here is media stripping, not a field projection — do not expect a\nfield list.** It removes image URLs and nothing else. These tools hand back\nwhat the page's JSON-LD said, close to verbatim, and this repo holds no\nverified record of which of homes.com's fields matter, so it does not claim to\nkeep some and drop others: a listing that came back with holes in it would read\nexactly like a verified answer. Stripping is subtractive, so it cannot lose a\nfield nobody knew about. Everything you act on survives — `property_id`, `url`,\n`price`, beds/baths/sqft, agent, `matterport_url` (a link to a PAGE you can\nopen, not an image), the whole `description` byte-for-byte.\n\n**The two fields this actually costs you, both minted by this server:**\n\n- **`primary_photo_url`** — built by the formatter, not a homes.com field. It\n  is gone by default on all five, including every row of a `homes_bulk_get` or\n  `homes_compare_properties` fan-out and every entry of a market report's\n  `sample_sold`.\n- **`floorplan_urls`** — scraped out of the detail page's own `<img>` tags by\n  `homes_get_property`. Worth knowing that this one is dropped by NAME: it\n  holds an ARRAY, and the fleet's URL rule is tested against object values and\n  never against array elements, so before the key was named it was not\n  \"sometimes kept\" — it was never stripped at all.\n\nPass `view: \"full\"` to get both back, with homes.com's payload otherwise\nuntouched. There is deliberately **no `raw` rung**: nothing normalises the\npayload beyond the formatting these tools already do, so `full` already IS the\nuntouched result and a third value would silently alias it.\n\n**`homes_get_property_photos` takes no `view`, and that is the important\nexclusion.** Its PRODUCT is the image. Compact there would not shrink the\nresponse, it would EMPTY it — `photos` is itself a media key, so the whole\narray vanishes while `count: 12` goes on claiming twelve. Never ask for a\ncompact rung there and never expect one; the tool is tested to keep its URLs\neven if a stray `view` is passed.\n\nThe other fifteen tools take no `view` because there is nothing in their output\nto strip:\n\n- `homes_get_saved_homes` / `homes_get_saved_searches` are card scrapes —\n  `{ property_id, url, address, price, beds, baths, sqft, status }` and\n  `{ name, url, filters }`, no images.\n- `homes_get_nearby_listings` returns URL + address only.\n- `homes_get_history`, `homes_get_property_history` and `homes_get_tax_history`\n  return event and tax rows.\n- `homes_get_by_address` and `homes_resolve_addresses` return a URL and a\n  verdict.\n- `homes_calculate_mortgage`, `homes_calculate_affordability` and\n  `homes_estimate_rent_vs_buy` are local arithmetic — no network, no payload.\n- `homes_healthcheck` and the three session tools return status.\n\nPassing `view` to any of them is not an error and not a warning: MCP tool\nschemas are non-strict, so the key is dropped and you get that tool's ordinary\noutput.\n\n## Trigger examples\n\n- \"Find me condos for sale in Atlanta under $500k on homes.com\" → `homes_search_properties` (with `price_max`)\n- \"Resolve 3199 Delmar Ln NW, Atlanta GA to a homes.com listing\" → `homes_get_by_address`\n- \"What's the price history for this homes.com listing?\" → `homes_get_history` (or `homes_get_property` with `include_price_history`)\n- \"Show me all photos for this homes.com listing\" → `homes_get_property_photos`\n- \"What's the market report for sold homes in Brooklyn?\" → `homes_get_market_report`\n- \"List my saved homes on homes.com\" → `homes_get_saved_homes`\n- \"Monthly payment on a $500k home, 20% down, 6.5% rate\" → `homes_calculate_mortgage`\n\n## Gotchas\n\n- **AWS WAF challenge.** homes.com (CoStar) gates traffic through AWS WAF and occasionally serves a challenge page to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches; the client detects the interstitial and throws `SessionNotAuthenticatedError`.\n- **No write surface.** All tools are read-only. Saving a home / contact forms are not implemented.\n- **Property URL is required for detail tools.** `get_property`, `get_property_photos`, `compare_properties`, history, photos, and nearby all need a full property URL from a search or `get_by_address` result — there's no stable way to construct one from a property id alone.\n- **No rental estimate to impute.** homes.com publishes no `rent_zestimate` analogue, so `homes_estimate_rent_vs_buy` requires you to pass `monthly_rent`. For a rent figure to plug in, use a sibling MCP (`zillow_get_property` carries `rent_zestimate`; `redfin_get_comparable_rentals` returns rental comps).\n\nFile v2.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.1\",\n  \"publishedAt\": 1790008558363\n}\n\nFile v2.1.1:skill-card.md\n\n## Description:\n\nLook up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agents use this skill to query homes.com listings, property details, market reports, price and tax history, photos, saved homes, and local home-finance calculations through the homes-mcp integration.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can use a signed-in homes.com browser session to read account-specific saved homes and searches.\n\nMitigation: Use saved homes and saved searches tools only when the user is comfortable letting the agent read that account-specific homes.com data.\n\nRisk: The skill depends on the homes-mcp package and the fetchproxy browser extension.\n\nMitigation: Review the homes-mcp package and fetchproxy extension before installing or enabling the integration.\n\n## Reference(s):\n\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [homes-mcp source](https://github.com/chrischall/homes-mcp)\n- [fetchproxy extension](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, configuration, guidance]\n\n**Output Format:** [Markdown guidance and structured MCP tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only homes.com data access through a signed-in browser session; selected compact responses strip media URLs by default.]\n\n## Skill Version(s):\n\n2.1.1 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: homes Owner: chrischall Summary: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: homes\ndescription: Look up real-estate listings, property details, price/tax history, market reports, saved homes, and photo galleries on homes.com via MCP. Triggers on phrases like \"find homes on homes.com in\", \"homes.com property details for\", \"what does homes.com say about\", \"homes.com price history for\", or any request involving homes.com properties, prices, history, or photos. Requires homes-mcp installed and the ContextMint Bridge extension active (see Setup below).\n---\n\n# homes-mcp\n\nMCP server for homes.com — natural-language access to listings, property records, price/tax history, market reports, saved homes/searches, and photo galleries. Routes through your signed-in homes.com tab via the ContextMint Bridge browser extension, so AWS WAF sees a real browser session instead of a Node process.\n\n- **npm:** [npmjs.com/package/homes-mcp](https://www.npmjs.com/package/homes-mcp)\n- **Source:** [github.com/chrischall/homes-mcp](https://github.com/chrischall/homes-mcp)\n\n> ⚠️ homes.com does not publish a public consumer API. This server reads the Schema.org JSON-LD blob (and some DOM-side sections) embedded in each SSR page, dispatched through your own signed-in browser tab via the ContextMint Bridge extension. Use at your own discretion.\n\n## Setup\n\n### 1. Install homes-mcp\n\n`.mcp.json` (project) or `~/.claude/mcp.json` (global):\n\n```json\n{\n  \"mcpServers\": {\n    \"homes\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"homes-mcp\"]\n    }\n  }\n}\n```\n\n### 2. Install the ContextMint Bridge extension (one-time, shared across all fetchproxy-based MCPs)\n\nThe extension is installed separately — it is **not** bundled in this repo. Get it from the [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases):\n\n- **Chrome:** unzip the Chrome zip, then `chrome://extensions` → Developer mode → Load unpacked.\n- **Safari:** not available yet (it will ship inside the ContextMint app, which has no public download) — use Chrome for now.\n\nContextMint Bridge is the renamed fetchproxy extension from the same maintainer ([fetchproxy's README](https://github.com/chrischall/fetchproxy#extension) points to it); its source is public, so build it yourself or verify a release zip with `shasum -a 256 -c <zip>.sha256`.\n\n### 3. Open homes.com and sign in.\n\nThat's it. No API keys, no env vars. (Sign-in isn't strictly required for the public-listing tools, but having a real session active helps the page render the way the extractors expect — and saved-homes / saved-searches require it.)\n\n## Tools\n\nFive of these take an optional `view` and answer on the **compact** rung when\nyou omit it — see [Response shape](#response-shape-view).\n\n### Search & resolve\n\n- **`homes_search_properties`** — Search by free-text location (city, ZIP, neighborhood). Slugifies the input into homes.com's URL routing. Filters by `property_type`, `listing_type`, `sort`, and a `price_min`/`price_max` band (homes.com's `?price-min=`/`?price-max=` query facet). Returns each li"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"homes\",\n  \"version\": \"2.1.10\",\n  \"publishedAt\": 1791588280819\n}"},{"path":"skill-card.md","content":"## Description:\n\nLooks up homes.com listings, property details, price and tax history, market reports, saved homes, and photos through a browser-connected MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nHome buyers, real-estate professionals, and other agents use this skill to research US property listings, compare homes, inspect price and tax history, and access their saved homes and searches.\n\n### Deployment Geography for Use:\n\nGlobal (US property data)\n\n## Known Risks and Mitigations:\n\nRisk: Installation runs the homes-mcp npm package and requires the ContextMint Bridge browser extension.\n\nMitigation: Review the package and extension before installation.\n\nRisk: The bridge uses the active homes.com browser session, including access to signed-in saved homes and searches.\n\nMitigation: Use only when comfortable granting read-only access to listing data and account-gated saved items through that session.\n\n## Reference(s):\n\n- [homes-mcp npm package](https://www.npmjs.com/package/homes-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n- [ClawHub homes release](https://clawhub.ai/chrischall/skills/homes)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Guidance]\n\n**Output Format:** [Natural-language responses with property data and comparisons]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Listing and photo details depend on homes.com page data; saved items require a signed-in browser session.]\n\n## Skill Version(s):\n\n2.1.10 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1296,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T09:22:18.243Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T09:22:18.243Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T11:51:48.393Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}