mcpscraper-cli 0.24.3 → 0.25.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.
Files changed (2) hide show
  1. package/dist/bin/cli.js +466 -24
  2. package/package.json +2 -2
package/dist/bin/cli.js CHANGED
@@ -9,7 +9,7 @@ import { join } from "path";
9
9
  import { ScraperClient, ScraperApiError } from "mcpscraper-sdk";
10
10
 
11
11
  // src/version.ts
12
- var CLI_VERSION = "0.24.3";
12
+ var CLI_VERSION = "0.25.0";
13
13
 
14
14
  // src/generated-tools.ts
15
15
  var MCP_TOOL_CATALOG = [
@@ -199,6 +199,20 @@ var MCP_TOOL_CATALOG = [
199
199
  ]
200
200
  }
201
201
  },
202
+ "maxMediaAssets": {
203
+ "default": 100,
204
+ "description": "Maximum media records to retain and attempt to download after filtering and responsive-variant collapse.",
205
+ "type": "integer",
206
+ "minimum": 1,
207
+ "maximum": 250
208
+ },
209
+ "maxInlineImages": {
210
+ "default": 3,
211
+ "description": "Maximum downloaded images to attach as AI-readable image content blocks. All successfully downloaded media remains available in the ZIP.",
212
+ "type": "integer",
213
+ "minimum": 0,
214
+ "maximum": 5
215
+ },
202
216
  "delivery": {
203
217
  "default": "auto",
204
218
  "description": "Where to deliver the result. auto keeps small results inline and offloads large ones; artifact always returns an owned artifact; memory stores the full page in hosted Memory; inline returns a bounded response.",
@@ -212,7 +226,7 @@ var MCP_TOOL_CATALOG = [
212
226
  },
213
227
  "preserveMedia": {
214
228
  "default": false,
215
- "description": "Preserve discovered media in the result workflow. This is the preferred replacement for downloadMedia.",
229
+ "description": "Collect media from static source plus a rendered, lazy-loaded page; collapse responsive variants; return provenance and completeness; attach bounded image previews; and create an owner-scoped ZIP readable with archive_read.",
216
230
  "type": "boolean"
217
231
  },
218
232
  "depositToVault": {
@@ -997,7 +1011,7 @@ var MCP_TOOL_CATALOG = [
997
1011
  "name": "reddit_trending",
998
1012
  "category": "reddit",
999
1013
  "title": "Reddit Trending",
1000
- "description": "Discover the top Reddit conversations about a topic from the last week or month: finds relevant recent threads via a Google site:reddit.com search (optionally scoped to one subreddit), scrapes them for real upvotes, comments, and the questions people asked, and ranks by engagement (upvotes + 2x comments). Scraping runs in parallel across the discovered threads; set includeComments:false for a fast, cheap discovery-only sweep (relevant thread list, no engagement stats, no per-thread billing) and then read the ones you want with reddit_thread. Not for reading one known thread URL \u2014 use reddit_thread for that.",
1014
+ "description": "Discover top Reddit conversations from the last week or month. It tries Google site:reddit.com discovery, falls back to a bounded direct Reddit search when that SERP is empty or unavailable, then optionally scrapes threads for real upvotes, comments, questions, and engagement ranking. Inspect resultQuality, discoverySource, degradationReasons, retryRecommended, and billingRefunded before treating an empty result as a genuine lack of discussion. Set includeComments:false for a cheap discovery-only sweep; use reddit_thread for one known URL.",
1001
1015
  "inputSchema": {
1002
1016
  "type": "object",
1003
1017
  "properties": {
@@ -1453,7 +1467,7 @@ var MCP_TOOL_CATALOG = [
1453
1467
  "name": "maps_place_intel",
1454
1468
  "category": "maps",
1455
1469
  "title": "Google Maps Business Profile Details",
1456
- "description": "Deep-dive one known/named Google Business Profile: rating, reviews, category, address, phone, full hours, About attributes, entity IDs/CID, and \u2014 with includeServices: true \u2014 the full configured services and areas-served lists. Not for category searches or multi-business prospect lists; use maps_search for those. Split business name from location.",
1470
+ "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.',
1457
1471
  "inputSchema": {
1458
1472
  "type": "object",
1459
1473
  "properties": {
@@ -1497,6 +1511,34 @@ var MCP_TOOL_CATALOG = [
1497
1511
  "default": false,
1498
1512
  "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.",
1499
1513
  "type": "boolean"
1514
+ },
1515
+ "includeImages": {
1516
+ "default": false,
1517
+ "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.",
1518
+ "type": "boolean"
1519
+ },
1520
+ "imageScope": {
1521
+ "default": "all",
1522
+ "description": "owner collects only the Google Maps By owner gallery. all collects the full gallery and labels exact owner matches versus other/unknown media.",
1523
+ "type": "string",
1524
+ "enum": [
1525
+ "owner",
1526
+ "all"
1527
+ ]
1528
+ },
1529
+ "maxImages": {
1530
+ "default": 100,
1531
+ "description": "Maximum photos to collect when includeImages is true. Default 100, maximum 250.",
1532
+ "type": "integer",
1533
+ "minimum": 1,
1534
+ "maximum": 250
1535
+ },
1536
+ "maxInlineImages": {
1537
+ "default": 3,
1538
+ "description": "Maximum downloaded photos attached as MCP image blocks for direct AI vision. The ZIP and structured manifest still contain the wider result.",
1539
+ "type": "integer",
1540
+ "minimum": 0,
1541
+ "maximum": 5
1500
1542
  }
1501
1543
  },
1502
1544
  "required": [
@@ -4933,7 +4975,7 @@ var MCP_TOOL_CATALOG = [
4933
4975
  "name": "editorial_reading_room_guide",
4934
4976
  "category": "editorial",
4935
4977
  "title": "Editorial Reading Room Guide",
4936
- "description": 'Read the reusable composition contract before creating an editorial reading room. It tells the calling AI how to inventory the supplied corpus, preserve source truth, architect a coherent edition, write useful articles, and verify the finished page. Start with focus "workflow"; fetch "content_contract" or "example" only when needed. This does not research, write, or create a page.',
4978
+ "description": 'Read the reusable composition contract before creating an editorial reading room. It covers corpus inventory, source truth, coherent architecture, up to 100 articles, purposeful images, image provenance, collection/article Open Graph images, and finished-page verification. Start with focus "workflow"; fetch "content_contract" or "example" only when needed. This does not research, write, or create a page.',
4937
4979
  "inputSchema": {
4938
4980
  "type": "object",
4939
4981
  "properties": {
@@ -4962,7 +5004,7 @@ var MCP_TOOL_CATALOG = [
4962
5004
  "name": "create_editorial_reading_room",
4963
5005
  "category": "editorial",
4964
5006
  "title": "Create Editorial Reading Room",
4965
- "description": "Turn fully authored, source-grounded articles into one polished mobile-first editorial report with contents, search, hamburger navigation, article jump links, reading progress, text sizing, evening mode, and provenance. Do not use this tool to discover, preview, save, or version reusable website templates; use list_artifact_templates and get_artifact_template_example for that workflow. The calling AI must first read all in-scope material and use editorial_reading_room_guide when it has not already internalized the workflow; this renderer does not perform research or invent copy. Local stdio clients save one self-contained HTML file under the MCP Scraper output directory and return localPath.",
5007
+ "description": "Render up to 100 fully authored, source-grounded articles into one polished mobile-first editorial report with contents, search, navigation, jump links, progress, text sizing, evening mode, provenance, structured article/card images, Markdown body images, and collection/article Open Graph metadata. Public HTTP(S) image URLs require alt text; preserve caption, credit, source, and rights context when known. The static artifact carries collection OG tags and updates article tags in-browser; a publishing host must serve article-specific metadata for crawler-perfect per-article unfurls. This renderer does not research or invent copy. For reusable website templates use list_artifact_templates instead. Local stdio clients save one self-contained HTML file under the MCP Scraper output directory and return localPath.",
4966
5008
  "inputSchema": {
4967
5009
  "type": "object",
4968
5010
  "properties": {
@@ -5027,6 +5069,40 @@ var MCP_TOOL_CATALOG = [
5027
5069
  "type": "string",
5028
5070
  "minLength": 1,
5029
5071
  "maxLength": 60
5072
+ },
5073
+ "ogImage": {
5074
+ "description": "Optional collection-level Open Graph image. Individual articles may override it.",
5075
+ "type": "object",
5076
+ "properties": {
5077
+ "url": {
5078
+ "type": "string",
5079
+ "format": "uri",
5080
+ "description": "Public HTTP(S) image URL used for the reading-room home page social preview."
5081
+ },
5082
+ "alt": {
5083
+ "type": "string",
5084
+ "minLength": 1,
5085
+ "maxLength": 500,
5086
+ "description": "Accessible description and og:image:alt text."
5087
+ },
5088
+ "width": {
5089
+ "description": "Optional intrinsic width in pixels.",
5090
+ "type": "integer",
5091
+ "exclusiveMinimum": 0,
5092
+ "maximum": 9007199254740991
5093
+ },
5094
+ "height": {
5095
+ "description": "Optional intrinsic height in pixels.",
5096
+ "type": "integer",
5097
+ "exclusiveMinimum": 0,
5098
+ "maximum": 9007199254740991
5099
+ }
5100
+ },
5101
+ "required": [
5102
+ "url",
5103
+ "alt"
5104
+ ],
5105
+ "additionalProperties": false
5030
5106
  }
5031
5107
  },
5032
5108
  "required": [
@@ -5045,7 +5121,7 @@ var MCP_TOOL_CATALOG = [
5045
5121
  },
5046
5122
  "articles": {
5047
5123
  "minItems": 1,
5048
- "maxItems": 40,
5124
+ "maxItems": 100,
5049
5125
  "type": "array",
5050
5126
  "items": {
5051
5127
  "type": "object",
@@ -5110,11 +5186,109 @@ var MCP_TOOL_CATALOG = [
5110
5186
  "minLength": 1,
5111
5187
  "maxLength": 80
5112
5188
  },
5189
+ "image": {
5190
+ "description": "Optional article image shown on cards and above the article body. Markdown images remain supported inside the body.",
5191
+ "type": "object",
5192
+ "properties": {
5193
+ "url": {
5194
+ "type": "string",
5195
+ "format": "uri",
5196
+ "description": "Public HTTP(S) image URL."
5197
+ },
5198
+ "alt": {
5199
+ "type": "string",
5200
+ "minLength": 1,
5201
+ "maxLength": 500,
5202
+ "description": "Required accessible description of the image."
5203
+ },
5204
+ "caption": {
5205
+ "description": "Optional visible caption.",
5206
+ "type": "string",
5207
+ "maxLength": 1e3
5208
+ },
5209
+ "credit": {
5210
+ "description": "Optional visible creator, publisher, or rights credit.",
5211
+ "type": "string",
5212
+ "maxLength": 500
5213
+ },
5214
+ "sourceUrl": {
5215
+ "description": "Optional public HTTP(S) source page for provenance or rights context.",
5216
+ "type": "string",
5217
+ "format": "uri"
5218
+ },
5219
+ "width": {
5220
+ "description": "Optional intrinsic width in pixels.",
5221
+ "type": "integer",
5222
+ "exclusiveMinimum": 0,
5223
+ "maximum": 9007199254740991
5224
+ },
5225
+ "height": {
5226
+ "description": "Optional intrinsic height in pixels.",
5227
+ "type": "integer",
5228
+ "exclusiveMinimum": 0,
5229
+ "maximum": 9007199254740991
5230
+ }
5231
+ },
5232
+ "required": [
5233
+ "url",
5234
+ "alt"
5235
+ ],
5236
+ "additionalProperties": false
5237
+ },
5238
+ "ogImage": {
5239
+ "description": "Optional article-specific social preview image. Defaults to article.image, then site.ogImage.",
5240
+ "type": "object",
5241
+ "properties": {
5242
+ "url": {
5243
+ "type": "string",
5244
+ "format": "uri",
5245
+ "description": "Public HTTP(S) image URL."
5246
+ },
5247
+ "alt": {
5248
+ "type": "string",
5249
+ "minLength": 1,
5250
+ "maxLength": 500,
5251
+ "description": "Required accessible description of the image."
5252
+ },
5253
+ "caption": {
5254
+ "description": "Optional visible caption.",
5255
+ "type": "string",
5256
+ "maxLength": 1e3
5257
+ },
5258
+ "credit": {
5259
+ "description": "Optional visible creator, publisher, or rights credit.",
5260
+ "type": "string",
5261
+ "maxLength": 500
5262
+ },
5263
+ "sourceUrl": {
5264
+ "description": "Optional public HTTP(S) source page for provenance or rights context.",
5265
+ "type": "string",
5266
+ "format": "uri"
5267
+ },
5268
+ "width": {
5269
+ "description": "Optional intrinsic width in pixels.",
5270
+ "type": "integer",
5271
+ "exclusiveMinimum": 0,
5272
+ "maximum": 9007199254740991
5273
+ },
5274
+ "height": {
5275
+ "description": "Optional intrinsic height in pixels.",
5276
+ "type": "integer",
5277
+ "exclusiveMinimum": 0,
5278
+ "maximum": 9007199254740991
5279
+ }
5280
+ },
5281
+ "required": [
5282
+ "url",
5283
+ "alt"
5284
+ ],
5285
+ "additionalProperties": false
5286
+ },
5113
5287
  "markdown": {
5114
5288
  "type": "string",
5115
5289
  "minLength": 1,
5116
5290
  "maxLength": 1e5,
5117
- "description": "Complete article body in Markdown. Use H2/H3 headings for jump links, short paragraphs, concrete examples, and tables only where they improve comparison."
5291
+ "description": "Complete article body in Markdown. Standard Markdown images are allowed with descriptive alt text. Use H2/H3 headings for jump links, short paragraphs, concrete examples, and tables only where they improve comparison."
5118
5292
  }
5119
5293
  },
5120
5294
  "required": [
@@ -5129,7 +5303,7 @@ var MCP_TOOL_CATALOG = [
5129
5303
  ],
5130
5304
  "additionalProperties": false
5131
5305
  },
5132
- "description": "One to forty fully authored articles, with no more than 2,000,000 Markdown bytes combined. Read all in-scope source material before composing them; preserve distinctions, uncertainty, and provenance instead of flattening the corpus."
5306
+ "description": "One to one hundred fully authored articles, with no more than 2,000,000 Markdown bytes combined. Articles may include structured card/hero images, article-specific Open Graph images, and Markdown body images. Read all in-scope source material before composing them; preserve distinctions, uncertainty, image provenance, and rights context instead of flattening the corpus."
5133
5307
  },
5134
5308
  "filename": {
5135
5309
  "description": "Optional download filename. The server always normalizes it to a safe .html filename.",
@@ -10409,7 +10583,7 @@ var MCP_TOOL_CATALOG = [
10409
10583
  "name": "memory-export",
10410
10584
  "category": "memory",
10411
10585
  "title": "Export Vault",
10412
- "description": "Export every note in a vault as a full dump for backup, migration, or bulk download \u2014 path, title, full content, kind, and last-updated per note, plus a count. Defaults to the active (or first entitled) vault. Requires export scope; the export is logged to provenance.",
10586
+ "description": "Export every full note in one vault for an explicitly requested backup, migration, or corpus-wide audit \u2014 path, title, content, kind, last-updated, and count. This can be large and is not the normal way to find or edit one note: use memory-list for complete metadata inventory, memory-search for ranked recall, and memory-get for exact content. Defaults to the active or first entitled vault. Requires export scope; the export is logged to provenance.",
10413
10587
  "inputSchema": {
10414
10588
  "type": "object",
10415
10589
  "properties": {
@@ -10432,7 +10606,7 @@ var MCP_TOOL_CATALOG = [
10432
10606
  "name": "memory-get",
10433
10607
  "category": "memory",
10434
10608
  "title": "Get Memory Note",
10435
- "description": "Read a single note from a vault by its exact path, or by shareId for a note shared with you and accepted. Owned notes include their stored Obsidian props so edits can preserve links and template metadata. Returns a revision number \u2014 pass it as baseRevision on a later memory-put/delete-note to detect a concurrent edit instead of silently overwriting it. Requires read scope.",
10609
+ "description": "Read one complete note by exact vault+path, or by accepted shareId. After memory-search identifies a strong candidate, use this before relying on it for an answer, summary, edit, link, or durable write: search results are excerpts, not complete notes. Owned notes include stored Obsidian props so edits preserve links and template metadata. Returns the revision required as baseRevision on later edits/deletes. Requires read scope.",
10436
10610
  "inputSchema": {
10437
10611
  "type": "object",
10438
10612
  "properties": {
@@ -10463,7 +10637,7 @@ var MCP_TOOL_CATALOG = [
10463
10637
  "name": "memory-list",
10464
10638
  "category": "memory",
10465
10639
  "title": "List Memory Notes",
10466
- "description": "List notes in a vault \u2014 path, title, kind, tags, last-updated \u2014 optionally filtered by kind and/or tags (matches ANY given tag). Defaults to the active or first entitled vault; also returns vaults the caller is entitled to. Requires read scope.",
10640
+ "description": "Return a complete note-and-folder metadata inventory without note bodies. Set allVaults:true when the user asks for every note or folder they have across their whole Memory account; the result is grouped by vault and includes aggregate totals. Otherwise list one exact vault, defaulting to the active or first entitled vault. Never report a single-vault count as the account total. Use memory-get for exact full content, memory-search for ranked semantic recall, or memory-export only when explicitly asked for every full note. Requires read scope.",
10467
10641
  "inputSchema": {
10468
10642
  "type": "object",
10469
10643
  "properties": {
@@ -10471,6 +10645,10 @@ var MCP_TOOL_CATALOG = [
10471
10645
  "description": "Vault to list. Optional; defaults to the session active vault, then the first vault the caller is entitled to.",
10472
10646
  "type": "string"
10473
10647
  },
10648
+ "allVaults": {
10649
+ "description": "Set true for one complete account-wide inventory across every entitled vault. Omit or set false for one vault. When true, vault is ignored and reads run sequentially to avoid backend contention.",
10650
+ "type": "boolean"
10651
+ },
10474
10652
  "kind": {
10475
10653
  "description": "Filter to a single note kind. Optional; omit to list every kind in the vault.",
10476
10654
  "type": "string",
@@ -10503,7 +10681,7 @@ var MCP_TOOL_CATALOG = [
10503
10681
  "name": "memory-put",
10504
10682
  "category": "memory",
10505
10683
  "title": "Put Memory Note",
10506
- "description": "Create or deliberately edit one note at a path in a memory vault; content is persisted and indexed for search. For normal new People, Organizations, Deals, Projects, Tasks, or Communication records, use prepare-memory-write then memory-capture: People must be real people, Organizations must be real organizations, Deals need a known party, Projects need a supported kind, Tasks can be independent Inbox todos or use a verified Project when linked, and draft emails need pending approval. For row-shaped datasets you'll filter/sort by exact value, use table-create/table-insert-rows/table-query instead. Ordinary vaults are indexed and shareable \u2014 never store real secrets there; use a secure vault (create-secure-vault) instead, which is never indexed or shareable and is encrypted at rest. Requires write scope.",
10684
+ "description": "Create or deliberately edit one note at a stable vault+path. On an existing note, first call memory-get, merge the requested change into its full body, and pass that complete body plus baseRevision: content is replace-all, while supplied props patch the stored props. A conflict returns the current body for reconciliation; never retry the stale full body unchanged. Use purpose-built tools instead of rewriting system-managed Agent Inbox, optimizer, or channel backing notes. For normal new People, Organizations, Deals, Projects, Tasks, or Communication records, use prepare-memory-write then memory-capture. For row-shaped datasets use table tools. Ordinary vaults are indexed and shareable; store real secrets only in a secure vault. Requires write scope.",
10507
10685
  "inputSchema": {
10508
10686
  "type": "object",
10509
10687
  "properties": {
@@ -10526,7 +10704,7 @@ var MCP_TOOL_CATALOG = [
10526
10704
  "content": {
10527
10705
  "type": "string",
10528
10706
  "minLength": 1,
10529
- "description": "The full note body to store and index for semantic search. Must be non-empty."
10707
+ "description": "The complete note body to store and index. On edit this replaces the prior body, so merge the requested change into the full memory-get content before calling; never pass only the changed fragment."
10530
10708
  },
10531
10709
  "props": {
10532
10710
  "description": "Obsidian note primitives plus vault-specific template fields. On edits, supplied fields patch the stored props instead of replacing the whole object; pass an empty array to deliberately clear a link list. Type/domain/folder also steer routing when no vault is given.",
@@ -10631,7 +10809,7 @@ var MCP_TOOL_CATALOG = [
10631
10809
  "additionalProperties": {}
10632
10810
  },
10633
10811
  "baseRevision": {
10634
- "description": "Revision the edit is based on (from a prior get/put). When provided, the write only applies if the note is still at this revision; otherwise it is rejected as a conflict instead of silently overwriting a concurrent edit. Omit for last-write-wins (fine for solo notes).",
10812
+ "description": "Revision the edit is based on (from memory-get/put). Always supply it when an AI edits an existing note; a mismatch rejects the write and returns current content for reconciliation. Omit only for an intentional new note or explicit last-write-wins migration.",
10635
10813
  "type": "number"
10636
10814
  },
10637
10815
  "tagDescriptions": {
@@ -10662,7 +10840,7 @@ var MCP_TOOL_CATALOG = [
10662
10840
  "name": "memory-search",
10663
10841
  "category": "memory",
10664
10842
  "title": "Hybrid Smart RAG Memory Search",
10665
- "description": "Default Smart RAG search across accessible memory. Form 2-4 focused query variants, combine semantic matches with exact vault/tag/date/kind/type/metadata filters, expand one bounded hop of outgoing links and backlinks around strong seeds, then rerank. Defaults: retrieve/fuse 50 candidates, 8 graph seeds, 5 neighbors per seed, rerank to 30. Graph neighbors are candidates, never automatic winners or links. Before tagging or writing, also call list-memory-tags to inspect the complete vocabulary and reuse existing tags; read strong related notes before selecting links.",
10843
+ "description": "Default first tool whenever the user wants to find, recall, understand, or connect Memory content without an exact vault+path. Hybrid Smart RAG combines 2-4 semantic query variants with exact vault/tag/date/kind/type/metadata matches, expands one bounded graph hop, then reranks. Results are ranked excerpts, never an exhaustive inventory or complete notes: deduplicate by vault/path and call memory-get on strong candidates before answering, summarizing, editing, linking, or writing. Use memory-list for every note, memory-suggest for title-only lookup, and memory-export only for explicit full-vault dumps. Before tagging or writing, also inspect list-memory-tags.",
10666
10844
  "inputSchema": {
10667
10845
  "type": "object",
10668
10846
  "properties": {
@@ -15303,7 +15481,7 @@ var MCP_TOOL_CATALOG = [
15303
15481
  "name": "commons_publish_editorial",
15304
15482
  "category": "commons",
15305
15483
  "title": "Publish Transparent Commons Editorial Edition",
15306
- "description": "Publish a fully authored editorial reading-room edition to the caller-owned Transparent Commons subdomain and return permanent root, archive, and edition URLs. The calling AI must research and author the source-grounded edition first; this tool validates, renders, and persists it. For an existing edition, pass its current baseRevision. Requires an idempotencyKey; this is not the neutral wiki write tool.",
15484
+ "description": "Publish up to 100 fully authored editorial pieces, including optional article/card images, Markdown body images, and collection/article Open Graph images, to the caller-owned Transparent Commons subdomain. The calling AI must research and author the source-grounded edition first; image URLs need alt text and preserved provenance/rights context. The tool validates, renders, persists, and returns permanent root, archive, and edition URLs. Existing editions require current baseRevision. Requires idempotencyKey; this is not the neutral wiki write tool.",
15307
15485
  "inputSchema": {
15308
15486
  "type": "object",
15309
15487
  "properties": {
@@ -15392,6 +15570,40 @@ var MCP_TOOL_CATALOG = [
15392
15570
  "type": "string",
15393
15571
  "minLength": 1,
15394
15572
  "maxLength": 60
15573
+ },
15574
+ "ogImage": {
15575
+ "description": "Optional collection-level Open Graph image. Individual articles may override it.",
15576
+ "type": "object",
15577
+ "properties": {
15578
+ "url": {
15579
+ "type": "string",
15580
+ "format": "uri",
15581
+ "description": "Public HTTP(S) image URL used for the reading-room home page social preview."
15582
+ },
15583
+ "alt": {
15584
+ "type": "string",
15585
+ "minLength": 1,
15586
+ "maxLength": 500,
15587
+ "description": "Accessible description and og:image:alt text."
15588
+ },
15589
+ "width": {
15590
+ "description": "Optional intrinsic width in pixels.",
15591
+ "type": "integer",
15592
+ "exclusiveMinimum": 0,
15593
+ "maximum": 9007199254740991
15594
+ },
15595
+ "height": {
15596
+ "description": "Optional intrinsic height in pixels.",
15597
+ "type": "integer",
15598
+ "exclusiveMinimum": 0,
15599
+ "maximum": 9007199254740991
15600
+ }
15601
+ },
15602
+ "required": [
15603
+ "url",
15604
+ "alt"
15605
+ ],
15606
+ "additionalProperties": false
15395
15607
  }
15396
15608
  },
15397
15609
  "required": [
@@ -15410,7 +15622,7 @@ var MCP_TOOL_CATALOG = [
15410
15622
  },
15411
15623
  "articles": {
15412
15624
  "minItems": 1,
15413
- "maxItems": 40,
15625
+ "maxItems": 100,
15414
15626
  "type": "array",
15415
15627
  "items": {
15416
15628
  "type": "object",
@@ -15475,11 +15687,109 @@ var MCP_TOOL_CATALOG = [
15475
15687
  "minLength": 1,
15476
15688
  "maxLength": 80
15477
15689
  },
15690
+ "image": {
15691
+ "description": "Optional article image shown on cards and above the article body. Markdown images remain supported inside the body.",
15692
+ "type": "object",
15693
+ "properties": {
15694
+ "url": {
15695
+ "type": "string",
15696
+ "format": "uri",
15697
+ "description": "Public HTTP(S) image URL."
15698
+ },
15699
+ "alt": {
15700
+ "type": "string",
15701
+ "minLength": 1,
15702
+ "maxLength": 500,
15703
+ "description": "Required accessible description of the image."
15704
+ },
15705
+ "caption": {
15706
+ "description": "Optional visible caption.",
15707
+ "type": "string",
15708
+ "maxLength": 1e3
15709
+ },
15710
+ "credit": {
15711
+ "description": "Optional visible creator, publisher, or rights credit.",
15712
+ "type": "string",
15713
+ "maxLength": 500
15714
+ },
15715
+ "sourceUrl": {
15716
+ "description": "Optional public HTTP(S) source page for provenance or rights context.",
15717
+ "type": "string",
15718
+ "format": "uri"
15719
+ },
15720
+ "width": {
15721
+ "description": "Optional intrinsic width in pixels.",
15722
+ "type": "integer",
15723
+ "exclusiveMinimum": 0,
15724
+ "maximum": 9007199254740991
15725
+ },
15726
+ "height": {
15727
+ "description": "Optional intrinsic height in pixels.",
15728
+ "type": "integer",
15729
+ "exclusiveMinimum": 0,
15730
+ "maximum": 9007199254740991
15731
+ }
15732
+ },
15733
+ "required": [
15734
+ "url",
15735
+ "alt"
15736
+ ],
15737
+ "additionalProperties": false
15738
+ },
15739
+ "ogImage": {
15740
+ "description": "Optional article-specific social preview image. Defaults to article.image, then site.ogImage.",
15741
+ "type": "object",
15742
+ "properties": {
15743
+ "url": {
15744
+ "type": "string",
15745
+ "format": "uri",
15746
+ "description": "Public HTTP(S) image URL."
15747
+ },
15748
+ "alt": {
15749
+ "type": "string",
15750
+ "minLength": 1,
15751
+ "maxLength": 500,
15752
+ "description": "Required accessible description of the image."
15753
+ },
15754
+ "caption": {
15755
+ "description": "Optional visible caption.",
15756
+ "type": "string",
15757
+ "maxLength": 1e3
15758
+ },
15759
+ "credit": {
15760
+ "description": "Optional visible creator, publisher, or rights credit.",
15761
+ "type": "string",
15762
+ "maxLength": 500
15763
+ },
15764
+ "sourceUrl": {
15765
+ "description": "Optional public HTTP(S) source page for provenance or rights context.",
15766
+ "type": "string",
15767
+ "format": "uri"
15768
+ },
15769
+ "width": {
15770
+ "description": "Optional intrinsic width in pixels.",
15771
+ "type": "integer",
15772
+ "exclusiveMinimum": 0,
15773
+ "maximum": 9007199254740991
15774
+ },
15775
+ "height": {
15776
+ "description": "Optional intrinsic height in pixels.",
15777
+ "type": "integer",
15778
+ "exclusiveMinimum": 0,
15779
+ "maximum": 9007199254740991
15780
+ }
15781
+ },
15782
+ "required": [
15783
+ "url",
15784
+ "alt"
15785
+ ],
15786
+ "additionalProperties": false
15787
+ },
15478
15788
  "markdown": {
15479
15789
  "type": "string",
15480
15790
  "minLength": 1,
15481
15791
  "maxLength": 1e5,
15482
- "description": "Complete article body in Markdown. Use H2/H3 headings for jump links, short paragraphs, concrete examples, and tables only where they improve comparison."
15792
+ "description": "Complete article body in Markdown. Standard Markdown images are allowed with descriptive alt text. Use H2/H3 headings for jump links, short paragraphs, concrete examples, and tables only where they improve comparison."
15483
15793
  }
15484
15794
  },
15485
15795
  "required": [
@@ -15494,7 +15804,7 @@ var MCP_TOOL_CATALOG = [
15494
15804
  ],
15495
15805
  "additionalProperties": false
15496
15806
  },
15497
- "description": "One to forty fully authored articles, with no more than 2,000,000 Markdown bytes combined. Read all in-scope source material before composing them; preserve distinctions, uncertainty, and provenance instead of flattening the corpus."
15807
+ "description": "One to one hundred fully authored articles, with no more than 2,000,000 Markdown bytes combined. Articles may include structured card/hero images, article-specific Open Graph images, and Markdown body images. Read all in-scope source material before composing them; preserve distinctions, uncertainty, image provenance, and rights context instead of flattening the corpus."
15498
15808
  },
15499
15809
  "filename": {
15500
15810
  "description": "Optional download filename. The server always normalizes it to a safe .html filename.",
@@ -15524,7 +15834,7 @@ var MCP_TOOL_CATALOG = [
15524
15834
  "name": "commons_validate_publication",
15525
15835
  "category": "commons",
15526
15836
  "title": "Validate Transparent Commons Publication",
15527
- "description": "Validate a publication name claim or a complete source-grounded editorial edition without writing. Use operation claim before commons_claim_publication and operation publish before commons_publish_editorial. This uses the editorial reading-room contract and checks ownership plus revision conflicts.",
15837
+ "description": "Validate a publication name claim or a complete source-grounded editorial edition without writing. Publish validation accepts up to 100 articles plus structured article/card images, Markdown body images, and collection/article Open Graph images under the editorial reading-room contract. Use operation claim before commons_claim_publication and operation publish before commons_publish_editorial; ownership and revision conflicts are checked.",
15528
15838
  "inputSchema": {
15529
15839
  "type": "object",
15530
15840
  "properties": {
@@ -15622,6 +15932,40 @@ var MCP_TOOL_CATALOG = [
15622
15932
  "type": "string",
15623
15933
  "minLength": 1,
15624
15934
  "maxLength": 60
15935
+ },
15936
+ "ogImage": {
15937
+ "description": "Optional collection-level Open Graph image. Individual articles may override it.",
15938
+ "type": "object",
15939
+ "properties": {
15940
+ "url": {
15941
+ "type": "string",
15942
+ "format": "uri",
15943
+ "description": "Public HTTP(S) image URL used for the reading-room home page social preview."
15944
+ },
15945
+ "alt": {
15946
+ "type": "string",
15947
+ "minLength": 1,
15948
+ "maxLength": 500,
15949
+ "description": "Accessible description and og:image:alt text."
15950
+ },
15951
+ "width": {
15952
+ "description": "Optional intrinsic width in pixels.",
15953
+ "type": "integer",
15954
+ "exclusiveMinimum": 0,
15955
+ "maximum": 9007199254740991
15956
+ },
15957
+ "height": {
15958
+ "description": "Optional intrinsic height in pixels.",
15959
+ "type": "integer",
15960
+ "exclusiveMinimum": 0,
15961
+ "maximum": 9007199254740991
15962
+ }
15963
+ },
15964
+ "required": [
15965
+ "url",
15966
+ "alt"
15967
+ ],
15968
+ "additionalProperties": false
15625
15969
  }
15626
15970
  },
15627
15971
  "required": [
@@ -15640,7 +15984,7 @@ var MCP_TOOL_CATALOG = [
15640
15984
  },
15641
15985
  "articles": {
15642
15986
  "minItems": 1,
15643
- "maxItems": 40,
15987
+ "maxItems": 100,
15644
15988
  "type": "array",
15645
15989
  "items": {
15646
15990
  "type": "object",
@@ -15705,11 +16049,109 @@ var MCP_TOOL_CATALOG = [
15705
16049
  "minLength": 1,
15706
16050
  "maxLength": 80
15707
16051
  },
16052
+ "image": {
16053
+ "description": "Optional article image shown on cards and above the article body. Markdown images remain supported inside the body.",
16054
+ "type": "object",
16055
+ "properties": {
16056
+ "url": {
16057
+ "type": "string",
16058
+ "format": "uri",
16059
+ "description": "Public HTTP(S) image URL."
16060
+ },
16061
+ "alt": {
16062
+ "type": "string",
16063
+ "minLength": 1,
16064
+ "maxLength": 500,
16065
+ "description": "Required accessible description of the image."
16066
+ },
16067
+ "caption": {
16068
+ "description": "Optional visible caption.",
16069
+ "type": "string",
16070
+ "maxLength": 1e3
16071
+ },
16072
+ "credit": {
16073
+ "description": "Optional visible creator, publisher, or rights credit.",
16074
+ "type": "string",
16075
+ "maxLength": 500
16076
+ },
16077
+ "sourceUrl": {
16078
+ "description": "Optional public HTTP(S) source page for provenance or rights context.",
16079
+ "type": "string",
16080
+ "format": "uri"
16081
+ },
16082
+ "width": {
16083
+ "description": "Optional intrinsic width in pixels.",
16084
+ "type": "integer",
16085
+ "exclusiveMinimum": 0,
16086
+ "maximum": 9007199254740991
16087
+ },
16088
+ "height": {
16089
+ "description": "Optional intrinsic height in pixels.",
16090
+ "type": "integer",
16091
+ "exclusiveMinimum": 0,
16092
+ "maximum": 9007199254740991
16093
+ }
16094
+ },
16095
+ "required": [
16096
+ "url",
16097
+ "alt"
16098
+ ],
16099
+ "additionalProperties": false
16100
+ },
16101
+ "ogImage": {
16102
+ "description": "Optional article-specific social preview image. Defaults to article.image, then site.ogImage.",
16103
+ "type": "object",
16104
+ "properties": {
16105
+ "url": {
16106
+ "type": "string",
16107
+ "format": "uri",
16108
+ "description": "Public HTTP(S) image URL."
16109
+ },
16110
+ "alt": {
16111
+ "type": "string",
16112
+ "minLength": 1,
16113
+ "maxLength": 500,
16114
+ "description": "Required accessible description of the image."
16115
+ },
16116
+ "caption": {
16117
+ "description": "Optional visible caption.",
16118
+ "type": "string",
16119
+ "maxLength": 1e3
16120
+ },
16121
+ "credit": {
16122
+ "description": "Optional visible creator, publisher, or rights credit.",
16123
+ "type": "string",
16124
+ "maxLength": 500
16125
+ },
16126
+ "sourceUrl": {
16127
+ "description": "Optional public HTTP(S) source page for provenance or rights context.",
16128
+ "type": "string",
16129
+ "format": "uri"
16130
+ },
16131
+ "width": {
16132
+ "description": "Optional intrinsic width in pixels.",
16133
+ "type": "integer",
16134
+ "exclusiveMinimum": 0,
16135
+ "maximum": 9007199254740991
16136
+ },
16137
+ "height": {
16138
+ "description": "Optional intrinsic height in pixels.",
16139
+ "type": "integer",
16140
+ "exclusiveMinimum": 0,
16141
+ "maximum": 9007199254740991
16142
+ }
16143
+ },
16144
+ "required": [
16145
+ "url",
16146
+ "alt"
16147
+ ],
16148
+ "additionalProperties": false
16149
+ },
15708
16150
  "markdown": {
15709
16151
  "type": "string",
15710
16152
  "minLength": 1,
15711
16153
  "maxLength": 1e5,
15712
- "description": "Complete article body in Markdown. Use H2/H3 headings for jump links, short paragraphs, concrete examples, and tables only where they improve comparison."
16154
+ "description": "Complete article body in Markdown. Standard Markdown images are allowed with descriptive alt text. Use H2/H3 headings for jump links, short paragraphs, concrete examples, and tables only where they improve comparison."
15713
16155
  }
15714
16156
  },
15715
16157
  "required": [
@@ -15724,7 +16166,7 @@ var MCP_TOOL_CATALOG = [
15724
16166
  ],
15725
16167
  "additionalProperties": false
15726
16168
  },
15727
- "description": "One to forty fully authored articles, with no more than 2,000,000 Markdown bytes combined. Read all in-scope source material before composing them; preserve distinctions, uncertainty, and provenance instead of flattening the corpus."
16169
+ "description": "One to one hundred fully authored articles, with no more than 2,000,000 Markdown bytes combined. Articles may include structured card/hero images, article-specific Open Graph images, and Markdown body images. Read all in-scope source material before composing them; preserve distinctions, uncertainty, image provenance, and rights context instead of flattening the corpus."
15728
16170
  },
15729
16171
  "filename": {
15730
16172
  "description": "Optional download filename. The server always normalizes it to a safe .html filename.",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcpscraper-cli",
3
- "version": "0.24.3",
3
+ "version": "0.25.0",
4
4
  "description": "Command-line interface for mcpscraper.dev and memory.mcpscraper.dev",
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.25.3"
22
+ "mcpscraper-sdk": "^0.26.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^22.0.0"