@scavio/mcp-server 0.51.0 → 0.53.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. 487 tools across 73 platforms plus Extract, Company Enrich, 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. 504 tools across 74 platforms plus Extract, Company Enrich, map, crawl and batch, one API key.
7
7
 
8
- **The 22 platforms added in 0.13.0 are opt-in.** Registering all 487 tools puts ~655KB 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 and Company Enrich: 143 tools, 114KB. 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 504 tools puts ~689KB 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 and Company Enrich: 143 tools, 114KB. 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 487 tools. Loading all of them costs ~655KB of `tools/list` —
210
+ Scavio exposes 504 tools. Loading all of them costs ~689KB 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` and `company` — **143 tools, 114KB** |
221
- | `all` | every platform — **487 tools, ~655KB** |
221
+ | `all` | every platform — **504 tools, ~689KB** |
222
222
  | `extract,sec,g2` | just those platforms — 18 tools, 21KB |
223
223
  | `default,zillow,metaads` | the default set plus two more — 149 tools, 122KB |
224
224
  | `default,chatgpt,gemini` | the default set plus ChatGPT and Gemini — 145 tools, 117KB |
@@ -233,7 +233,7 @@ tells you to call to check the server works.
233
233
 
234
234
  **Platform keys:** `extract`, `company`, `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`, `macys`, `saks`, `kohls`, `jcpenney`, `dicks`, `footlocker`, `fanatics`, `carrefour`, `allegro`, `olx`, `mercadolibre`, `tiktok-shop`, `booking`, `airbnb`,
236
+ `target`, `homedepot`, `costco`, `heb`, `kroger`, `publix`, `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`, `kohls`, `jcpenney`, `dicks`, `footlocker`, `fanatics`, `carrefour`, `allegro`, `olx`, `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
 
@@ -1470,15 +1470,71 @@ ratings or reviews. No view counts, phone numbers, messaging, delivery prices,
1470
1470
  checkout, average prices, notifications or price history: to watch for new
1471
1471
  listings or track prices, poll `newest` and store your own.
1472
1472
 
1473
- ### Kroger
1474
-
1475
- | Tool | Description |
1476
- |------|-------------|
1477
- | `search_kroger` | Search Kroger grocery products: price (cents), promo/n-for deals, unit price, UPC, stock, SNAP, dietary info, rating |
1478
- | `get_kroger_product` | Full detail: nutrition with allergens/ingredients, rating distribution, store aisle, dietary flags, SNAP, dimensions |
1479
-
1480
- 2 credits per call. Kroger operates Kroger, Ralphs, Fred Meyer, Harris Teeter, King
1481
- Soopers, Fry's and other banners. Pass `product_url` (from `search_kroger`) or `upc`.
1473
+ ### [Kroger](https://scavio.dev/docs/kroger-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
1474
+
1475
+ Kroger, QFC and Fred Meyer grocery data: product search, product detail, store-level prices, stores, category listings, weekly digital deals, digital coupons and search suggestions.
1476
+
1477
+ | Tool | Description |
1478
+ |------|-------------|
1479
+ | `search_kroger` | Search by keyword: price, list / promo price with end date, n-for deals, unit price, size, UPC, stock, SNAP, dietary info, rating (average, count, star distribution); `total` and the `store` that priced the results |
1480
+ | `get_kroger_product` | One product by `product_url` or `upc`: nutrition, ingredients, allergens, description, images, country of origin, dimensions, store aisle, breadcrumbs |
1481
+ | `get_kroger_prices` | Price, promo, stock, available quantity, aisle and fulfillment for up to 25 UPCs at one store you choose (`store_id`) |
1482
+ | `find_kroger_stores` | Stores near a ZIP or city / address, or one by `store_id`: `location_id`, address, coordinates, hours, departments, pharmacy, fuel center, pickup, delivery, distance |
1483
+ | `get_kroger_category` | A category listing by `/pl/` URL or `taxonomy_id`, in the search item shape |
1484
+ | `get_kroger_deals` | This week's weekly digital deals (`deals_week` with its end date), in the search item shape |
1485
+ | `get_kroger_coupons` | Digital coupons at one store (`store_id` or `zip`), 24 per page, filter by department or text: savings (amount in cents or percent), terms, tags, valid_for, clip_by and expiry dates |
1486
+ | `get_kroger_suggestions` | Search box suggestions for a partial query |
1487
+
1488
+ Platform key `kroger`. 2 credits for `search_kroger` and `get_kroger_product`, 3
1489
+ for `get_kroger_prices`, 1 for the rest. Banners (`banner`): `kroger` (kroger.com,
1490
+ default), `qfc` (QFC, qfc.com: Washington and Oregon) and `fred_meyer` (Fred
1491
+ Meyer, fredmeyer.com: the Pacific Northwest and Alaska, grocery plus general
1492
+ merchandise, apparel and home). Other Kroger banners (Ralphs, King Soopers,
1493
+ Fry's, Harris Teeter, Smith's...) are not supported yet. Prices are integer cents
1494
+ (`price` 399 = $3.99) and differ by banner and by store. Search, product,
1495
+ category and deals return the prices of a store the site chooses for the
1496
+ request (shown in `store`, it can change between calls); for a specific store,
1497
+ get a `location_id` from `find_kroger_stores` and pass it as `store_id` to
1498
+ `get_kroger_prices`. QFC store ids start with 705, Fred Meyer ids with 701.
1499
+ Search, category and deals serve the first page only (up to 24 products) with
1500
+ no sort; `page` above 1 is a 400 and is not charged. Ratings are average, count
1501
+ and star distribution; review text is not available. Fuel center locations are
1502
+ returned, fuel prices are not. Coupons are listed, never clipped (no account).
1503
+ The printed weekly ad circular is not available. Failed calls are not charged;
1504
+ an unknown UPC or store id is a charged 404.
1505
+
1506
+ ### [Publix](https://scavio.dev/docs/publix-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
1507
+
1508
+ Publix grocery data by store: the weekly ad with BOGO deals, Extra Savings, digital coupons, the deli and bakery order-ahead menu (Pub Subs) with store prices, product search, category listings, nutrition facts and store locations.
1509
+
1510
+ | Tool | Description |
1511
+ |------|-------------|
1512
+ | `search_publix` | Search at one store by keyword, 48 per page: item code, title, brand, size, aisle, on-sale flag, promo (single, BOGO or multi-buy, with dates), price where Publix shows one, coupon flag; sort by name, popularity, savings or views; filter to on sale, BOGO or a brand; facets |
1513
+ | `get_publix_product` | One product by item code at one store: the product card plus nutrition facts (every nutrient with amount, unit and % daily value) |
1514
+ | `get_publix_category` | A category's products at one store by `category_url` or `category_id`, in the search item shape, with the search sorts and filters |
1515
+ | `get_publix_categories` | The category tree (departments, categories, sub-categories) with ids for `get_publix_category` |
1516
+ | `get_publix_weekly_ad` | The store's current weekly ad (about 700 items, about 230 BOGO): savings text, deal type (bogo, b2g1, multi, price, percent_off), price, bundle, department, ad start and end dates; filter by department, BOGO only or text |
1517
+ | `get_publix_extra_savings` | The store's Extra Savings (temporary price reductions): amount saved, reduced price, minimum quantity and the period's dates |
1518
+ | `get_publix_coupons` | The store's digital coupons (about 100-130): savings text, dollar value, minimum quantity, limit, dates and terms |
1519
+ | `search_publix_savings` | One keyword across the store's weekly ad, Extra Savings and digital coupons, each item tagged with its `saving_type` |
1520
+ | `get_publix_order_ahead` | The store's deli and bakery order-ahead menu with its prices: Pub Subs (`section` subs) or every sub, platter, cake and meal (`section` all, 60 per page), with lead time, serves and calories |
1521
+ | `find_publix_stores` | Stores near a ZIP, in a city + state, or one by `store_id`: address, phone, 7 days of hours, departments, services, pharmacy phone and hours, coordinates, distance and `weekly_ad_break_day` |
1522
+ | `get_publix_suggestions` | Search box suggestions for a partial query, plus up to 4 products with `store_id` |
1523
+
1524
+ Platform key `publix`. 1 credit per call. Every price tool is store-scoped: get
1525
+ a `store_id` (the Publix store number, e.g. `"1614"` Miami, `"1825"` Atlanta)
1526
+ from `find_publix_stores`; prices and promotions differ by store (a Publix
1527
+ Chicken Tender Sub measured $12.09 in Miami and $11.99 in Atlanta). Publix does
1528
+ not show regular shelf prices online: `price` is a number only for items on
1529
+ promotion (weekly ad, BOGO, multi-buy, Extra Savings) and order-ahead items, and
1530
+ null otherwise, never estimated. Multi-buys ("2 for $5.00") carry `bundle`
1531
+ {quantity, price}. Weekly ads run Thursday to Wednesday in Florida and Wednesday
1532
+ to Tuesday in Georgia and North Carolina (`weekly_ad_break_day` per store);
1533
+ English ad only. Products are keyed by Publix item code, not UPC (Publix does not
1534
+ publish UPCs, ingredients, allergens or reviews online). Coupons are listed,
1535
+ never clipped (no account); no cart or ordering. Stores cover FL, GA, AL, SC,
1536
+ NC, TN, VA and KY. Failed calls are not charged; an unknown item code or store
1537
+ id is a charged 404.
1482
1538
 
1483
1539
  ### [Mercado Libre](https://scavio.dev/docs/mercadolibre-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
1484
1540
 
@@ -5,7 +5,7 @@ export declare const PLATFORM_KEYS: string[];
5
5
  * What registers when SCAVIO_PLATFORMS is unset.
6
6
  *
7
7
  * Registering everything is not an option any more. The full surface is 408
8
- * tools, which serialises to 655KB of tools/list (measured with
8
+ * tools, which serialises to 689KB 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 143
@@ -29,7 +29,7 @@ export declare const DEFAULT_PLATFORMS: string[];
29
29
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
30
30
  *
31
31
  * Accepts a comma-separated list of platform keys, plus three keywords:
32
- * all — every platform (487 tools)
32
+ * all — every platform (504 tools)
33
33
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
34
34
  * none — no platform tools at all, leaving only get_usage
35
35
  *
@@ -19,6 +19,7 @@ import { registerHomeDepotTools } from "./homedepot.js";
19
19
  import { registerCostcoTools } from "./costco.js";
20
20
  import { registerHebTools } from "./heb.js";
21
21
  import { registerKrogerTools } from "./kroger.js";
22
+ import { registerPublixTools } from "./publix.js";
22
23
  import { registerDecathlonTools } from "./decathlon.js";
23
24
  import { registerSpecsTools } from "./specs.js";
24
25
  import { registerLowesTools } from "./lowes.js";
@@ -115,6 +116,7 @@ const PLATFORMS = {
115
116
  costco: registerCostcoTools,
116
117
  heb: registerHebTools,
117
118
  kroger: registerKrogerTools,
119
+ publix: registerPublixTools,
118
120
  decathlon: registerDecathlonTools,
119
121
  specs: registerSpecsTools,
120
122
  lowes: registerLowesTools,
@@ -184,7 +186,7 @@ export const PLATFORM_KEYS = Object.keys(PLATFORMS);
184
186
  * What registers when SCAVIO_PLATFORMS is unset.
185
187
  *
186
188
  * Registering everything is not an option any more. The full surface is 408
187
- * tools, which serialises to 655KB of tools/list (measured with
189
+ * tools, which serialises to 689KB of tools/list (measured with
188
190
  * `npm run toolslist`, not estimated) — roughly 90k tokens pushed into the
189
191
  * context of EVERY session before the user has typed anything, and past the
190
192
  * hard tool-count ceiling some clients enforce. The default set below is 143
@@ -244,7 +246,7 @@ function warnOnce(message) {
244
246
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
245
247
  *
246
248
  * Accepts a comma-separated list of platform keys, plus three keywords:
247
- * all — every platform (487 tools)
249
+ * all — every platform (504 tools)
248
250
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
249
251
  * none — no platform tools at all, leaving only get_usage
250
252
  *
@@ -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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"}
@@ -1,6 +1,28 @@
1
1
  import { z } from "zod";
2
2
  import { handleApiError } from "../lib/tool-error.js";
3
3
  import { trimResponse } from "../lib/trim-response.js";
4
+ // Shapes mirror backend/src/routes/kroger.ts (kroger.com plus the QFC and Fred
5
+ // Meyer banners). Cross-field rules the backend enforces and zod here does not:
6
+ // product takes product_url or upc; stores takes exactly one of zip, query or
7
+ // store_id; category takes url or taxonomy_id, not both; coupons takes
8
+ // store_id or zip, not both; a banner that contradicts a URL host or a
9
+ // store_id prefix is a 400. No zod `.default()`: the MCP SDK would post a
10
+ // defaulted field on every call.
11
+ const BANNERS = ["kroger", "qfc", "fred_meyer"];
12
+ const BANNER_TEXT = "kroger (kroger.com, default), qfc (QFC, qfc.com: Washington and Oregon) or fred_meyer (Fred Meyer, fredmeyer.com: the Pacific Northwest and Alaska, grocery plus general merchandise, apparel and home)";
13
+ const CHARGE = "Failed upstream calls are not charged (they are retried automatically); a not-found is charged.";
14
+ const CENTS = "Prices are integer cents (price 399 = $3.99).";
15
+ const SITE_STORE = "Prices, promotions, stock and aisle are those of the store returned in store (location_id, name, banner, division, store_number, address): a store the site chooses, which can change between calls and cannot be picked here. For one specific store use get_kroger_prices with a store_id from find_kroger_stores.";
16
+ const ITEM = "upc (for get_kroger_product and get_kroger_prices), name, brand, url, image, price, list_price, promo_price with promo_ends_at, price_display, unit_price_display, nfor / nfor_price (multi-buy), size, in_stock (null when the store has no stock record), stock_level, SNAP eligibility, dietary info, category and rating (average, count, star distribution; no review text)";
17
+ const GRID = `banner, store, total (all matches, the site counts up to 1000), count and products with ${ITEM}. Only the first page (up to 24 products) is available and there is no sort: page above 1 is a 400, not charged.`;
18
+ const banner = () => z.enum(BANNERS).optional()
19
+ .describe(`The store banner: ${BANNER_TEXT}. Defaults to kroger. Prices differ by banner and by store.`);
20
+ const storeBanner = () => z.enum(BANNERS).optional()
21
+ .describe(`The store banner: ${BANNER_TEXT}. Optional with store_id: QFC ids start with 705, Fred Meyer ids with 701, anything else is kroger.`);
22
+ const storeId = () => z.string().regex(/^\d{8}$/)
23
+ .describe("A store's 8-digit location_id: stores[].location_id of find_kroger_stores, e.g. '70500847'.");
24
+ const firstPage = () => z.number().int().min(1).max(100).optional()
25
+ .describe("Results page. Only page 1 (up to 24 products) is available; page above 1 is refused with a 400 before any charge. Narrow the query or use get_kroger_category instead.");
4
26
  export function registerKrogerTools(server, getClient) {
5
27
  const post = (path) => async (params) => {
6
28
  try {
@@ -11,19 +33,70 @@ export function registerKrogerTools(server, getClient) {
11
33
  return handleApiError(err);
12
34
  }
13
35
  };
14
- server.tool("search_kroger", `Search Kroger grocery products by keyword. Kroger operates Kroger, Ralphs, Fred Meyer, Harris Teeter, King Soopers, Fry's and other banners. Returns price (cents), promo price, n-for deals, unit price, size, UPC, stock, SNAP eligibility, dietary info, rating and category. 2 credits/call.`, {
36
+ server.tool("search_kroger", `Search Kroger, QFC or Fred Meyer products by keyword (banner). Returns ${GRID} ${SITE_STORE} ${CENTS} ${CHARGE} 2 credits.`, {
15
37
  query: z.string().min(1).max(200)
16
38
  .describe("Search keywords, e.g. 'organic milk'."),
17
- page: z.number().int().min(1).max(100).optional()
18
- .describe("Page, 1-based."),
39
+ banner: banner(),
40
+ page: firstPage(),
19
41
  }, post("search"));
20
- server.tool("get_kroger_product", `Full Kroger product detail by URL or UPC: nutrition facts (allergens, ingredients, nutrients with daily values), description, images, rating distribution, store aisle location, stock level, dietary flags (organic, non-GMO, gluten-free), SNAP eligibility, dimensions and country of origin. Pass product_url (from search_kroger) or upc. 2 credits.`, {
42
+ server.tool("get_kroger_product", `One Kroger, QFC or Fred Meyer product by product_url or upc: the search fields plus description, nutrition facts, ingredients, allergens, images, country of origin, dimensions, weight, dietary flags, the aisle at the store (store_location) and breadcrumbs. ${SITE_STORE} ${CENTS} An unknown upc is a charged 404. ${CHARGE} 2 credits.`, {
21
43
  product_url: z.string().min(1).max(500).optional()
22
- .describe("Full or relative product URL from kroger.com, e.g. '/p/kroger-2-reduced-fat-milk-gallon/0001111041700'. Preferred."),
44
+ .describe("Full or relative product URL on kroger.com, qfc.com or fredmeyer.com (products[].url of search_kroger), e.g. '/p/simple-truth-organic-lactose-free-2-reduced-fat-milk-half-gallon/0001111050438'. An absolute URL sets the banner; a banner that contradicts its host is a 400."),
23
45
  upc: z.string().min(1).max(20).optional()
24
- .describe("Kroger product UPC (from search_kroger or product URLs: /p/{slug}/{upc})."),
46
+ .describe("The product's UPC (products[].upc of search_kroger, or the digits at the end of a product URL: /p/{slug}/{upc}), e.g. '0001111050438'."),
25
47
  slug: z.string().min(1).max(300).optional()
26
- .describe("Product slug for readable URL. Optional with upc."),
48
+ .describe("Product slug (the readable part of the product URL). Optional with upc."),
49
+ banner: banner(),
27
50
  }, post("product"));
51
+ server.tool("get_kroger_prices", `Price, promotion, stock and aisle for 1 to 25 UPCs at one Kroger, QFC or Fred Meyer store you choose (store_id from find_kroger_stores). The same item is priced differently by banner and by store. Per UPC: upc, name, brand, size, url, image, price, promo_price, promo_ends_at, on_sale, price_display, unit_price_display, in_stock (null when the store has no stock record), stock_level, quantity (the number the site reports as available; an estimate, not a shelf count), aisle (description, number, side, bay, shelf), fulfillment (pickup, delivery, in_store, ship) and priced_at (the store that priced it). UPCs the site does not know are listed in not_found. Also store (location_id, name, banner, address) and count. ${CENTS} An unknown store_id is a charged 404. Can take up to about a minute. ${CHARGE} 3 credits.`, {
52
+ store_id: storeId(),
53
+ upcs: z.array(z.string().regex(/^\d{13}$/)).min(1).max(25)
54
+ .describe("1 to 25 13-digit UPCs as the site writes them (products[].upc of search_kroger or get_kroger_category), e.g. ['0001111050438', '0081006334306']."),
55
+ banner: storeBanner(),
56
+ }, post("prices"));
57
+ server.tool("find_kroger_stores", `Kroger, QFC or Fred Meyer stores near a ZIP or a city / address (nearest first), or one store by store_id. Send exactly one of zip, query or store_id. Each store: location_id (use it as store_id on get_kroger_prices, get_kroger_coupons and get_kroger_suggestions), banner, type (store or fuel_center), name, store_number, address (line1, city, state, zip), coordinates (lat, lng), phone, timezone, hours, open_24_hours, departments (name, phone, hours), has_pharmacy, has_fuel_center, pickup, delivery and distance_miles. Fuel center locations only, no fuel prices. Partner fuel stations are never returned; other Kroger banners only with include_other_banners. An unknown store_id is a charged 404. ${CHARGE} 1 credit.`, {
58
+ zip: z.string().regex(/^\d{5}$/).optional()
59
+ .describe("A 5-digit US ZIP code, e.g. '98101'."),
60
+ query: z.string().min(2).max(100).optional()
61
+ .describe("A city or address, as typed in the site's store finder, e.g. 'Portland, OR'."),
62
+ store_id: storeId().optional(),
63
+ banner: storeBanner(),
64
+ limit: z.number().int().min(1).max(50).optional()
65
+ .describe("Stores to return, 1-50. Defaults to 10."),
66
+ include_other_banners: z.boolean().optional()
67
+ .describe("Also return nearby stores of other Kroger banners (for example Fred Meyer stores near a QFC search). Defaults to false."),
68
+ }, post("stores"));
69
+ server.tool("get_kroger_category", `A Kroger, QFC or Fred Meyer category listing by /pl/ URL or taxonomy_id (send one, not both): category (id, name, url) and ${GRID} ${SITE_STORE} ${CENTS} ${CHARGE} 1 credit.`, {
70
+ url: z.string().min(1).max(400).optional()
71
+ .describe("A category listing URL (/pl/<name>/<id>) on kroger.com, qfc.com or fredmeyer.com, e.g. 'https://www.fredmeyer.com/pl/headphones-earbuds-headsets/2900300001'. The URL's host sets the banner."),
72
+ taxonomy_id: z.string().regex(/^\d{3,14}$/).optional()
73
+ .describe("The digits at the end of a /pl/ URL, e.g. '08190'. Category ids are shared across banners."),
74
+ slug: z.string().min(1).max(120).optional()
75
+ .describe("The name part of a /pl/ URL, e.g. 'Import-Beer'. Optional with taxonomy_id; without it category.name is null."),
76
+ banner: banner(),
77
+ page: firstPage(),
78
+ }, post("category"));
79
+ server.tool("get_kroger_deals", `This week's weekly digital deals of Kroger, QFC or Fred Meyer: deals_week (id, ends_at: the promotion end most deal items share) and ${GRID} Items on a store promotion carry promo_price and promo_ends_at; items whose deal is a digital coupon show the shelf price (the coupon and its deal price are in get_kroger_coupons, tag Weekly Digital Deals). ${SITE_STORE} ${CENTS} The printed weekly ad circular is not available. ${CHARGE} 1 credit.`, {
80
+ banner: banner(),
81
+ page: firstPage(),
82
+ }, post("deals"));
83
+ server.tool("get_kroger_coupons", `The digital coupons offered at one Kroger, QFC or Fred Meyer store (store_id, or the banner's store nearest a zip; send one, not both), 24 per page, optionally one department (category) or a text match (query). Each coupon: id, brand, title, description, details (the terms), savings (type amount_off / percent_off / price / free_item / other, amount in cents, percent), type, min_quantity, categories, tags (Weekly Digital Deals, Delivery Only...), valid_for (pickup, delivery, in_store), max_redemptions, starts_at, clip_by, expires_at (YYYY-MM-DD) and image. Also store, page, page_size, count, total_at_store (before any filter), has_more and the categories to filter on. Listing only: coupons are not clipped and no account is used. ${CHARGE} 1 credit.`, {
84
+ store_id: storeId().optional(),
85
+ zip: z.string().regex(/^\d{5}$/).optional()
86
+ .describe("A 5-digit ZIP: the banner's nearest store is used. Alternative to store_id."),
87
+ banner: storeBanner(),
88
+ page: z.number().int().min(1).max(50).optional()
89
+ .describe("Page of coupons, 24 per page, 1-based. Defaults to 1. Follow has_more."),
90
+ category: z.string().min(2).max(60).optional()
91
+ .describe("Only coupons in one department: a name from the response's categories list, e.g. 'Dairy'."),
92
+ query: z.string().min(2).max(100).optional()
93
+ .describe("Only coupons whose brand or text matches, e.g. 'coffee'."),
94
+ }, post("coupons"));
95
+ server.tool("get_kroger_suggestions", `Kroger, QFC or Fred Meyer search box suggestions for a partial query: suggestions (text, type), count and the store they were asked for. Without store_id the banner's store nearest a representative ZIP is used (Kroger 45202 Cincinnati, QFC 98101 Seattle, Fred Meyer 97201 Portland). ${CHARGE} 1 credit.`, {
96
+ query: z.string().min(2).max(100)
97
+ .describe("What a shopper has typed so far (2+ characters), e.g. 'almond mi'."),
98
+ banner: storeBanner(),
99
+ store_id: storeId().optional(),
100
+ }, post("suggestions"));
28
101
  }
29
102
  //# sourceMappingURL=kroger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"kroger.js","sourceRoot":"","sources":["../../src/tools/kroger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,SAA6B;IAClF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,EAAE,MAA+B,EAAE,EAAE;QACvE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,SAAS,EAAE,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YACtE,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,eAAe,EACf,kSAAkS,EAClS;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;aAC9B,QAAQ,CAAC,uCAAuC,CAAC;QACpD,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;aAC9C,QAAQ,CAAC,gBAAgB,CAAC;KAC9B,EACD,IAAI,CAAC,QAAQ,CAAC,CACf,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,2VAA2V,EAC3V;QACE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;aAC/C,QAAQ,CAAC,oHAAoH,CAAC;QACjI,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;aACtC,QAAQ,CAAC,2EAA2E,CAAC;QACxF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;aACxC,QAAQ,CAAC,mDAAmD,CAAC;KACjE,EACD,IAAI,CAAC,SAAS,CAAC,CAChB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"kroger.js","sourceRoot":"","sources":["../../src/tools/kroger.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 registerPublixTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,110 @@
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/publix.ts (publix.com, US). Cross-field
5
+ // rules the backend enforces and zod here does not: category takes
6
+ // category_url or category_id; stores takes zip, city + state, or store_id.
7
+ // No zod `.default()`: the MCP SDK would post a defaulted field on every call.
8
+ const SORTS = ["relevance", "featured", "name_asc", "name_desc", "popularity", "savings_amount", "most_viewed"];
9
+ const SECTIONS = ["subs", "all"];
10
+ const CHARGE = "Failed upstream calls are not charged (they are retried automatically); a not-found is charged. 1 credit.";
11
+ const STORE = "Store-scoped: aisles, promotions and prices are those of the store_id you send (from find_publix_stores), echoed in store (id, name). Prices differ by store.";
12
+ const PRICES = "Publix shows prices online only for items on sale and for order-ahead (deli and bakery) items, so price is a number only when the site shows one and null otherwise; it is never estimated (no regular shelf prices). price_text is the price as shown ('$5.49/lb', '3 for $10.00'), price_unit lb when per pound, bundle {quantity, price} for multi-buys, starting_price for 'Starts at' items, regular_price the crossed-out price.";
13
+ const ITEM = "item_code (for get_publix_product), base_product_id, title, brand, size, description, image, url, category_path, aisle (where it sits in that store), on_sale, price, price_unit, bundle, starting_price, regular_price, price_text, regular_price_text, promo (type single, bogo or multi; message, conditions, savings, valid_from, valid_through), has_coupon and is_order_ahead";
14
+ const GRID = `items with ${ITEM}. Also total, page, page_size (48), total_pages, count, sort, applied_filters and facets (name, label, values with value, label and count: deals, BOGO, weekly ad, brand, type, diet, nutrition ranges).`;
15
+ const DEAL = "Each item: id, item_code, base_product_id, title, description, brand, department, categories, savings_text (as shown, e.g. 'Buy 1 Get 1 FREE', '$6.89 lb', '2 for $5.00'), deal_type (bogo, b2g1, multi, price, percent_off or other), price (only when savings_text is a plain price), price_unit, bundle, save_up_to, additional_savings, min_quantity, fine_print, stacked_with_coupon, promotion (Weekly Ad, Extra Savings, a seasonal flyer), valid_from, valid_to and image";
16
+ const storeId = () => z.string().regex(/^\d{1,5}$/)
17
+ .describe("A Publix store number: stores[].store_id of find_publix_stores, e.g. '1614' (Miami) or '1825' (Atlanta).");
18
+ const gridFields = {
19
+ page: z.number().int().min(1).max(100).optional()
20
+ .describe("Results page, 1-based (48 products per page). A page past the last answers an empty list."),
21
+ sort: z.enum(SORTS).optional()
22
+ .describe("relevance (default), featured, name_asc, name_desc, popularity, savings_amount (biggest promo savings first) or most_viewed."),
23
+ on_sale: z.boolean().optional()
24
+ .describe("Only items on sale at the store (weekly ad, BOGO, multi-buy or extra savings)."),
25
+ bogo: z.boolean().optional()
26
+ .describe("Only Buy One Get One Free items at the store."),
27
+ brand: z.string().min(1).max(60).optional()
28
+ .describe("Only this brand, as the site lists it (facets: Brand values), e.g. 'Tyson'."),
29
+ };
30
+ export function registerPublixTools(server, getClient) {
31
+ const post = (path) => async (params) => {
32
+ try {
33
+ const data = await getClient().post(`/api/v1/publix/${path}`, params);
34
+ return trimResponse(data);
35
+ }
36
+ catch (err) {
37
+ return handleApiError(err);
38
+ }
39
+ };
40
+ server.tool("search_publix", `Search Publix products at one store by keyword: sort by name, popularity, savings or views; filter to items on sale, BOGO (Buy One Get One Free) or a brand. Returns query, corrected_query, store and ${GRID} Keywords the site sends to a category answer that category's products; keywords it sends to an order-ahead page set redirected_to (items may be empty). ${STORE} ${PRICES} ${CHARGE}`, {
41
+ query: z.string().min(1).max(100)
42
+ .describe("Search keywords, e.g. 'chicken'."),
43
+ store_id: storeId(),
44
+ ...gridFields,
45
+ }, post("search"));
46
+ server.tool("get_publix_product", `One Publix product by item code at one store: the product card (${ITEM}; order-ahead items also short_description, lead_time, serves, calories) and its nutrition facts (labels with serving size, servings per container and every nutrient with amount, unit and percent daily value; a deli sub has one label per component and size; null when Publix has none). ${PRICES} ${STORE} Ingredients, allergens, UPC and reviews are not published by Publix online. An unknown item code is a charged 404. ${CHARGE}`, {
47
+ item_code: z.string().regex(/^\d{1,8}$/)
48
+ .describe("A Publix item code (not a UPC): items[].item_code of search_publix, get_publix_category or get_publix_order_ahead, e.g. '90355'."),
49
+ store_id: storeId(),
50
+ }, post("product"));
51
+ server.tool("get_publix_category", `One Publix category's products at one store, by category_url or category_id (send one), with the search sorts and filters: category (id, name, path), store and ${GRID} ${STORE} ${PRICES} ${CHARGE}`, {
52
+ category_url: z.string().min(1).max(400).optional()
53
+ .describe("A publix.com category link (/c/<name>/<id>), e.g. 'https://www.publix.com/c/chicken/6772da29-55bf-4051-83d5-104d73ae9a96'."),
54
+ category_id: z.string().length(36).optional()
55
+ .describe("A category id (categories[].id of get_publix_categories), e.g. '6772da29-55bf-4051-83d5-104d73ae9a96'. Alternative to category_url."),
56
+ store_id: storeId(),
57
+ ...gridFields,
58
+ }, post("category"));
59
+ server.tool("get_publix_categories", `The Publix product category tree: departments (Bakery, Dairy, Meat, Produce ...) with their categories and sub-categories, each with id (for get_publix_category), name, url, parent_id, level and children; plus count. parent_id returns one department's or category's subtree. store_id is optional. ${CHARGE}`, {
60
+ store_id: storeId().optional(),
61
+ parent_id: z.string().length(36).optional()
62
+ .describe("Return only this department's or category's subtree (categories[].id)."),
63
+ }, post("categories"));
64
+ server.tool("get_publix_weekly_ad", `The store's current Publix weekly ad (English), about 700 items: BOGO deals (about 230 a week), sale prices, multi-buys and percent-off deals, with ad (start_date, end_date), total, count, applied_filters and departments. Weekly ads start on different days by state (Thursday to Wednesday in Florida, Wednesday to Tuesday in Georgia and North Carolina; weekly_ad_break_day of find_publix_stores gives each store's start day), and prices of some items (beer, wine) differ by store. ${DEAL}. Filter by department, BOGO only or a text query. ${CHARGE}`, {
65
+ store_id: storeId(),
66
+ department: z.string().min(1).max(60).optional()
67
+ .describe("Only items of this department (departments of the answer, e.g. 'Meat', 'Produce', 'Deli', 'Wine')."),
68
+ bogo_only: z.boolean().optional()
69
+ .describe("Only Buy 1 Get 1 Free and Buy 2 Get 1 Free items."),
70
+ query: z.string().min(1).max(100).optional()
71
+ .describe("Only items whose title, description or brand contains this text."),
72
+ }, post("weekly-ad"));
73
+ server.tool("get_publix_extra_savings", `The store's Publix Extra Savings (temporary price reductions), several hundred items: id, base_product_id, title, size, brand, categories, savings_text (the amount saved as shown), savings, additional_savings, final_price (the reduced price, as the site lists it), min_quantity, image and url; plus store, count and period (start_date, end_date of the current Extra Savings period). ${CHARGE}`, {
74
+ store_id: storeId(),
75
+ }, post("extra-savings"));
76
+ server.tool("get_publix_coupons", `The store's Publix digital coupons as every visitor sees them (about 100-130): id, title, description, brand, savings_text, value (the dollar amount when the coupon states one), min_quantity, limit_per_transaction, categories, valid_from, valid_to, terms and image; plus store and count. Read-only: coupons are listed, never clipped, and no account is used. ${CHARGE}`, {
77
+ store_id: storeId(),
78
+ }, post("coupons"));
79
+ server.tool("search_publix_savings", `Find a keyword across the store's Publix weekly ad, Extra Savings and digital coupons in one call: query, store, count and items, each with saving_type (weekly_ad, extra_savings or coupon) and that feed's fields. ${CHARGE}`, {
80
+ query: z.string().min(1).max(100)
81
+ .describe("A keyword to find in the store's weekly ad, Extra Savings and digital coupons, e.g. 'coffee'."),
82
+ store_id: storeId(),
83
+ }, post("savings-search"));
84
+ server.tool("get_publix_order_ahead", `The store's Publix deli and bakery order-ahead (in-store pickup) menu with this store's prices: Pub Subs (section subs, default) or the whole catalog of subs, platters, cakes, wings and meals (section all, about 1,150 items, 60 per page). Each item: ${ITEM}, short_description, lead_time (e.g. 'Ready as soon as 30 minutes'), serves, calories and pay_online. Pub Sub prices differ by store (e.g. $12.09 in Miami, $11.99 in Atlanta). Also section, store, total, page, page_size, total_pages and count. ${CHARGE}`, {
85
+ store_id: storeId(),
86
+ section: z.enum(SECTIONS).optional()
87
+ .describe("subs (default: the Pub Sub menu) or all (the whole deli and bakery order-ahead catalog: subs, platters, cakes, meals ...)."),
88
+ page: z.number().int().min(1).max(50).optional()
89
+ .describe("Results page, 1-based (60 items per page)."),
90
+ }, post("order-ahead"));
91
+ server.tool("find_publix_stores", `Find Publix stores near a ZIP code or in a city (city + state), or read one store by store_id. Each store: store_id (for every other Publix tool), name, short_name, type (supermarket, liquor, pharmacy), address (street, city, state, zip), phone, hours for the next 7 days, time_zone, departments, services, pharmacy (phone, hours), liquor_store, latitude, longitude, distance_miles, weekly_ad_break_day (the day the store's weekly ad starts), opening_date, closing_date and image. Publix operates in FL, GA, AL, SC, NC, TN, VA and KY. An unknown store_id is a charged 404. ${CHARGE}`, {
92
+ zip: z.string().regex(/^\d{5}$/).optional()
93
+ .describe("A 5-digit US ZIP code: the stores nearest to it, e.g. '33101'."),
94
+ city: z.string().min(1).max(60).optional()
95
+ .describe("A city name, with state, e.g. 'Nashville'."),
96
+ state: z.string().regex(/^[A-Za-z]{2}$/).optional()
97
+ .describe("A 2-letter state code, with city, e.g. 'TN'."),
98
+ store_id: storeId().optional(),
99
+ limit: z.number().int().min(1).max(30).optional()
100
+ .describe("Stores to return, up to 30 (default 10)."),
101
+ radius_miles: z.number().int().min(1).max(100).optional()
102
+ .describe("Search radius in miles (default 50)."),
103
+ }, post("stores"));
104
+ server.tool("get_publix_suggestions", `The suggestions the Publix search box shows for what a user typed: up to 10 popular searches (suggestions: text, type) and, with store_id, up to 4 products (item_code, base_product_id, title, description, saving_text, image, url); plus query, store_id and count. ${CHARGE}`, {
105
+ query: z.string().min(1).max(100)
106
+ .describe("What the user has typed so far, e.g. 'chick'."),
107
+ store_id: storeId().optional(),
108
+ }, post("suggestions"));
109
+ }
110
+ //# sourceMappingURL=publix.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publix.js","sourceRoot":"","sources":["../../src/tools/publix.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.51.0",
3
+ "version": "0.53.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. 487 tools across 73 platforms plus Extract, Company Enrich, 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. 504 tools across 74 platforms plus Extract, Company Enrich, site map, crawl and batch extraction, one API key.",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
8
  "author": "Scavio",
@@ -92,6 +92,15 @@
92
92
  "olx-api",
93
93
  "olx-listings",
94
94
  "classifieds",
95
+ "kroger",
96
+ "kroger-api",
97
+ "qfc",
98
+ "fred-meyer",
99
+ "grocery-prices",
100
+ "publix",
101
+ "publix-api",
102
+ "publix-weekly-ad",
103
+ "bogo-deals",
95
104
  "mercadolibre",
96
105
  "mercado-libre",
97
106
  "tiktok",