@scavio/mcp-server 0.16.1 → 0.17.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) is a unified [Web Search API](https://scavio.dev/docs/search-api) 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. 205 tools across 32 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. 211 tools across 33 platforms plus Extract, one API key.
7
7
 
8
- **The 22 platforms added in 0.13.0 are opt-in.** Registering all 205 tools puts 183KB of tool definitions — roughly 45k 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 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).
9
9
 
10
10
  ## Remote MCP Server
11
11
 
@@ -18,7 +18,7 @@ https://mcp.scavio.dev/mcp
18
18
  Two ways to authenticate:
19
19
 
20
20
  - **Sign in with OAuth, no key to copy.** Claude Desktop, claude.ai and Claude Code sign in to your Scavio account through the server. In Claude Desktop or claude.ai: Settings > Connectors > Add custom connector, name it Scavio, paste the URL, then Connect and Authorize. In Claude Code: `claude mcp add --transport http scavio https://mcp.scavio.dev/mcp`, then run `/mcp` and choose Authenticate.
21
- - **API key.** Pass it in the `x-api-key` header. Get your key at [scavio.dev](https://scavio.dev).
21
+ - **API key.** Pass it in the `x-api-key` header. Get your key at [scavio.dev](https://scavio.dev?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme).
22
22
 
23
23
  ---
24
24
 
@@ -48,7 +48,7 @@ claude mcp add scavio -e SCAVIO_API_KEY=YOUR_SCAVIO_API_KEY -- npx -y @scavio/mc
48
48
  }
49
49
  ```
50
50
 
51
- Requires Node.js 20+. Get your API key at [scavio.dev](https://scavio.dev).
51
+ Requires Node.js 20+. Get your API key at [scavio.dev](https://scavio.dev?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme).
52
52
 
53
53
  ---
54
54
 
@@ -207,8 +207,8 @@ Add to settings (`Cmd+,`):
207
207
 
208
208
  ## Choosing which tools load
209
209
 
210
- Scavio exposes 205 tools. Loading all of them costs 183KB of `tools/list` —
211
- roughly 45k tokens of context in every session before the user has said anything,
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,
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 — **205 tools, 183KB** |
221
+ | `all` | every platform — **211 tools, 191KB** |
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` |
@@ -234,7 +234,7 @@ tells you to call to check the server works.
234
234
  `reddit`, `x`, `linkedin`, `threads`, `kuaishou`, `amazon`, `walmart`, `ebay`,
235
235
  `target`, `homedepot`, `costco`, `tiktok-shop`, `booking`, `airbnb`,
236
236
  `tripadvisor`, `yelp`, `zillow`, `redfin`, `indeed`, `glassdoor`, `appstore`, `googleplay`,
237
- `g2`, `capterra`, `googleads`, `metaads`, `sec`, `companieshouse`
237
+ `g2`, `capterra`, `trustpilot`, `googleads`, `metaads`, `sec`, `companieshouse`
238
238
 
239
239
  ### Local (stdio)
240
240
 
@@ -300,7 +300,7 @@ platforms price per endpoint (YouTube, Instagram, LinkedIn, Kuaishou) or per
300
300
  request body (Extract, Threads, Walmart); `get_amazon_options` and `get_usage`
301
301
  are free.
302
302
 
303
- ### [Extract](https://scavio.dev/docs/extract)
303
+ ### [Extract](https://scavio.dev/docs/extract?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
304
304
 
305
305
  | Tool | Description |
306
306
  |------|-------------|
@@ -313,7 +313,7 @@ content comes back empty or blocked. You are billed only on a successful
313
313
  extraction — a dead link, a bot wall or a timeout costs nothing. There is no
314
314
  pagination: the whole page comes back in one call.
315
315
 
316
- ### [Google Search API](https://scavio.dev/docs/search-api)
316
+ ### [Google Search API](https://scavio.dev/docs/search-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
317
317
 
318
318
  | Tool | Description |
319
319
  |------|-------------|
@@ -332,7 +332,7 @@ pagination: the whole page comes back in one call.
332
332
  | `google_trends` | Interest-over-time and related queries |
333
333
  | `google_trending` | Trending searches |
334
334
 
335
- ### [YouTube Data API](https://scavio.dev/docs/youtube-api)
335
+ ### [YouTube Data API](https://scavio.dev/docs/youtube-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
336
336
 
337
337
  | Tool | Description |
338
338
  |------|-------------|
@@ -358,7 +358,7 @@ Credit cost varies: `get_youtube_transcript` costs 8, `get_youtube_streams` 3,
358
358
  `get_youtube_related` accepts a cursor but never returns one, so treat it as a
359
359
  single page.
360
360
 
361
- ### [Amazon Product API](https://scavio.dev/docs/amazon-api)
361
+ ### [Amazon Product API](https://scavio.dev/docs/amazon-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
362
362
 
363
363
  | Tool | Description |
364
364
  |------|-------------|
@@ -367,7 +367,7 @@ single page.
367
367
  | `get_amazon_offers` | List every seller offering an ASIN, with buy-box winner |
368
368
  | `get_amazon_options` | List the supported marketplaces and their country codes (free) |
369
369
 
370
- ### [Walmart API](https://scavio.dev/docs/walmart-api)
370
+ ### [Walmart API](https://scavio.dev/docs/walmart-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
371
371
 
372
372
  | Tool | Description |
373
373
  |------|-------------|
@@ -399,7 +399,7 @@ to know you are looking at a slice. Both seller tools need the NUMERIC
399
399
  `seller_catalog_id` from a product, search or offers response — the GUID-form
400
400
  `seller_id` in those same responses 404s.
401
401
 
402
- ### [TikTok API](https://scavio.dev/docs/tiktok-api)
402
+ ### [TikTok API](https://scavio.dev/docs/tiktok-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
403
403
 
404
404
  | Tool | Description |
405
405
  |------|-------------|
@@ -415,7 +415,7 @@ to know you are looking at a slice. Both seller tools need the NUMERIC
415
415
  | `get_tiktok_user_followers` | Get a user's follower list |
416
416
  | `get_tiktok_user_followings` | Get a user's following list |
417
417
 
418
- ### [Instagram API](https://scavio.dev/docs/instagram-api)
418
+ ### [Instagram API](https://scavio.dev/docs/instagram-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
419
419
 
420
420
  | Tool | Description |
421
421
  |------|-------------|
@@ -437,7 +437,7 @@ costs 2, `get_instagram_post` and `get_instagram_comment_replies` cost 8, and th
437
437
  other nine tools cost 10. The 10-credit endpoints hedge two upstream providers and
438
438
  bill both legs, which is what the price reflects.
439
439
 
440
- ### [Reddit API](https://scavio.dev/docs/reddit-api)
440
+ ### [Reddit API](https://scavio.dev/docs/reddit-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
441
441
 
442
442
  | Tool | Description |
443
443
  |------|-------------|
@@ -460,7 +460,7 @@ relevance order - and `get_reddit_post` returns a flat post object with no comme
460
460
  so call `get_reddit_post_comments` with the post id for those. Reddit is the slowest
461
461
  platform here, typically 5-15 seconds per call.
462
462
 
463
- ### [X API](https://scavio.dev/docs/x-search)
463
+ ### [X API](https://scavio.dev/docs/x-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
464
464
 
465
465
  | Tool | Description |
466
466
  |------|-------------|
@@ -480,7 +480,7 @@ platform here, typically 5-15 seconds per call.
480
480
  `next_cursor` but no `has_more`, so page until the cursor is absent or the timeline
481
481
  comes back empty.
482
482
 
483
- ### [LinkedIn API](https://scavio.dev/docs/linkedin-person)
483
+ ### [LinkedIn API](https://scavio.dev/docs/linkedin-person?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
484
484
 
485
485
  | Tool | Description |
486
486
  |------|-------------|
@@ -506,7 +506,7 @@ search, so those five tools were removed. `get_linkedin_company` still returns a
506
506
  small sample of featured employees, and `search_linkedin_jobs` with a company
507
507
  name substitutes for per-company listings.
508
508
 
509
- ### [TikTok Shop API](https://scavio.dev/docs/tiktok-shop-search)
509
+ ### [TikTok Shop API](https://scavio.dev/docs/tiktok-shop-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
510
510
 
511
511
  | Tool | Description |
512
512
  |------|-------------|
@@ -530,7 +530,7 @@ looping. For an id that will not resolve, `get_tiktok_shop_product_reviews` is o
530
530
  across 8 measured ids that failed on detail, 8 of 8 returned HTTP 200 on reviews and 7 of 8 returned
531
531
  at least one review.
532
532
 
533
- ### [Threads](https://scavio.dev/docs/threads-profile)
533
+ ### [Threads](https://scavio.dev/docs/threads-profile?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
534
534
 
535
535
  | Tool | Description |
536
536
  |------|-------------|
@@ -543,7 +543,7 @@ at least one review.
543
543
 
544
544
  Threads is priced by how you address a user, not per endpoint: 2 credits when you pass `user_id`, 4 credits when you pass `username`. Only `get_threads_profile`, `get_threads_user_posts` and `get_threads_user_replies` accept a username; the other three are always 2. Prefer `user_id` - a handle buys a second upstream lookup.
545
545
 
546
- ### [Kuaishou (China)](https://scavio.dev/docs/kuaishou-profile)
546
+ ### [Kuaishou (China)](https://scavio.dev/docs/kuaishou-profile?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
547
547
 
548
548
  | Tool | Description |
549
549
  |------|-------------|
@@ -564,7 +564,7 @@ Threads is priced by how you address a user, not per endpoint: 2 credits when yo
564
564
 
565
565
  Kuaishou is priced per endpoint, not at a flat rate: `get_kuaishou_profile` and all four search tools cost 10, `get_kuaishou_video` 2, `get_kuaishou_videos_batch` 40, and every other tool 1.
566
566
 
567
- ### [eBay](https://scavio.dev/docs/ebay-search)
567
+ ### [eBay](https://scavio.dev/docs/ebay-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
568
568
 
569
569
  | Tool | Description |
570
570
  |------|-------------|
@@ -574,7 +574,7 @@ Kuaishou is priced per endpoint, not at a flat rate: `get_kuaishou_profile` and
574
574
 
575
575
  1 credit per call. `get_ebay_seller` is a profile card and cannot enumerate a catalogue - list a seller's inventory with `search_ebay` and `seller` set and no keyword. `sold: true` searches completed listings that actually sold; on that view eBay publishes no headline count, so `total_results` is null. `per_page` accepts only 60, 120 or 240.
576
576
 
577
- ### [Target](https://scavio.dev/docs/target-search)
577
+ ### [Target](https://scavio.dev/docs/target-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
578
578
 
579
579
  | Tool | Description |
580
580
  |------|-------------|
@@ -585,7 +585,7 @@ Kuaishou is priced per endpoint, not at a flat rate: `get_kuaishou_profile` and
585
585
 
586
586
  1 credit per call. `get_target_product` and `get_target_reviews` are single-shot; search and category page with `page` + `count`.
587
587
 
588
- ### [Home Depot](https://scavio.dev/docs/home-depot-search)
588
+ ### [Home Depot](https://scavio.dev/docs/home-depot-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
589
589
 
590
590
  | Tool | Description |
591
591
  |------|-------------|
@@ -595,7 +595,7 @@ Kuaishou is priced per endpoint, not at a flat rate: `get_kuaishou_profile` and
595
595
 
596
596
  2 credits per call. Search page size is fixed at 12 and cannot be changed. Reviews return 30 per page; `total_pages` is the last page that exists and asking past it is a 404.
597
597
 
598
- ### [Costco](https://scavio.dev/docs/costco-search)
598
+ ### [Costco](https://scavio.dev/docs/costco-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
599
599
 
600
600
  | Tool | Description |
601
601
  |------|-------------|
@@ -630,7 +630,7 @@ not something Costco publishes, and only items Costco lists online are covered.
630
630
  `get_costco_coupons` returns the first 50 offers of a ~200-offer book by default; pass
631
631
  `limit` for more.
632
632
 
633
- ### [Booking.com](https://scavio.dev/docs/booking-search)
633
+ ### [Booking.com](https://scavio.dev/docs/booking-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
634
634
 
635
635
  | Tool | Description |
636
636
  |------|-------------|
@@ -640,7 +640,7 @@ not something Costco publishes, and only items Costco lists online are covered.
640
640
 
641
641
  1 credit per call. Search returns 25 properties per page; `get_booking_hotel` and `get_booking_reviews` are single-shot.
642
642
 
643
- ### [Airbnb](https://scavio.dev/docs/airbnb-search)
643
+ ### [Airbnb](https://scavio.dev/docs/airbnb-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
644
644
 
645
645
  | Tool | Description |
646
646
  |------|-------------|
@@ -650,7 +650,7 @@ not something Costco publishes, and only items Costco lists online are covered.
650
650
 
651
651
  1 credit per call. `search_airbnb` takes `page` XOR `cursor` - sending both is rejected, and `cursor` wins. 18 listings per page. `get_airbnb_reviews` pages with `limit` + `offset`.
652
652
 
653
- ### [Tripadvisor](https://scavio.dev/docs/tripadvisor-locations)
653
+ ### [Tripadvisor](https://scavio.dev/docs/tripadvisor-locations?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
654
654
 
655
655
  | Tool | Description |
656
656
  |------|-------------|
@@ -661,7 +661,7 @@ not something Costco publishes, and only items Costco lists online are covered.
661
661
 
662
662
  2 credits per call. Start with `resolve_tripadvisor_location` for the `geo_id` / `location_id` pair everything else needs. Search returns 30 per page and a page past the last is a 404, not an empty result. Reviews return 15 per page for restaurants and 10 for hotels and attractions, so `category` must match the location's own type on any page past the first.
663
663
 
664
- ### [Yelp](https://scavio.dev/docs/yelp-search)
664
+ ### [Yelp](https://scavio.dev/docs/yelp-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
665
665
 
666
666
  | Tool | Description |
667
667
  |------|-------------|
@@ -671,7 +671,7 @@ not something Costco publishes, and only items Costco lists online are covered.
671
671
 
672
672
  2 credits per call. Yelp fixes the page size at 10. `get_yelp_business` already includes the first page of reviews at no extra cost. A review page past the last is a 404, not an empty result.
673
673
 
674
- ### [Zillow](https://scavio.dev/docs/zillow-search)
674
+ ### [Zillow](https://scavio.dev/docs/zillow-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
675
675
 
676
676
  | Tool | Description |
677
677
  |------|-------------|
@@ -681,7 +681,7 @@ not something Costco publishes, and only items Costco lists online are covered.
681
681
 
682
682
  1 credit per call. Only `search_zillow` paginates. `get_zillow_agent_reviews` is an AGENT profile, not a property.
683
683
 
684
- ### [Redfin](https://scavio.dev/docs/redfin-search)
684
+ ### [Redfin](https://scavio.dev/docs/redfin-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
685
685
 
686
686
  | Tool | Description |
687
687
  |------|-------------|
@@ -691,7 +691,7 @@ 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
- ### [Indeed](https://scavio.dev/docs/indeed-search)
694
+ ### [Indeed](https://scavio.dev/docs/indeed-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
695
695
 
696
696
  | Tool | Description |
697
697
  |------|-------------|
@@ -702,7 +702,7 @@ not something Costco publishes, and only items Costco lists online are covered.
702
702
 
703
703
  2 credits per call. Job search returns 10 postings per page, company reviews 20 per page. `get_indeed_job` and `get_indeed_company` are single-shot.
704
704
 
705
- ### [Glassdoor](https://scavio.dev/docs/glassdoor-companies)
705
+ ### [Glassdoor](https://scavio.dev/docs/glassdoor-companies?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
706
706
 
707
707
  | Tool | Description |
708
708
  |------|-------------|
@@ -713,7 +713,7 @@ not something Costco publishes, and only items Costco lists online are covered.
713
713
 
714
714
  1 credit per call. Start with `resolve_glassdoor_company` for the `employer_id`. Only `get_glassdoor_salaries` paginates (10 job titles per page; `page_count` is how many exist). `get_glassdoor_reviews` returns up to three full reviews plus complete rating statistics - it is not a paginated review feed.
715
715
 
716
- ### [Apple App Store](https://scavio.dev/docs/app-store-search)
716
+ ### [Apple App Store](https://scavio.dev/docs/app-store-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
717
717
 
718
718
  | Tool | Description |
719
719
  |------|-------------|
@@ -723,7 +723,7 @@ not something Costco publishes, and only items Costco lists online are covered.
723
723
 
724
724
  1 credit per call. Reviews page 1-10 at 50 per page and stop hard at page 10: 500 reviews per storefront is Apple's anonymous ceiling, and you reach further by asking a different `country`. Search and app detail do not paginate.
725
725
 
726
- ### [Google Play](https://scavio.dev/docs/google-play-search)
726
+ ### [Google Play](https://scavio.dev/docs/google-play-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
727
727
 
728
728
  | Tool | Description |
729
729
  |------|-------------|
@@ -733,7 +733,7 @@ not something Costco publishes, and only items Costco lists online are covered.
733
733
 
734
734
  2 credits per call - a separate namespace from `google` and not on the Google-exempt price. Reviews are cursor-paginated, and the cursor is opaque, single-use and encodes the sort as well as the position, so send it back with the same `sort` it came from. A cursor past the last review is a 404. Search and app detail do not paginate.
735
735
 
736
- ### [G2 Software Reviews](https://scavio.dev/docs/g2-search)
736
+ ### [G2 Software Reviews](https://scavio.dev/docs/g2-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
737
737
 
738
738
  | Tool | Description |
739
739
  |------|-------------|
@@ -743,7 +743,7 @@ not something Costco publishes, and only items Costco lists online are covered.
743
743
 
744
744
  5 credits per call - the most expensive platform on Scavio. `search_g2_software` pages with `page` + `limit` (capped at 100 on our side); `get_g2_reviews` is fixed at 10 per page and paginates well past the 10 pages G2's own widget links to. `get_g2_product` is single-shot.
745
745
 
746
- ### [Capterra Software Reviews](https://scavio.dev/docs/capterra-search)
746
+ ### [Capterra Software Reviews](https://scavio.dev/docs/capterra-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
747
747
 
748
748
  | Tool | Description |
749
749
  |------|-------------|
@@ -753,7 +753,26 @@ not something Costco publishes, and only items Costco lists online are covered.
753
753
 
754
754
  2 credits per call. Only `get_capterra_reviews` paginates: 25 per page, capped at page 100 - past it Capterra answers 200 with page one, so check what came back. `get_capterra_product` already includes the 25 most recent reviews.
755
755
 
756
- ### [Google Ads Transparency](https://scavio.dev/docs/google-ads-advertisers)
756
+ ### Trustpilot
757
+
758
+ | Tool | Description |
759
+ |------|-------------|
760
+ | `search_trustpilot` | Search businesses by keyword in one country: domain, TrustScore, stars, review count, categories, website, published email/phone/address; up to 100 per page |
761
+ | `get_trustpilot_business` | Full profile by domain or URL: rating distribution, review count per language, claimed and verification status, reply rate and days to reply, consumer alerts, AI summary and topics, similar businesses, 20 newest reviews |
762
+ | `get_trustpilot_reviews` | A page of 20 reviews filtered by stars, language, date range, topics, text, verified-only and with-replies; sorted by recency or relevance |
763
+ | `get_trustpilot_categories` | The category tree (22 top-level, 189 subcategories), or categories matching a name |
764
+ | `get_trustpilot_category` | Businesses ranked in a category by country: sort, minimum TrustScore, claimed profiles only; 20 per page |
765
+ | `get_trustpilot_review` | One review by its 24-character id, with the business it is about |
766
+
767
+ 2 credits per call. `get_trustpilot_reviews` serves 10 pages of 20, so 200 reviews per
768
+ filter combination; to read more, slice into separate sets (each `stars` value, each
769
+ `language`, each `date_range`) rather than paging further. `total_filtered` with a
770
+ `date_range` doubles as review velocity. Email and phone appear only when the business
771
+ published them; the AI summary and topics only when Trustpilot has them for the chosen
772
+ `language` (default `en`). No TrustScore history. An unknown domain, category or review
773
+ id is a billed 404 that names what was not found.
774
+
775
+ ### [Google Ads Transparency](https://scavio.dev/docs/google-ads-advertisers?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
757
776
 
758
777
  | Tool | Description |
759
778
  |------|-------------|
@@ -763,7 +782,7 @@ not something Costco publishes, and only items Costco lists online are covered.
763
782
 
764
783
  1 credit per call. Start with `resolve_google_ads_advertiser` to turn a brand name or domain into an `advertiser_id`. `search_google_ads` is cursor-paginated at 100 ads per page - re-send the same filters alongside the cursor. `get_google_ads_creative` is the only tool carrying a creative's history, region breakdown and impression bucket.
765
784
 
766
- ### [Meta Ad Library](https://scavio.dev/docs/meta-ads-search)
785
+ ### [Meta Ad Library](https://scavio.dev/docs/meta-ads-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
767
786
 
768
787
  | Tool | Description |
769
788
  |------|-------------|
@@ -773,7 +792,7 @@ not something Costco publishes, and only items Costco lists online are covered.
773
792
 
774
793
  1 credit per call, and every cursor page is another credit: page 1 returns 30 ads, then 10 per page thereafter, so the cost of walking a whole query scales with depth. `search_meta_ads` and `get_meta_ads_advertiser` both cursor-paginate - walk `has_next_page`. `get_meta_ad` is single-shot.
775
794
 
776
- ### [SEC EDGAR](https://scavio.dev/docs/sec-edgar-lookup)
795
+ ### [SEC EDGAR](https://scavio.dev/docs/sec-edgar-lookup?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
777
796
 
778
797
  | Tool | Description |
779
798
  |------|-------------|
@@ -786,7 +805,7 @@ not something Costco publishes, and only items Costco lists online are covered.
786
805
 
787
806
  1 credit per call on the official free EDGAR JSON API. Start with `resolve_sec_company` to turn a name or ticker into a CIK. `get_sec_filings` pages with `page` + `limit`; `search_sec_filings` pages up to 100, because the index refuses a result window past 10,000.
788
807
 
789
- ### [Companies House](https://scavio.dev/docs/companies-house-search)
808
+ ### [Companies House](https://scavio.dev/docs/companies-house-search?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme)
790
809
 
791
810
  | Tool | Description |
792
811
  |------|-------------|
@@ -807,21 +826,21 @@ not something Costco publishes, and only items Costco lists online are covered.
807
826
 
808
827
  ## About Scavio
809
828
 
810
- [Scavio](https://scavio.dev) is a unified [search API for AI agents](https://scavio.dev/search-api-for-ai-agents) and a data API for developers. One key, structured JSON, no scraping or proxies:
829
+ [Scavio](https://scavio.dev?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) is a unified [search API for AI agents](https://scavio.dev/search-api-for-ai-agents?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) and a data API for developers. One key, structured JSON, no scraping or proxies:
811
830
 
812
- - [Google Search API](https://scavio.dev/google-search-api) — SERP results, news, images, maps, and knowledge graph
813
- - [Extract](https://scavio.dev/docs/extract) — read any URL as Markdown, plain text or raw HTML
814
- - [Amazon Product API](https://scavio.dev/amazon-product-api) and [Walmart Product API](https://scavio.dev/walmart-product-api) — product search and details, alongside [eBay](https://scavio.dev/docs/ebay-search), [Target](https://scavio.dev/docs/target-search), [Home Depot](https://scavio.dev/docs/home-depot-search) and [Costco](https://scavio.dev/costco-api) (per-warehouse prices, stock, gas prices, coupon book)
815
- - [TikTok API](https://scavio.dev/tiktok-api), [Instagram API](https://scavio.dev/instagram-api), [Reddit API](https://scavio.dev/reddit-api), [X API](https://scavio.dev/x-api), [LinkedIn API](https://scavio.dev/linkedin-api), and [YouTube API](https://scavio.dev/youtube-transcript-api) — social and video data
816
- - Travel and local — [Booking.com](https://scavio.dev/docs/booking-search), [Airbnb](https://scavio.dev/docs/airbnb-search), [Tripadvisor](https://scavio.dev/docs/tripadvisor-locations), [Yelp](https://scavio.dev/docs/yelp-search)
817
- - Real estate — [Zillow](https://scavio.dev/docs/zillow-search), [Redfin](https://scavio.dev/docs/redfin-search)
818
- - Jobs and employer data — [Indeed](https://scavio.dev/docs/indeed-search), [Glassdoor](https://scavio.dev/docs/glassdoor-companies)
819
- - Apps, software reviews and ad libraries — [App Store](https://scavio.dev/docs/app-store-search), [Google Play](https://scavio.dev/docs/google-play-search), [G2](https://scavio.dev/docs/g2-search), [Capterra](https://scavio.dev/docs/capterra-search), [Google Ads Transparency](https://scavio.dev/docs/google-ads-advertisers), [Meta Ad Library](https://scavio.dev/docs/meta-ads-search)
820
- - Company filings — [SEC EDGAR](https://scavio.dev/docs/sec-edgar-lookup), [Companies House](https://scavio.dev/docs/companies-house-search)
831
+ - [Google Search API](https://scavio.dev/google-search-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) — SERP results, news, images, maps, and knowledge graph
832
+ - [Extract](https://scavio.dev/docs/extract?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) — read any URL as Markdown, plain text or raw HTML
833
+ - [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
+ - [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
+ - 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)
837
+ - 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
+ - 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 (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
+ - 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)
821
840
 
822
- Teams use it as a [SerpAPI alternative](https://scavio.dev/alternatives/serpapi) with structured multi-platform data — see [Tavily vs Scavio](https://scavio.dev/compare/tavily/vs-scavio) for a head-to-head comparison.
841
+ Teams use it as a [SerpAPI alternative](https://scavio.dev/alternatives/serpapi?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) with structured multi-platform data — see [Tavily vs Scavio](https://scavio.dev/compare/tavily/vs-scavio?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) for a head-to-head comparison.
823
842
 
824
- Get a free [Search API](https://scavio.dev/docs/search-api) key at [scavio.dev](https://scavio.dev).
843
+ Get a free [Search API](https://scavio.dev/docs/search-api?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme) key at [scavio.dev](https://scavio.dev?utm_source=npm-mcp&utm_medium=package&utm_campaign=readme).
825
844
 
826
845
  ---
827
846
 
package/dist/index.js CHANGED
@@ -1,19 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { readFileSync } from "node:fs";
3
- import { dirname, join } from "node:path";
4
- import { fileURLToPath } from "node:url";
5
2
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
3
  import { env } from "./lib/env.js";
7
4
  import { ScavioClient } from "./lib/client.js";
5
+ import { SERVER_VERSION } from "./lib/version.js";
8
6
  import { registerAllTools, PLATFORM_KEYS, DEFAULT_PLATFORMS } from "./tools/index.js";
9
7
  const SERVER_NAME = "scavio-mcp";
10
- /**
11
- * Read from package.json rather than a literal. The literal drifted to five
12
- * minor versions behind npm, and it is the version every client is handed
13
- * during `initialize`. src/ and dist/ are both one level under the package
14
- * root, so this resolves identically under tsx and under node dist/index.js.
15
- */
16
- const SERVER_VERSION = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "..", "package.json"), "utf8")).version;
17
8
  if (env.TRANSPORT === "stdio") {
18
9
  await startStdio();
19
10
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ export declare const USER_AGENT: string;
2
+ /**
3
+ * Local npx installs run over stdio; the hosted server (mcp.scavio.dev) runs
4
+ * over HTTP. The API logs this header per call, so the two are told apart.
5
+ */
6
+ export declare const CLIENT_SOURCE: string;
1
7
  export declare class ScavioClient {
2
8
  private baseUrl;
3
9
  private apiKey;
@@ -1,5 +1,12 @@
1
1
  import { env } from "./env.js";
2
2
  import { ApiError } from "./errors.js";
3
+ import { SERVER_VERSION } from "./version.js";
4
+ export const USER_AGENT = `scavio-mcp/${SERVER_VERSION}`;
5
+ /**
6
+ * Local npx installs run over stdio; the hosted server (mcp.scavio.dev) runs
7
+ * over HTTP. The API logs this header per call, so the two are told apart.
8
+ */
9
+ export const CLIENT_SOURCE = env.TRANSPORT === "http" ? "scavio-mcp-remote" : "scavio-mcp";
3
10
  export class ScavioClient {
4
11
  baseUrl;
5
12
  apiKey;
@@ -13,6 +20,8 @@ export class ScavioClient {
13
20
  headers: {
14
21
  "Content-Type": "application/json",
15
22
  "Authorization": `Bearer ${this.apiKey}`,
23
+ "User-Agent": USER_AGENT,
24
+ "X-Client-Source": CLIENT_SOURCE,
16
25
  },
17
26
  ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
18
27
  });
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,OAAO,YAAY;IACf,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;YACD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,OAAe,CAAC;YACpB,IAAI,UAA8B,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;gBAC7C,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;oBAAE,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAc;QACxC,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/lib/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,cAAc,EAAE,CAAC;AAEzD;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAY,CAAC;AAE3F,MAAM,OAAO,YAAY;IACf,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB,YAAY,MAAc;QACxB,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,mBAAmB,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc;QACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YACrD,MAAM;YACN,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACxC,YAAY,EAAE,UAAU;gBACxB,iBAAiB,EAAE,aAAa;aACjC;YACD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,OAAe,CAAC;YACpB,IAAI,UAA8B,CAAC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC9B,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;gBAC7C,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,QAAQ;oBAAE,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;YAC1E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,EAAgB,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,IAAY;QACvB,OAAO,IAAI,CAAC,OAAO,CAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAI,IAAY,EAAE,IAAc;QACxC,OAAO,IAAI,CAAC,OAAO,CAAI,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Read from package.json rather than a literal. The literal drifted to five
3
+ * minor versions behind npm, and it is the version every client is handed
4
+ * during `initialize` and in the User-Agent of every API call. src/lib/ and
5
+ * dist/lib/ are both two levels under the package root, so this resolves
6
+ * identically under tsx and under node dist/index.js.
7
+ */
8
+ export declare const SERVER_VERSION: string;
@@ -0,0 +1,12 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ /**
5
+ * Read from package.json rather than a literal. The literal drifted to five
6
+ * minor versions behind npm, and it is the version every client is handed
7
+ * during `initialize` and in the User-Agent of every API call. src/lib/ and
8
+ * dist/lib/ are both two levels under the package root, so this resolves
9
+ * identically under tsx and under node dist/index.js.
10
+ */
11
+ export const SERVER_VERSION = JSON.parse(readFileSync(join(dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json"), "utf8")).version;
12
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/lib/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,cAAc,GACzB,IAAI,CAAC,KAAK,CACR,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAElG,CAAC,OAAO,CAAC"}
@@ -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 205
8
- * tools, which serialises to 183KB of tools/list (measured with
9
- * `npm run toolslist`, not estimated) — roughly 45k tokens pushed into the
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
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 (205 tools)
29
+ * all — every platform (211 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
  *
@@ -28,6 +28,7 @@ import { registerAppStoreTools } from "./appstore.js";
28
28
  import { registerGooglePlayTools } from "./googleplay.js";
29
29
  import { registerG2Tools } from "./g2.js";
30
30
  import { registerCapterraTools } from "./capterra.js";
31
+ import { registerTrustpilotTools } from "./trustpilot.js";
31
32
  import { registerGoogleAdsTools } from "./googleads.js";
32
33
  import { registerMetaAdsTools } from "./metaads.js";
33
34
  import { registerSecTools } from "./sec.js";
@@ -85,6 +86,8 @@ const PLATFORMS = {
85
86
  // Software reviews
86
87
  g2: registerG2Tools,
87
88
  capterra: registerCapterraTools,
89
+ // Business reviews
90
+ trustpilot: registerTrustpilotTools,
88
91
  // Ad libraries
89
92
  googleads: registerGoogleAdsTools,
90
93
  metaads: registerMetaAdsTools,
@@ -96,9 +99,9 @@ export const PLATFORM_KEYS = Object.keys(PLATFORMS);
96
99
  /**
97
100
  * What registers when SCAVIO_PLATFORMS is unset.
98
101
  *
99
- * Registering everything is not an option any more. The full surface is 205
100
- * tools, which serialises to 183KB of tools/list (measured with
101
- * `npm run toolslist`, not estimated) — roughly 45k tokens pushed into the
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
102
105
  * context of EVERY session before the user has typed anything, and past the
103
106
  * hard tool-count ceiling some clients enforce. The default set below is 107
104
107
  * tools, 82KB.
@@ -153,7 +156,7 @@ function warnOnce(message) {
153
156
  * Turn a SCAVIO_PLATFORMS value into the canonical platform keys to register.
154
157
  *
155
158
  * Accepts a comma-separated list of platform keys, plus three keywords:
156
- * all — every platform (205 tools)
159
+ * all — every platform (211 tools)
157
160
  * default — expands to DEFAULT_PLATFORMS, so `default,sec,g2` is additive
158
161
  * none — no platform tools at all, leaving only get_usage
159
162
  *
@@ -232,7 +235,7 @@ const READ_ONLY_ANNOTATIONS = {
232
235
  };
233
236
  /**
234
237
  * Wrap the server so every tool() call is annotated at registration, instead
235
- * of editing 205 call sites. A tool added later picks this up automatically.
238
+ * of editing 211 call sites. A tool added later picks this up automatically.
236
239
  */
237
240
  function annotating(server) {
238
241
  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 registerTrustpilotTools(server: McpServer, getClient: () => ScavioClient): void;
@@ -0,0 +1,89 @@
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/trustpilot.ts field for field (names, enums,
5
+ // regexes, min/max). Cross-field rule the backend enforces and zod here does
6
+ // not: exactly one of domain or url on business and reviews. A violation comes
7
+ // back as a 400 with the reason.
8
+ //
9
+ // No zod `.default()` anywhere in this file. The MCP SDK applies a zod default
10
+ // BEFORE the handler runs, so a defaulted field is posted on every call whether
11
+ // the model set it or not. Defaults are documented in the describe text and
12
+ // left for the backend to apply.
13
+ const country = () => z.string().regex(/^[A-Za-z]{2}$/, "country must be a 2-letter country code").optional()
14
+ .describe("2-letter country code, e.g. 'US', 'GB', 'DE'. Default 'US'.");
15
+ const businessAddress = () => ({
16
+ domain: z.string().min(3).max(253).optional()
17
+ .describe("Business website domain as listed on Trustpilot, e.g. 'www.amazon.com' (domain from search_trustpilot). Pass domain or url."),
18
+ url: z.string().min(1).max(500).optional()
19
+ .describe("A trustpilot.com/review/<domain> URL from any Trustpilot country site, instead of domain."),
20
+ });
21
+ export function registerTrustpilotTools(server, getClient) {
22
+ const post = (path) => async (params) => {
23
+ try {
24
+ const data = await getClient().post(`/api/v1/trustpilot/${path}`, params);
25
+ return trimResponse(data);
26
+ }
27
+ catch (err) {
28
+ return handleApiError(err);
29
+ }
30
+ };
31
+ server.tool("search_trustpilot", `Search Trustpilot businesses by name or keyword in one country: domain, TrustScore, stars, review count, categories, website, and the email, phone and address the business published (null when it did not). Use to find a business's domain for the other Trustpilot tools, or for lead lists. Up to 100/page. 2 credits/page.`, {
32
+ query: z.string().min(1).max(200)
33
+ .describe("Business name, keyword or category, e.g. 'vpn'."),
34
+ country: country(),
35
+ page: z.number().int().min(1).max(1000).optional()
36
+ .describe("Page, 1-based."),
37
+ page_size: z.number().int().min(1).max(100).optional()
38
+ .describe("Businesses/page, max 100. Default 20."),
39
+ }, post("search"));
40
+ server.tool("get_trustpilot_business", `Get a Trustpilot business profile by domain or URL: TrustScore, rating distribution, review count per language, categories, contact details, claimed and verification status, reply rate and average days to reply on negative reviews, consumer alerts, AI review summary and topics (when Trustpilot has them for that language), similar businesses, and the 20 newest reviews. Topic ids feed get_trustpilot_reviews. Unknown domain is a billed 404. 2 credits.`, {
41
+ ...businessAddress(),
42
+ language: z.string().regex(/^[a-z]{2}$/, "language must be a 2-letter language code").optional()
43
+ .describe("2-letter language code, default 'en'. Sets the language of the 20 included reviews and of the AI summary/topics. Rating distribution covers every language."),
44
+ }, post("business"));
45
+ server.tool("get_trustpilot_reviews", `Get one page of 20 Trustpilot reviews for a business, filtered by stars, language, date range, topics, text search, verified-only and with-replies, sorted by recency or relevance. Returns total_filtered, so a date_range doubles as review velocity. Max 10 pages = 200 reviews per filter combination; to go further, slice into separate sets (e.g. each stars value x language x date_range). 2 credits/page.`, {
46
+ ...businessAddress(),
47
+ page: z.number().int().min(1).max(10).optional()
48
+ .describe("Page 1-10, 20/page. Default 1."),
49
+ stars: z.array(z.number().int().min(1).max(5)).min(1).max(5).optional()
50
+ .describe("Only these star ratings, e.g. [1, 2]."),
51
+ language: z.string().regex(/^(all|[a-z]{2})$/, "language must be all or a 2-letter language code").optional()
52
+ .describe("2-letter review language or 'all'. Default 'all'."),
53
+ date_range: z.enum(["last30days", "last3months", "last6months", "last12months"]).optional()
54
+ .describe("Only reviews published in this window."),
55
+ sort: z.enum(["recency", "relevance"]).optional()
56
+ .describe("Default 'recency' (newest first)."),
57
+ verified_only: z.boolean().optional()
58
+ .describe("Only verified reviews."),
59
+ with_replies: z.boolean().optional()
60
+ .describe("Only reviews the business replied to."),
61
+ topics: z.array(z.string().regex(/^[a-z0-9_]+$/i).max(80)).min(1).max(10).optional()
62
+ .describe("Topic ids from get_trustpilot_business topics, e.g. ['delivery_service']."),
63
+ search: z.string().min(1).max(100).optional()
64
+ .describe("Only reviews containing this text, e.g. 'refund'."),
65
+ }, post("reviews"));
66
+ server.tool("get_trustpilot_categories", `Get the Trustpilot category tree (top-level categories with their subcategories), or categories matching a name. Use to find category_id for get_trustpilot_category. 2 credits.`, {
67
+ query: z.string().min(1).max(100).optional()
68
+ .describe("Find categories by name, e.g. 'insurance'. Omit for the full tree."),
69
+ country: country(),
70
+ }, post("categories"));
71
+ server.tool("get_trustpilot_category", `List businesses ranked in a Trustpilot category for one country: TrustScore, review count, location, website, email and phone (when published). Sort by relevance, review count or latest review; filter by minimum TrustScore or claimed profiles only. 20/page. Unknown category is a billed 404. 2 credits/page.`, {
72
+ category_id: z.string().regex(/^[a-z0-9_]+$/, "category_id must be a Trustpilot category id such as vpn_service").max(100)
73
+ .describe("Category id from get_trustpilot_categories, e.g. 'vpn_service'."),
74
+ country: country(),
75
+ sort: z.enum(["most_relevant", "reviews_count", "latest_review"]).optional()
76
+ .describe("Default 'most_relevant'."),
77
+ min_trust_score: z.union([z.literal(3), z.literal(4), z.literal(4.5)]).optional()
78
+ .describe("Only businesses with at least this TrustScore: 3, 4 or 4.5."),
79
+ claimed_only: z.boolean().optional()
80
+ .describe("Only businesses that claimed their Trustpilot profile."),
81
+ page: z.number().int().min(1).max(1000).optional()
82
+ .describe("Page, 1-based."),
83
+ }, post("category"));
84
+ server.tool("get_trustpilot_review", `Get one Trustpilot review by id: rating, title, full text, dates, verification, reviewer's public profile summary, the business reply, and the business it is about. Unknown id is a billed 404. 2 credits.`, {
85
+ review_id: z.string().regex(/^[a-fA-F0-9]{24}$/, "review_id must be a 24-character Trustpilot review id")
86
+ .describe("24-character review id (review_id from get_trustpilot_business or get_trustpilot_reviews)."),
87
+ }, post("review"));
88
+ }
89
+ //# sourceMappingURL=trustpilot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trustpilot.js","sourceRoot":"","sources":["../../src/tools/trustpilot.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.16.1",
3
+ "version": "0.17.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. 205 tools across 32 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. 211 tools across 33 platforms plus Extract, one API key.",
6
6
  "type": "module",
7
7
  "license": "MIT",
8
8
  "author": "Scavio",
@@ -35,6 +35,7 @@
35
35
  "yelp",
36
36
  "indeed",
37
37
  "glassdoor",
38
+ "trustpilot",
38
39
  "sec-filings",
39
40
  "web-scraping",
40
41
  "url-extraction",