@scavio/mcp-server 0.17.1 → 0.18.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/README.md CHANGED
@@ -3,9 +3,9 @@
3
3
  ![GitHub Repo stars](https://img.shields.io/github/stars/scavio-ai/scavio-mcp?style=social)
4
4
  ![License](https://img.shields.io/github/license/scavio-ai/scavio-mcp)
5
5
 
6
- [Scavio](https://scavio.dev?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) is a unified [Web Search API](https://scavio.dev/docs/search-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) and MCP server that gives AI agents web search, page extraction, and structured data from e-commerce, social, travel, jobs, real-estate, app-store, ad-library and company-filing sources. 211 tools across 33 platforms plus Extract, one API key.
6
+ [Scavio](https://scavio.dev?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) is a unified [Web Search API](https://scavio.dev/docs/search-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) and MCP server that gives AI agents web search, page extraction, and structured data from e-commerce, social, travel, jobs, real-estate, app-store, ad-library and company-filing sources. 224 tools across 35 platforms plus Extract, one API key.
7
7
 
8
- **The 22 platforms added in 0.13.0 are opt-in.** Registering all 211 tools puts 191KB of tool definitions — roughly 47k tokens — into every session before you type anything. So the default is the surface 0.12.x already had, plus Extract: 107 tools, 82KB. Upgrading never removes a tool you were using. Everything else is one env var away: see [Choosing which tools load](#choosing-which-tools-load).
8
+ **The 22 platforms added in 0.13.0 are opt-in.** Registering all 224 tools puts 211KB of tool definitions — roughly 52k tokens — into every session before you type anything. So the default is the surface 0.12.x already had, plus Extract: 107 tools, 82KB. Upgrading never removes a tool you were using. Everything else is one env var away: see [Choosing which tools load](#choosing-which-tools-load).
9
9
 
10
10
  ## Remote MCP Server
11
11
 
@@ -207,8 +207,8 @@ Add to settings (`Cmd+,`):
207
207
 
208
208
  ## Choosing which tools load
209
209
 
210
- Scavio exposes 211 tools. Loading all of them costs 191KB of `tools/list` —
211
- roughly 47k tokens of context in every session before the user has said anything,
210
+ Scavio exposes 224 tools. Loading all of them costs 211KB of `tools/list` —
211
+ roughly 52k tokens of context in every session before the user has said anything,
212
212
  and more tools than some clients will accept at all. So the server registers a
213
213
  curated subset by default and lets you pick the rest. The sizes below are
214
214
  measured, not estimated: `npm run toolslist` reproduces them.
@@ -218,7 +218,7 @@ measured, not estimated: `npm run toolslist` reproduces them.
218
218
  | Value | Registers |
219
219
  |-------|-----------|
220
220
  | *(unset)* or `default` | Everything 0.12.x had, plus `extract` — **107 tools, 82KB** |
221
- | `all` | every platform — **211 tools, 191KB** |
221
+ | `all` | every platform — **224 tools, 211KB** |
222
222
  | `extract,sec,g2` | just those platforms — 11 tools, 12KB |
223
223
  | `default,zillow,metaads` | the default set plus two more — 113 tools, 89KB |
224
224
  | `none` | no platform tools, only `get_usage` |
@@ -233,8 +233,8 @@ tells you to call to check the server works.
233
233
  **Platform keys:** `extract`, `google`, `youtube`, `tiktok`, `instagram`,
234
234
  `reddit`, `x`, `linkedin`, `threads`, `kuaishou`, `amazon`, `walmart`, `ebay`,
235
235
  `target`, `homedepot`, `costco`, `tiktok-shop`, `booking`, `airbnb`,
236
- `tripadvisor`, `yelp`, `zillow`, `redfin`, `indeed`, `glassdoor`, `appstore`, `googleplay`,
237
- `g2`, `capterra`, `trustpilot`, `googleads`, `metaads`, `sec`, `companieshouse`
236
+ `tripadvisor`, `yelp`, `zillow`, `redfin`, `realtor`, `rightmove`, `indeed`, `glassdoor`,
237
+ `appstore`, `googleplay`, `g2`, `capterra`, `trustpilot`, `googleads`, `metaads`, `sec`, `companieshouse`
238
238
 
239
239
  ### Local (stdio)
240
240
 
@@ -691,6 +691,42 @@ not something Costco publishes, and only items Costco lists online are covered.
691
691
 
692
692
  1 credit per call. `search_redfin` pages with `page` + `limit`, up to 350 listings per page; the other two are single-shot.
693
693
 
694
+ ### Realtor.com
695
+
696
+ | Tool | Description |
697
+ |------|-------------|
698
+ | `search_realtor` | US listings for sale, pending, for rent or sold by location, radius or agent: price, beds, baths, sqft, lot, year built, garage, HOA, type, listed/sold/price-cut within N days, keywords in the listing text, new construction, foreclosure, open house; up to 200 per call |
699
+ | `get_realtor_property` | One property by id or URL: price and tax history, three value estimates with history and forecast, schools, flood/wildfire/noise risk, listing agent and office |
700
+ | `get_realtor_locations` | Autocomplete cities, counties, ZIPs, neighborhoods, schools and addresses, with the slug_id for market and the property_id for an address |
701
+ | `get_realtor_market` | Market stats for a city, county or ZIP: median list, sold and rent price, price per sqft, days on market, year-over-year and month-over-month change, by property type |
702
+ | `search_realtor_agents` | Agents by city, ZIP or name: rating, reviews, active listings and price range, homes sold last year, broker and office |
703
+ | `get_realtor_agent` | One agent's full profile with every review and four sub-ratings |
704
+
705
+ 1 credit per call. `search_realtor` returns up to 200 listings per page (default 50) and
706
+ serves the first 10,000 results of a search (`page` x `page_size` <= 10,000); slice a big
707
+ area by price band, property type or radius to reach more. Sold prices are null in US
708
+ non-disclosure states (Texas, Utah, Wyoming and about nine others), while sold dates still
709
+ come back. An unknown property or agent id is a billed 404.
710
+
711
+ ### Rightmove
712
+
713
+ | Tool | Description |
714
+ |------|-------------|
715
+ | `get_rightmove_locations` | UK place, outcode, postcode or station to the `location_id` search and agents take |
716
+ | `search_rightmove` | UK property for sale or to rent: price (GBP), beds, baths, type, must-haves, exclusions, tenure, added within days, under offer, radius, furnishing, let type; 24-25 per page |
717
+ | `get_rightmove_property` | One listing in full: tenure and lease years, council tax band, service charge, ground rent, EPC, rooms, floorplans, flood risk, broadband, stations, agent |
718
+ | `get_rightmove_sold` | Sold prices for a town, outcode or postcode: 25 addresses per page, each with its sale history since 1995, plus the area's average price over the last year |
719
+ | `get_rightmove_sold_property` | One sold address: every sale with price, date, tenure, new-build flag and percent change, plus the archived last listing |
720
+ | `search_rightmove_agents` | Estate and letting agent branches for a location: phones, address, brand and company ids, profile URL |
721
+ | `get_rightmove_agent` | One branch by id or URL: address, phones, affiliations, listing counts and a teaser |
722
+
723
+ 1 credit per call. Rightmove search has no keyword filter: match on the returned `summary`
724
+ and `key_features` instead. Paging caps per search: 42 pages for `search_rightmove`
725
+ (about 1,000 listings), 40 for `get_rightmove_sold`, 50 for `search_rightmove_agents`;
726
+ narrow by price band, type or a smaller area to reach more. Sold prices cover England and
727
+ Wales. Live listings carry no price history, so use `get_rightmove_sold_property` for an
728
+ address's past sales. A removed listing or an unknown id is a billed 404.
729
+
694
730
  ### [Indeed](https://scavio.dev/docs/indeed-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
695
731
 
696
732
  | Tool | Description |
@@ -833,7 +869,7 @@ id is a billed 404 that names what was not found.
833
869
  - [Amazon Product API](https://scavio.dev/amazon-product-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) and [Walmart Product API](https://scavio.dev/walmart-product-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) — product search and details, alongside [eBay](https://scavio.dev/docs/ebay-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Target](https://scavio.dev/docs/target-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Home Depot](https://scavio.dev/docs/home-depot-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) and [Costco](https://scavio.dev/costco-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) (per-warehouse prices, stock, gas prices, coupon book)
834
870
  - [TikTok API](https://scavio.dev/tiktok-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Instagram API](https://scavio.dev/instagram-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Reddit API](https://scavio.dev/reddit-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [X API](https://scavio.dev/x-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [LinkedIn API](https://scavio.dev/linkedin-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), and [YouTube API](https://scavio.dev/youtube-transcript-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) — social and video data
835
871
  - Travel and local — [Booking.com](https://scavio.dev/docs/booking-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Airbnb](https://scavio.dev/docs/airbnb-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Tripadvisor](https://scavio.dev/docs/tripadvisor-locations?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Yelp](https://scavio.dev/docs/yelp-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
836
- - Real estate — [Zillow](https://scavio.dev/docs/zillow-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Redfin](https://scavio.dev/docs/redfin-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
872
+ - Real estate — [Zillow](https://scavio.dev/docs/zillow-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Redfin](https://scavio.dev/docs/redfin-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), Realtor.com (listings, sold comps, market stats, agents), Rightmove (UK listings, sold prices since 1995, agents)
837
873
  - Jobs and employer data — [Indeed](https://scavio.dev/docs/indeed-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Glassdoor](https://scavio.dev/docs/glassdoor-companies?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
838
874
  - Apps, software reviews and ad libraries — [App Store](https://scavio.dev/docs/app-store-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Google Play](https://scavio.dev/docs/google-play-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [G2](https://scavio.dev/docs/g2-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Capterra](https://scavio.dev/docs/capterra-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Trustpilot](https://scavio.dev/trustpilot-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) (business profiles, filtered reviews, category rankings), [Google Ads Transparency](https://scavio.dev/docs/google-ads-advertisers?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Meta Ad Library](https://scavio.dev/docs/meta-ads-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
839
875
  - Company filings — [SEC EDGAR](https://scavio.dev/docs/sec-edgar-lookup?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme), [Companies House](https://scavio.dev/docs/companies-house-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
@@ -4,9 +4,9 @@ export declare const PLATFORM_KEYS: string[];
4
4
  /**
5
5
  * What registers when SCAVIO_PLATFORMS is unset.
6
6
  *
7
- * Registering everything is not an option any more. The full surface is 211
8
- * tools, which serialises to 191KB of tools/list (measured with
9
- * `npm run toolslist`, not estimated) — roughly 47k tokens pushed into the
7
+ * Registering everything is not an option any more. The full surface is 224
8
+ * tools, which serialises to 211KB of tools/list (measured with
9
+ * `npm run toolslist`, not estimated) — roughly 52k tokens pushed into the
10
10
  * context of EVERY session before the user has typed anything, and past the
11
11
  * hard tool-count ceiling some clients enforce. The default set below is 107
12
12
  * tools, 82KB.
@@ -26,7 +26,7 @@ export declare const DEFAULT_PLATFORMS: string[];
26
26
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
27
27
  *
28
28
  * Accepts a comma-separated list of platform keys, plus three keywords:
29
- * all — every platform (211 tools)
29
+ * all — every platform (224 tools)
30
30
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
31
31
  * none — no platform tools at all, leaving only get_usage
32
32
  *
@@ -22,6 +22,8 @@ import { registerTripadvisorTools } from "./tripadvisor.js";
22
22
  import { registerYelpTools } from "./yelp.js";
23
23
  import { registerZillowTools } from "./zillow.js";
24
24
  import { registerRedfinTools } from "./redfin.js";
25
+ import { registerRealtorTools } from "./realtor.js";
26
+ import { registerRightmoveTools } from "./rightmove.js";
25
27
  import { registerIndeedTools } from "./indeed.js";
26
28
  import { registerGlassdoorTools } from "./glassdoor.js";
27
29
  import { registerAppStoreTools } from "./appstore.js";
@@ -77,6 +79,8 @@ const PLATFORMS = {
77
79
  // Real estate
78
80
  zillow: registerZillowTools,
79
81
  redfin: registerRedfinTools,
82
+ realtor: registerRealtorTools,
83
+ rightmove: registerRightmoveTools,
80
84
  // Jobs and employer data
81
85
  indeed: registerIndeedTools,
82
86
  glassdoor: registerGlassdoorTools,
@@ -99,9 +103,9 @@ export const PLATFORM_KEYS = Object.keys(PLATFORMS);
99
103
  /**
100
104
  * What registers when SCAVIO_PLATFORMS is unset.
101
105
  *
102
- * Registering everything is not an option any more. The full surface is 211
103
- * tools, which serialises to 191KB of tools/list (measured with
104
- * `npm run toolslist`, not estimated) — roughly 47k tokens pushed into the
106
+ * Registering everything is not an option any more. The full surface is 224
107
+ * tools, which serialises to 211KB of tools/list (measured with
108
+ * `npm run toolslist`, not estimated) — roughly 52k tokens pushed into the
105
109
  * context of EVERY session before the user has typed anything, and past the
106
110
  * hard tool-count ceiling some clients enforce. The default set below is 107
107
111
  * tools, 82KB.
@@ -156,7 +160,7 @@ function warnOnce(message) {
156
160
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
157
161
  *
158
162
  * Accepts a comma-separated list of platform keys, plus three keywords:
159
- * all — every platform (211 tools)
163
+ * all — every platform (224 tools)
160
164
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
161
165
  * none — no platform tools at all, leaving only get_usage
162
166
  *
@@ -235,7 +239,7 @@ const READ_ONLY_ANNOTATIONS = {
235
239
  };
236
240
  /**
237
241
  * Wrap the server so every tool() call is annotated at registration, instead
238
- * of editing 211 call sites. A tool added later picks this up automatically.
242
+ * of editing 224 call sites. A tool added later picks this up automatically.
239
243
  */
240
244
  function annotating(server) {
241
245
  return new Proxy(server, {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ScavioClient } from "../lib/client.js";
3
+ export declare function registerRealtorTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,123 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ import { trimResponse } from "../lib/trim-response.js";
4
+ // Shapes mirror backend/src/routes/realtor.ts field for field (names, enums,
5
+ // regexes, min/max). Cross-field rules the backend enforces and zod here does
6
+ // not; a violation comes back as a 400 with the reason:
7
+ // search: location, latitude + longitude + radius_miles, or agent_id;
8
+ // page x page_size <= 10,000
9
+ // property: exactly one of property_id or url
10
+ // agents: exactly one of location, postal_code or name
11
+ //
12
+ // No zod `.default()` anywhere in this file. The MCP SDK applies a zod default
13
+ // BEFORE the handler runs, so a defaulted field is posted on every call whether
14
+ // the model set it or not. Defaults are documented in the describe text and
15
+ // left for the backend to apply.
16
+ const NON_DISCLOSURE = "Sold prices are null in US non-disclosure states (Texas, Utah, Wyoming and about nine others); sold dates still come back.";
17
+ const LISTING_STATUSES = ["for_sale", "pending", "for_rent", "sold"];
18
+ const PROPERTY_TYPES = ["single_family", "condos", "townhomes", "multi_family", "land", "mobile", "farm"];
19
+ const SORTS = [
20
+ "relevance", "newest", "price_low", "price_high", "sold_newest",
21
+ "sqft_high", "lot_size_high", "year_built_new", "recently_updated", "recently_reduced",
22
+ ];
23
+ const agentId = () => z.string().regex(/^\d{1,12}$/, "agent_id must be a numeric Realtor.com agent id");
24
+ const count = (description) => z.number().int().min(0).optional().describe(description);
25
+ const days = (description) => z.number().int().min(1).max(3650).optional().describe(description);
26
+ export function registerRealtorTools(server, getClient) {
27
+ const post = (path) => async (params) => {
28
+ try {
29
+ const data = await getClient().post(`/api/v1/realtor/${path}`, params);
30
+ return trimResponse(data);
31
+ }
32
+ catch (err) {
33
+ return handleApiError(err);
34
+ }
35
+ };
36
+ server.tool("search_realtor", `Search Realtor.com US listings for sale, pending, for rent or sold, by location, lat/lng radius or agent. Filters: price, beds, baths, sqft, lot size, year built, garage, HOA, property type, listed/sold/price-cut within N days, keywords in the listing text, new construction, foreclosure, open house. Up to 200 listings/call with price, sold price and date, lot size, address with coordinates, MLS id and listing agent. Use for listing watches across many areas and sold comps (e.g. sold land by lot size). First 10,000 results per search: slice by price band, type or area for more. ${NON_DISCLOSURE} 1 credit/page.`, {
37
+ location: z.string().min(1).max(200).optional()
38
+ .describe("City ('Austin, TX'), county ('Travis County, TX'), ZIP, state or neighborhood. Pass location, latitude+longitude+radius_miles, or agent_id."),
39
+ latitude: z.number().min(-90).max(90).optional()
40
+ .describe("Center latitude for a radius search (with longitude and radius_miles)."),
41
+ longitude: z.number().min(-180).max(180).optional()
42
+ .describe("Center longitude for a radius search."),
43
+ radius_miles: z.number().min(0.1).max(50).optional()
44
+ .describe("Radius around latitude/longitude, 0.1-50 miles."),
45
+ agent_id: agentId().optional()
46
+ .describe("Only this agent's listings (agent_id from search rows or search_realtor_agents)."),
47
+ listing_status: z.enum(LISTING_STATUSES).optional()
48
+ .describe("Default 'for_sale' (includes pending/contingent, as on the site). 'pending' = only pending/contingent."),
49
+ exclude_pending: z.boolean().optional()
50
+ .describe("for_sale only: leave out pending and contingent listings."),
51
+ min_price: z.number().min(0).optional()
52
+ .describe("Min USD: list price, sold price on sold, monthly rent on for_rent."),
53
+ max_price: z.number().min(0).optional()
54
+ .describe("Max USD, same meaning as min_price."),
55
+ beds_min: count("Min bedrooms."),
56
+ beds_max: count("Max bedrooms."),
57
+ baths_min: z.number().min(0).optional()
58
+ .describe("Min bathrooms."),
59
+ baths_max: z.number().min(0).optional()
60
+ .describe("Max bathrooms."),
61
+ sqft_min: count("Min interior sqft."),
62
+ sqft_max: count("Max interior sqft."),
63
+ lot_sqft_min: count("Min lot sqft (1 acre = 43,560)."),
64
+ lot_sqft_max: count("Max lot sqft."),
65
+ year_built_min: z.number().int().min(1700).max(2100).optional()
66
+ .describe("Built in or after this year."),
67
+ year_built_max: z.number().int().min(1700).max(2100).optional()
68
+ .describe("Built in or before this year."),
69
+ garage_min: count("Min garage spaces."),
70
+ max_hoa: z.number().min(0).optional()
71
+ .describe("Max monthly HOA fee USD (listings without an HOA fee are kept)."),
72
+ property_types: z.array(z.enum(PROPERTY_TYPES)).min(1).max(7).optional()
73
+ .describe("Only these property types, e.g. ['land']."),
74
+ listed_within_days: days("Only listings listed in the last N days (1-3650)."),
75
+ sold_within_days: days("sold only: only sales in the last N days (1-3650)."),
76
+ price_reduced_within_days: days("Only listings with a price cut in the last N days (1-3650)."),
77
+ keywords: z.array(z.string().min(1).max(60)).min(1).max(10).optional()
78
+ .describe("Only listings whose listing text matches these, e.g. ['workshop']."),
79
+ new_construction: z.boolean().optional()
80
+ .describe("Only new construction."),
81
+ foreclosure: z.boolean().optional()
82
+ .describe("Only foreclosures."),
83
+ has_open_house: z.boolean().optional()
84
+ .describe("Only listings with an open house in the next 7 days."),
85
+ sort: z.enum(SORTS).optional()
86
+ .describe("Default 'relevance'. price_high = sold price on sold; sold_newest is sold only."),
87
+ page: z.number().int().min(1).max(10000).optional()
88
+ .describe("Page, 1-based. page x page_size <= 10,000."),
89
+ page_size: z.number().int().min(1).max(200).optional()
90
+ .describe("Listings/page, 1-200. Default 50."),
91
+ }, post("search"));
92
+ server.tool("get_realtor_property", `Get one Realtor.com property by property_id or URL: description and details, price history, tax history with assessed and market values, three home value estimates with ranges, history and forecast, schools with ratings, flood/wildfire/noise risk, popularity, the listing agent and office with contact details, mortgage estimate and photos. Estimates, schools and risk can be null for land or new construction. ${NON_DISCLOSURE} Unknown id is a billed 404. 1 credit.`, {
93
+ property_id: z.string().regex(/^\d{6,12}$/, "property_id must be a numeric Realtor.com property id").optional()
94
+ .describe("Property id from search_realtor or get_realtor_locations. Pass property_id or url."),
95
+ url: z.string().min(1).max(500).optional()
96
+ .describe("A realtor.com property or rental URL, instead of property_id."),
97
+ }, post("property"));
98
+ server.tool("get_realtor_locations", `Autocomplete a partial US place name on Realtor.com: cities, counties, ZIPs, neighborhoods, schools and addresses, each with its slug_id (for get_realtor_market) and, for an address, the property_id (for get_realtor_property). 1 credit.`, {
99
+ query: z.string().min(1).max(200)
100
+ .describe("City, county, ZIP, neighborhood, school or street address, e.g. 'Austin'."),
101
+ }, post("locations"));
102
+ server.tool("get_realtor_market", `Get Realtor.com housing market stats for a US city, county or ZIP: median listing, sold and rent price, price per sqft, days on market, lot size, listing and rental counts, year-over-year and month-over-month change, and a breakdown by property type. Some medians are null at some geography levels. 1 credit.`, {
103
+ location: z.string().min(1).max(200)
104
+ .describe("A slug_id from get_realtor_locations (e.g. 'Austin_TX', 'Travis-County_TX') or 'City, ST'."),
105
+ }, post("market"));
106
+ server.tool("search_realtor_agents", `Find US real estate agents on Realtor.com by city, ZIP or name: rating, review and recommendation counts, active listing count and price range, homes sold last year, broker, office, first year in business and services. Pass agent_id to get_realtor_agent for the full profile. 1 credit/page.`, {
107
+ location: z.string().min(1).max(200).optional()
108
+ .describe("City as 'City, ST'. Pass exactly one of location, postal_code or name."),
109
+ postal_code: z.string().regex(/^\d{5}$/, "postal_code must be a 5-digit ZIP code").optional()
110
+ .describe("5-digit ZIP code."),
111
+ name: z.string().min(2).max(100).optional()
112
+ .describe("Agent name."),
113
+ page: z.number().int().min(1).max(1000).optional()
114
+ .describe("Page, 1-based."),
115
+ page_size: z.number().int().min(1).max(50).optional()
116
+ .describe("Agents/page, 1-50. Default 20."),
117
+ }, post("agents"));
118
+ server.tool("get_realtor_agent", `Get one Realtor.com agent's profile with every review: bio, phones, website, license number and state, MLS memberships, languages, specializations, served areas, designations, office, social links, listing and sales stats, and each review with responsiveness, market expertise, negotiation and professionalism sub-ratings and the agent's reply. Unknown id is a billed 404. 1 credit.`, {
119
+ agent_id: agentId()
120
+ .describe("Agent id from search_realtor rows (agent.agent_id) or search_realtor_agents."),
121
+ }, post("agent"));
122
+ }
123
+ //# sourceMappingURL=realtor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtor.js","sourceRoot":"","sources":["../../src/tools/realtor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { ScavioClient } from "../lib/client.js";
3
+ export declare function registerRightmoveTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,130 @@
1
+ import { z } from "zod";
2
+ import { handleApiError } from "../lib/tool-error.js";
3
+ import { trimResponse } from "../lib/trim-response.js";
4
+ // Shapes mirror backend/src/routes/rightmove.ts field for field (names, enums,
5
+ // regexes, min/max; the backend's one-of-number checks are literal unions
6
+ // here). Cross-field rules the backend enforces and zod here does not; a
7
+ // violation comes back as a 400 with the reason:
8
+ // search: exactly one of location_id, location or branch_id
9
+ // property: exactly one of property_id or url
10
+ // sold-property: exactly one of sold_id or url
11
+ // agents: exactly one of location_id or location
12
+ // agent: exactly one of url or branch_id
13
+ // There is deliberately no keywords field: Rightmove has no keyword filter and
14
+ // the backend rejects one with a 400 rather than bill an unfiltered search.
15
+ //
16
+ // No zod `.default()` anywhere in this file. The MCP SDK applies a zod default
17
+ // BEFORE the handler runs, so a defaulted field is posted on every call whether
18
+ // the model set it or not. Defaults are documented in the describe text and
19
+ // left for the backend to apply.
20
+ const PROPERTY_TYPES = ["detached", "semi_detached", "terraced", "flat", "bungalow", "land", "park_home"];
21
+ const TENURES = ["freehold", "leasehold"];
22
+ const radius = (description) => z.union([
23
+ z.literal(0), z.literal(0.25), z.literal(0.5), z.literal(1), z.literal(3), z.literal(5),
24
+ z.literal(10), z.literal(15), z.literal(20), z.literal(30), z.literal(40),
25
+ ]).optional().describe(description);
26
+ const locationId = () => z.string()
27
+ .regex(/^(REGION|OUTCODE|POSTCODE|STATION|BRANCH|STREET)\^\d+$/i, "location_id must be an id from locations such as REGION^904")
28
+ .optional()
29
+ .describe("location_id from get_rightmove_locations, e.g. 'REGION^219' (REGION^, OUTCODE^, POSTCODE^ or STATION^).");
30
+ const locationName = () => z.string().min(1).max(100).optional()
31
+ .describe("A UK place name, resolved to its first match (echoed in the response), e.g. 'Bristol'. Alternative to location_id.");
32
+ const branchId = () => z.string().regex(/^\d{1,9}$/, "branch_id must be a numeric Rightmove branch id");
33
+ export function registerRightmoveTools(server, getClient) {
34
+ const post = (path) => async (params) => {
35
+ try {
36
+ const data = await getClient().post(`/api/v1/rightmove/${path}`, params);
37
+ return trimResponse(data);
38
+ }
39
+ catch (err) {
40
+ return handleApiError(err);
41
+ }
42
+ };
43
+ server.tool("get_rightmove_locations", `Look up UK places on Rightmove by town, area, outcode, postcode or station and get the location_id that search_rightmove and search_rightmove_agents take. 1 credit.`, {
44
+ query: z.string().min(1).max(100)
45
+ .describe("Town, area, outcode ('SW11'), postcode or station, e.g. 'Bristol'."),
46
+ }, post("locations"));
47
+ server.tool("search_rightmove", `Search UK property for sale or to rent on Rightmove by location_id, place name or agent branch. Filters: price (GBP; monthly on for_rent), beds, baths, property type, must-haves (garden, parking, new home), exclusions (auction, retirement, shared ownership, new home), tenure, added within days, under offer, radius, furnishing and let type. Returns price with qualifier (e.g. Guide Price), address, coordinates, summary, key features, images, tenure, listing dates and agent. 24-25/page, max 42 pages (~1,000 listings) per search: slice by price band, type or area for more. NO keyword filter: match on summary and key_features yourself. 1 credit/page.`, {
48
+ location_id: locationId(),
49
+ location: locationName(),
50
+ branch_id: branchId().optional()
51
+ .describe("Only this agent branch's listings (branch_id from search_rightmove_agents). Pass exactly one of location_id, location or branch_id."),
52
+ listing_status: z.enum(["for_sale", "for_rent"]).optional()
53
+ .describe("Default 'for_sale'."),
54
+ min_price: z.number().min(0).optional()
55
+ .describe("Min GBP (monthly rent on for_rent)."),
56
+ max_price: z.number().min(0).optional()
57
+ .describe("Max GBP (monthly rent on for_rent)."),
58
+ beds_min: z.number().int().min(0).max(10).optional()
59
+ .describe("Min bedrooms."),
60
+ beds_max: z.number().int().min(0).max(10).optional()
61
+ .describe("Max bedrooms."),
62
+ baths_min: z.number().int().min(1).max(5).optional()
63
+ .describe("Min bathrooms."),
64
+ property_types: z.array(z.enum(PROPERTY_TYPES)).min(1).max(7).optional()
65
+ .describe("Only these types, e.g. ['detached', 'semi_detached']."),
66
+ must_have: z.array(z.enum(["garden", "parking", "new_home"])).min(1).max(3).optional()
67
+ .describe("Only listings with all of these."),
68
+ exclude: z.array(z.enum(["auction", "retirement", "shared_ownership", "new_home"])).min(1).max(4).optional()
69
+ .describe("Leave these listing kinds out."),
70
+ tenure: z.enum(TENURES).optional()
71
+ .describe("for_sale only."),
72
+ added_within_days: z.union([z.literal(1), z.literal(3), z.literal(7), z.literal(14)]).optional()
73
+ .describe("Only listings added in the last 1, 3, 7 or 14 days."),
74
+ include_under_offer: z.boolean().optional()
75
+ .describe("Include under offer / sold STC (for_sale) or let agreed (for_rent)."),
76
+ radius_miles: radius("Widen the area by miles: 0 (default), 0.25, 0.5, 1, 3, 5, 10, 15, 20, 30 or 40."),
77
+ furnishing: z.array(z.enum(["furnished", "part_furnished", "unfurnished"])).min(1).max(3).optional()
78
+ .describe("for_rent only."),
79
+ let_type: z.enum(["long_term", "short_term"]).optional()
80
+ .describe("for_rent only."),
81
+ sort: z.enum(["newest", "oldest", "price_low", "price_high"]).optional()
82
+ .describe("Default 'newest'."),
83
+ page: z.number().int().min(1).max(42).optional()
84
+ .describe("Page 1-42, 24-25/page."),
85
+ }, post("search"));
86
+ server.tool("get_rightmove_property", `Get one Rightmove listing in full by property_id or URL: price and qualifier, description, key features, rooms, images, floorplans, brochures, EPC, tenure and lease years remaining, council tax band, service charge and ground rent, heating, parking, garden, accessibility and flood-risk details, broadband, nearest stations, letting terms and the agent branch with phone. No price history on live listings: use get_rightmove_sold_property for an address's past sales. Removed or unknown listing is a billed 404. 1 credit.`, {
87
+ property_id: z.string().regex(/^\d{5,12}$/, "property_id must be a numeric Rightmove listing id").optional()
88
+ .describe("Listing id from search_rightmove. Pass property_id or url."),
89
+ url: z.string().min(1).max(500).optional()
90
+ .describe("A rightmove.co.uk/properties/<id> URL, instead of property_id."),
91
+ }, post("property"));
92
+ server.tool("get_rightmove_sold", `Get UK sold house prices for a town, outcode or postcode in England or Wales: 25 addresses/page, each with its full sale history since 1995 (price, date, tenure, new build), property type, beds, baths and coordinates, plus an area summary with the average price over the last year. Filter by type, tenure, years since sale and radius; sort by date or price. Use for UK comps and price trends. Max 40 pages per search: narrow by type, tenure, years or postcode for more. 1 credit/page.`, {
93
+ location: z.string().min(2).max(80)
94
+ .describe("Town, outcode ('SW11') or full postcode ('SW11 1AA') in England or Wales."),
95
+ property_type: z.enum(["flat", "detached", "semi_detached", "terraced", "other"]).optional()
96
+ .describe("Only this property type."),
97
+ tenure: z.enum(TENURES).optional()
98
+ .describe("Only this tenure."),
99
+ sold_within_years: z.union([
100
+ z.literal(1), z.literal(2), z.literal(3), z.literal(5),
101
+ z.literal(10), z.literal(15), z.literal(20), z.literal(30),
102
+ ]).optional()
103
+ .describe("Only addresses sold in the last 1, 2, 3, 5, 10, 15, 20 or 30 years."),
104
+ radius_miles: radius("Widen the area by miles: 0 (default) to 40, same steps as search_rightmove."),
105
+ sort: z.enum(["newest", "price_low", "price_high"]).optional()
106
+ .describe("Default 'newest' (latest sale first)."),
107
+ page: z.number().int().min(1).max(40).optional()
108
+ .describe("Page 1-40, 25 addresses/page."),
109
+ }, post("sold"));
110
+ server.tool("get_rightmove_sold_property", `Get one sold UK address from Rightmove by sold_id or URL: every recorded sale with exact price, date, tenure, new-build flag and percent change since the previous sale, the postcode, and the archived last listing (beds, baths, key features, photos, floorplans, advertised dates) when it was listed on Rightmove. Unknown id is a billed 404. 1 credit.`, {
111
+ sold_id: z.string().regex(/^[0-9a-fA-F-]{36}$/, "sold_id must be a sold_id returned by sold").optional()
112
+ .describe("sold_id from get_rightmove_sold. Pass sold_id or url."),
113
+ url: z.string().min(1).max(500).optional()
114
+ .describe("A rightmove.co.uk/house-prices/details/<id> URL, instead of sold_id."),
115
+ }, post("sold-property"));
116
+ server.tool("search_rightmove_agents", `Find UK estate and letting agent branches on Rightmove for a location: name, brand, company and brand ids, sales and lettings phones, address, sales/lettings flags, description, profile URL and logo. 20 branches/page, max 50 pages: use an outcode in a big city. Pass branch_id to get_rightmove_agent or search_rightmove. 1 credit/page.`, {
117
+ location_id: locationId(),
118
+ location: z.string().min(1).max(100).optional()
119
+ .describe("A UK place name, resolved to its first match. Pass exactly one of location_id or location."),
120
+ page: z.number().int().min(1).max(50).optional()
121
+ .describe("Page 1-50, 20/page."),
122
+ }, post("agents"));
123
+ server.tool("get_rightmove_agent", `Get one Rightmove agent branch by branch_id or profile URL: address, phones, coordinates, company, sales/lettings/commercial/development flags, descriptions, logo, affiliations, and the count plus a teaser of its listings for sale and to rent. Use search_rightmove with branch_id for every listing. Unknown branch is a billed 404. 1 credit.`, {
124
+ branch_id: branchId().optional()
125
+ .describe("branch_id from search_rightmove_agents or a listing's agent. Pass branch_id or url."),
126
+ url: z.string().min(1).max(500).optional()
127
+ .describe("A branch profile URL (profile_url from search_rightmove_agents)."),
128
+ }, post("agent"));
129
+ }
130
+ //# sourceMappingURL=rightmove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rightmove.js","sourceRoot":"","sources":["../../src/tools/rightmove.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@scavio/mcp-server",
3
- "version": "0.17.1",
3
+ "version": "0.18.0",
4
4
  "mcpName": "io.github.scavio-ai/scavio-mcp",
5
- "description": "MCP server connecting AI agents to Scavio: web search, page extraction, and structured e-commerce, social, travel, jobs, real-estate, app-store, ad-library and company-filing data. 211 tools across 33 platforms plus Extract, one API key.",
5
+ "description": "MCP server connecting AI agents to Scavio: web search, page extraction, and structured e-commerce, social, travel, jobs, real-estate, app-store, ad-library and company-filing data. 224 tools across 35 platforms plus Extract, one API key.",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
8
  "author": "Scavio",
@@ -32,6 +32,8 @@
32
32
  "threads",
33
33
  "ebay",
34
34
  "zillow",
35
+ "realtor",
36
+ "rightmove",
35
37
  "yelp",
36
38
  "indeed",
37
39
  "glassdoor",