mcpscraper-cli 0.48.0 → 0.49.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
@@ -4,7 +4,7 @@ Command-line interface for the unified [mcpscraper.dev](https://mcpscraper.dev)
4
4
 
5
5
  [Release history](https://github.com/VilovietaSEO/mcpscraper-sdk/blob/main/CHANGELOG.md)
6
6
 
7
- The CLI provides friendly shortcuts for common operations plus universal discovery and invocation for every one of the 362 unified MCP tools, including provider-neutral X-Ray surveys, attribution-impact reporting, and truthful evidence-status operations.
7
+ The CLI provides friendly shortcuts for common operations plus universal discovery and invocation for every one of the 364 unified MCP tools, including provider-neutral X-Ray surveys, attribution-impact reporting, and truthful evidence-status operations.
8
8
 
9
9
  ## Install
10
10
 
@@ -41,7 +41,7 @@ mcpscraper tools call gmail_prepare_selection --args '{"connectionId":"gmail_con
41
41
  mcpscraper tools call gmail_import_status --args '{"ingestId":"opaque_ingest_id"}' --json
42
42
  ```
43
43
 
44
- `tools list` contains exactly 362 manifest-backed names. `tools call` accepts any one of them. Tools marked destructive require `--yes`.
44
+ `tools list` contains exactly 364 manifest-backed names. `tools call` accepts any one of them. Tools marked destructive require `--yes`.
45
45
 
46
46
  Integration connections are included with an active Starter plan or higher and have no extra connection-operation debit in this release. Scheduled occurrences cost 75 Credits; agent-mode runs also add 1.5 times OpenRouter's actual reported cost. Inspect the live policy with `mcpscraper tools call get-schedule-status --args '{}'`.
47
47
 
package/dist/bin/cli.js CHANGED
@@ -10,7 +10,7 @@ import { randomUUID } from "crypto";
10
10
  import { ScraperClient, ScraperApiError } from "mcpscraper-sdk";
11
11
 
12
12
  // src/version.ts
13
- var CLI_VERSION = "0.48.0";
13
+ var CLI_VERSION = "0.49.0";
14
14
 
15
15
  // src/generated-tools.ts
16
16
  var MCP_TOOL_CATALOG = [
@@ -23214,7 +23214,7 @@ var MCP_TOOL_CATALOG = [
23214
23214
  "name": "maps_place_intel",
23215
23215
  "category": "maps",
23216
23216
  "title": "Google Maps Business Profile Details",
23217
- "description": 'Deep-dive one known/named Google Business Profile: rating, reviews, category, address, phone, website, full hours, About attributes, entity IDs/CID, configured services/areas, and optional photos. Set includeImages:true for a provenance-aware manifest, bounded AI image blocks, and an owner-scoped ZIP; choose imageScope:"owner" for listing-owner photos only. Not for category searches or multi-business prospect lists; use maps_search for those. Split business name from location.',
23217
+ "description": 'Deep-dive one known/named Google Business Profile: rating, reviews, category, address, phone, website, full hours, About attributes, entity IDs/CID, configured services/areas, and optional photos. Use include:["all"] for every supported field group, with maxReviews and maxImages as limits; existing includeReviews, includeServices, and includeImages flags also work. Set includeImages:true for a provenance-aware manifest, bounded AI image blocks, and an owner-scoped ZIP; choose imageScope:"owner" for listing-owner photos only. Not for category searches or multi-business prospect lists; use maps_search for those. Split business name from location.',
23218
23218
  "inputSchema": {
23219
23219
  "type": "object",
23220
23220
  "properties": {
@@ -23256,7 +23256,7 @@ var MCP_TOOL_CATALOG = [
23256
23256
  },
23257
23257
  "includeServices": {
23258
23258
  "default": false,
23259
- "description": "Fetch the business's configured services list and areas-served list, when the profile has them. Adds one extra page visit; not present for every business.",
23259
+ "description": "Collect the exact business's configured services and areas served when available. These fields are absent on some profiles.",
23260
23260
  "type": "boolean"
23261
23261
  },
23262
23262
  "includeImages": {
@@ -23264,6 +23264,22 @@ var MCP_TOOL_CATALOG = [
23264
23264
  "description": "Collect Google Maps listing photos, download them, and return an AI-readable manifest plus an owner-scoped ZIP artifact. The gallery is scrolled until quiescent or maxImages is reached.",
23265
23265
  "type": "boolean"
23266
23266
  },
23267
+ "include": {
23268
+ "description": "Requested place field groups. all requests every supported group while maxReviews and maxImages still cap collection. Existing includeReviews, includeServices, and includeImages flags remain valid.",
23269
+ "type": "array",
23270
+ "items": {
23271
+ "type": "string",
23272
+ "enum": [
23273
+ "core",
23274
+ "hours",
23275
+ "services",
23276
+ "areasServed",
23277
+ "reviews",
23278
+ "images",
23279
+ "all"
23280
+ ]
23281
+ }
23282
+ },
23267
23283
  "imageScope": {
23268
23284
  "default": "all",
23269
23285
  "description": "owner collects only the Google Maps By owner gallery. all collects the full gallery and labels exact owner matches versus other/unknown media.",
@@ -23302,21 +23318,99 @@ var MCP_TOOL_CATALOG = [
23302
23318
  "openWorldHint": true
23303
23319
  }
23304
23320
  },
23321
+ {
23322
+ "name": "maps_place_resume",
23323
+ "category": "maps",
23324
+ "title": "Resume Google Maps Place Run",
23325
+ "description": "Explicitly resume a partial Maps place run using a fresh idempotency key. This may launch a new paid provider attempt and requires a new maximum credit authorization. Repeating the same key only reads its status.",
23326
+ "inputSchema": {
23327
+ "type": "object",
23328
+ "properties": {
23329
+ "runId": {
23330
+ "type": "string",
23331
+ "format": "uuid",
23332
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
23333
+ "description": "Partial or reconciled interrupted Maps place run to resume."
23334
+ },
23335
+ "resumeIdempotencyKey": {
23336
+ "type": "string",
23337
+ "minLength": 1,
23338
+ "maxLength": 500,
23339
+ "description": "A new key for this explicit attempt; reuse the same key to read its status."
23340
+ }
23341
+ },
23342
+ "required": [
23343
+ "runId",
23344
+ "resumeIdempotencyKey"
23345
+ ],
23346
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
23347
+ },
23348
+ "annotations": {
23349
+ "title": "Resume Google Maps Place Run",
23350
+ "readOnlyHint": true,
23351
+ "destructiveHint": false,
23352
+ "idempotentHint": false,
23353
+ "openWorldHint": true
23354
+ }
23355
+ },
23356
+ {
23357
+ "name": "maps_place_status",
23358
+ "category": "maps",
23359
+ "title": "Google Maps Place Run Status",
23360
+ "description": "Read a saved Maps place run by ID, including partial results and paginated reviews or images. This read never starts a browser or creates a charge.",
23361
+ "inputSchema": {
23362
+ "type": "object",
23363
+ "properties": {
23364
+ "runId": {
23365
+ "type": "string",
23366
+ "format": "uuid",
23367
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
23368
+ "description": "Maps place run ID returned by maps_place_intel."
23369
+ },
23370
+ "reviewsCursor": {
23371
+ "description": "Opaque cursor for the next page of saved reviews.",
23372
+ "type": "string"
23373
+ },
23374
+ "imagesCursor": {
23375
+ "description": "Opaque cursor for the next page of saved images.",
23376
+ "type": "string"
23377
+ },
23378
+ "limit": {
23379
+ "default": 50,
23380
+ "description": "Page size; reviews are capped at 50 and images at 100.",
23381
+ "type": "integer",
23382
+ "minimum": 1,
23383
+ "maximum": 100
23384
+ }
23385
+ },
23386
+ "required": [
23387
+ "runId"
23388
+ ],
23389
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
23390
+ },
23391
+ "annotations": {
23392
+ "title": "Google Maps Place Run Status",
23393
+ "readOnlyHint": true,
23394
+ "destructiveHint": false,
23395
+ "idempotentHint": false,
23396
+ "openWorldHint": true
23397
+ }
23398
+ },
23305
23399
  {
23306
23400
  "name": "maps_search",
23307
23401
  "category": "maps",
23308
23402
  "title": "Google Maps Business Search",
23309
- "description": "Search Google Maps for multiple businesses by category, niche, or local market \u2014 leads, prospects, competitors, or beyond the 3-pack. Use gl for country and location only when city or regional context matters. Returns up to 50 candidates (default 10) with names, place URLs, CIDs, and ratings. Set includeServices:true to expand each selected profile and return its complete configured services and areas served when available.",
23403
+ "description": "Search Google Maps for multiple businesses by category, niche, or local market \u2014 leads, prospects, competitors, or beyond the 3-pack. For ordinary searches, enter a US state in location to target that state; omit location for direct search. Returns up to 50 candidates (default 10) with names, place URLs, CIDs, and ratings. Set includeServices:true to open organic Businesses profiles for configured services and areas served when available.",
23310
23404
  "inputSchema": {
23311
23405
  "type": "object",
23312
23406
  "properties": {
23313
23407
  "query": {
23314
23408
  "type": "string",
23315
23409
  "minLength": 1,
23316
- "description": 'Business category, niche, or search term, e.g. "roofers". You may include the place here; Google Maps has no UULE, so the server appends location to the search text only when the query does not already name it.'
23410
+ "description": 'Business category, niche, or search term, e.g. "roofers".'
23317
23411
  },
23318
23412
  "location": {
23319
- "description": 'City, region, country, or service area, e.g. "Denver, CO".',
23413
+ "description": "Enter a US state name or code, e.g. Utah or UT, for a state-targeted search. Omit for direct search.",
23320
23414
  "type": "string"
23321
23415
  },
23322
23416
  "gl": {
@@ -23342,7 +23436,7 @@ var MCP_TOOL_CATALOG = [
23342
23436
  },
23343
23437
  "includeServices": {
23344
23438
  "default": false,
23345
- "description": "Open each returned business profile to include its configured services and areas served when available. Adds a page visit per business; does not collect review cards.",
23439
+ "description": "Open organic Businesses profiles for configured services and areas served. For more than three requested results, first click More businesses. Does not collect review cards; plain searches use the Google Maps feed.",
23346
23440
  "type": "boolean"
23347
23441
  }
23348
23442
  },
@@ -26229,13 +26323,13 @@ var MCP_TOOL_CATALOG = [
26229
26323
  "name": "search_serp",
26230
26324
  "category": "search",
26231
26325
  "title": "Google SERP Lookup",
26232
- "description": "Search Google once. Light mode (default) returns organic position, URL, title, and description. Full mode returns those results plus available same-page SERP features: local pack, discussions/forums, videos, AI Overview, AI Mode, What People Are Saying, entity IDs, and on-page PAA preview when present. Feature status distinguishes present, absent, incomplete, unknown, and unsupported. Both modes default to one page; set pages:2 only when the user explicitly requests two pages. Full does not expand PAA, open Maps profiles, or scrape result sites. Light costs 20 Credits per delivered page, or 35 if the backup supplies it; full costs 35 Credits per delivered page. Reuse the same idempotencyKey after an unknown response to recover the same billed operation. A saved serpIdentity uses its browser context and retains its 60-Credit search rate; it cannot be combined with full mode. Call credits_info for current pricing and balance.",
26326
+ "description": "Search Google once. Light mode (default) returns organic position, URL, title, and description. Full mode returns those results plus available same-page SERP features: local pack, discussions/forums, videos, AI Overview, AI Mode, What People Are Saying, entity IDs, and on-page PAA preview when present. Feature status distinguishes present, absent, incomplete, unknown, and unsupported. Both modes default to one page; set pages:2 only when the user explicitly requests two pages. Two-page requests use organic results only and mark rich features unsupported. If page 2 fails, an available page 1 is returned as partial and billed for one delivered page. Full does not expand PAA, open Maps profiles, or scrape result sites. Light costs 20 Credits per delivered page, or 35 if the backup supplies it; one-page full costs 35 Credits; explicit two-page full costs 40 Credits for organic results only. Reuse the same idempotencyKey after an unknown response to recover the same billed operation. A saved serpIdentity uses its browser context and retains its 60-Credit search rate; it cannot be combined with full mode. Call credits_info for current pricing and balance.",
26233
26327
  "inputSchema": {
26234
26328
  "type": "object",
26235
26329
  "properties": {
26236
26330
  "mode": {
26237
26331
  "default": "light",
26238
- "description": "Light returns organic results. Full returns available same-page SERP features. Both default to one page; full never implies two pages.",
26332
+ "description": "Light returns organic results. Full adds available SERP features for one page. With an explicit two-page request, only organic results are available and feature status is unsupported. Both default to one page.",
26239
26333
  "type": "string",
26240
26334
  "enum": [
26241
26335
  "light",
@@ -26285,7 +26379,7 @@ var MCP_TOOL_CATALOG = [
26285
26379
  },
26286
26380
  "pages": {
26287
26381
  "default": 1,
26288
- "description": "One page by default in light and full modes. Set 2 only when the user explicitly requests two pages.",
26382
+ "description": "One page by default. Set 2 only when the user explicitly requests two pages; two-page results include organic listings only; if page 2 is unavailable, page 1 is returned and billed when available.",
26289
26383
  "type": "integer",
26290
26384
  "minimum": 1,
26291
26385
  "maximum": 2
@@ -29113,6 +29207,7 @@ function createProgram(fetchImpl = globalThis.fetch) {
29113
29207
  device: "desktop",
29114
29208
  proxyMode: "none",
29115
29209
  pages: 1,
29210
+ mode: "light",
29116
29211
  debug: false
29117
29212
  });
29118
29213
  printResult(result, Boolean(opts.json), (r) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcpscraper-cli",
3
- "version": "0.48.0",
3
+ "version": "0.49.0",
4
4
  "description": "Command-line interface for the unified mcpscraper.dev MCP and REST APIs",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "commander": "^12.0.0",
22
- "mcpscraper-sdk": "^0.48.1"
22
+ "mcpscraper-sdk": "^0.50.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^22.0.0"