Realtystack Mcp

io.github.IsaiahDupreePublished by GitHub account IsaiahDupreev1.0.0Updated Nov 2, 2026

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

VerifiedStreamable HTTPWeb executableLocation & LifestyleFinance

Overview

AI-generated overview

Remote MCP connector for U.S. real-estate data: property records, AVM sale-value and rent estimates, and sale/rental listings.

What you can do
  • Search and read property records by address, city and state, or latitude/longitude with a radius, with structural filters
  • Fetch full detail for a single property record by its RentCast id
  • Estimate sale value and long-term rent with point estimates, price ranges and scored comparables
  • List for-sale and long-term rental listings with price, status, days on market, MLS and agent contact details
When to use it
Useful when an assistant needs U.S. property facts, valuation or rent estimates, or current listing data for research, comparison or client-facing summaries, without wiring up the underlying REST API by hand.
Requirements
A remote streamable-HTTP endpoint; no package install. No authentication is required from the MCP client. The server itself needs its own upstream proxy secret and base URL configured, and applies a soft per-IP rate limit (default 30 tool calls per hour).
Before you install
All six tools are read-only lookups, but results are live third-party real-estate data passed through verbatim, so accuracy and freshness are not guaranteed. The free tier is rate-limited and described as a discovery channel rather than an unmetered substitute for the paid upstream listing. Listing records include agent and office contact details.

Installation

In SourceWeft

  1. Open Realtystack Mcp in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.IsaiahDupree%2Frealtystack-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "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

Source: README.md at commit ef76c23

Tools

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.

ParameterscitylimitstateoffsetradiusaddresslotSizezipCodebedroomslatitudebathroomslongitude+5 more

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.

Parametersidrequired

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.

ParametersaddressdaysOldbedroomslatitudebathroomscompCountlongitudemaxRadiuspropertyTypesquareFootagelookupSubjectAttributes

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.

ParametersaddressdaysOldbedroomslatitudebathroomscompCountlongitudemaxRadiuspropertyTypesquareFootagelookupSubjectAttributes

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.

ParameterscitylimitpricestateoffsetradiusstatusaddressdaysOldlotSizezipCodebedrooms+7 more

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.

ParameterscitylimitpricestateoffsetradiusstatusaddressdaysOldlotSizezipCodebedrooms+7 more

Version history

1
  1. v1.0.0LatestSep 16, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.