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.
| Endpoint | https://listingsfeed.com/mcp |
|---|---|
| Transport | Streamable HTTP (JSON responses; no SSE stream required) |
| Auth | Authorization: Bearer <api key> |
| Protocol version | 2025-06-18 (older clients negotiate down) |
| Manifest | /.well-known/mcp.json |
Tools
count_listings | Count matches for any filter set. Free. Use it first to size a query. |
search_listings | Page through listings (default 25 per call, limit up to your plan's page size). Metered on records returned. Returns next_cursor. |
get_listing | One listing by hash_id with every field. 1 record. |
list_brokerages | Brokerages with active listings, by state or name. Free. |
get_stats | Counts 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.