mcp-scraper 0.55.0 → 0.56.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 (36) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +2 -2
  3. package/dist/bin/api-server.cjs +55 -20
  4. package/dist/bin/api-server.cjs.map +1 -1
  5. package/dist/bin/api-server.js +2 -2
  6. package/dist/bin/mcp-scraper-cli.cjs +1 -1
  7. package/dist/bin/mcp-scraper-cli.cjs.map +1 -1
  8. package/dist/bin/mcp-scraper-cli.js +1 -1
  9. package/dist/bin/mcp-scraper-install.cjs +2 -2
  10. package/dist/bin/mcp-scraper-install.cjs.map +1 -1
  11. package/dist/bin/mcp-scraper-install.js +2 -2
  12. package/dist/bin/mcp-stdio-server.cjs +26 -4
  13. package/dist/bin/mcp-stdio-server.cjs.map +1 -1
  14. package/dist/bin/mcp-stdio-server.js +4 -4
  15. package/dist/chunk-245IAJ7R.js +7 -0
  16. package/dist/chunk-245IAJ7R.js.map +1 -0
  17. package/dist/{chunk-WYLIDW4S.js → chunk-JEZW6N2X.js} +27 -5
  18. package/dist/chunk-JEZW6N2X.js.map +1 -0
  19. package/dist/{chunk-PGI2QPFE.js → chunk-LUJYVNO7.js} +2 -2
  20. package/dist/{chunk-PGI2QPFE.js.map → chunk-LUJYVNO7.js.map} +1 -1
  21. package/dist/{chunk-2FL5FXMV.js → chunk-NP66MZ5A.js} +2 -2
  22. package/dist/{chunk-N4LT53JX.js → chunk-WO2SSENO.js} +3 -3
  23. package/dist/{chunk-N4LT53JX.js.map → chunk-WO2SSENO.js.map} +1 -1
  24. package/dist/{extract-bundle-3CRG7FAN.js → extract-bundle-6KYTD55T.js} +3 -3
  25. package/dist/{server-WKBCZ2TH.js → server-SETYJPYO.js} +37 -24
  26. package/dist/{server-WKBCZ2TH.js.map → server-SETYJPYO.js.map} +1 -1
  27. package/dist/{site-extract-repository-QSRPXNMI.js → site-extract-repository-YGNYFTNE.js} +3 -3
  28. package/dist/{worker-W5C6SKZT.js → worker-DTVBN3RQ.js} +2 -2
  29. package/package.json +1 -1
  30. package/dist/chunk-V2QWNGEK.js +0 -7
  31. package/dist/chunk-V2QWNGEK.js.map +0 -1
  32. package/dist/chunk-WYLIDW4S.js.map +0 -1
  33. /package/dist/{chunk-2FL5FXMV.js.map → chunk-NP66MZ5A.js.map} +0 -0
  34. /package/dist/{extract-bundle-3CRG7FAN.js.map → extract-bundle-6KYTD55T.js.map} +0 -0
  35. /package/dist/{site-extract-repository-QSRPXNMI.js.map → site-extract-repository-YGNYFTNE.js.map} +0 -0
  36. /package/dist/{worker-W5C6SKZT.js.map → worker-DTVBN3RQ.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,18 @@ All notable changes to MCP Scraper are documented here. The format is based on [
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.56.0] - 2026-08-16
8
+
9
+ ### Fixed
10
+
11
+ - Transparent Commons entity edits now publish. A missing or stale `baseRevision` previously made the write land as a `pending_review` proposal that nothing in the system could approve, so the edit was parked permanently after charging the caller. Edits apply on top of the current revision and the divergence is recorded on the public contribution ledger.
12
+ - A Commons proposal that is not applied is refunded, so an `always_review` hold no longer costs 10 or 2 Credits for a row that never publishes.
13
+ - `commons_submit_entity`, the validation warnings, the entity profile contract, and the server instructions no longer describe the removed block-on-conflict behavior.
14
+
15
+ ### Added
16
+
17
+ - `commons_get_proposal` reads back one `commons_submit_entity` proposal owned by the calling account, including its review reason and whether it has been applied. The REST route already existed with no tool bound to it.
18
+
7
19
  ## [0.55.0] - 2026-08-14
8
20
 
9
21
  ### Added
package/README.md CHANGED
@@ -90,7 +90,7 @@ Build the branded one-click bundle:
90
90
  npm run build:mcpb
91
91
  ```
92
92
 
93
- The generated bundle is written to `build/mcpb/mcp-scraper-<version>.mcpb` and copied to `public/downloads/` for the hosted download. The current public bundle is `https://mcpscraper.dev/downloads/mcp-scraper.mcpb` (`0.55.0`, SHA-256 `a64b404ab9a260d9fc45206453570fa5bf18f73074673f0021f6cb9d3124fdc3`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, and API-key configuration field from the bundle manifest.
93
+ The generated bundle is written to `build/mcpb/mcp-scraper-<version>.mcpb` and copied to `public/downloads/` for the hosted download. The current public bundle is `https://mcpscraper.dev/downloads/mcp-scraper.mcpb` (`0.56.0`, SHA-256 `72928532db3280859d5d51283b1828acb66911cfb7cbd179ffc7925fd33d0d73`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, and API-key configuration field from the bundle manifest.
94
94
 
95
95
  The MCPB install exposes every tool — web-intelligence plus all `browser_*` tools — through the one `mcp-scraper` server.
96
96
 
@@ -248,7 +248,7 @@ The `mcp-scraper` server (and the MCPB bundle, which runs it) exposes both secti
248
248
 
249
249
  All MCP tools expose output schemas and return `structuredContent` with the IDs, URLs, CSV paths, transcripts, browser session handles, replay paths, artifacts, recipe fields, or blueprint fields needed by the next step. Browser Agent tools keep a JSON text block for older clients, but structured data is the primary contract. All tools carry MCP annotations; file-writing tools such as replay downloads and annotations state their filesystem side effects.
250
250
 
251
- The canonical tool inventory is generated at `docs/mcp-tool-manifest.generated.json`. The unified server exposes 249 tools: 148 scraper, browser, workflow, billing, and connected-service tools plus 101 durable-memory tools. The scraper-side inventory includes governed Local Sourcebook tools, Transparent Commons entity, linkset, and publication tools, the searchable News Publisher and Editorial Reading Room template workflow, and 24 X-Ray tools for pixel administration, reporting, attribution journeys, campaign links, exports, and scheduled reports. Successful evidence-compiled Local Sourcebook revisions publish automatically to their canonical `localsourcebook.com` category profile and review URLs; administrator controls handle exceptional rejection or unpublishing. Release verification compares the exact local and hosted tool-name sets, not only the count.
251
+ The canonical tool inventory is generated at `docs/mcp-tool-manifest.generated.json`. The unified server exposes 250 tools: 149 scraper, browser, workflow, billing, and connected-service tools plus 101 durable-memory tools. The scraper-side inventory includes governed Local Sourcebook tools, Transparent Commons entity, linkset, and publication tools, the searchable News Publisher and Editorial Reading Room template workflow, and 24 X-Ray tools for pixel administration, reporting, attribution journeys, campaign links, exports, and scheduled reports. Successful evidence-compiled Local Sourcebook revisions publish automatically to their canonical `localsourcebook.com` category profile and review URLs; administrator controls handle exceptional rejection or unpublishing. Release verification compares the exact local and hosted tool-name sets, not only the count.
252
252
 
253
253
  For contract parity, stdio and MCPB memory calls invoke the matching public tool on the hosted MCP Scraper `/mcp` endpoint. The hosted aggregate runtime owns MCP Scraper-specific billing, scheduling, credential, and in-process cutover policy; its internal `/memory/mcp-call` bridge is a fallback to the standalone memory service, not the public stdio execution path. Direct `mcp-memory` OAuth and stdio clients continue to use `memory.mcpscraper.dev` and must be verified as a separate dependent release surface.
254
254
 
@@ -12455,8 +12455,8 @@ var init_product_contract_generated = __esm({
12455
12455
  "freeSignupCredits": 0
12456
12456
  },
12457
12457
  "inventory": {
12458
- "totalTools": 249,
12459
- "scraperTools": 148,
12458
+ "totalTools": 250,
12459
+ "scraperTools": 149,
12460
12460
  "memoryTools": 101
12461
12461
  },
12462
12462
  "concurrencyPack": {
@@ -44624,7 +44624,7 @@ var PACKAGE_VERSION;
44624
44624
  var init_version = __esm({
44625
44625
  "src/version.ts"() {
44626
44626
  "use strict";
44627
- PACKAGE_VERSION = "0.55.0";
44627
+ PACKAGE_VERSION = "0.56.0";
44628
44628
  }
44629
44629
  });
44630
44630
 
@@ -44690,7 +44690,7 @@ seam is noted so you can chain them.
44690
44690
  prepare-memory-write: it returns the live entity profile contract, duplicate candidates, tag reuse/review/create
44691
44691
  guidance, recommended sections, optional sections, and heading guidance before any write occurs.
44692
44692
  - Validate a composed entity without writing -> **commons_validate_entity**. Use it after composing and before submit
44693
- to catch missing featured images, missing source/body evidence, duplicate conflicts, revision problems, and
44693
+ to catch missing featured images, missing source/body evidence, duplicate candidates, and
44694
44694
  unsupported placeholder sections.
44695
44695
  - Create or edit a public wiki entity -> **commons_submit_entity**. This is a governed proposal write,
44696
44696
  not direct rendered HTML editing. Normal workflow is prepare -> validate -> submit. Pick the closest entity type
@@ -44698,6 +44698,9 @@ seam is noted so you can chain them.
44698
44698
  Trail, or PublicArticle.
44699
44699
  Creating a new entity costs 10 Credits; editing an existing entity costs 2 Credits. Preparation, validation,
44700
44700
  search, and reads are free. Reusing the same idempotency key for a retry does not charge twice.
44701
+ Commons is an open wiki. Any account may edit any entity, and every edit publishes immediately and is
44702
+ tracked on the public contribution ledger with the actor, the changed fields, and a before/after snapshot.
44703
+ Pass baseRevision on an edit so the ledger records whether it landed on top of a newer revision.
44701
44704
  The body must be a neutral encyclopedia projection, not a blog post or raw scrape dump. Use H2 for the
44702
44705
  entity's main sections and H3/H4/H5 for subtopics; every heading becomes a public page-menu item.
44703
44706
  Entity profiles are adaptive contracts, not empty templates. Use the prepare output as the guide, but omit
@@ -46450,7 +46453,7 @@ var init_contracts = __esm({
46450
46453
  });
46451
46454
 
46452
46455
  // src/mcp/mcp-tool-schemas.ts
46453
- var import_zod43, WEBSITE_URL_OR_DOMAIN_ERROR, WebsiteUrlOrDomainSchema, HarvestPaaInputSchema, ExtractUrlBaseInputSchema, ExtractUrlInputSchema, ExtractUrlLocalInputSchema, DiffPageBaseInputSchema, DiffPageInputSchema, DiffPageLocalInputSchema, MapSiteUrlsInputSchema, MapWaybackSnapshotsInputSchema, ExtractSiteInputSchema, AuditSiteInputSchema, CheckSiteExportInputSchema, ArchiveReadInputSchema, YoutubeHarvestInputSchema, YoutubeTranscribeInputSchema, FacebookPageIntelInputSchema, FacebookAdSearchInputSchema, RedditThreadInputSchema, RedditTrendingInputSchema, VideoFrameAnalysisInputSchema, VideoFrameAnalysisStatusInputSchema, FacebookAdTranscribeInputSchema, FacebookVideoTranscribeInputSchema, GoogleAdsSearchInputSchema, GoogleAdsPageIntelInputSchema, GoogleAdsTranscribeInputSchema, InstagramProfileContentInputSchema, InstagramMediaDownloadInputSchema, MapsPlaceIntelInputSchema, TrustpilotReviewsInputSchema, G2ReviewsInputSchema, ReviewCardSchema, MapsSearchInputSchema, DirectoryWorkflowInputSchema, LocationMarketsInputSchema, CommonsSearchEntitiesInputSchema, CommonsGetEntityInputSchema, CommonsGetEntityLinksetInputSchema, CommonsFeaturedImageInputSchema, CommonsMediaInputSchema, CommonsCitationInputSchema, CommonsSourceInputSchema, CommonsRelatedLinkInputSchema, CommonsClaimInputSchema, CommonsPrepareEntityInputSchema, CommonsSubmitEntityInputSchema, CommonsValidateEntityInputSchema, CommonsGetEntityLedgerInputSchema, CommonsSaveFilterInputSchema, CommonsListFiltersInputSchema, CommonsListNeedsLinksInputSchema, CommonsGenericOutputSchema, DirectoryWorkflowStatusInputSchema, LocalSourcebookSubmitInputSchema, LocalSourcebookCategorySchema, LocalSourcebookSchemaTypeInputSchema, LocalSourcebookTagCandidateObjectSchema, LocalSourcebookTagDecisionObjectSchema, LocalSourcebookIdentityObjectSchema, GetLocalSourcebookContractInputSchema, ListLocalSourcebookTagsInputSchema, ResolveLocalSourcebookTagsInputSchema, PrepareLocalSourcebookWriteInputSchema, ValidateLocalSourcebookWriteInputSchema, LocalSourcebookCaptureInputSchema, LocalSourcebookSubmissionStatusInputSchema, LocalSourcebookRefreshInputSchema, LocalSourcebookOutputSchema, ArtifactPointerOutputSchema, EditorialReadingRoomSiteSchema, EditorialReadingRoomImageSchema, EditorialReadingRoomArticleSchema, EditorialReadingRoomGuideInputSchema, EditorialReadingRoomGuideOutputSchema, CreateEditorialReadingRoomInputSchema, EditorialReadingRoomArtifactSchema, CreateEditorialReadingRoomOutputSchema, RenewEditorialReadingRoomDownloadInputSchema, RenewEditorialReadingRoomDownloadOutputSchema, CommonsPublicationSubdomainSchema, CommonsPreparePublicationInputSchema, CommonsValidatePublicationInputSchema, CommonsClaimPublicationInputSchema, CommonsPublishEditorialInputSchema, CommonsGetPublicationInputSchema, RankTrackerModeSchema, RankTrackerBlueprintInputSchema, NullableString, MapsSearchAttemptOutput, MapsSearchOutputSchema, DirectoryMapsBusinessOutput, DirectoryCsvArtifactOutput, DirectoryWorkflowOutputSchema, LocationDatasetProvenanceOutput, LocationMarketsOutputSchema, RankTrackerToolPlanOutput, RankTrackerTableOutput, RankTrackerCronJobOutput, RankTrackerBlueprintOutputSchema, OrganicResultOutput, AiOverviewOutput, EntityIdsOutput, HarvestPaaOutputSchema, SearchSerpOutputSchema, PageMediaAssetOutput, PageMediaArtifactOutput, ExtractUrlOutputSchema, DiffPageOutputSchema, ExtractSiteOutputSchema, AuditSiteOutputSchema, CheckSiteExportOutputSchema, ArchiveEntryOutputSchema, ArchiveReadOutputSchema, MapsPlaceIntelOutputSchema, TrustpilotReviewsOutputSchema, G2ReviewsOutputSchema, CreditsInfoOutputSchema, MapSiteUrlsOutputSchema, WaybackCaptureOutputSchema, MapWaybackSnapshotsOutputSchema, YoutubeHarvestOutputSchema, FacebookAdSearchOutputSchema, VideoFrameAnalysisOutputSchema, VideoFrameAnalysisStatusOutputSchema, RedditThreadOutputSchema, RedditTrendingOutputSchema, FacebookPageIntelOutputSchema, GoogleAdsSearchOutputSchema, GoogleAdsPageIntelOutputSchema, TranscriptSignalOutput, FacebookVideoTranscribeOutputSchema, TranscriptChunkOutput, InstagramBrowserOutput, InstagramPaginationOutput, InstagramProfileContentOutputSchema, InstagramMediaTrackOutput, InstagramDownloadOutput, InstagramMediaDownloadOutputSchema, YoutubeTranscribeOutputSchema, FacebookAdTranscribeOutputSchema, GoogleAdsTranscribeOutputSchema, CaptureSerpSnapshotOutputSchema, CaptureSerpPageSnapshotsOutputSchema, CreditsInfoInputSchema, WorkflowIdSchema2, WorkflowListInputSchema, WorkflowSuggestInputSchema, WorkflowRunInputSchema, WorkflowStepInputSchema, WorkflowStatusInputSchema, WorkflowArtifactReadInputSchema, WorkflowRecipeOutput, WorkflowDefinitionOutput, WorkflowArtifactOutput, WorkflowListOutputSchema, WorkflowSuggestOutputSchema, WorkflowRunOutputSchema, WorkflowStepOutputSchema, WorkflowStatusOutputSchema, WorkflowArtifactReadOutputSchema, SearchSerpInputSchema, CaptureSerpSnapshotInputSchema, ScreenshotInputSchema, CaptureSerpPageSnapshotsInputSchema, ReportArtifactReadInputSchema, ReportArtifactReadOutputSchema, ListServiceConnectionsInputSchema, ListServiceConnectionsOutputSchema, TestServiceConnectionInputSchema, TestServiceConnectionOutputSchema, ReadServiceConnectionInputSchema, ReadServiceConnectionOutputSchema, MetaAdCreativeMediaInputSchema, MetaAdCreativeMediaOutputSchema, ImportServiceConnectionToMemoryInputSchema, ImportServiceConnectionToMemoryOutputSchema, DescribeServiceConnectionToolInputSchema, DescribeServiceConnectionToolOutputSchema, ConnectedDataContinuationSchema, ExportConnectedServiceDataInputSchema, ConnectedDataArtifactSchema, ExportConnectedServiceDataOutputSchema, SearchConsoleTableColumnSchema, SearchConsoleTableFilterSchema, ExportSearchConsoleTableDataInputSchema, ExportSearchConsoleTableDataOutputSchema, RenewConnectedDataExportDownloadInputSchema, RenewConnectedDataExportDownloadOutputSchema, CallServiceConnectionActionInputSchema, CallServiceConnectionActionOutputSchema, SetScheduledActionConnectionsInputSchema, SetScheduledActionConnectionsOutputSchema, SlackSendMessageInputSchema, SlackSendMessageOutputSchema, GmailSendMessageInputSchema, GmailSendMessageOutputSchema, GmailSearchContactsInputSchema, GmailSearchContactsOutputSchema, GoogleCalendarCreateEventInputSchema, GoogleCalendarCreateEventOutputSchema, ZoomCreateMeetingInputSchema, ZoomCreateMeetingOutputSchema;
46456
+ var import_zod43, WEBSITE_URL_OR_DOMAIN_ERROR, WebsiteUrlOrDomainSchema, HarvestPaaInputSchema, ExtractUrlBaseInputSchema, ExtractUrlInputSchema, ExtractUrlLocalInputSchema, DiffPageBaseInputSchema, DiffPageInputSchema, DiffPageLocalInputSchema, MapSiteUrlsInputSchema, MapWaybackSnapshotsInputSchema, ExtractSiteInputSchema, AuditSiteInputSchema, CheckSiteExportInputSchema, ArchiveReadInputSchema, YoutubeHarvestInputSchema, YoutubeTranscribeInputSchema, FacebookPageIntelInputSchema, FacebookAdSearchInputSchema, RedditThreadInputSchema, RedditTrendingInputSchema, VideoFrameAnalysisInputSchema, VideoFrameAnalysisStatusInputSchema, FacebookAdTranscribeInputSchema, FacebookVideoTranscribeInputSchema, GoogleAdsSearchInputSchema, GoogleAdsPageIntelInputSchema, GoogleAdsTranscribeInputSchema, InstagramProfileContentInputSchema, InstagramMediaDownloadInputSchema, MapsPlaceIntelInputSchema, TrustpilotReviewsInputSchema, G2ReviewsInputSchema, ReviewCardSchema, MapsSearchInputSchema, DirectoryWorkflowInputSchema, LocationMarketsInputSchema, CommonsSearchEntitiesInputSchema, CommonsGetEntityInputSchema, CommonsGetEntityLinksetInputSchema, CommonsFeaturedImageInputSchema, CommonsMediaInputSchema, CommonsCitationInputSchema, CommonsSourceInputSchema, CommonsRelatedLinkInputSchema, CommonsClaimInputSchema, CommonsPrepareEntityInputSchema, CommonsSubmitEntityInputSchema, CommonsValidateEntityInputSchema, CommonsGetEntityLedgerInputSchema, CommonsGetProposalInputSchema, CommonsSaveFilterInputSchema, CommonsListFiltersInputSchema, CommonsListNeedsLinksInputSchema, CommonsGenericOutputSchema, DirectoryWorkflowStatusInputSchema, LocalSourcebookSubmitInputSchema, LocalSourcebookCategorySchema, LocalSourcebookSchemaTypeInputSchema, LocalSourcebookTagCandidateObjectSchema, LocalSourcebookTagDecisionObjectSchema, LocalSourcebookIdentityObjectSchema, GetLocalSourcebookContractInputSchema, ListLocalSourcebookTagsInputSchema, ResolveLocalSourcebookTagsInputSchema, PrepareLocalSourcebookWriteInputSchema, ValidateLocalSourcebookWriteInputSchema, LocalSourcebookCaptureInputSchema, LocalSourcebookSubmissionStatusInputSchema, LocalSourcebookRefreshInputSchema, LocalSourcebookOutputSchema, ArtifactPointerOutputSchema, EditorialReadingRoomSiteSchema, EditorialReadingRoomImageSchema, EditorialReadingRoomArticleSchema, EditorialReadingRoomGuideInputSchema, EditorialReadingRoomGuideOutputSchema, CreateEditorialReadingRoomInputSchema, EditorialReadingRoomArtifactSchema, CreateEditorialReadingRoomOutputSchema, RenewEditorialReadingRoomDownloadInputSchema, RenewEditorialReadingRoomDownloadOutputSchema, CommonsPublicationSubdomainSchema, CommonsPreparePublicationInputSchema, CommonsValidatePublicationInputSchema, CommonsClaimPublicationInputSchema, CommonsPublishEditorialInputSchema, CommonsGetPublicationInputSchema, RankTrackerModeSchema, RankTrackerBlueprintInputSchema, NullableString, MapsSearchAttemptOutput, MapsSearchOutputSchema, DirectoryMapsBusinessOutput, DirectoryCsvArtifactOutput, DirectoryWorkflowOutputSchema, LocationDatasetProvenanceOutput, LocationMarketsOutputSchema, RankTrackerToolPlanOutput, RankTrackerTableOutput, RankTrackerCronJobOutput, RankTrackerBlueprintOutputSchema, OrganicResultOutput, AiOverviewOutput, EntityIdsOutput, HarvestPaaOutputSchema, SearchSerpOutputSchema, PageMediaAssetOutput, PageMediaArtifactOutput, ExtractUrlOutputSchema, DiffPageOutputSchema, ExtractSiteOutputSchema, AuditSiteOutputSchema, CheckSiteExportOutputSchema, ArchiveEntryOutputSchema, ArchiveReadOutputSchema, MapsPlaceIntelOutputSchema, TrustpilotReviewsOutputSchema, G2ReviewsOutputSchema, CreditsInfoOutputSchema, MapSiteUrlsOutputSchema, WaybackCaptureOutputSchema, MapWaybackSnapshotsOutputSchema, YoutubeHarvestOutputSchema, FacebookAdSearchOutputSchema, VideoFrameAnalysisOutputSchema, VideoFrameAnalysisStatusOutputSchema, RedditThreadOutputSchema, RedditTrendingOutputSchema, FacebookPageIntelOutputSchema, GoogleAdsSearchOutputSchema, GoogleAdsPageIntelOutputSchema, TranscriptSignalOutput, FacebookVideoTranscribeOutputSchema, TranscriptChunkOutput, InstagramBrowserOutput, InstagramPaginationOutput, InstagramProfileContentOutputSchema, InstagramMediaTrackOutput, InstagramDownloadOutput, InstagramMediaDownloadOutputSchema, YoutubeTranscribeOutputSchema, FacebookAdTranscribeOutputSchema, GoogleAdsTranscribeOutputSchema, CaptureSerpSnapshotOutputSchema, CaptureSerpPageSnapshotsOutputSchema, CreditsInfoInputSchema, WorkflowIdSchema2, WorkflowListInputSchema, WorkflowSuggestInputSchema, WorkflowRunInputSchema, WorkflowStepInputSchema, WorkflowStatusInputSchema, WorkflowArtifactReadInputSchema, WorkflowRecipeOutput, WorkflowDefinitionOutput, WorkflowArtifactOutput, WorkflowListOutputSchema, WorkflowSuggestOutputSchema, WorkflowRunOutputSchema, WorkflowStepOutputSchema, WorkflowStatusOutputSchema, WorkflowArtifactReadOutputSchema, SearchSerpInputSchema, CaptureSerpSnapshotInputSchema, ScreenshotInputSchema, CaptureSerpPageSnapshotsInputSchema, ReportArtifactReadInputSchema, ReportArtifactReadOutputSchema, ListServiceConnectionsInputSchema, ListServiceConnectionsOutputSchema, TestServiceConnectionInputSchema, TestServiceConnectionOutputSchema, ReadServiceConnectionInputSchema, ReadServiceConnectionOutputSchema, MetaAdCreativeMediaInputSchema, MetaAdCreativeMediaOutputSchema, ImportServiceConnectionToMemoryInputSchema, ImportServiceConnectionToMemoryOutputSchema, DescribeServiceConnectionToolInputSchema, DescribeServiceConnectionToolOutputSchema, ConnectedDataContinuationSchema, ExportConnectedServiceDataInputSchema, ConnectedDataArtifactSchema, ExportConnectedServiceDataOutputSchema, SearchConsoleTableColumnSchema, SearchConsoleTableFilterSchema, ExportSearchConsoleTableDataInputSchema, ExportSearchConsoleTableDataOutputSchema, RenewConnectedDataExportDownloadInputSchema, RenewConnectedDataExportDownloadOutputSchema, CallServiceConnectionActionInputSchema, CallServiceConnectionActionOutputSchema, SetScheduledActionConnectionsInputSchema, SetScheduledActionConnectionsOutputSchema, SlackSendMessageInputSchema, SlackSendMessageOutputSchema, GmailSendMessageInputSchema, GmailSendMessageOutputSchema, GmailSearchContactsInputSchema, GmailSearchContactsOutputSchema, GoogleCalendarCreateEventInputSchema, GoogleCalendarCreateEventOutputSchema, ZoomCreateMeetingInputSchema, ZoomCreateMeetingOutputSchema;
46454
46457
  var init_mcp_tool_schemas = __esm({
46455
46458
  "src/mcp/mcp-tool-schemas.ts"() {
46456
46459
  "use strict";
@@ -46932,6 +46935,9 @@ var init_mcp_tool_schemas = __esm({
46932
46935
  CommonsGetEntityLedgerInputSchema = {
46933
46936
  idOrSlug: import_zod43.z.string().trim().min(1).max(180).describe("Published entity id or /wiki/ slug whose contribution ledger should be read.")
46934
46937
  };
46938
+ CommonsGetProposalInputSchema = {
46939
+ proposalId: import_zod43.z.string().trim().min(1).max(120).describe("Proposal id returned by commons_submit_entity, in the form commons-proposal-<uuid>.")
46940
+ };
46935
46941
  CommonsSaveFilterInputSchema = {
46936
46942
  name: import_zod43.z.string().trim().min(2).max(80).describe("User-facing name for this MCP personalization filter. Reusing a name updates the saved filter."),
46937
46943
  description: import_zod43.z.string().trim().max(500).optional().describe("Optional note explaining when this filter should be used."),
@@ -50447,7 +50453,7 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
50447
50453
  }, async (input) => executor.commonsValidateEntity(input));
50448
50454
  server.registerTool("commons_submit_entity", {
50449
50455
  title: "Transparent Commons Governed Entity Write",
50450
- description: "Create or propose an edit to a Transparent Commons public wiki entity through the governed MCP Scraper write plane. A new entity costs 10 Credits; an edit to an existing entity costs 2 Credits. Preparation and validation are free, and idempotent retries are not charged twice. This never edits rendered HTML directly. Normal workflow is commons_prepare_entity, compose, commons_validate_entity, then submit. Choose a precise entityType and write a neutral encyclopedia projection with the matching entity structure, not a blog article or raw scrape dump. Use H2 sections and H3/H4/H5 subitems; every heading appears in the public page menu. Omit unsupported sections instead of publishing empty/filler headings. It writes a proposal, records a contribution ledger entry when accepted, and auto-publishes only safe non-conflicting changes with a featured image and source/body evidence. Existing entity edits require baseRevision to auto-publish. Requires idempotencyKey.",
50456
+ description: "Create or propose an edit to a Transparent Commons public wiki entity through the governed MCP Scraper write plane. A new entity costs 10 Credits; an edit to an existing entity costs 2 Credits. Preparation and validation are free, and idempotent retries are not charged twice. This never edits rendered HTML directly. Normal workflow is commons_prepare_entity, compose, commons_validate_entity, then submit. Choose a precise entityType and write a neutral encyclopedia projection with the matching entity structure, not a blog article or raw scrape dump. Use H2 sections and H3/H4/H5 subitems; every heading appears in the public page menu. Omit unsupported sections instead of publishing empty/filler headings. Transparent Commons is an open wiki: any account may edit any entity, and every edit publishes and is recorded on the public contribution ledger. Publishing requires a featured image and body/source evidence. Pass baseRevision when editing so the ledger can show whether the edit was written on top of a newer revision. Requires idempotencyKey.",
50451
50457
  inputSchema: CommonsSubmitEntityInputSchema,
50452
50458
  outputSchema: recordOutputSchema("commons_submit_entity", CommonsGenericOutputSchema),
50453
50459
  annotations: {
@@ -50471,6 +50477,19 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
50471
50477
  openWorldHint: false
50472
50478
  }
50473
50479
  }, async (input) => executor.commonsGetEntityLedger(input));
50480
+ server.registerTool("commons_get_proposal", {
50481
+ title: "Transparent Commons Proposal Status",
50482
+ description: "Read one commons_submit_entity proposal owned by the calling account. Use it when submit returned a proposal that was held for review instead of published, to see the review reason and whether it has since been applied.",
50483
+ inputSchema: CommonsGetProposalInputSchema,
50484
+ outputSchema: recordOutputSchema("commons_get_proposal", CommonsGenericOutputSchema),
50485
+ annotations: {
50486
+ title: "Transparent Commons Proposal Status",
50487
+ readOnlyHint: true,
50488
+ destructiveHint: false,
50489
+ idempotentHint: true,
50490
+ openWorldHint: false
50491
+ }
50492
+ }, async (input) => executor.commonsGetProposal(input));
50474
50493
  server.registerTool("commons_save_filter", {
50475
50494
  title: "Transparent Commons Saved MCP Filter",
50476
50495
  description: "Save or update an account-scoped Commons search filter so one MCP can behave like many personalized reading rooms, trails, source scopes, categories, or tag bundles. Reusing a filter name updates it.",
@@ -51518,6 +51537,9 @@ var init_http_mcp_tool_executor = __esm({
51518
51537
  commonsGetEntityLedger(input) {
51519
51538
  return this.getJson(`/commons/entities/${encodeURIComponent(input.idOrSlug)}/ledger`);
51520
51539
  }
51540
+ commonsGetProposal(input) {
51541
+ return this.getJson(`/commons/proposals/${encodeURIComponent(input.proposalId)}`);
51542
+ }
51521
51543
  commonsSaveFilter(input) {
51522
51544
  return this.call("/commons/filters", input);
51523
51545
  }
@@ -64874,18 +64896,17 @@ async function validateCommonsEntity(input, user) {
64874
64896
  errors.push(`Unsupported placeholder sections must be omitted instead of published: ${placeholderSections.join(", ")}.`);
64875
64897
  }
64876
64898
  if (existing && input.baseRevision === void 0) {
64877
- warnings.push("An existing entity matches this slug or entityId. Submit will create a pending_review proposal unless the current baseRevision is supplied.");
64899
+ warnings.push(`An existing entity matches this slug or entityId. Submit will edit it on top of revision ${existing.revision} and record the edit on the contribution ledger.`);
64878
64900
  }
64879
64901
  if (existing && input.baseRevision !== void 0 && input.baseRevision !== existing.revision) {
64880
- warnings.push(`The matching entity is revision ${existing.revision}; this payload targets revision ${input.baseRevision}. Submit will be held for review.`);
64902
+ warnings.push(`The matching entity is revision ${existing.revision}; this payload targets revision ${input.baseRevision}. Submit will apply on top of revision ${existing.revision} and note the divergence on the ledger.`);
64881
64903
  }
64882
64904
  if (input.reviewPolicy === "always_review") {
64883
64905
  warnings.push("reviewPolicy is always_review, so the proposal will not auto-publish even if the payload is otherwise valid.");
64884
64906
  }
64885
64907
  if (user?.id == null) warnings.push("No authenticated user was supplied to validation; submit still requires API-key authenticated user context.");
64886
64908
  const valid = errors.length === 0;
64887
- const revisionAllowsAutoPublish = !existing || input.baseRevision === existing.revision;
64888
- const autoPublishEligible = valid && revisionAllowsAutoPublish && input.reviewPolicy !== "always_review";
64909
+ const autoPublishEligible = valid && input.reviewPolicy !== "always_review";
64889
64910
  const tagVocabulary = await commonsTagVocabulary();
64890
64911
  return {
64891
64912
  ok: true,
@@ -64945,6 +64966,7 @@ async function submitCommonsEntity(input, user) {
64945
64966
  entity: entity2,
64946
64967
  applied: existingProposal.status === "accepted",
64947
64968
  reviewReason: existingProposal.reviewReason,
64969
+ conflictNote: null,
64948
64970
  publicUrl: entity2?.status === "published" ? publicUrlForSlug(entity2.slug) : null
64949
64971
  };
64950
64972
  }
@@ -65018,7 +65040,7 @@ async function submitCommonsEntity(input, user) {
65018
65040
  ...changedFieldPaths(existing, nextEntity),
65019
65041
  ...normalized.claims !== void 0 ? ["claims"] : []
65020
65042
  ]),
65021
- normalized.changeSummary || (existing ? "Updated Commons entity." : "Created Commons entity."),
65043
+ ledgerSummary(normalized.changeSummary, existing, safety.conflictNote),
65022
65044
  existing ? JSON.stringify({
65023
65045
  ...entityLedgerSnapshot(existing),
65024
65046
  ...normalized.claims !== void 0 ? { claims: existingClaims } : {}
@@ -65041,6 +65063,7 @@ async function submitCommonsEntity(input, user) {
65041
65063
  entity,
65042
65064
  applied: shouldApply,
65043
65065
  reviewReason: safety.reason,
65066
+ conflictNote: safety.conflictNote,
65044
65067
  publicUrl: entity?.status === "published" && shouldApply ? publicUrlForSlug(entity.slug) : null
65045
65068
  };
65046
65069
  }
@@ -65234,8 +65257,8 @@ function commonsDatabaseReport() {
65234
65257
  directPublicHtmlWrites: false,
65235
65258
  normalWorkflow: ["commons_prepare_entity", "commons_validate_entity", "commons_submit_entity"],
65236
65259
  writesCreate: ["commons_proposals", "commons_ledger", "commons_entities when accepted"],
65237
- safeAutoPublish: "New non-conflicting entities with title, description, featured image, and body/source evidence.",
65238
- conflictBehavior: "Existing entity edits require baseRevision. Otherwise the proposal is pending_review.",
65260
+ safeAutoPublish: "Any entity with title, description, featured image, and body/source evidence. Creates and edits both publish.",
65261
+ conflictBehavior: "Anyone may edit any entity. A missing or stale baseRevision still applies on top of the current revision; the divergence is recorded on the contribution ledger.",
65239
65262
  billing: { validationCredits: 0, createCredits: LISTING_WRITE_RATE_POLICY.create.credits, editCredits: LISTING_WRITE_RATE_POLICY.edit.credits }
65240
65263
  },
65241
65264
  searchCorpus: ["title", "disambiguationName", "description", "tags", "keywords", "relatedEntities", "relationship claims", "bodyMarkdown", "sections", "media", "source metadata", "jsonLd"],
@@ -65557,19 +65580,23 @@ function normalizeClaimsForRepository(input) {
65557
65580
  throw new CommonsRepositoryError("invalid_claims", error instanceof Error ? error.message : "Claims are invalid.");
65558
65581
  }
65559
65582
  }
65583
+ function ledgerSummary(changeSummary, existing, conflictNote) {
65584
+ const base = changeSummary || (existing ? "Updated Commons entity." : "Created Commons entity.");
65585
+ return conflictNote ? `${base} ${conflictNote}` : base;
65586
+ }
65560
65587
  function evaluatePublishSafety(input, existing) {
65561
- if (!input.featuredImage?.url) return { safe: false, reason: "A featured image is required before a Commons entity can publish." };
65588
+ if (!input.featuredImage?.url) return { safe: false, reason: "A featured image is required before a Commons entity can publish.", conflictNote: null };
65562
65589
  if (!input.bodyMarkdown.trim() && !input.source.originalUrl && !input.source.resolvedUrl) {
65563
- return { safe: false, reason: "A public entity needs article body text or source evidence before publishing." };
65590
+ return { safe: false, reason: "A public entity needs article body text or source evidence before publishing.", conflictNote: null };
65564
65591
  }
65565
- if (!existing) return { safe: true, reason: null };
65592
+ if (!existing) return { safe: true, reason: null, conflictNote: null };
65566
65593
  if (input.baseRevision === void 0) {
65567
- return { safe: false, reason: "Existing entity edits require baseRevision so agents do not overwrite someone else silently." };
65594
+ return { safe: true, reason: null, conflictNote: `Applied without baseRevision on top of revision ${existing.revision}.` };
65568
65595
  }
65569
65596
  if (input.baseRevision !== existing.revision) {
65570
- return { safe: false, reason: `Existing entity revision is ${existing.revision}; proposal targeted ${input.baseRevision}.` };
65597
+ return { safe: true, reason: null, conflictNote: `Applied on top of revision ${existing.revision}; this edit targeted revision ${input.baseRevision}.` };
65571
65598
  }
65572
- return { safe: true, reason: null };
65599
+ return { safe: true, reason: null, conflictNote: null };
65573
65600
  }
65574
65601
  function buildNextEntity(input) {
65575
65602
  const current = input.existing;
@@ -67373,7 +67400,15 @@ var init_commons_routes = __esm({
67373
67400
  if ("insufficient" in charged) return c.json(charged.insufficient, 402);
67374
67401
  billing = charged;
67375
67402
  const result = await submitCommonsEntity(parsed.data, c.get("user"));
67376
- return c.json({ ok: true, data: result, billing: publicListingWriteBilling(billing) }, result.applied ? 201 : 202);
67403
+ if (!result.applied) {
67404
+ await refundListingWrite(billing, "Transparent Commons proposal was held for review instead of published.").catch(() => null);
67405
+ return c.json({
67406
+ ok: true,
67407
+ data: result,
67408
+ billing: { ...publicListingWriteBilling(billing), charged: false, refunded: !billing.duplicate }
67409
+ }, 202);
67410
+ }
67411
+ return c.json({ ok: true, data: result, billing: publicListingWriteBilling(billing) }, 201);
67377
67412
  } catch (error) {
67378
67413
  if (billing) await refundListingWrite(billing, "Transparent Commons write failed before persistence.").catch(() => null);
67379
67414
  if (error instanceof CommonsRepositoryError) {