Realtystack Mcp

io.github.IsaiahDupree由 GitHub 帳號 IsaiahDupree 發布v1.0.0更新於 Nov 2, 2026

U.S. real-estate data: property records, AVM value + rent estimates, sale/rental listings.

已驗證Streamable HTTP可網頁執行位置與生活金融

概覽

AI 產生的概覽

面向美國房產資料的遠端 MCP 連接器:房產紀錄、自動估值(售價與租金)以及出售/出租房源。

可以做什麼
  • 依地址、城市+州或經緯度加半徑搜尋並讀取房產紀錄,支援結構屬性篩選
  • 依 RentCast id 取得單筆房產紀錄的完整詳情
  • 估算售價與長期租金,回傳點估計、價格區間及附評分與距離的可比案例
  • 列出出售與長期出租房源,含價格、狀態、掛牌天數、MLS 及經紀人聯絡資訊
適用情境
適合需要美國房產事實、估值或租金估算,以及目前房源資料的情境,例如研究、比較或產生面向客戶的摘要,而不必自行串接底層 REST API。
執行需求
遠端 streamable-HTTP 端點,無需安裝套件。MCP 用戶端不需驗證。伺服器本身需設定上游代理金鑰與基礎位址,並依 IP 施加軟性速率限制(預設每小時 30 次工具呼叫)。
安裝前請注意
六個工具皆為唯讀查詢,但回傳的是原樣轉送的第三方即時房產資料,準確性與時效性不予保證。免費層有速率限制,並被說明為探索管道,而非付費上游服務的無限量替代。房源紀錄包含經紀人與辦公室聯絡資訊。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Realtystack Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.IsaiahDupree%2Frealtystack-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "mcpServers": {
    "realtystack": {
      "type": "http",
      "url": "https://realtystack-mcp.vercel.app/mcp"
    }
  }
}

README

realtystack-mcp

A remote MCP (Model Context Protocol) connector for the RealtyStack API — U.S. real-estate data built on RentCast: property records search + single-record lookup, AVM sale-value and long-term-rent estimates with comparables, and active sale/rental listings, all in one flat /v1 JSON contract.

Upstream: https://realestate-api-kappa.vercel.app (RealtyStack REST API) — 6 tools, one per /v1 endpoint. Since the upstream deployment is metered (RapidAPI/Apify, and itself layered over RentCast's metered quota), this connector authenticates its own outbound calls with a server-side RapidAPI proxy secret (REALTYSTACK_MCP_PROXY_SECRET, sent as the X-RapidAPI-Proxy-Secret header) and applies a soft per-IP rate limit (REALTYSTACK_MCP_RATE_LIMIT, default 30 tool-calls/hour, in-memory) so this free MCP tier stays a discovery channel rather than an unmetered bypass of the paid listing — see lib/ratelimit.js.

What this is, and why it's a separate connector

RealtyStack is a plain REST API. Any HTTP client can already call it directly. This repo exists because MCP clients (Claude, ChatGPT, and other MCP-aware agents) don't consume arbitrary REST APIs — they consume MCP tools. realtystack-mcp is a thin adapter layer that:

  • Exposes each RealtyStack /v1 endpoint as a discoverable, typed MCP tool (name, description, zod input schema, annotations) that an LLM can reason about and call directly, instead of having to be taught the REST surface out-of-band.
  • Speaks the MCP streamable-HTTP transport at a single /mcp endpoint, so it can be registered as a connector in Claude, ChatGPT, or any other MCP client with one URL.
  • Does nothing else. It has no business logic of its own — every tool call is a pass-through fetch to RealtyStack, and the JSON response RealtyStack returns is handed back verbatim as the tool result.

Authentication: none on the MCP caller side (deliberate)

RealtyStack's data has no per-user dimension — it's objective real-estate data (property records, valuation estimates, listings). There is nothing to gate per-caller, so this connector intentionally ships with:

  • No OAuth, no login, no bearer tokens from the MCP client
  • No Supabase / database
  • No demo-vs-real account split — every caller gets the same real, live data

api/mcp.js builds a fresh, stateless McpServer per request and serves it with zero MCP-caller auth checks.

Upstream auth (outbound)

The upstream RealtyStack deployment gates every /v1/* route behind a RapidAPI proxy secret (see realestate-api/src/guard.js). This connector reaches real data by sending that same secret as the X-RapidAPI-Proxy-Secret header on its outbound fetch calls, read from the REALTYSTACK_MCP_PROXY_SECRET env var. Verified behavior: sending X-RapidAPI-Proxy-Secret passes the guard and returns real data; sending nothing returns 403 "This API is served through RapidAPI.". This is an upstream monetization detail — it does not add any auth to this connector, which still has zero MCP-caller auth by design.

Tool list

One tool per RealtyStack /v1 endpoint (from realestate-api/openapi.yaml; /api/health is intentionally not wrapped):

ToolRealtyStack endpointDescription
search_propertiesGET /v1/propertiesSearch property records by address, city/state/zip, or lat/long radius, with structural filters.
get_propertyGET /v1/properties/{id}Full detail for one property record by its RentCast id.
avm_valueGET /v1/avm/valueAVM sale-value estimate (point + range) with scored comparable sales.
avm_rentGET /v1/avm/rentAVM long-term-rent estimate (point + range) with scored comparable rentals.
search_sale_listingsGET /v1/listings/saleActive (or inactive) for-sale listings with MLS + agent/office contact.
search_rental_listingsGET /v1/listings/rentalActive (or inactive) long-term rental listings.

All 6 tools are read-only GETs, annotated { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true } — none of them write anything, and all of them reflect live, externally-changing real-estate data.

How it wraps realestate-api

Each tool handler does a plain fetch(\${REALTYSTACK_MCP_API_BASE_URL}${path}`, ...)against the real RealtyStack REST API (adding theX-RapidAPI-Proxy-Secret` header when configured) and returns the parsed JSON as MCP tool-result content:

js
{ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] }

Upstream HTTP errors (4xx/5xx) are caught and surfaced as a typed MCP error result via an asError helper rather than crashing the request.

Environment variables

VarPurposeDefault
REALTYSTACK_MCP_API_BASE_URLUpstream RealtyStack base URLhttps://realestate-api-kappa.vercel.app
REALTYSTACK_MCP_PROXY_SECRETSent as X-RapidAPI-Proxy-Secret to pass the upstream guard(unset — 403 from guarded upstream)
REALTYSTACK_MCP_RATE_LIMITSoft per-IP tools/call cap per hour30

Project layout

api/mcp.js       MCP endpoint (StreamableHTTPServerTransport, stateless, no caller auth)api/health.js    GET /api/healthlib/tools.js     All 6 tool definitions (zod schemas + fetch-and-forward handlers)lib/ratelimit.js Soft in-memory per-IP tools/call caplocal-server.js  Plain-Node http server for local dev / smoke testing (not deployed)test/smoke.mjs   Real end-to-end smoke test (initialize, tools/list, tools/call)vercel.json      Routes /mcp -> api/mcp.js, /health -> api/health.jsserver.json      MCP registry metadata

Local development

bash
npm installnpm run dev          # starts local-server.js on http://localhost:3900

Endpoints locally: POST http://localhost:3900/mcp, GET http://localhost:3900/health.

To hit real upstream data locally, set the proxy secret:

bash
REALTYSTACK_MCP_PROXY_SECRET=<secret> npm run dev

Smoke test

bash
npm run dev &                 # terminal 1npm run smoke                 # terminal 2

test/smoke.mjs drives the running server over real HTTP/JSON-RPC and verifies:

  1. GET /health returns { ok: true, ... }
  2. initialize succeeds and reports serverInfo.name === "realtystack"
  3. tools/list returns all 6 tools with their zod-derived JSON schemas
  4. tools/call for search_properties exercises the tool end-to-end (when REALTYSTACK_MCP_PROXY_SECRET is set it asserts a real upstream result; without it, the tool-calling mechanics are still proven and the upstream's honest 403 guard response is accepted)

Deploy

Not deployed by this build (verify first). Once verified:

bash
cd /Users/isaiahdupree/Software/realtystack-mcpnpx vercel --yes --prod

After deploy, the MCP connector URL to register in Claude/ChatGPT/any MCP client is:

https://<deployment-domain>/mcp

來源:README.md,提交 ef76c23

工具

6

search_properties

Search property records

Search normalized U.S. property records (owner, structural attributes, tax assessments, tax + sale history) by location. Pin a location one of three ways: a full address, a city+state(+zipCode), or a latitude+longitude point with a radius (miles). All other parameters narrow the result set. Records are cached 24h upstream, so meta.cached may be true on repeat queries.

輸入參數citylimitstateoffsetradiusaddresslotSizezipCodebedroomslatitudebathroomslongitude另有 5 個

get_property

Get one property record by id

Full detail for a single property record, keyed by its RentCast id (the same id returned on every search_properties, avm_value, avm_rent, and listings record). Returns 404 if no property matches the id. Cached 24h upstream.

輸入參數id必填

avm_value

AVM sale-value estimate with comparables

Run RentCast's automated valuation model for a subject property and return a point price estimate, a priceRangeLow/priceRangeHigh band, the resolved subjectProperty, and comparables[] — recent comparable sales each scored with a distance (miles) and correlation (0-1 similarity). Pin the subject with either address or latitude+longitude; when subject attributes are unknown, supply propertyType/bedrooms/bathrooms/squareFootage (or leave lookupSubjectAttributes true to have RentCast fill them). Cached 6h upstream.

輸入參數addressdaysOldbedroomslatitudebathroomscompCountlongitudemaxRadiuspropertyTypesquareFootagelookupSubjectAttributes

avm_rent

AVM long-term-rent estimate with comparables

Run RentCast's automated model for long-term (12-month lease) rent and return a point rent estimate, a rentRangeLow/rentRangeHigh band, the resolved subjectProperty, and comparables[] — recent comparable rentals each scored with distance and correlation. Same subject-pinning rules as avm_value (address or latitude+longitude, plus optional subject attributes). Cached 6h upstream.

輸入參數addressdaysOldbedroomslatitudebathroomscompCountlongitudemaxRadiuspropertyTypesquareFootagelookupSubjectAttributes

search_sale_listings

Search active (or inactive) sale listings

Return a page of for-sale listings (list price, status, days on market, MLS name/number, listing agent + office contact, and price/status history) for a location. Same location-pinning rules as search_properties (address, city+state(+zipCode), or latitude+longitude+radius). Each record is tagged listingKind:"sale". Listings move faster than records, so these are cached only 30 minutes upstream.

輸入參數citylimitpricestateoffsetradiusstatusaddressdaysOldlotSizezipCodebedrooms另有 7 個

search_rental_listings

Search active (or inactive) long-term rental listings

Return a page of long-term (12-month lease) rental listings — same record shape as search_sale_listings (monthly price is the asking rent), but each record is tagged listingKind:"rental-long-term". Same location-pinning rules and 30-minute upstream cache as the sale-listings endpoint.

輸入參數citylimitpricestateoffsetradiusstatusaddressdaysOldlotSizezipCodebedrooms另有 7 個

版本歷史

1
  1. v1.0.0最新Sep 16, 2026

評分

已滿足適用檢查項的 90%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。