io.github.chrischall/homes-mcp
NPM · HOMES-MCP · SCANNED SEP 21
homes.com real-estate for Claude — search, property details, photos, compare, mortgage math
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 0 of 19 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency97
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to chrischall/homes-mcp). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability64
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5266 tokens (~250/item across 21 items; 21 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage86
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 59% of tool parameters carry a description.Partial
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 21 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
How do I install the io.github.chrischall/homes-mcp server?
io.github.chrischall/homes-mcp runs locally as an npm package, launched with npx -y homes-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · homes-mcp
claude mcp add chrischall-homes-mcp -- npx -y homes-mcp
{
"mcpServers": {
"chrischall-homes-mcp": {
"command": "npx",
"args": [
"-y",
"homes-mcp"
]
}
}
} {
"servers": {
"chrischall-homes-mcp": {
"command": "npx",
"args": [
"-y",
"homes-mcp"
]
}
}
} codex mcp add chrischall-homes-mcp -- npx -y homes-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"chrischall-homes-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"homes-mcp"
],
"enabled": true
}
}
} openclaw mcp add chrischall-homes-mcp --command npx --arg -y --arg homes-mcp
mcp_servers:
chrischall-homes-mcp:
command: "npx"
args: ["-y", "homes-mcp"] {
"McpServers": {
"chrischall-homes-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"homes-mcp"
]
}
}
} assistant mcp add chrischall-homes-mcp -t stdio -c npx -a -y homes-mcp
{
"mcpServers": {
"chrischall-homes-mcp": {
"command": "npx",
"args": [
"-y",
"homes-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 −3
- MCP protocol: Implements a current MCP spec version (2026-07-28). functional
- Stability: pass → 0.80 functional
- Package version: 2.0.0 → 2.1.0 functional
- 19 Sept 26 +1
- Stability: 0.97 → pass security
- 17 Sept 26 +1
- Stability: 0.90 → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Dependency health: 0.88 → 1.00 ▲ functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Package version: 1.4.5 → 2.0.0 functional
- 16 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 15 Sept 26 0
- Malware scan: unverified → pass ▲ security
- Package version: 1.4.4 → 1.4.5 functional
- 14 Sept 26 −14
- Stability: 0.80 → unverified ▼ security
- Malware scan: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet. functional
- Package version: 1.1.2 → 1.4.4 functional
- Package version: 1.4.3 → 1.4.4 functional
- 13 Sept 26 −3
- Stability: pass → 0.80 functional
- 12 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Analysed npm/homes-mcp@2.1.0
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | chrischall/homes-mcp |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/chrischall/homes-mcp/.github/workflows/release-please.yml@refs/heads/main |
| Rekor log index | 2893921578 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:fc21239305e9f5723e80008ca7a57c48ba8dca26b5675bdb14eaa02e65e27879b667139eb8604ce191c9a99b73fb7cf32a109d6f5d1e4126c562f3fe9 |
Background: How many MCP packages publish verified provenance →
Dependencies 19 packages
| Packages resolved | 19 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
homes_bulk_get Bulk-fetch homes.com properties (structured records only) ~388
Fetch up to 200 homes.com properties in one call and return their structured records. Pass `urls: string[]`. Results are ordered to match the input array and per-row errors are captured (one bad URL won't fail the whole call). Each row carries a `status` (`ok` / `error` / `pending`). Mirrors `homes_get_property` per-row, including `extracted_features`, `hoa_fee`, `highlights`, `schools`, `lot_size_sqft` + the derived `lot_size_acres` (null — never 0 — for condos / no-lot listings), and all standard listing fields. The raw `description` is omitted by default; opt back in via `include_description: true`. The whole call is bounded by an overall hard deadline: a single slow/hung URL never wedges the server — when the deadline is reached any unsettled row is returned with `status: "pending"` and a `pending` count so you can re-run just those URLs. Use this instead of looping `homes_compare_properties` (which caps at 8 + emits a redundant summary table) when you just want the records. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| include_description | boolean | – | When true, include the raw listing `description` marketing prose per-row. Default false. |
| urls | array | yes | Array of homes.com property URLs or paths (e.g. from a homes_search_properties result). 1–200 per call. |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
homes_calculate_affordability Calculate maximum home price you can afford ~199
Solve for the maximum home price you can afford under the standard 28/36 DTI rule. Inputs: monthly income, recurring monthly debts (car/student loans), down payment, interest rate, optional property-tax rate / insurance / HOA / loan term. Output: max home price, binding constraint (front-end vs back-end), and the PITI breakdown at that price. Identical math to zillow-mcp and redfin-mcp. No network — pure local math.
| Name | Type | Req | Description |
|---|---|---|---|
| back_end_dti | number | – | – |
| down_payment | number | yes | – |
| front_end_dti | number | – | – |
| hoa_monthly | number | – | – |
| insurance_annual | number | – | – |
| interest_rate | number | yes | – |
| loan_term_years | integer | – | – |
| monthly_debts | number | – | – |
| monthly_income | number | yes | – |
| property_tax_rate | number | – | – |
No output schema declared.
No examples provided.
homes_calculate_mortgage Calculate mortgage PITI ~226
Local-only mortgage payment calculator. Returns a full PITI breakdown (principal + interest, property tax, insurance, HOA, PMI) and total interest over the life of the loan. No network call. Provide either `down_payment` OR `down_payment_percent`; defaults to 20%. Property tax can be given as `property_tax_annual` or `property_tax_rate` (% of home price). PMI applies automatically when LTV > 80% and `pmi_rate` is provided.
| Name | Type | Req | Description |
|---|---|---|---|
| down_payment | number | – | – |
| down_payment_percent | number | – | – |
| hoa_monthly | number | – | – |
| home_price | number | yes | – |
| insurance_annual | number | – | – |
| interest_rate | number | yes | Annual %, e.g. 6.5 |
| loan_term_years | integer | – | Default 30 |
| pmi_rate | number | – | Annual %, applied when LTV > 80% |
| property_tax_annual | number | – | – |
| property_tax_rate | number | – | Annual % of home price |
No output schema declared.
No examples provided.
homes_compare_properties Compare homes.com properties side-by-side ~358
Fetch 2 or more homes.com properties and align their facts side-by-side. Each target supplies a `url` — the full homes.com property URL (e.g. from a homes_search_properties result's `url` field). Returns the full per-property record (with server-side `extracted_features`, `hoa_monthly_usd`, `days_on_market`, `price_drop_*`, `lot_size_sqft` + the derived `lot_size_acres`, and `portal_url_hyperlink`). Per-target errors are captured per-row — one bad target will not fail the whole call. Calls are concurrent. The raw `description` is omitted by default; pass `include_description: true` to keep the marketing prose. The cross-row `summary` table duplicates per-property fields (~30% of response weight); it is OPT-IN via `include_summary: true`.
| Name | Type | Req | Description |
|---|---|---|---|
| include_description | boolean | – | When true, include the raw listing `description` marketing prose on each per-property record. Default false. |
| include_summary | boolean | – | When true, also emit a cross-row `summary` table aligned by field. Default false — the per-row records already carry every summary field, so the table is redundant context weight unless explicitly re… |
| targets | array | yes | Array of 2–8 properties to compare |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
homes_estimate_rent_vs_buy Project cumulative buy-vs-rent cost over N years ~334
Project the cumulative cost of buying a home versus renting a comparable place over N years. Accounts for down payment, closing costs, monthly PITI, maintenance (~1%/yr default), appreciation (~3%/yr default), rent growth (~3%/yr default), and the opportunity cost of the down payment (renter invests it at investment_return_rate, default 6%/yr). Returns year-by-year cumulative costs, break-even year, and the net difference at horizon. No network — pure local math. Same math contract as zillow_estimate_rent_vs_buy. NOTE: caller must supply `monthly_rent` — homes.com does not publish rental estimates anywhere on its consumer site (no rent_zestimate analogue, no comparable-rentals endpoint). For a rent estimate to plug in here, use `zillow_get_property` (its `rent_zestimate` field) or `redfin_get_comparable_rentals`.
| Name | Type | Req | Description |
|---|---|---|---|
| appreciation_rate | number | – | – |
| closing_cost_rate | number | – | – |
| down_payment | number | yes | – |
| hoa_monthly | number | – | – |
| home_price | number | yes | – |
| horizon_years | integer | – | – |
| insurance_annual | number | – | – |
| interest_rate | number | yes | – |
| investment_return_rate | number | – | – |
| loan_term_years | integer | – | – |
| maintenance_rate | number | – | – |
| monthly_rent | number | yes | – |
| property_tax_rate | number | – | – |
| rent_growth_rate | number | – | – |
| selling_cost_rate | number | – | – |
No output schema declared.
No examples provided.
homes_get_by_address Resolve a street address to a homes.com property URL ~647
Resolve a US street address to its canonical homes.com property URL + opaque property hash. Pass `address` (street), `city`, `state`, and optional `zip`. Walks three rungs: first the structured smartsearch typeahead (POST /routes/res/consumer/smartsearch/autocomplete/ — the primary rung, the same address-suggest API homes.com's search box fires, returning the real /property/<slug>/<hash>/ URL directly), then a slug-routed page (parsing the embedded Schema.org JSON-LD — both the CollectionPage search-results shape and the single-RealEstateListing detail redirect), and finally a city/zip search page with street-token fuzzy match. Every candidate is verified against the input with a whole-token street match (plus a unit guard so a multi-unit building resolves to the exact unit, not a neighbour). Optional `price_min` / `price_max` (USD) bound ONLY the city/zip search-fallback rung — when an address is ambiguous or the typeahead misses and you know the listing's rough price, this narrows the area search (homes.com `?price-min=`/`?price-max=` filter) so the fuzzy matcher picks from fewer, more-relevant candidates; omit for unchanged unbounded behaviour. Returns `{ url, property_hash, street_address, matched_via, resolved: true }` on success — `matched_via` is `'typeahead'` for the structured-API hit, `'slug'` for a direct routing hit, `'search_fallback'` for the search-page fuzzy match — or `{ resolved: false, error: 'no listing found' }` when homes.com has no match (so the higher-level unified canonical-URL lookup can degrade gracefully). KNOWN FAILURE MODE: rural addresses and very-new construction can still miss because homes.com hasn't indexed them yet. Compare the returned `street_address` against your input to confirm. For larger batches (≥ 3 addresses), prefer `homes_resolve_addresses`. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| address | string | yes | Street address (e.g. "126 Sleeping Bear Ln"). |
| city | string | yes | City (e.g. "Lake Lure"). |
| price_max | number | – | Optional upper price bound (USD). Applied ONLY to the search-fallback rung (homes.com's `?price-max=` filter). Useful when an address is ambiguous or the typeahead misses and you know the listing's r… |
| price_min | number | – | Optional lower price bound (USD). Applied ONLY to the city/zip search-fallback rung — bounds that area search with homes.com's `?price-min=` filter so an ambiguous address resolves against a narrower… |
| state | string | yes | 2-letter US state code (e.g. "NC"). |
| zip | string | – | ZIP code (optional; improves precision when present). |
No output schema declared.
No examples provided.
homes_get_history Get homes.com property + tax history (combined) ~141
Combined history endpoint — replaces `homes_get_property_history` + `homes_get_tax_history` with a single fetch. Returns `{ property_id, url, listing_events, ownership_events, lien_events, events_normalized, tax_records }`. Pass `url` — the full property detail URL. Series are `[]` when the listing doesn't carry that section. Cross-MCP-normalized `events_normalized` carries the same enum across siblings (Listed/PriceChange/Pending/Contingent/Sold/Withdrawn/Relisted/Delisted). Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | homes.com property detail URL or path. |
No output schema declared.
No examples provided.
homes_get_market_report Get a homes.com market report for a location ~207
Fetch homes.com's recently-sold listings for a city/ZIP/neighborhood and derive a market summary: count, median sale price, and average $/sqft across the sample. Pass `location` — free-text (e.g. 'Brooklyn, NY', '30311'). Returns `{ region, slug, sold_summary, sample_sold }`. Note: homes.com's sold page typically returns ~40 recent listings — this is a sample-based summary, not an exhaustive market index. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| location | string | yes | Free-text location: city, ZIP, neighborhood |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
homes_get_nearby_listings Get nearby homes.com listings for a property ~245
Scrape the nearby-links section of a homes.com detail page (the tabbed list of `<ul id="nb-Property">` near the bottom of the page) and return the nearby active listings. Pass `url` (the property whose neighborhood to inspect). By default returns the For Sale tab; pass `include_rentals: true` to also include the Rentals tab. Optional `limit` caps the count. Returns `{ property_id, url, count, listings: [{ property_id, url, address?, tab }] }`. Note: the nearby section is a curated cross-link list, not a comparable-sales set — only URL + address are exposed (no price/beds/baths/sqft/photo). To enrich a row, call `homes_get_property` on its url. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| include_rentals | boolean | – | When true, also include the Rentals tab (`<ul id="nb-property">` lowercase). Default false — For Sale tab only. |
| limit | integer | – | Max nearby listings to return (default unlimited). |
| url | string | yes | homes.com property detail URL or path. |
No output schema declared.
No examples provided.
homes_get_property Get homes.com property details ~603
Fetch a property's full homes.com record. Pass `url` — the full property detail URL (e.g. from a homes_search_properties result's `url` field). Parses the page's Schema.org JSON-LD plus DOM-side sections to return address, lat/lng, beds/baths, sqft, year built, price, status, listing agent + brokerage, highlights, estimated monthly payment, total views, Matterport tour URL, floorplan URLs, schools, HOA fee, lot_size_sqft plus the derived lot_size_acres (round(lot_size_sqft / 43560, 2); both null — never 0 — for condos and listings with no lot), parking, heating/cooling, MLS ID/source, and date posted/modified. Also returns `extracted_features` (lake_front, hot_tub, basement, furnished, dock, community) derived server-side from the listing description so callers don't have to keyword-parse marketing prose. Pass `include_price_history: true` to inline the same data `homes_get_property_history` returns (`listing_events`, `ownership_events`, `lien_events`, `events_normalized`) under `price_history`. Pass `include_tax_history: true` to inline `homes_get_tax_history` records under `tax_history`. Both are off by default; opting in costs nothing extra over the dedicated tools (same page fetch). The raw `description` is omitted by default; pass `include_description: true` to opt back in. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| include_description | boolean | – | When true, include the raw listing `description` marketing prose. Default false — the structured `extracted_features` field surfaces the keywords callers usually want; the prose itself is heavy chat-… |
| include_price_history | boolean | – | When true, inline `price_history` (listing/ownership/lien events + events_normalized) on the response — the same data `homes_get_property_history` returns. Saves a second round trip when you need bot… |
| include_tax_history | boolean | – | When true, inline `tax_history` records — same data `homes_get_tax_history` returns. Saves a second round trip when you need both (#27). |
| url | string | yes | homes.com property detail URL or path (e.g. https://www.homes.com/property/3199-delmar-ln-nw-atlanta-ga/rxrzwg0kjnr32/). Required — pass the `url` field from a homes_search_properties result. |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
homes_get_property_history Get homes.com property history (DEPRECATED — use homes_get_history) ~109
DEPRECATED — prefer `homes_get_history` (combined timelines + tax) or `homes_get_property({ url, include_price_history: true })`. Same data, fewer round trips. Will be removed in a future major version. Three timelines for a homes.com property in one call: `listing_events`, `ownership_events`, `lien_events`. Also returns `events_normalized` mapped onto the cross-MCP enum.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | homes.com property detail URL or path. |
No output schema declared.
No examples provided.
homes_get_property_photos Get homes.com property photo gallery ~142
The full photo gallery for a homes.com listing. homes.com's JSON-LD only exposes one primary image, so this tool scrapes every <img> tag on the property detail page and filters to the homes.com CDN. Pass `url` — the full homes.com property URL or path (e.g. from a homes_search_properties result's `url` field). Returns `{ property_id, url, count, photos: [{ url, position, alt? }] }`. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | homes.com property detail URL or path. Required — pass the `url` field from a homes_search_properties result. |
No output schema declared.
No examples provided.
homes_get_saved_homes Get the signed-in user's saved homes on homes.com ~158
The signed-in user's saved (favorited) homes on homes.com. Scrapes /customer/dashboard/favorites/. Returns `{ count, homes: [{ property_id, url, address?, price?, beds?, baths?, sqft?, status? }] }`. REQUIRES the user to be signed into homes.com in their browser tab — if not, the request throws SessionNotAuthenticatedError. Card fields (price/beds/baths/sqft) are best-effort DOM scrapes — they may be missing on some card variants; treat absence as 'not surfaced on the saved-homes card', not 'no value'. Call `homes_get_property(url)` per row when you need the canonical record. Read-only; safe to call repeatedly.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
homes_get_saved_searches Get the signed-in user's saved searches on homes.com ~115
The signed-in user's saved searches on homes.com. Scrapes /customer/dashboard/saved-searches/. Returns `{ count, searches: [{ name?, url, filters? }] }`. REQUIRES the user to be signed into homes.com in their browser tab — if not, the request throws SessionNotAuthenticatedError. `name` and `filters` are DOM-scraped from the saved-search card; absence means homes.com didn't render them, not that the search has none. Read-only; safe to call repeatedly.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
homes_get_session_context List all registered Homes sessions ~45
Return the full set of registered sessions plus the current `active_session_id`. When no sessions are registered, `sessions` is empty and `active_session_id` is null.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
homes_get_tax_history Get homes.com property tax history (DEPRECATED — use homes_get_history) ~110
DEPRECATED — prefer `homes_get_history` (combined timelines + tax) or `homes_get_property({ url, include_tax_history: true })`. Same data, fewer round trips; note that `homes_get_history` returns the tax array as `tax_records` (not `records`). Will be removed in a future major version. Year-by-year property-tax records: tax paid, total assessed value, land/improvement split.
| Name | Type | Req | Description |
|---|---|---|---|
| url | string | yes | homes.com property detail URL or path. |
No output schema declared.
No examples provided.
homes_healthcheck Verify the fetchproxy bridge end-to-end ~119
Round-trips a small public www.homes.com URL (/robots.txt) through the fetchproxy bridge and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'real www.homes.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
homes_register_session Register a signed-in Homes session ~153
Register (or refresh) an authenticated Homes session keyed by signed-in account identity. Re-registering the same `account_identity` updates the existing session rather than creating a duplicate. Returns the `session_id` to use when routing per-tool calls. The first registered session becomes the default `active_session_id`. Pass `mark_active: true` to make the newly-registered session active in the same call.
| Name | Type | Req | Description |
|---|---|---|---|
| account_identity | string | yes | Caller-supplied identifier for the signed-in account (typically the saved-account email). |
| auth_expires_at | string | – | Optional ISO timestamp at which the session expires. |
| mark_active | boolean | – | When true, immediately make the newly-registered session the active one. |
No output schema declared.
No examples provided.
homes_resolve_addresses Bulk-resolve street addresses to homes.com property URLs ~319
Resolve up to 100 street addresses to canonical homes.com property URLs + opaque property hashes in one call. Pass `addresses: [{ address, city, state, zip? }, ...]`. Fans out to the same rungs `homes_get_by_address` runs (structured smartsearch typeahead → slug → city/zip search fallback), verifying each candidate with the same whole-token street + unit match. Per-row outcomes parallel `homes_get_by_address` (with `property_hash` renamed to `property_id` here so the field name lines up with `homes_bulk_get`): `{ resolved: true, url, property_id, street_address, matched_via }` on success — `matched_via` is `'typeahead'`, `'slug'`, or `'search_fallback'` — `{ resolved: false, error }` otherwise; one bad row won't fail the whole call. Results preserve input order. Use this instead of looping `homes_get_by_address` for any batch ≥ 3. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| addresses | array | yes | Array of address records to resolve (1–100 per call). Each must include street `address`, `city`, and 2-letter `state`; `zip` is optional but improves precision. Optional per-row `price_min` / `price… |
No output schema declared.
No examples provided.
homes_search_properties Search homes.com listings ~583
Search homes.com listings by free-text location (city, ZIP, neighborhood). Optionally filter by property_type (single_family/condo/townhouse/land/mobile/multi_family), listing_type (for_sale/sold/for_rent/open_houses/new_construction), and sort (newest). Slugifies the location into homes.com's URL routing (e.g. 'Atlanta, GA' + condo + for_sale → /atlanta-ga/condos-for-sale/). Parses the embedded Schema.org JSON-LD to return each listing's address, price, beds/baths, sqft, primary photo, listing agent + brokerage, and the homes.com property URL. KNOWN CAP: homes.com server-renders ~40 listings per page; the response carries `truncated: true` + `total_estimated` when the market has more. To enumerate a busy market, price-band or sub-area your search until each segment fits under the cap. Read-only; safe to call repeatedly.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Max listings to return (default 40, which is also the homes.com SSR page size). Passing >40 will still cap at the page size; the response will set `truncated: true` and `total_estimated` to homes.com… |
| listing_type | string | – | Search axis. Defaults to for_sale. "sold" returns recently-sold listings (useful for market context). "for_rent" returns rentals. "open_houses" returns listings with scheduled open houses. "new_const… |
| location | string | yes | Free-text location: city, ZIP, neighborhood (e.g. "Atlanta, GA", "Brooklyn, NY", "30311", "Park Slope") |
| price_max | number | – | Upper price bound in USD (inclusive). Emitted as homes.com's `?price-max=` filter. Pair with price_min to band a busy market under the ~40-listing SSR cap. |
| price_min | number | – | Lower price bound in USD (inclusive). Emitted as homes.com's `?price-min=` filter. Composes with property_type / listing_type. Must be <= price_max when both are given. |
| property_type | string | – | Restrict to a specific homes.com property type. Composes with listing_type. |
| sort | string | – | Sort order. Only "newest" is currently supported. |
| view | string | – | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full"… |
No output schema declared.
No examples provided.
homes_set_active_session Set the active Homes session ~65
Switch which registered session subsequent tool calls route through by default. Pass a `session_id` previously returned by `homes_register_session`. Tools that accept an explicit `session_id` parameter override this default per-call.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | string | yes | Session id to make active. |
No output schema declared.
No examples provided.
What is the io.github.chrischall/homes-mcp server?
io.github.chrischall/homes-mcp is listed in the public MCP registry as io.github.chrischall/homes-mcp. homes.com real-estate for Claude, search, property details, photos, compare, mortgage math. This page covers its npm package (homes-mcp).
Is the io.github.chrischall/homes-mcp server safe to use?
io.github.chrischall/homes-mcp scores 89 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.chrischall/homes-mcp server expose?
io.github.chrischall/homes-mcp exposes 21 tools: homes_search_properties, homes_get_property, homes_calculate_mortgage, homes_compare_properties, homes_calculate_affordability, and 16 more. Their descriptions and schemas cost roughly 5,266 tokens of context every time the server is loaded.
Is the io.github.chrischall/homes-mcp server still maintained?
io.github.chrischall/homes-mcp is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.chrischall/homes-mcp server under?
io.github.chrischall/homes-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.