Skip to main content
Glama
compass-mcp

compass-mcp

by chrischall

compass-mcp

CI npm license

Compass real-estate access as an MCP server for Claude — search listings, fetch property details, photo galleries, price history, and run affordability/mortgage math, all via natural language.

⚠️ Compass does not publish a public consumer API. This server scrapes the same server-rendered HTML compass.com itself ships to your browser, routed through your own signed-in browser tab via the ContextMint Bridge extension. Every request acts on behalf of your existing session — your cookies, your TLS, your JS context — exactly as if you'd clicked it in the browser yourself. Treat this as informal use of Compass's website. Use at your own discretion.

Tools

Tool

Purpose

Auth-scoped

compass_search_properties

Search listings by location, price band, beds, home type. Slugifies free-text into Compass's URL routing and extracts the SSR listings array.

compass_get_property

Full record for a property by URL or listing_id_sha. Address, neighborhood, beds/baths, sqft, lot, price + $/sqft, monthly charges, MLS status, amenities, schools, parcel number.

compass_get_property_photos

Full photo gallery — every image in listing.media[] with original + thumbnail URLs and pixel dimensions. Floorplans/other media gated behind include_all_categories.

compass_get_price_history

Full listing-history events (Listed / Sold / Pending / Price Change / Delisted) with date, price, status, and MLS attribution. Returns both this-listing and prior-listing aggregates.

compass_compare_properties

Side-by-side comparison of up to 25 properties with an opt-in aligned summary table. Per-target errors captured per-row. Concurrent fetches.

compass_calculate_affordability

Local affordability calculator — max purchase price from income + DTI + rates. No network.

compass_get_by_address

Resolve a free-text street address to the canonical Compass URL, listing_id_sha, and pid in one call. Returns { resolved: false, error: "no listing found" } rather than throwing when there is no match.

compass_resolve_addresses

Bulk version of compass_get_by_address: resolves many addresses in one call with the same rung walker and a per-row error contract.

compass_bulk_get

Fetch up to 200 listings by URL or listing_id_sha in one call. One row per target; per-target errors captured per-row.

compass_get_comparable_rentals

Nearby rental listings for a property, searched in the target's own city/state/ZIP.

compass_get_agent_listings

A Compass agent's active listings (closed deals via include_closed).

compass_calculate_mortgage

Local PITI calculator — principal+interest, taxes, insurance, HOA, PMI. No network.

compass_get_saved_homes

Not yet supported — Compass renders /overview/favorites via auth-scoped GraphQL we have not yet identified. Throws a clear "not yet wire" error.

✓

compass_get_saved_searches

Not yet supported — same constraint as saved homes.

✓

compass_healthcheck

Round-trips a no-op request through the bridge to confirm the WebSocket bridge, the extension and the signed-in compass.com tab are responsive.

compass_register_session

Register or refresh a logical session keyed by account identity (local; no network).

compass_set_active_session

Switch which registered session answers future requests (local).

compass_get_session_context

List the registered sessions and the active one (local).

Related MCP server: NDI-MCP-Server

Response size

The listing read tools take an optional view argument: "compact" (the default) or "full". Compact strips image and avatar URLs (including primary_photo_url / primary_thumbnail_url) and keeps every other field; view: "full" returns the payload with those URLs intact.

Tools that take view: compass_search_properties, compass_get_property, compass_bulk_get, compass_compare_properties, compass_get_price_history, compass_get_comparable_rentals, compass_get_agent_listings, compass_get_by_address.

Changed in 1.1.9: compass_get_property, compass_bulk_get, compass_compare_properties, compass_get_price_history and compass_get_comparable_rentals used to return every field, media URLs included. They now default to compact like the other read tools. If you relied on photo or avatar URLs from these tools, pass view: "full", or use compass_get_property_photos for the gallery.

compass_get_property_photos takes no view — its gallery URLs are the whole point of the tool, so it always returns them.

Acknowledgement of Terms

By using this MCP server, you acknowledge and agree to the following:

1. This server accesses your own Compass session. Every request is dispatched through your own browser tab via the ContextMint Bridge extension — your cookies, your TLS, your session. It does not — and cannot — access anyone else's account.

2. Compass's Terms of Use govern your use of this server, just as they govern your direct use of compass.com. The clauses most relevant here:

You may not automatedly crawl or query the Services for any purpose or by any means (including, without limitation, screen and database scraping, spiders, robots, crawlers and any other automated activity with the purpose of obtaining information from the Services) unless you have received prior express written permission from the applicable Compass Company.

And: "You agree to keep your password confidential, not use others' accounts, nor permit others to use your account."

You are agreeing to those terms — read by the maintainer 2026-05-23 — every time you invoke a tool in this server. Compass's terms prohibit automated crawling without written permission, and IDX listing data is licensed for personal, non-commercial use only.

3. Personal, non-commercial use only. This project is not affiliated with, endorsed by, sponsored by, or in partnership with Compass, Inc. It is a personal automation tool that reads the same server-rendered HTML compass.com itself ships to your browser. Do not use it to bulk-extract listings, redistribute IDX data, train AI models, populate a competing real-estate product, or for any commercial purpose.

4. Stability is not guaranteed. This server reads private inline-script state (global.uc.sharedReactAppProps, window.__INITIAL_DATA__.props.listingRelation.listing) and SSR URL conventions (/homes-for-sale/<slug>/, /homedetails/<slug>/<id>_lid/) that Compass may change without notice. It may break. It may stop working. That's by design — the surface is not theirs to maintain on our behalf.

5. You accept full responsibility for any consequences of using this server in connection with your Compass access — rate limiting, account suspension, IP blocks, AWS WAF challenges, or any enforcement action Compass takes. If Compass objects to your use, stop using this server.

This section is the maintainer's good-faith summary of the terms — it is not legal advice and does not modify or supersede Compass's actual ToU.

Install

Option A — npx (after first publish)

Add to .mcp.json:

{
  "mcpServers": {
    "compass": {
      "command": "npx",
      "args": ["-y", "compass-mcp"]
    }
  }
}

Option B — from source

git clone https://github.com/chrischall/compass-mcp
cd compass-mcp
npm install
npm run build
{
  "mcpServers": {
    "compass": {
      "command": "node",
      "args": ["/path/to/compass-mcp/dist/bundle.js"]
    }
  }
}

One-time browser setup

compass-mcp talks to your browser through the ContextMint Bridge extension, which is shared across every fetchproxy-based MCP (zillow-mcp, opentable-mcp, resy-mcp, …). Install it once from the ContextMint Bridge releases:

  • Chrome: download the Chrome zip, unzip it, then chrome://extensions → toggle Developer mode → Load unpacked → pick the unzipped folder.

  • Safari: the bridge ships inside the ContextMint app; you enable it in Safari's settings. The ContextMint app has no public download yet, so there is no Safari install link to give — use Chrome for now.

Where it comes from. ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README (Extension) points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself (its README covers npm run build), or check a release zip against the .sha256 file published beside it:

shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256

Open compass.com and sign in. That's all the auth this server needs.

How it works

┌────────────────┐  stdio   ┌──────────────────┐   WS   ┌──────────────────┐    fetch()    ┌─────────────┐
│ MCP client     │◀────────▶│  dist/bundle.js  │◀──────▶│  ContextMint     │◀────────────▶│ compass.com  │
│ (Claude, etc.) │          │  (Compass MCP)    │ :37149 │  Bridge          │   (real TLS, │ (your tab)  │
└────────────────┘          └──────────────────┘        │  (separate)      │   cookies)    └─────────────┘

The MCP server runs in Node, but every HTTP call to compass.com is dispatched into your live browser tab through the ContextMint Bridge extension. Each request rides your existing session — TLS fingerprint, cookies, and JS execution context all match the page that's already on screen. No headless browser stand-in, no separate identity, no third-party proxy: just your real browser, acting on its own behalf, with the MCP server picking what to ask for.

Compass's pages are SSR React with no public JSON API — every tool extracts data from inline-script globals (global.uc.sharedReactAppProps on search pages, window.__INITIAL_DATA__.props.listingRelation.listing on homedetails). The client wraps that into the tool surface so callers never have to parse HTML themselves.

Commands

npm test               # vitest, mocked transport, no network
npm run test:watch
npm run test:coverage
npm run build          # tsc --noEmit + esbuild bundle → dist/bundle.js
npm run dev            # node dist/bundle.js (after build)

License

MIT

Available Tools

18 tools
compass_bulk_getBulk-fetch Compass listings by url or listing_id_shaA
Read-onlyIdempotent

Fetch up to 200 Compass listings in a single call. Returns one structured row per input target (no side-by-side summary table — use compass_compare_properties for that). Each row is either { listing_id_sha, url, status: "ok", property } on success or { listing_id_sha, url, status, error_kind, retryable, error } on failure (status = error_kind) — one bad target never fails the whole call. retryable: true (a bridge timeout after one retry, an unreachable bridge_down, issue #73) is NOT a missing listing, so retry it (a cold bridge usually succeeds on the second call) rather than concluding Compass has no record; protocol / other are real misses. Targets accept the same url / listing_id_sha shape as compass_get_property. Calls fan out concurrently. The whole call is bounded by an overall deadline: a slow or hung row never wedges it — any row still unsettled when the deadline is reached comes back as { status: "pending", retryable: true, error } alongside a top-level pending count, so re-run just those targets. The envelope also reports count / ok / errored. extracted_features is populated per row. The raw description is omitted by default — pass include_description: true to keep it.

Inputs: targets (required), view, include_description.

compass_calculate_affordabilityCalculate max affordable home priceA
Read-onlyIdempotent

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

Inputs: down_payment (required), interest_rate (required), monthly_income (required), hoa_monthly, +6 more.

compass_calculate_mortgageCalculate mortgage payment (local)A
Read-onlyIdempotent

Local-only mortgage payment calculator. Returns a full PITI breakdown (principal + interest, property tax, insurance, HOA, PMI) and total interest over the life of the loan. No network call — fully deterministic, safe to use for scenario comparison without burning a fetch. Provide either down_payment OR down_payment_percent; defaults to 20%. Property tax can be given as property_tax_annual or property_tax_rate (% of home price). PMI applies automatically when LTV > 80% and pmi_rate is provided.

Inputs: home_price (required), interest_rate (required), pmi_rate, hoa_monthly, +6 more.

compass_compare_propertiesCompare Compass properties side-by-sideA
Read-onlyIdempotent

Fetch 2 or more Compass properties and align their facts side-by-side. Each target may supply url (a full Compass homedetails URL or path) or listing_id_sha alone — sha-only targets fetch /listing//view, which redirects to the homedetails page. Returns the full per-property record per row (with extracted_features populated). Per-target errors are captured per-row — one bad target will not fail the whole call; a failed row carries status = error_kind (timeout / bridge_down / protocol / other), retryable and error, and the envelope reports count / ok / errored. Calls are concurrent, and the whole call is bounded by an overall deadline: any row still unsettled when it is reached comes back as { status: "pending", retryable: true, error } with a top-level pending count — re-run just those targets. The raw description is omitted from each row by default — pass include_description: true to keep it. The redundant summary table is also opt-in via include_summary: true — by default only results[] is returned, which already carries every fact.

Inputs: targets (required), view, include_summary, include_description.

compass_get_agent_listingsGet a Compass agent's listingsA
Read-onlyIdempotent

Fetch the listings represented by a Compass agent from their profile page (/agents//). Pass either slug (e.g. "paige-mcguirk") or profile_url (a full https://www.compass.com/agents// URL — both forms are accepted). Returns { agent: {name, slug}, active_listings: [...] }, where each active listing carries the SAME normalized fields as compass_get_property (address, beds/baths, sqft, lot size, price + price-per-sqft, MLS status, the canonical Compass URL + stable pid, extracted_features, etc.).

CLOSED DEALS: the agent's sold/closed deals are opt-in — pass include_closed: true to add a closed_deals array (same normalized shape). Omitted by default to keep the payload lean.

CHAINING: the agent slug is surfaced on each property's listing_agent.profile_slug in compass_get_property results (compass_search_properties results don't carry the listing agent), so you can go property → agent → their other listings. Read-only; safe to call repeatedly.

Inputs: slug, view, profile_url, include_closed.

compass_get_by_addressResolve a Compass listing by street addressA
Read-onlyIdempotent

Resolve a free-text street address to a Compass listing's canonical URL and identifiers in one call. Walks three rungs: first the structured typeahead POST /api/v3/omnisuggest/autocomplete (the primary rung — Compass's address-suggest API, which routes around the AWS WAF that 403s the SSR free-text path, issues #78/#79), then /homes-for-sale/?q=<address> (the free-text rung) and — when those return no verified match — a slug-based search at /homes-for-sale/<city-state-or-zip>/ (the search-fallback rung, issue #71). Each candidate is verified against the query (case + street-type abbreviation normalization, then whole-token equality, issue #45) before being accepted. Returns { url, listing_id_sha, pid, address, resolved, matched_via } where matched_via is "typeahead", "freetext", or "search_fallback" so callers can see which rung found the match. When no rung matches, returns { resolved: false, error: "no listing matched" } rather than leaking a wrong URL. When the lookup was blocked by a sign-in / AWS WAF challenge instead, it returns { resolved: false, status: "auth_required", error, hint } — NOT a miss: sign in to compass.com in the browser and retry. The url is the stable _pid/ form when Compass provides a navigationPageLink (preferred for trackers/bookmarks — sha URLs go stale on relisting), falling back to the _lid/ form otherwise. Read-only; safe to call repeatedly.

Inputs: address (required), zip, city, view, +1 more.

compass_get_comparable_rentalsList nearby rental listings for a Compass propertyA
Read-onlyIdempotent

Surface nearby rental listings for a Compass property — useful for evaluating STR (short-term-rental) viability in vacation markets. Lifts the target's city/state/zip from the homedetails page, then searches Compass's type-rental/ filter in the same locality and returns each rental's address, monthly price (in price_formatted), beds/baths, sqft, and the Compass URL. Honest-by-default: when no rentals come back, rentals: [] with the target locality preserved so the caller can decide to widen. Read-only; safe to call repeatedly.

Inputs: url, view, limit, listing_id_sha.

compass_get_price_historyGet Compass listing-history eventsA
Read-onlyIdempotent

Full listing history for a Compass property — Listed / Sold / Pending / Price Change / Delisted events with date, price, and MLS attribution. Returns three arrays: events covers this listing's events, history aggregates events from prior listings of the same property, and events_normalized merges both into a shared cross-MCP schema ({date, type, price?, price_change_pct?, source_mls?} with a fixed type enum: Listed | PriceChange | Pending | Contingent | Sold | Withdrawn | Relisted | Delisted). Pass either url (the full Compass homedetails URL or path) or listing_id_sha alone — sha-only calls fetch /listing//view, which redirects to the homedetails page. Note: most of this data is already returned inline on compass_get_property (the events[] / history[] arrays live on the same listing record); call this tool only when you want the merged + normalized timeline. Read-only; safe to call repeatedly.

Inputs: url, view, listing_id_sha.

compass_get_propertyGet Compass property detailsA
Read-onlyIdempotent

Fetch a property's full Compass record. Pass either url (a full Compass homedetails URL or path from a compass_search_properties result) or listing_id_sha alone — when only the sha is supplied, the tool fetches /listing//view, which redirects to the canonical /homedetails//_lid/ page. Returns address, neighborhood, beds/baths, sqft, lot size (lot_size_sqft plus the derived lot_size_acres = round(sqft / 43560, 2), null — never 0 — for condos / missing lots), price + price-per-sqft, monthly charges, MLS status, amenities, schools, parcel number, and the canonical Compass URL. Also returns extracted_features (lake_front, hot_tub, basement, furnished, dock, community) keyword-parsed from the description.

DESCRIPTION HANDLING: The raw description (Compass marketing copy) is omitted by default — pass include_description: true to keep it. extracted_features is always populated and usually sufficient.

URL FORMS: Compass exposes two URL shapes for a listing. _lid/ (content-addressed by listing_id_sha) — what this tool fetches and what url returns — is the form to use for reading the current listing record. _pid/ (opaque short ID, in property_url and the surfaced pid field) is stable across re-listings and is the right choice for any long-lived reference (trackers, sheets, bookmarks); sha-based URLs go stale when a property is delisted and relisted. Read-only; safe to call repeatedly.

Inputs: url, view, listing_id_sha, include_description.

compass_get_property_photosGet Compass property photo galleryA
Read-onlyIdempotent

The full photo gallery for a Compass listing — every image in listing.media[]. Each entry returns the original CDN URL plus a thumbnail URL and pixel dimensions. Pass either url (the full Compass homedetails URL or path) or listing_id_sha alone — sha-only calls fetch /listing//view, which redirects to the homedetails page. By default only photos (category 0) are returned; set include_all_categories: true to also include floorplans and other media. Returns { listing_id_sha, count, photos }. Read-only; safe to call repeatedly.

Inputs: url, listing_id_sha, include_all_categories.

compass_get_saved_homesGet my saved (favorited) Compass homesA
Read-onlyIdempotent

Not yet supported — Compass renders /overview/favorites via an auth-scoped GraphQL we have not yet identified. Throws a clear error explaining the limitation.

Inputs: no named parameters.

compass_get_saved_searchesGet my saved Compass searchesA
Read-onlyIdempotent

Not yet supported — Compass renders saved searches via an auth-scoped GraphQL we have not yet identified. Throws a clear error explaining the limitation.

Inputs: no named parameters.

compass_get_session_contextList all registered Compass sessionsA
Read-onlyIdempotent

List every registered account label plus the current active_session_id. When none are registered, sessions is empty and active_session_id is null. The registry is a label only: it does not change which Compass account requests use. Every compass tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.

Inputs: no named parameters.

compass_healthcheckVerify the ContextMint Bridge connection end-to-endA
Read-onlyIdempotent

Round-trips a small public www.compass.com URL (/robots.txt) through ContextMint Bridge (your signed-in browser tab) and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'this browser can't serve a capability' from 'real www.compass.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke.

Inputs: no named parameters.

compass_register_sessionRegister a signed-in Compass sessionA
Idempotent

Record (or refresh) which Compass account the signed-in session belongs to, keyed by account_identity. Re-registering the same identity updates the existing entry. Returns a session_id; pass mark_active: true to mark it as the current account in the same call. The registry is a label only: it does not change which Compass account requests use. Every compass tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.

Inputs: account_identity (required), mark_active, auth_expires_at.

compass_resolve_addressesBulk-resolve Compass listings by street addressA
Read-onlyIdempotent

Resolve up to 100 street addresses to Compass listing URLs in a single call. Returns one row per input, either { resolved: true, url, listing_id_sha, pid, address, matched_via }, { resolved: false, error, query } for a genuine no-match, or — when the bridge timed out / was unreachable (issue #85) — { resolved: false, status: "timeout" | "bridge_down", retryable: true, error, query }. A status row is NOT a miss: the lookup never completed, so retry it (a cold bridge usually succeeds on the second call) rather than concluding Compass has no listing. A row with status: "auth_required" (plus error and hint) means the browser session was signed out or stuck on an AWS WAF challenge: sign in to compass.com, then retry. Each row walks the same three rungs as compass_get_by_address — first the structured typeahead POST /api/v3/omnisuggest/autocomplete (the primary rung that routes around the AWS WAF, issues #78/#79), then /homes-for-sale/?q=<address> (freetext), then /homes-for-sale/<locality-slug>/ (search_fallback, issue #71) — and verifies candidates against the same whole-token address-match policy (#45). The matched_via field on each resolved row indicates which rung found it. Compass's search degrades into far-away top hits when the local market has no match, and bulk amplifies the corruption surface, so a miss returns resolved: false with no URL rather than leaking the wrong property. Calls fan out concurrently server-side, and the whole call is bounded by an overall deadline: any row still unsettled when it is reached comes back as { resolved: false, status: "pending", retryable: true, error, query } with a top-level pending count — that is NOT a miss, so re-run just those addresses. Read-only; safe to call repeatedly.

Inputs: addresses (required).

compass_search_propertiesSearch Compass listingsA
Read-onlyIdempotent

Search Compass listings by location (city, ZIP, neighborhood) and optional filters. Resolves free-text via slugification into Compass's URL routing, then fetches the SSR search-results page and extracts the embedded listings array. Compass server-renders ~41 listings into that page (its num), and total_items reports the full market count. PAGINATION (issue #87): Compass no longer paginates the SSR search via any URL — /page-N/, ?page=N, and ?start=N all canonicalize back to page 1 and return the identical listings, so only the first SSR page (~41 listings) is reachable through this primitive. offset is honored WITHIN that page, and next_offset is emitted only when more listings remain within it — it is never a false cursor that re-fetches page 1. TO REACH BEYOND THE FIRST PAGE, narrow with price_min / price_max / beds_min/beds_max to bucket the result set into <~41-listing bands (price-banding), then search each band. Returns each matching listing's address, price, beds/baths, sqft, lat/lng, the Compass homedetails URL (_lid/ form, content-addressed by listing_id_sha), and the stable _pid/ URL via property_url and the surfaced pid field. The per-listing primary_photo_url / primary_thumbnail_url are omitted in the default compact view (they are Compass CDN URLs a model cannot see); pass view: "full" to get them, or compass_get_property_photos for the whole gallery. USE pid/_pid/ FOR LONG-LIVED REFERENCES (trackers, sheets, bookmarks) — sha-based _lid/ URLs change when a property is delisted and relisted. Use the sha-based URL to fetch the current listing record. Read-only; safe to call repeatedly.

Inputs: location (required), view, limit, offset, +5 more.

compass_set_active_sessionSet the active Compass sessionA
Idempotent

Mark a previously registered session_id as the current account label, for your own bookkeeping across a conversation. The registry is a label only: it does not change which Compass account requests use. Every compass tool call goes through whichever browser tab the ContextMint Bridge extension is signed into; to read a different account, sign that tab into it.

Inputs: session_id (required).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 18 tools

    Disambiguation4/5

    Most tools are clearly distinct (single vs. bulk variants, compare vs. bulk_get, mortgage vs. affordability), and descriptions explicitly explain boundaries. The only soft overlap is between compass_register_session and compass_set_active_session, plus the two 'saved' stubs, but descriptions disambiguate well.

    Naming Consistency4/5

    Nearly all tools follow compass_verb_noun (get_property, search_properties, compare_properties, resolve_addresses), which is predictable. Minor deviations like compass_bulk_get (adjective-verb) and compass_healthcheck (single noun) slightly break the pattern but remain readable.

    Tool Count4/5

    18 tools is on the heavier side but each maps to a real capability (search, fetch, bulk, compare, photos, history, agent, rentals, financial calcs, sessions, diagnostics). The two always-erroring 'saved' stubs are the main dead weight, keeping this below a perfect score.

    Completeness4/5

    Strong coverage of a read-only real-estate research domain: discovery (search, address resolution, agent listings), retrieval (get/bulk/compare/photos/history), analysis (mortgage, affordability), and ops (healthcheck, sessions). The only notable gap is the two non-functional saved-homes/saved-searches tools, which are honest but unusable.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      The RealVest MCP (Model Context Protocol) server enables AI assistants like Claude to use all 31 of our professional calculators and access our educational resources directly in your conversations. From basic affordability to advanced portfolio analysis, Monte Carlo simulations, and tax optimization
      36 npm
      7
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      Built an MCP server that connects Claude Desktop, Cursor, or any MCP client to Northeast Deal Intel's CRE database. 8 tools: • search_deals — filter 14K+ active listings by state, type, score, cap rate • search_comps — 100K+ closed transactions for comp benchmarking • score_deal — submit any property for AI scoring against real comp data • find_1031_candidates — exchange-ready deal filter (price
      8
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      MCP server for NYC real estate due diligence. Lets Claude query 22+ NYC public-record databases — DOB/HPD/ECB violations, ACRIS deeds, DOF sales, 311 complaints, FDNY incidents, NYPD complaints, marshal evictions, PLUTO, rent stabilization — in plain English.
      18
      7
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      A production-grade MCP server enabling Claude to perform comprehensive NJ real estate workflows including property search, valuation, neighborhood intelligence, investment analysis, and agent tools via 20 tools and 15+ data sources.
      -