ListingsFeed

MCP server

ListingsFeed speaks the Model Context Protocol over streamable HTTP, so Claude, ChatGPT, Cursor, Windsurf, Claude Code and any MCP-capable agent can search the live dataset with the same key you use for the REST API.

Endpointhttps://listingsfeed.com/mcp
TransportStreamable HTTP (JSON responses; no SSE stream required)
AuthAuthorization: Bearer <api key>
Protocol version2025-06-18 (older clients negotiate down)
Manifest/.well-known/mcp.json

Tools

count_listingsCount matches for any filter set. Free. Use it first to size a query.
search_listingsPage through listings (default 25 per call, limit up to your plan's page size). Metered on records returned. Returns next_cursor.
get_listingOne listing by hash_id with every field. 1 record.
list_brokeragesBrokerages with active listings, by state or name. Free.
get_statsCounts by state / type / transaction, fill rates, last refresh. Free.

Tool arguments mirror the REST filters (state, property_type, transaction, min_sf, near + radius_mi, updated_since, q…). Results come back as JSON text plus structuredContent.

Claude Desktop / Claude.ai

Settings → Connectors → Add custom connector: name ListingsFeed, URL https://listingsfeed.com/mcp. When asked for authentication choose a bearer token and paste your key. Or in claude_desktop_config.json via a stdio bridge:

{
  "mcpServers": {
    "listingsfeed": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://listingsfeed.com/mcp", "--header", "Authorization: Bearer ${LF_KEY}"],
      "env": {"LF_KEY": "lf_live_…"}
    }
  }
}

Claude Code

claude mcp add --transport http listingsfeed https://listingsfeed.com/mcp \
  --header "Authorization: Bearer lf_live_…"

Cursor / Windsurf / VS Code

{
  "mcpServers": {
    "listingsfeed": {
      "url": "https://listingsfeed.com/mcp",
      "headers": {"Authorization": "Bearer lf_live_…"}
    }
  }
}

ChatGPT

ChatGPT connects to remote MCP servers through custom connectors (Settings → Connectors → Create) and through the Apps SDK. Use the URL above with your bearer key. For a custom GPT without MCP, import /openapi.json as an Action with "API key → Bearer" auth.

Your own agent (Python)

from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async with streamablehttp_client("https://listingsfeed.com/mcp",
        headers={"Authorization": f"Bearer {LF_KEY}"}) as (read, write, _):
    async with ClientSession(read, write) as session:
        await session.initialize()
        n = await session.call_tool("count_listings", {"state": "TX", "property_type": "industrial"})
        page = await session.call_tool("search_listings", {"state": "TX", "property_type": "industrial",
                                                            "min_sf": "100000", "limit": 25})

Raw JSON-RPC

curl -s -X POST https://listingsfeed.com/mcp \
  -H "Authorization: Bearer $LF_KEY" -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"count_listings","arguments":{"state":"OR","property_type":"land"}}}'

Good prompts

  • "How many industrial listings over 100,000 SF are for sale in Texas right now, and who are the top brokerages?"
  • "Find land over 200 acres within 50 miles of Columbus, OH with an asking price, and list the brokers."
  • "What changed in Phoenix office listings since last Monday?"

Metering is identical to the REST API: search_listings and get_listing bill records returned; counting, brokerages and stats are free. Quota errors come back as tool errors with the quota object, so the assistant can explain them.