@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 +72 -53
- package/dist/index.js +1 -10
- package/dist/index.js.map +1 -1
- package/dist/lib/client.d.ts +6 -0
- package/dist/lib/client.js +9 -0
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/version.d.ts +8 -0
- package/dist/lib/version.js +12 -0
- package/dist/lib/version.js.map +1 -0
- package/dist/tools/index.d.ts +4 -4
- package/dist/tools/index.js +8 -5
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/trustpilot.d.ts +3 -0
- package/dist/tools/trustpilot.js +89 -0
- package/dist/tools/trustpilot.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|

|
|
4
4
|

|
|
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.
|
|
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
|
|
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
|
|
211
|
-
roughly
|
|
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 — **
|
|
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
|
-
###
|
|
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":";AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/client.d.ts
CHANGED
|
@@ -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;
|
package/dist/lib/client.js
CHANGED
|
@@ -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
|
});
|
package/dist/lib/client.js.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/tools/index.d.ts
CHANGED
|
@@ -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
|
|
8
|
-
* tools, which serialises to
|
|
9
|
-
* `npm run toolslist`, not estimated) — roughly
|
|
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 (
|
|
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
|
*
|
package/dist/tools/index.js
CHANGED
|
@@ -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
|
|
100
|
-
* tools, which serialises to
|
|
101
|
-
* `npm run toolslist`, not estimated) — roughly
|
|
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 (
|
|
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
|
|
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, {
|
package/dist/tools/index.js.map
CHANGED
|
@@ -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,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.
|
|
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.
|
|
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",
|