@scavio/mcp-server 0.39.1 → 0.41.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. 399 tools across 63 platforms plus Extract, map, crawl and batch, 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. 417 tools across 65 platforms plus Extract, map, crawl and batch, one API key.
7
7
 
8
- **The 22 platforms added in 0.13.0 are opt-in.** Registering all 399 tools puts ~437KB of tool definitions — roughly 90k tokens — into every session before you type anything. So the default is the platform set 0.12.x already had, plus Extract: 142 tools, 112KB. 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 417 tools puts ~478KB of tool definitions — roughly 90k tokens — into every session before you type anything. So the default is the platform set 0.12.x already had, plus Extract: 142 tools, 112KB. 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,7 +207,7 @@ Add to settings (`Cmd+,`):
207
207
 
208
208
  ## Choosing which tools load
209
209
 
210
- Scavio exposes 399 tools. Loading all of them costs ~437KB of `tools/list` —
210
+ Scavio exposes 417 tools. Loading all of them costs ~478KB of `tools/list` —
211
211
  roughly 90k 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
@@ -218,7 +218,7 @@ measured, not estimated: `npm run toolslist` reproduces them.
218
218
  | Value | Registers |
219
219
  |-------|-----------|
220
220
  | *(unset)* or `default` | Every platform 0.12.x had, plus `extract` — **142 tools, 112KB** |
221
- | `all` | every platform — **399 tools, ~437KB** |
221
+ | `all` | every platform — **417 tools, ~478KB** |
222
222
  | `extract,sec,g2` | just those platforms — 18 tools, 21KB |
223
223
  | `default,zillow,metaads` | the default set plus two more — 148 tools, 120KB |
224
224
  | `default,chatgpt,gemini` | the default set plus ChatGPT and Gemini — 144 tools, 115KB |
@@ -233,7 +233,7 @@ tells you to call to check the server works.
233
233
 
234
234
  **Platform keys:** `extract`, `google`, `chatgpt`, `gemini`, `youtube`, `tiktok`, `instagram`,
235
235
  `reddit`, `x`, `linkedin`, `threads`, `kuaishou`, `amazon`, `walmart`, `ebay`,
236
- `target`, `homedepot`, `costco`, `heb`, `kroger`, `decathlon`, `specs`, `lowes`, `samsclub`, `canadiantire`, `dollargeneral`, `sephora`, `ulta`, `aldi`, `microcenter`, `walgreens`, `cvs`, `wholefoods`, `harborfreight`, `petsmart`, `petco`, `iherb`, `chewy`, `menards`, `nordstrom`, `nordstromrack`, `bestbuy`, `tcgplayer`, `vinted`, `mercadolibre`, `tiktok-shop`, `booking`, `airbnb`,
236
+ `target`, `homedepot`, `costco`, `heb`, `kroger`, `decathlon`, `specs`, `lowes`, `samsclub`, `canadiantire`, `dollargeneral`, `sephora`, `ulta`, `aldi`, `microcenter`, `walgreens`, `cvs`, `wholefoods`, `harborfreight`, `petsmart`, `petco`, `iherb`, `chewy`, `menards`, `nordstrom`, `nordstromrack`, `bestbuy`, `tcgplayer`, `vinted`, `macys`, `saks`, `mercadolibre`, `tiktok-shop`, `booking`, `airbnb`,
237
237
  `tripadvisor`, `yelp`, `zillow`, `redfin`, `realtor`, `rightmove`, `indeed`, `glassdoor`,
238
238
  `appstore`, `googleplay`, `g2`, `capterra`, `trustpilot`, `googleads`, `metaads`, `sec`, `companieshouse`
239
239
 
@@ -1128,6 +1128,63 @@ matching cheap listings, so pair them with a category or price range. Live
1128
1128
  listings only: no sold-item search, shipping prices, pickup points or similar
1129
1129
  items. Seller data is limited to public buyer-relevant fields.
1130
1130
 
1131
+ ### Macy's
1132
+
1133
+ | Tool | Description |
1134
+ |------|-------------|
1135
+ | `search_macys` | Search macys.com (US), 60 organic items per page: price, regular and sale price, percent off, sale end date, deal label (Black Friday Deal, Clearance, LAST ACT, Today Only), promotions, rating, review count, colors; filter by brand, color, special offer, any price range, pickup store or any facet; sort by featured, price, top rated, best sellers or newest; plus the facets with counts |
1136
+ | `get_macys_product` | One product by id or URL, or up to 10 ids in one call: price block with sale end, rating histogram, text vs total review counts, fit slider, AI review summary, colors with prices, sizes and every variant (UPC, color, size, availability, low-stock flag, ship days) |
1137
+ | `get_macys_reviews` | Macy's own reviews, up to 100 per page, newest, highest or lowest rated or with photos first, filtered by star rating or a word, with slider ratings, photos, syndication source and the brand's response |
1138
+ | `get_macys_category` | Browse a category by id or URL, 60 per page, with the same filters and sorts as search |
1139
+ | `get_macys_brand` | Browse a brand's page by its page id (a product's `brand_page_id`) or URL, 60 per page, with the same filters and sorts as search |
1140
+ | `get_macys_deals` | Sales & Offers, Clearance, Today Only, Last Act, Limited-Time Specials or Black Friday Deals, 60 per page, with the same filters and sorts as search |
1141
+ | `get_macys_stores` | Macy's stores near a ZIP, a point or a city + state, up to 15, with hours, curbside hours and the same-day pickup cut-off |
1142
+ | `get_macys_store_availability` | Store pickup for one product: which stores near a location can hand it over, or per variant at one `store_id` whether it can be picked up and whether it is in the store |
1143
+ | `get_macys_suggestions` | The macys.com search-box autocomplete, up to 7 suggested searches |
1144
+
1145
+ Platform key `macys`. 1 credit per call, every tool. US site only, prices in
1146
+ USD. Search, category, brand and deals share one grid: 60 organic items per
1147
+ page with `total` and `total_pages`, and totals can differ between sorts, as
1148
+ they do on the site. Ad-only sponsored tiles are dropped (`sponsored_dropped`
1149
+ counts them) unless `include_sponsored`; organic items that also hold a paid
1150
+ slot stay, flagged `is_sponsored`. A keyword Macy's maps to a category returns
1151
+ `redirected_to_category`. A batch of `product_ids` (up to 10) gets Macy's
1152
+ summary view: no rating histogram, and a collection without its members'
1153
+ variants. A collection member's id answers with the collection product
1154
+ (`requested_id` echoes the id asked for). `review_count` includes ratings
1155
+ without text; reviews returns written reviews only (`text_review_count`).
1156
+ Store availability is pickup and in-store flags, never unit counts: Macy's
1157
+ publishes no quantities. A `store_id` comes from `get_macys_stores`. No coupon
1158
+ codes, Q&A text or price history: to track prices, poll and store your own.
1159
+
1160
+ ### Saks Fifth Avenue
1161
+
1162
+ | Tool | Description |
1163
+ |------|-------------|
1164
+ | `search_saks` | Search saksfifthavenue.com (US), 24 grid positions per page: price, regular and sale price, percent off, badge, final-sale and clearance flags, returnable, limited inventory, promotions, review count, colors; filter by designer, color, size, any price range, on sale, new arrivals or any facet; sort by featured, best sellers, newest, price, sale first or designer A-Z; plus the facets with counts and price ranges |
1165
+ | `get_saks_product` | One product by id or URL, optionally one color + size: price block, final-sale / returnable / marketplace flags, promotions, colors and sizes with availability, every SKU with its online warehouse units, availability message and restock date, merchandising attributes, average rating and review count |
1166
+ | `get_saks_category` | Browse a category by its `/c/` path or URL, 24 per page, with the same filters and sorts as search, plus breadcrumbs |
1167
+ | `get_saks_brand` | Browse a designer's page by slug (from `get_saks_designers`) or URL, 24 per page, with the same filters and sorts as search |
1168
+ | `get_saks_deals` | Sale, Women's Clothing Sale, Men's Sale, Women's New Arrivals or Men's New Arrivals, 24 per page, with the same filters and sorts as search |
1169
+ | `get_saks_stores` | Saks stores near a ZIP or a point within 15-300 miles, with today's hours and a `pickup` flag for stores that offer in-store pickup |
1170
+ | `get_saks_store_availability` | Pickup availability of one variant sku at stores near a location: availability message, in stock, limited, and `units_at_store` when the site shows a count |
1171
+ | `get_saks_suggestions` | The search-box suggestions: result count, designers, categories (with paths for `get_saks_category`), up to 5 products and popular searches |
1172
+ | `get_saks_designers` | The A-Z designer index (about 1,200 designers) with the slugs `get_saks_brand` takes, optionally one letter |
1173
+
1174
+ Platform key `saks`. 2 credits per call, every tool. US site only, prices in
1175
+ USD. Search, category, brand and deals share one grid: 24 positions per page
1176
+ with `total`, `total_pages`, `start` and `next_start`. An editorial tile can
1177
+ take a grid position, so a page may carry 22-23 items: walk with `start` =
1178
+ the previous `next_start` to miss nothing (`page` also works). A keyword the
1179
+ site maps to a designer or category page returns `redirected_to`. Facet
1180
+ values feed the filters as listed: `size` takes the facet label ("Medium",
1181
+ not "M"). Store availability needs a VARIANT sku (a product's
1182
+ `variants[].sku`, or a product resolved with color + size); `units_at_store`
1183
+ is present only when the site shows a count, otherwise null. Rating and
1184
+ review count only: review text is not available. No clearance list, coupon
1185
+ codes, international prices or price history: to track designer sale
1186
+ prices, poll and store your own.
1187
+
1131
1188
  ### Kroger
1132
1189
 
1133
1190
  | Tool | Description |
@@ -4,8 +4,8 @@ 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 399
8
- * tools, which serialises to 437KB of tools/list (measured with
7
+ * Registering everything is not an option any more. The full surface is 408
8
+ * tools, which serialises to 478KB of tools/list (measured with
9
9
  * `npm run toolslist`, not estimated) — roughly 90k 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 142
@@ -27,7 +27,7 @@ export declare const DEFAULT_PLATFORMS: string[];
27
27
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
28
28
  *
29
29
  * Accepts a comma-separated list of platform keys, plus three keywords:
30
- * all — every platform (399 tools)
30
+ * all — every platform (417 tools)
31
31
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
32
32
  * none — no platform tools at all, leaving only get_usage
33
33
  *
@@ -42,6 +42,8 @@ import { registerNordstromRackTools } from "./nordstromrack.js";
42
42
  import { registerBestBuyTools } from "./bestbuy.js";
43
43
  import { registerTcgplayerTools } from "./tcgplayer.js";
44
44
  import { registerVintedTools } from "./vinted.js";
45
+ import { registerMacysTools } from "./macys.js";
46
+ import { registerSaksTools } from "./saks.js";
45
47
  import { registerMercadoLibreTools } from "./mercadolibre.js";
46
48
  import { registerTiktokShopTools } from "./tiktok-shop.js";
47
49
  import { registerBookingTools } from "./booking.js";
@@ -127,6 +129,8 @@ const PLATFORMS = {
127
129
  bestbuy: registerBestBuyTools,
128
130
  tcgplayer: registerTcgplayerTools,
129
131
  vinted: registerVintedTools,
132
+ macys: registerMacysTools,
133
+ saks: registerSaksTools,
130
134
  mercadolibre: registerMercadoLibreTools,
131
135
  "tiktok-shop": registerTiktokShopTools,
132
136
  // Travel and local
@@ -161,8 +165,8 @@ export const PLATFORM_KEYS = Object.keys(PLATFORMS);
161
165
  /**
162
166
  * What registers when SCAVIO_PLATFORMS is unset.
163
167
  *
164
- * Registering everything is not an option any more. The full surface is 399
165
- * tools, which serialises to 437KB of tools/list (measured with
168
+ * Registering everything is not an option any more. The full surface is 408
169
+ * tools, which serialises to 478KB of tools/list (measured with
166
170
  * `npm run toolslist`, not estimated) — roughly 90k tokens pushed into the
167
171
  * context of EVERY session before the user has typed anything, and past the
168
172
  * hard tool-count ceiling some clients enforce. The default set below is 142
@@ -219,7 +223,7 @@ function warnOnce(message) {
219
223
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
220
224
  *
221
225
  * Accepts a comma-separated list of platform keys, plus three keywords:
222
- * all — every platform (399 tools)
226
+ * all — every platform (417 tools)
223
227
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
224
228
  * none — no platform tools at all, leaving only get_usage
225
229
  *
@@ -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 registerMacysTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,141 @@
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/macys.ts (macys.com, US only, USD).
5
+ // Cross-field rules the backend enforces and zod here does not: product takes
6
+ // product_id, url or product_ids; reviews and store availability take
7
+ // product_id or url; category takes category_id or url; brand takes brand_id
8
+ // or url; stores and store availability take one location (zip, lat + lng, or
9
+ // city + state), and store availability takes store_id OR a location, not
10
+ // both. No zod `.default()`: the MCP SDK would post a defaulted field on every
11
+ // call.
12
+ const SORTS = ["featured", "price_low_to_high", "price_high_to_low", "top_rated", "best_sellers", "newest"];
13
+ const REVIEW_SORTS = ["newest", "highest_rated", "lowest_rated", "with_photos"];
14
+ const SPECIAL_OFFERS = [
15
+ "limited_time_special",
16
+ "gift_with_purchase",
17
+ "black_friday_deal",
18
+ "clearance",
19
+ "last_act",
20
+ "our_lowest_price",
21
+ "sales_and_discounts",
22
+ "special_offer",
23
+ "today_only",
24
+ ];
25
+ const DEAL_TYPES = ["sale", "clearance", "today_only", "last_act", "limited_time_special", "black_friday"];
26
+ const ITEM_FIELDS = "id, title, brand, URL, image, price (price_max when the item sells at a range), regular price, sale price, percent off, price label (Sale, Now, Only...), on-sale flag, sale end date, deal label (Black Friday Deal, Clearance, LAST ACT, Today Only...), promotions, rating, review count, colors and is_sponsored";
27
+ const GRID_SHORT = "60 organic items per page with the same item fields, facets, totals and sponsored handling as search_macys";
28
+ const GRID = `60 organic items per page, each with ${ITEM_FIELDS}. Also returns total, page, total_pages, the sort applied, the facets (name, label and values with counts; any value works in filters) and applied_filters. Ad-only sponsored tiles are dropped (sponsored_dropped counts them) unless include_sponsored; organic items that also hold a paid slot are kept and flagged is_sponsored. Totals can differ between sorts, as on the site. Prices in USD`;
29
+ const numericId = (max) => z.union([z.number().int().positive(), z.string().regex(new RegExp(`^\\d{1,${max}}$`))]);
30
+ const productId = () => numericId(10).optional()
31
+ .describe("Macy's product id: a search result's id, or the ID= number in a macys.com product URL, e.g. 25822310.");
32
+ const productUrl = () => z.string().min(1).max(600).optional()
33
+ .describe("A macys.com product URL (its ID= is used). Alternative to product_id.");
34
+ const textOrList = (description) => z.union([z.string().min(1).max(100), z.array(z.string().min(1).max(100)).max(20)]).optional().describe(description);
35
+ const specialOffer = () => z.union([z.enum(SPECIAL_OFFERS), z.array(z.enum(SPECIAL_OFFERS)).max(9)]).optional()
36
+ .describe(`Only items with this offer: ${SPECIAL_OFFERS.join(", ")}. A list matches any of them.`);
37
+ const gridFields = {
38
+ page: z.number().int().min(1).max(1000).optional()
39
+ .describe("Results page, 1-based (60 organic items per page). Defaults to 1."),
40
+ sort: z.enum(SORTS).optional()
41
+ .describe("featured (default), price_low_to_high, price_high_to_low, top_rated, best_sellers or newest."),
42
+ brand: textOrList("Only these brands, spelled as the BRAND facet lists them, e.g. \"Levi's\" or [\"Levi's\", \"Calvin Klein\"]. A list matches any of them."),
43
+ color: textOrList("Only these colors, as the COLOR_NORMAL facet lists them (Black, Blue, Red...). A list matches any of them."),
44
+ min_price: z.number().min(0).optional()
45
+ .describe("Minimum price in USD. Any bound works, not only the site's price buckets."),
46
+ max_price: z.number().min(0).optional()
47
+ .describe("Maximum price in USD."),
48
+ pickup_store_id: numericId(6).optional()
49
+ .describe("Only items available for pickup at this store (a store_id from get_macys_stores), e.g. 4592."),
50
+ filters: z.record(z.string(), z.union([z.string().min(1).max(100), z.array(z.string().min(1).max(100)).max(20)])).optional()
51
+ .describe("Any other facet from a previous response's facets: its name to one value or a list, e.g. {\"GENDER\": \"Women\", \"CUSTRATINGS\": \"4 stars & up\"}."),
52
+ include_sponsored: z.boolean().optional()
53
+ .describe("Keep ad-only sponsored tiles (flagged is_sponsored). Defaults to false: they are dropped."),
54
+ };
55
+ const locationFields = {
56
+ zip: z.string().regex(/^\d{5}(-\d{4})?$/).optional()
57
+ .describe("US ZIP code to search around, e.g. '10001'."),
58
+ lat: z.number().min(-90).max(90).optional()
59
+ .describe("Latitude (with lng), instead of zip."),
60
+ lng: z.number().min(-180).max(180).optional()
61
+ .describe("Longitude (with lat)."),
62
+ city: z.string().min(1).max(60).optional()
63
+ .describe("US city (with state), instead of zip, e.g. 'Atlanta'."),
64
+ state: z.string().length(2).optional()
65
+ .describe("2-letter US state code (with city), e.g. 'GA'."),
66
+ radius: z.number().int().min(1).max(100).optional()
67
+ .describe("Search radius in miles, 1-100. Defaults to 100."),
68
+ };
69
+ export function registerMacysTools(server, getClient) {
70
+ const post = (path) => async (params) => {
71
+ try {
72
+ const data = await getClient().post(`/api/v1/macys/${path}`, params);
73
+ return trimResponse(data);
74
+ }
75
+ catch (err) {
76
+ return handleApiError(err);
77
+ }
78
+ };
79
+ server.tool("search_macys", `Search macys.com (US) by keyword, filtered by brand, color, special offer (clearance, Last Act, Today Only, Black Friday deal...), any price range, a pickup store and any other facet, sorted by featured (default), price, top rated, best sellers or newest. ${GRID}. A keyword the site maps to a category comes back with redirected_to_category (its id works with get_macys_category). Use an item's id with get_macys_product, get_macys_reviews or get_macys_store_availability. 1 credit.`, {
80
+ query: z.string().min(1).max(200)
81
+ .describe("Search keywords, e.g. 'jeans'."),
82
+ special_offer: specialOffer(),
83
+ ...gridFields,
84
+ }, post("search"));
85
+ server.tool("get_macys_product", `One macys.com product by id or URL, or up to 10 by product_ids in one call: title, brand (with brand_page_id for get_macys_brand), type, description, bullets, category path, price, regular and sale price, percent off, on-sale flag, sale end, promotions, rating, review_count and text_review_count (ratings without text count in review_count only), rating_distribution, recommended count, fit slider, AI review summary, purchased message, question and answer counts, images, colors with their prices, sizes and every variant (UPC, color, size, available, availability message, low-stock flag, ship days). A product that belongs to a collection answers with the collection product, and requested_id echoes the id asked for. In a batch, unknown ids are listed in not_found and Macy's serves its summary view: rating and review_count but no rating histogram, and a collection without its members' variants. An unknown id is a 404. 1 credit per call.`, {
86
+ product_id: productId(),
87
+ url: productUrl(),
88
+ product_ids: z.union([z.array(numericId(10)).min(1).max(10), z.string().min(1).max(200)]).optional()
89
+ .describe("Up to 10 product ids in one call (array or comma-separated), instead of product_id / url, e.g. [25822310, 719388]."),
90
+ }, post("product"));
91
+ server.tool("get_macys_reviews", `Customer reviews of one macys.com product by id or URL, newest (default), highest rated, lowest rated or with photos first, up to 100 per page, optionally only one star rating or only reviews mentioning a word: rating, title, text, date, nickname, location as the reviewer gave it, recommended, helpful yes / no votes, incentivized and syndicated flags (and the site it came from), badges, fit and other slider ratings, photo URLs and the brand's response. Also total, total_pages and has_more. total counts written reviews only: ratings without text are not returned (get_macys_product has the full rating histogram). Reviewer = nickname only. 1 credit.`, {
92
+ product_id: productId(),
93
+ url: productUrl(),
94
+ sort: z.enum(REVIEW_SORTS).optional()
95
+ .describe("newest (default), highest_rated, lowest_rated or with_photos."),
96
+ page: z.number().int().min(1).max(500).optional()
97
+ .describe("Page, 1-based. Defaults to 1."),
98
+ limit: z.number().int().min(1).max(100).optional()
99
+ .describe("Reviews per page, 1-100. Defaults to 20."),
100
+ rating: z.number().int().min(1).max(5).optional()
101
+ .describe("Only reviews with this star rating, 1-5."),
102
+ query: z.string().min(1).max(100).optional()
103
+ .describe("Only reviews mentioning this text, e.g. 'soft'."),
104
+ }, post("reviews"));
105
+ server.tool("get_macys_category", `Browse one macys.com category by id or URL, with the same filters and sorts as search_macys. ${GRID_SHORT}. Also returns the category's id, name and URL. An unknown id is a 404. 1 credit.`, {
106
+ category_id: numericId(9).optional()
107
+ .describe("Macy's category id: the id= of a macys.com /shop/ URL, a product's categories[].id, or a search's redirected_to_category.id, e.g. 3763 (Men's Coats & Jackets)."),
108
+ url: z.string().min(1).max(600).optional()
109
+ .describe("A macys.com category URL with its id=. Filters, page and sort already in the URL are kept."),
110
+ special_offer: specialOffer(),
111
+ ...gridFields,
112
+ }, post("category"));
113
+ server.tool("get_macys_brand", `Browse one brand's macys.com page by its page id or URL (a product's brand_page_id), with the same filters and sorts as search_macys. ${GRID_SHORT}. Also returns the brand's page id, name and URL. To filter by brand name instead, use search_macys with brand. 1 credit.`, {
114
+ brand_id: numericId(9).optional()
115
+ .describe("The brand page id: a product's brand_page_id, or the id= of a macys.com /shop/brands/ URL, e.g. 337747 (Calvin Klein)."),
116
+ url: z.string().min(1).max(600).optional()
117
+ .describe("A macys.com brand page URL with its id=."),
118
+ special_offer: specialOffer(),
119
+ ...gridFields,
120
+ }, post("brand"));
121
+ server.tool("get_macys_deals", `Macy's sale listings: all Sales & Offers (default), Clearance, Today Only, Last Act (final-sale markdowns), Limited-Time Specials or Black Friday Deals, with the same filters and sorts as search_macys (except special_offer). ${GRID_SHORT}. sale_ends carries the end date when Macy's states one. 1 credit.`, {
122
+ type: z.enum(DEAL_TYPES).optional()
123
+ .describe("sale (all Sales & Offers, default), clearance, today_only, last_act, limited_time_special or black_friday."),
124
+ ...gridFields,
125
+ }, post("deals"));
126
+ server.tool("get_macys_stores", `Macy's stores near a US ZIP code, a point (lat + lng) or a city + state, nearest first (up to 15, within 100 miles by default): store_id (what get_macys_store_availability and pickup_store_id take), name, address, phone, lat / lng, distance in miles, today's and tomorrow's hours, curbside hours and the order cut-off for same-day pickup. Pass one location. 1 credit.`, {
127
+ ...locationFields,
128
+ }, post("stores"));
129
+ server.tool("get_macys_store_availability", `Can a macys.com product be picked up in store? Near a ZIP, a point or a city + state: every store with available true / false and available_items_count (how many of the product's items it has). At one store (store_id): the store's hours, pickup cut-off and pickup options, and for every variant (UPC, color, size) pickup_available and in_store_available. Macy's publishes no unit quantities, so there are no stock counts. Pass store_id or a location, not both. An unknown store_id is a 404. 1 credit.`, {
130
+ product_id: productId(),
131
+ url: productUrl(),
132
+ store_id: numericId(6).optional()
133
+ .describe("One store (a store_id from get_macys_stores) for per-variant pickup and in-store flags, instead of a location, e.g. 4592."),
134
+ ...locationFields,
135
+ }, post("store-availability"));
136
+ server.tool("get_macys_suggestions", `The macys.com search-box autocomplete for a partial query: up to 7 suggested searches. Useful for keyword research and for building queries for search_macys. 1 credit.`, {
137
+ query: z.string().min(1).max(100)
138
+ .describe("What the shopper has typed so far, e.g. 'jea'."),
139
+ }, post("suggestions"));
140
+ }
141
+ //# sourceMappingURL=macys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macys.js","sourceRoot":"","sources":["../../src/tools/macys.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 registerSaksTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,111 @@
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/saks.ts (saksfifthavenue.com, US only, USD).
5
+ // Cross-field rules the backend enforces and zod here does not: product takes
6
+ // product_id or url; category takes path or url; brand takes brand or url;
7
+ // stores and store availability take one location (zip, or lat + lng). No zod
8
+ // `.default()`: the MCP SDK would post a defaulted field on every call.
9
+ const SORTS = ["featured", "best_sellers", "newest", "price_high_to_low", "price_low_to_high", "sale_first", "brand_az"];
10
+ const DEAL_TYPES = ["sale", "womens_sale", "mens_sale", "womens_new_arrivals", "mens_new_arrivals"];
11
+ const ITEM_FIELDS = "id (variant_id too when the tile shows one variant), title, brand, URL, image, price (price_max when the item sells at a range), regular price, sale price, percent off, on-sale flag, review count, badge (Best Seller, Exclusive, Runway Look...), is_final_sale and is_clearance (null when the tile leaves them blank; get_saks_product is authoritative), returnable, limited_inventory, promotions, product_type and colors";
12
+ const GRID_SHORT = "24 grid positions per page with the same item fields, facets, totals and start / next_start paging as search_saks";
13
+ const GRID = `24 grid positions per page, each item with ${ITEM_FIELDS}. Also returns total, page, total_pages, start and next_start (pass next_start as start for the next page: an editorial tile can take a grid position, so a page may carry 22-23 items), the sort applied, the facets (id, label and values with counts; any value works in filters), price_ranges and applied_filters. Review count only on the grid: review text is not available. Prices in USD`;
14
+ const numericId = () => z.union([z.number().int().positive(), z.string().regex(/^\d{6,14}$/)]);
15
+ const textOrList = (description) => z.union([z.string().min(1).max(100), z.array(z.string().min(1).max(100)).max(20)]).optional().describe(description);
16
+ const brandFilter = () => textOrList("Only these designers, spelled as the brand facet lists them, e.g. \"Prada\" or [\"Prada\", \"ALICE + OLIVIA\"]. A list matches any of them.");
17
+ const gridFields = {
18
+ page: z.number().int().min(1).max(500).optional()
19
+ .describe("Results page, 1-based (24 grid positions per page). Defaults to 1."),
20
+ start: z.number().int().min(0).max(12000).optional()
21
+ .describe("Item offset, instead of page: pass a previous response's next_start to walk every item without gaps."),
22
+ sort: z.enum(SORTS).optional()
23
+ .describe("featured (default, the site's own order), best_sellers, newest, price_high_to_low, price_low_to_high, sale_first or brand_az."),
24
+ color: textOrList("Only these colors, as the colorRefinement facet lists them (Black, Blue, Red...). A list matches any of them."),
25
+ size: textOrList("Only these sizes, spelled as the sizeRefinement facet LABEL lists them (\"Medium\", \"X-Small, 0\"; \"M\" matches nothing). A list matches any of them."),
26
+ min_price: z.number().min(0).optional()
27
+ .describe("Minimum price in USD. Any bound works, not only the site's price buckets."),
28
+ max_price: z.number().min(0).optional()
29
+ .describe("Maximum price in USD."),
30
+ on_sale: z.boolean().optional()
31
+ .describe("Only items on sale."),
32
+ new_arrivals: z.boolean().optional()
33
+ .describe("Only new arrivals."),
34
+ filters: z.record(z.string(), z.union([z.string().min(1).max(100), z.array(z.string().min(1).max(100)).max(20)])).optional()
35
+ .describe("Any other facet from a previous response's facets: its id to one value or a list, e.g. {\"refGender\": \"Women's\", \"refMaterial\": \"Cashmere\"}."),
36
+ };
37
+ const locationFields = {
38
+ zip: z.string().regex(/^\d{5}(-\d{4})?$/).optional()
39
+ .describe("US ZIP code to search around, e.g. '10022'."),
40
+ lat: z.number().min(-90).max(90).optional()
41
+ .describe("Latitude (with lng), instead of zip."),
42
+ lng: z.number().min(-180).max(180).optional()
43
+ .describe("Longitude (with lat)."),
44
+ radius: z.union([z.literal(15), z.literal(30), z.literal(50), z.literal(100), z.literal(300)]).optional()
45
+ .describe("Search radius in miles: 15, 30, 50, 100 or 300. Defaults to 50."),
46
+ };
47
+ export function registerSaksTools(server, getClient) {
48
+ const post = (path) => async (params) => {
49
+ try {
50
+ const data = await getClient().post(`/api/v1/saks/${path}`, params);
51
+ return trimResponse(data);
52
+ }
53
+ catch (err) {
54
+ return handleApiError(err);
55
+ }
56
+ };
57
+ server.tool("search_saks", `Search saksfifthavenue.com (US) by keyword, filtered by designer, color, size (the facet label, e.g. Medium), any price range, on sale, new arrivals and any other facet, sorted by featured (default), best sellers, newest, price, sale first or designer A-Z. ${GRID}. A keyword the site sends to a designer or category page is answered from that page, named in redirected_to. Use an item's id with get_saks_product. 2 credits.`, {
58
+ query: z.string().min(1).max(200)
59
+ .describe("Search keywords, e.g. 'coat'."),
60
+ brand: brandFilter(),
61
+ ...gridFields,
62
+ }, post("search"));
63
+ server.tool("get_saks_product", `One saksfifthavenue.com product by id or URL: title, brand, type (master or variant), UPC (for a variant), price, price_max, regular and sale price, percent off, on-sale flag, is_new / is_sale / is_clearance / is_final_sale, badge, returnable, promotions, description, style code, images, colors and sizes (each with availability IN_STOCK / NOT_AVAILABLE, selectable and waitlist), every SKU in variants[] with its online warehouse unit count, in-stock and available counts, availability (units available to sell, message such as Limited Inventory, in_stock_date), available_in_store, marketplace, drop_ship, preorder, merchandising attributes (category, gender, material, length...), the average star rating and review_count. Review text is not available. Add color + size (or pass a variant sku) to resolve one variant: its sku is id, with its UPC and stock. A variants[].sku is what get_saks_store_availability takes. An unknown id is a 404. 2 credits.`, {
64
+ product_id: numericId().optional()
65
+ .describe("Saks product id: a search result's id (the number at the end of a product URL), or a variant sku, e.g. '0400019127312'."),
66
+ url: z.string().min(1).max(600).optional()
67
+ .describe("A saksfifthavenue.com product URL (its trailing id is used; a color / size it selects is kept). Alternative to product_id."),
68
+ color: z.string().min(1).max(100).optional()
69
+ .describe("Pick one color (a colors[].value), e.g. 'BLUE OPAL'."),
70
+ size: z.string().min(1).max(100).optional()
71
+ .describe("Pick one size (a sizes[].value). With color, the answer is that variant."),
72
+ }, post("product"));
73
+ server.tool("get_saks_category", `Browse one Saks category by its /c/ path or URL (women's dresses, men's sweaters, beauty...), with the same filters and sorts as search_saks. ${GRID_SHORT}. Also returns the category's name, path, URL and breadcrumbs. An unknown path is a 404. 2 credits.`, {
74
+ path: z.string().min(1).max(300).optional()
75
+ .describe("A Saks category path (/c/...): from a category URL, a get_saks_suggestions categories[].path or a breadcrumb, e.g. '/c/women-s-apparel/dresses'."),
76
+ url: z.string().min(1).max(600).optional()
77
+ .describe("A saksfifthavenue.com category URL. Filters, sort and page already in the URL are kept."),
78
+ brand: brandFilter(),
79
+ ...gridFields,
80
+ }, post("category"));
81
+ server.tool("get_saks_brand", `Browse one designer's Saks page by slug (from get_saks_designers) or URL, with the same filters and sorts as search_saks (except brand). ${GRID_SHORT}. Also returns the brand's name, slug and URL. An unknown slug is a 404. 2 credits.`, {
82
+ brand: z.string().min(1).max(120).optional()
83
+ .describe("A designer slug from get_saks_designers, e.g. 'gucci', 'chloé', 'alice-olivia'. A plain name is slugified."),
84
+ url: z.string().min(1).max(600).optional()
85
+ .describe("A saksfifthavenue.com /brand/ URL. Filters, sort and page already in the URL are kept."),
86
+ ...gridFields,
87
+ }, post("brand"));
88
+ server.tool("get_saks_deals", `Saks sale and new-arrival listings: all Sale (default), Women's Clothing Sale, Men's Sale, Women's New Arrivals or Men's New Arrivals, with the same filters and sorts as search_saks. ${GRID_SHORT}. Saks has no clearance or final-sale listing (items carry is_clearance / is_final_sale flags). 2 credits.`, {
89
+ type: z.enum(DEAL_TYPES).optional()
90
+ .describe("sale (all sale, default), womens_sale (women's clothing), mens_sale, womens_new_arrivals or mens_new_arrivals."),
91
+ brand: brandFilter(),
92
+ ...gridFields,
93
+ }, post("deals"));
94
+ server.tool("get_saks_stores", `Saks Fifth Avenue stores near a US ZIP code or a point (lat + lng), within 15 / 30 / 50 / 100 / 300 miles (default 50): store_id, name, address, city, state, ZIP, lat / lng, distance in miles (pickup stores), today's opening and closing times, hours as listed, closed flag, and pickup (true for stores that offer in-store pickup; other Saks locations are listed with pickup false). Pass one location. 2 credits.`, {
95
+ ...locationFields,
96
+ }, post("stores"));
97
+ server.tool("get_saks_store_availability", `Can one Saks variant (sku) be picked up near a US ZIP code or a point? For each pickup store: the site's availability message (In Stock, Limited Inventory, Not Available), in_stock, limited, units_at_store when the site gives a count (it does for stores that have the item; otherwise null), and the store's address, distance and today's hours. Needs a variant sku: take it from get_saks_product variants[].sku, or from get_saks_product with color + size. Pass one location. 2 credits.`, {
98
+ sku: numericId()
99
+ .describe("A variant sku: a product's variants[].sku, or a product's id after picking color + size, e.g. '10781654'."),
100
+ ...locationFields,
101
+ }, post("store-availability"));
102
+ server.tool("get_saks_suggestions", `The saksfifthavenue.com search-box suggestions for a partial query: the result count, matching designers, suggested categories (name, parent, path for get_saks_category), up to 5 featured products (id, title, brand, URL, image) and the site's popular searches. Useful for keyword research and for building queries for search_saks. 2 credits.`, {
103
+ query: z.string().min(1).max(100)
104
+ .describe("What the shopper has typed so far, e.g. 'gucci'."),
105
+ }, post("suggestions"));
106
+ server.tool("get_saks_designers", `The Saks A-Z designer index (about 1,200 designers): name, slug (what get_saks_brand takes), URL and letter, optionally only one letter. 2 credits.`, {
107
+ letter: z.string().regex(/^[A-Za-z#]$/).optional()
108
+ .describe("Only designers under this letter (A-Z, or '#' for names starting with a digit)."),
109
+ }, post("designers"));
110
+ }
111
+ //# sourceMappingURL=saks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"saks.js","sourceRoot":"","sources":["../../src/tools/saks.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.39.1",
3
+ "version": "0.41.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. 399 tools across 63 platforms plus Extract, site map, crawl and batch extraction, 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. 417 tools across 65 platforms plus Extract, site map, crawl and batch extraction, one API key.",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
8
  "author": "Scavio",
@@ -51,6 +51,11 @@
51
51
  "vinted",
52
52
  "vinted-api",
53
53
  "second-hand",
54
+ "macys",
55
+ "macys-api",
56
+ "saks",
57
+ "saks-fifth-avenue",
58
+ "saks-api",
54
59
  "mercadolibre",
55
60
  "mercado-libre",
56
61
  "tiktok",