mcpField
R
realtystack-mcp

realtystack-mcp

远程服务
realtystack-mcp.vercel.app商业与营销013 周前更新

关于 realtystack-mcp

realtystack-mcp 是 RealtyStack 美国房地产数据 API 的远程 MCP 适配器,供 Claude、ChatGPT 等 MCP 客户端调用。它将 6 个只读 REST 端点映射为工具,涵盖房产记录、估值及在售和出租房源。

主要功能

  1. 01按地址或区域搜索房产记录
  2. 02查询单条房产详情
  3. 03获取房屋售价估值及可比房源
  4. 04获取长期租金估值及可比房源
  5. 05搜索在售房源
  6. 06搜索长期出租房源

适用场景

  1. 01查找特定地区的房产记录
  2. 02查看房屋估值及可比数据
  3. 03研究当前出售房源
  4. 04查找长期出租房源

MCP 相关

通过单一 `/mcp` Streamable HTTP 端点向 MCP 客户端提供 6 个类型化工具。工具将请求转发至 RealtyStack API,并返回其 JSON 结果。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://realtystack-mcp.vercel.app/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

6
参数类型必填说明
citystring否城市名称;与 state(以及可选的 zipCode)组合使用以搜索区域。
limitinteger否每页返回的最大记录数。默认值为 50。
statestring否2 个字符的州缩写,例如 TX。
offsetinteger否分页时跳过的记录数。默认值为 0。
radiusnumber否搜索半径,单位为英里(最大 100);与 latitude/longitude 配合使用。
addressstring否完整地址,格式为“Street, City, State, Zip”。可替代 city/state/zipCode 或 lat+long。例如:“5500 Grand Lake Dr, San Antonio, TX, 78244”。
lotSizestring否以平方英尺为单位的地块面积;支持范围和多个值。
zipCodestring否5 位 ZIP 邮政编码。
bedroomsstring否卧室数量;支持范围和多个值。
latitudenumber否搜索中心的纬度;需要同时提供经度和半径。
bathroomsstring否浴室数量;支持分数、范围和多个值。
longitudenumber否搜索中心的经度;需要同时提供纬度和半径。
yearBuiltstring否建成年份;支持范围和多个值。
propertyTypeenum否按房产类型筛选。Single Family | Condo | Townhouse | Manufactured | Multi-Family | Apartment | Land
saleDateRangestring否距上次出售的天数(最小值为 1)——仅限在此时间范围内上次售出的房产。
squareFootagestring否居住面积(平方英尺);支持范围和多个值。
includeTotalCountboolean否为 true 时,RentCast 还会返回匹配结果总数。默认为 false。

详细介绍

realtystack-mcp

一个面向 RealtyStack API 的远程 **MCP(Model Context Protocol)**连接器,提供基于 RentCast 构建的美国房地产数据:房产记录搜索和单条记录查询、包含可比房产的 AVM 售价与长期租金估算,以及在售和出租房源;所有功能都遵循统一的 /v1 JSON 契约。

上游:https://realestate-api-kappa.vercel.app(RealtyStack REST API)——共 6 个工具,每个 /v1 端点对应一个工具。由于上游部署采用用量计费(RapidAPI/Apify,且其本身也依赖 RentCast 的计费配额),此连接器使用服务端 RapidAPI 代理密钥(REALTYSTACK_MCP_PROXY_SECRET,通过 X-RapidAPI-Proxy-Secret 标头发送)对自身的出站调用进行身份验证,并实施软性 IP 级速率限制(REALTYSTACK_MCP_RATE_LIMIT,默认为每小时 30 次工具调用,基于内存),让这一免费 MCP 层成为数据发现渠道,而不是绕过付费房源服务的不限量通道——参见 lib/ratelimit.js。

这是什么,以及为什么它是一个独立的连接器

RealtyStack 是一个纯 REST API。任何 HTTP 客户端都可以直接调用它。创建此代码库是因为MCP 客户端(Claude、ChatGPT 和其他支持 MCP 的 Agent)不会使用任意 REST API——它们使用 MCP 工具。realtystack-mcp 是一个轻量适配层,用于:

  • 将每个 RealtyStack /v1 端点公开为可发现、类型化的 MCP 工具(名称、描述、zod 输入架构、注释),供大模型理解并直接调用,而无需在带外另行教会它 REST 接口。
  • 通过单个 /mcp 端点提供 MCP 可流式 HTTP传输,因此只需一个 URL,即可将其注册为 Claude、ChatGPT 或任何其他 MCP 客户端中的连接器。
  • 不做其他事情。它没有自己的业务逻辑——每次工具调用都会直接 fetch RealtyStack,并将 RealtyStack 返回的 JSON 响应原样作为工具结果返回。

身份验证:MCP 调用方无需身份验证(有意如此)

RealtyStack 的数据不区分用户——它是客观的房地产数据(房产记录、估值、房源)。没有需要按调用方进行限制的内容,因此此连接器有意采用以下设计:

  • 不使用 OAuth、登录或来自 MCP 客户端的 bearer token
  • 不使用 Supabase / 数据库
  • 不区分演示账号与真实账号——所有调用方获取相同的实时真实数据

api/mcp.js 会为每个请求构建一个全新的无状态 McpServer,并在不检查 MCP 调用方身份验证的情况下提供服务。

上游身份验证(出站)

上游 RealtyStack 部署会在每个 /v1/* 路由前设置 RapidAPI 代理密钥验证(参见 realestate-api/src/guard.js)。此连接器通过在出站 fetch 调用中发送相同的密钥(该密钥从环境变量 REALTYSTACK_MCP_PROXY_SECRET 中读取),并将其设为 X-RapidAPI-Proxy-Secret 标头,从而访问真实数据。已验证的行为:发送 X-RapidAPI-Proxy-Secret 标头会通过验证并返回真实数据;不发送则会返回 403 "This API is served through RapidAPI."。这是上游的变现设置——它不会为此连接器增加任何身份验证;根据设计,此连接器仍完全不对 MCP 调用方进行身份验证。

工具列表

每个 RealtyStack /v1 端点对应一个工具(来自 realestate-api/openapi.yaml;有意不封装 /api/health):

工具RealtyStack 端点描述
search_propertiesGET /v1/properties根据地址、城市/州/邮编或经纬度半径搜索房产记录,并支持结构性筛选条件。
get_propertyGET /v1/properties/{id}根据 RentCast id 获取一条房产记录的完整详情。
avm_valueGET /v1/avm/valueAVM 售价估算(点估值 + 范围),并提供评分后的可比销售记录。
avm_rentGET /v1/avm/rentAVM 长期租金估算(点估值 + 范围),并提供评分后的可比出租记录。
search_sale_listingsGET /v1/listings/sale搜索在售(或已下架)的房源,并提供 MLS 和经纪人/办公室联系方式。
search_rental_listingsGET /v1/listings/rental搜索在租(或已下架)的长期租赁房源。

这 6 个工具均为只读 GET 请求,标注为 { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }——它们都不会写入任何内容,并且返回的数据都会反映实时且可能变化的外部房地产数据。

如何封装 realestate-api

每个工具处理程序都会通过普通的 fetch(\${REALTYSTACK_MCP_API_BASE_URL}${path}`, ...)请求真实的 RealtyStack REST API(如已配置,则添加X-RapidAPI-Proxy-Secret` 请求头),并将解析后的 JSON 作为 MCP 工具结果内容返回:

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

上游 HTTP 错误(4xx/5xx)会被捕获,并通过 asError 助手以类型化的 MCP 错误结果呈现,而不会导致请求崩溃。

环境变量
变量用途默认值
REALTYSTACK_MCP_API_BASE_URL上游 RealtyStack 基础 URLhttps://realestate-api-kappa.vercel.app
REALTYSTACK_MCP_PROXY_SECRET作为 X-RapidAPI-Proxy-Secret 发送,以通过上游验证(未设置——受保护的上游会返回 403)
REALTYSTACK_MCP_RATE_LIMIT每小时按 IP 计算的工具调用软上限30

项目布局

api/mcp.js       MCP endpoint (StreamableHTTPServerTransport, stateless, no caller auth)
api/health.js    GET /api/health
lib/tools.js     All 6 tool definitions (zod schemas + fetch-and-forward handlers)
lib/ratelimit.js Soft in-memory per-IP tools/call cap
local-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.js
server.json      MCP registry metadata

本地开发

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

本地端点:POST http://localhost:3900/mcp、GET http://localhost:3900/health。

要在本地访问真实的上游数据,请设置代理密钥:

REALTYSTACK_MCP_PROXY_SECRET=<secret> npm run dev

冒烟测试

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

test/smoke.mjs 通过真实 HTTP/JSON-RPC 驱动运行中的服务,并验证:

  1. GET /health 返回 { ok: true, ... }
  2. initialize 成功,并报告 serverInfo.name === "realtystack"
  3. tools/list 返回全部 6 个工具及其由 zod 推导出的 JSON schema
  4. tools/call 调用 search_properties,端到端验证该工具(设置了 REALTYSTACK_MCP_PROXY_SECRET 时会断言返回真实的上游结果;未设置时,仍会验证工具调用机制,并接受上游如实返回的 403 验证响应)

部署

此构建尚未部署(请先验证)。验证通过后:

cd /Users/isaiahdupree/Software/realtystack-mcp
npx vercel --yes --prod

部署后,在 Claude/ChatGPT/任意 MCP 客户端中注册的 MCP 连接器 URL 为:

https://<deployment-domain>/mcp

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。