zillow-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +36 -0
- package/.claude-plugin/plugin.json +23 -0
- package/.mcp.json +8 -0
- package/README.md +103 -0
- package/SKILL.md +76 -0
- package/dist/bundle.js +37230 -0
- package/package.json +56 -0
- package/server.json +28 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
|
|
3
|
+
"name": "zillow-mcp",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "Chris Hall",
|
|
6
|
+
"email": "chris.c.hall@gmail.com"
|
|
7
|
+
},
|
|
8
|
+
"metadata": {
|
|
9
|
+
"description": "MCP server for Zillow — search listings, fetch property details, Zestimate history, saved searches & homes, market reports. Routes through the user's signed-in zillow.com tab via the fetchproxy browser extension to dodge bot detection.",
|
|
10
|
+
"version": "0.1.0"
|
|
11
|
+
},
|
|
12
|
+
"plugins": [
|
|
13
|
+
{
|
|
14
|
+
"name": "zillow-mcp",
|
|
15
|
+
"displayName": "Zillow",
|
|
16
|
+
"source": "./",
|
|
17
|
+
"description": "MCP server for Zillow — search listings, get property details, Zestimate history, saved searches & homes, market reports",
|
|
18
|
+
"version": "0.1.0",
|
|
19
|
+
"author": {
|
|
20
|
+
"name": "Chris Hall"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/chrischall/zillow-mcp",
|
|
23
|
+
"repository": "https://github.com/chrischall/zillow-mcp",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"keywords": [
|
|
26
|
+
"zillow",
|
|
27
|
+
"real-estate",
|
|
28
|
+
"property",
|
|
29
|
+
"zestimate",
|
|
30
|
+
"housing",
|
|
31
|
+
"mcp"
|
|
32
|
+
],
|
|
33
|
+
"category": "productivity"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "zillow-mcp",
|
|
3
|
+
"displayName": "Zillow",
|
|
4
|
+
"version": "0.1.0",
|
|
5
|
+
"description": "Zillow real-estate access for Claude — search listings, get property details, Zestimate history, your saved searches & homes, market reports",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Chris Hall",
|
|
8
|
+
"email": "chris.c.hall@gmail.com"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/chrischall/zillow-mcp",
|
|
11
|
+
"repository": "https://github.com/chrischall/zillow-mcp",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"keywords": [
|
|
14
|
+
"zillow",
|
|
15
|
+
"real-estate",
|
|
16
|
+
"property",
|
|
17
|
+
"zestimate",
|
|
18
|
+
"housing",
|
|
19
|
+
"mcp"
|
|
20
|
+
],
|
|
21
|
+
"skills": "./SKILL.md",
|
|
22
|
+
"mcp": "./.mcp.json"
|
|
23
|
+
}
|
package/.mcp.json
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# zillow-mcp
|
|
2
|
+
|
|
3
|
+
Zillow real-estate access as an MCP server for Claude — search listings, fetch property details, Zestimate history, your saved searches & homes, and market reports via natural language.
|
|
4
|
+
|
|
5
|
+
> ⚠️ Zillow does not publish a public consumer API. The official [Bridge API](https://www.bridgeinteractive.com/developers/bridge-api/) is gated to MLS partners. This server uses the same private endpoints the zillow.com web app uses, routed through your own signed-in browser tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) extension. Akamai / PerimeterX see a real browser session, not a Node process — but you should still treat this as informal use of Zillow's website. Use at your own discretion.
|
|
6
|
+
|
|
7
|
+
## Why this exists
|
|
8
|
+
|
|
9
|
+
The four existing Zillow MCPs all sit on one of two foundations:
|
|
10
|
+
|
|
11
|
+
- The **Bridge API** — requires MLS membership, IDX vendor relationship, or "approved technology partnership" (10+ business-day approval). Consumers can't get in.
|
|
12
|
+
- A **paid scraper** (RapidAPI, Apify) — adds a third party to the trust path and rate-limits.
|
|
13
|
+
|
|
14
|
+
None of them can see what *you* have saved, favorited, or recently viewed — because both Bridge and third-party scrapers are out-of-session. zillow-mcp uses your already-signed-in zillow.com tab.
|
|
15
|
+
|
|
16
|
+
## Tools
|
|
17
|
+
|
|
18
|
+
| Tool | Purpose | Auth-scoped |
|
|
19
|
+
| --- | --- | :---: |
|
|
20
|
+
| `zillow_search_properties` | Search listings by location and filters | |
|
|
21
|
+
| `zillow_get_property` | Full record for a zpid (price, Zestimate, beds, schools, history) | |
|
|
22
|
+
| `zillow_get_zestimate_history` | Time series of Zestimate values | |
|
|
23
|
+
| `zillow_get_saved_searches` | Your saved searches with new-listing counts | ✓ |
|
|
24
|
+
| `zillow_get_saved_homes` | Your favorited homes | ✓ |
|
|
25
|
+
| `zillow_get_market_report` | Median price, days on market, ZHVI for a region | |
|
|
26
|
+
| `zillow_calculate_mortgage` | Local PITI calculator (no network) | |
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
### Option A — npx (after publishing)
|
|
31
|
+
|
|
32
|
+
Add to `.mcp.json`:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"mcpServers": {
|
|
37
|
+
"zillow": {
|
|
38
|
+
"command": "npx",
|
|
39
|
+
"args": ["-y", "zillow-mcp"]
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Option B — from source
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
git clone https://github.com/chrischall/zillow-mcp
|
|
49
|
+
cd zillow-mcp
|
|
50
|
+
npm install
|
|
51
|
+
npm run build
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
```json
|
|
55
|
+
{
|
|
56
|
+
"mcpServers": {
|
|
57
|
+
"zillow": {
|
|
58
|
+
"command": "node",
|
|
59
|
+
"args": ["/path/to/zillow-mcp/dist/bundle.js"]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### One-time browser setup
|
|
66
|
+
|
|
67
|
+
zillow-mcp talks to your browser through the [fetchproxy](https://github.com/chrischall/fetchproxy) extension, which is shared across every fetchproxy-based MCP (resy-mcp, opentable-mcp, …). Install it once:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
git clone https://github.com/chrischall/fetchproxy
|
|
71
|
+
cd fetchproxy
|
|
72
|
+
npm ci
|
|
73
|
+
npm --workspace=@fetchproxy/extension-chrome run build
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Then in Chrome: `chrome://extensions` → toggle Developer mode → Load unpacked → pick `packages/extension-chrome/dist/`.
|
|
77
|
+
|
|
78
|
+
Open zillow.com and sign in. That's all the auth this server needs.
|
|
79
|
+
|
|
80
|
+
## How it works
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
┌────────────────┐ stdio ┌──────────────────┐ WS ┌──────────────────┐ fetch() ┌─────────────┐
|
|
84
|
+
│ MCP client │◀────────▶│ dist/bundle.js │◀──────▶│ fetchproxy │◀────────────▶│ zillow.com │
|
|
85
|
+
│ (Claude, etc.) │ │ (Zillow MCP) │ :37149 │ extension │ (real TLS, │ (your tab) │
|
|
86
|
+
└────────────────┘ └──────────────────┘ │ (separate) │ cookies) └─────────────┘
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
The MCP server runs in Node, but every HTTP call to zillow.com is dispatched into your live browser tab through the fetchproxy extension. Akamai sees a real browser making a real request from a real session — `_abck`, TLS fingerprint, cookies all match the page that's already on screen. No headless browser, no impersonation, no proxy farm.
|
|
90
|
+
|
|
91
|
+
## Commands
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
npm test # vitest, mocked transport, no network
|
|
95
|
+
npm run test:watch
|
|
96
|
+
npm run test:coverage
|
|
97
|
+
npm run build # tsc --noEmit + esbuild bundle → dist/bundle.js
|
|
98
|
+
npm run dev # node dist/bundle.js (after build)
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: zillow-mcp
|
|
3
|
+
description: Look up real-estate listings, property details, Zestimates, saved searches/homes, and market reports on Zillow via MCP. Triggers on phrases like "find homes in", "what's the Zestimate for", "show my saved Zillow homes", "what's my saved Zillow search seeing", "what does Zillow say about", "Zillow market report for", or any request involving Zillow properties, prices, or your saved Zillow activity. Requires zillow-mcp installed and the fetchproxy extension active (see Setup below).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# zillow-mcp
|
|
7
|
+
|
|
8
|
+
MCP server for Zillow — natural-language access to listings, property records, Zestimates, your saved searches/homes, and market reports. Routes through your signed-in zillow.com tab via the fetchproxy browser extension, so Akamai sees a real browser session instead of a Node process.
|
|
9
|
+
|
|
10
|
+
- **npm:** [npmjs.com/package/zillow-mcp](https://www.npmjs.com/package/zillow-mcp)
|
|
11
|
+
- **Source:** [github.com/chrischall/zillow-mcp](https://github.com/chrischall/zillow-mcp)
|
|
12
|
+
|
|
13
|
+
> ⚠️ Zillow does not publish a public consumer API. This server uses the same private endpoints the zillow.com web app calls, dispatched through your own signed-in browser tab via the fetchproxy extension. Use at your own discretion.
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
### 1. Install zillow-mcp
|
|
18
|
+
|
|
19
|
+
`.mcp.json` (project) or `~/.claude/mcp.json` (global):
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{
|
|
23
|
+
"mcpServers": {
|
|
24
|
+
"zillow": {
|
|
25
|
+
"command": "npx",
|
|
26
|
+
"args": ["-y", "zillow-mcp"]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 2. Install the fetchproxy extension (one-time, shared across all fetchproxy-based MCPs)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
git clone https://github.com/chrischall/fetchproxy
|
|
36
|
+
cd fetchproxy
|
|
37
|
+
npm ci
|
|
38
|
+
npm --workspace=@fetchproxy/extension-chrome run build
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Then in Chrome: `chrome://extensions` → Developer mode → Load unpacked → pick `packages/extension-chrome/dist/`.
|
|
42
|
+
|
|
43
|
+
### 3. Open zillow.com and sign in.
|
|
44
|
+
|
|
45
|
+
That's it. No API keys, no env vars.
|
|
46
|
+
|
|
47
|
+
## Tools
|
|
48
|
+
|
|
49
|
+
### Public data
|
|
50
|
+
|
|
51
|
+
- **`zillow_search_properties`** — Search by location + filters (price, beds, home type, status). Returns matching listings with price, Zestimate, beds/baths, sqft, image, and homedetails URL.
|
|
52
|
+
- **`zillow_get_property`** — Full property record by `zpid` or homedetails URL. Returns address, price, Zestimate, rent Zestimate, beds, baths, sqft, year built, schools, price history.
|
|
53
|
+
- **`zillow_get_zestimate_history`** — Time series of Zestimate values for a property.
|
|
54
|
+
- **`zillow_get_market_report`** — Median sale/list/rent price, days on market, inventory, ZHVI for a Zillow region (e.g. `/home-values/6181/brooklyn-ny/`).
|
|
55
|
+
- **`zillow_calculate_mortgage`** — Local PITI calculator. No network call. Provide home price, interest rate, optional down payment / taxes / insurance / HOA / PMI; returns a full monthly breakdown.
|
|
56
|
+
|
|
57
|
+
### Signed-in user data (the unique value vs. Bridge-API competitors)
|
|
58
|
+
|
|
59
|
+
- **`zillow_get_saved_searches`** — Your saved searches, with new-listing counts and notification frequency.
|
|
60
|
+
- **`zillow_get_saved_homes`** — Homes you've favorited.
|
|
61
|
+
|
|
62
|
+
## Trigger examples
|
|
63
|
+
|
|
64
|
+
- "Find me 2-bedroom condos under $1.5M in Brooklyn" → `zillow_search_properties`
|
|
65
|
+
- "What's the Zestimate on 123 Main St?" → resolve to zpid, then `zillow_get_property`
|
|
66
|
+
- "How has the Zestimate for zpid 12345 changed?" → `zillow_get_zestimate_history`
|
|
67
|
+
- "What's new on my saved Zillow searches?" → `zillow_get_saved_searches`
|
|
68
|
+
- "Pull up my saved homes on Zillow" → `zillow_get_saved_homes`
|
|
69
|
+
- "Brooklyn real-estate market trends" → `zillow_get_market_report`
|
|
70
|
+
- "Monthly payment on a $500k home, 20% down, 6.5% rate" → `zillow_calculate_mortgage`
|
|
71
|
+
|
|
72
|
+
## Gotchas
|
|
73
|
+
|
|
74
|
+
- **Sign-in required for saved-* tools.** If the user isn't signed into zillow.com in the bridged Chrome tab, those tools fail with `SessionNotAuthenticatedError`. Public tools work either way, but signed-in sessions are more reliable against captcha walls.
|
|
75
|
+
- **Captcha interstitial.** Zillow occasionally serves a captcha to fresh sessions. Solving it in the Chrome tab once unblocks subsequent fetches.
|
|
76
|
+
- **No write surface yet.** All tools are read-only. Saving a home / search / contact form are not implemented in v0.1.
|