@sellable/mcp 0.1.88 → 0.1.90

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.
@@ -2350,7 +2350,7 @@ export async function selectPromisingPosts(input) {
2350
2350
  selectedCount: selectionResult.selectedCount,
2351
2351
  unselectedCount: selectionResult.unselectedCount,
2352
2352
  criteriaCount: selectionResult.criteriaCount,
2353
- message: `Selected ${selectionResult.selectedCount} posts with ${selectionResult.criteriaCount} ICP criteria (persisted). Ask the user to confirm, then call import_leads with provider: "signal-discovery". Criteria are already saved to the campaign.`,
2353
+ message: `Selected ${selectionResult.selectedCount} posts with ${selectionResult.criteriaCount} ICP criteria (persisted). Criteria are already saved to the campaign. If the user has already approved the lead-source decision for create-campaign-v2, call import_leads with provider: "signal-discovery", confirmed: true, and the approved bounded targetLeadCount. Otherwise ask the user to confirm before importing.`,
2354
2354
  };
2355
2355
  }
2356
2356
  export async function setHeadlineICPCriteria(input) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.88",
3
+ "version": "0.1.90",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -616,6 +616,12 @@ claims as setup proof options unless the user supplied verified benchmark data
616
616
  for this exact workspace/sender. If such claims appear in research, label them
617
617
  as unavailable/unsupported and use founder/operator credibility, product
618
618
  capability, or verified customer proof instead.
619
+ This is a hard guardrail for both option labels and option descriptions: never
620
+ write setup proof option text with numeric outcome language such as `25% reply`,
621
+ `25%-reply`, `reply-rate`, `meeting-rate`, `pipeline`, `revenue`, or `ROI`
622
+ unless that exact benchmark is verified for this workspace/sender. If a profile
623
+ or case study contains that language, strip the number and convert the option to
624
+ non-quantified founder/operator credibility or product capability.
619
625
 
620
626
  Ask the lead-source question as the last question in the first strategy
621
627
  batch, after buyer, offer/ask, and proof/safety are understood. Frame supplied
@@ -218,6 +218,9 @@ campaignOfferId, confirmed: true })` -> `search_signals({ campaignOfferId,
218
218
  selectionMode: "replace", selections, headlineICPCriteria })` ->
219
219
  `import_leads({ campaignOfferId, provider: "signal-discovery",
220
220
  targetLeadCount: importLimit })`.
221
+ Source approval is the explicit confirmation for this bounded review
222
+ batch; do not ask for a second yes/no gate between
223
+ `select_promising_posts` and `import_leads`.
221
224
  - Sales Nav: `get_provider_prompt({ provider: "sales-nav", campaignOfferId,
222
225
  confirmed: true })` -> rebuild/verify filter IDs -> `search_sales_nav({
223
226
  campaignOfferId, filters, confirmed: true })` -> `import_leads({
@@ -364,8 +364,18 @@ set_headline_icp_criteria({
364
364
  ### import_leads
365
365
 
366
366
  Start scraping and populate a lead list. **Only call after explicit user confirmation.**
367
- Never call `import_leads` in the same turn as `select_promising_posts`.
368
- Ask a clear yes/no question and wait for the user to say **yes**.
367
+ For standalone Signal Discovery use, never call `import_leads` in the same turn
368
+ as `select_promising_posts`; ask a clear yes/no question and wait for the user
369
+ to say **yes**.
370
+
371
+ For `create-campaign-v2` after the user has already approved the lead-source
372
+ decision, that approval is the explicit confirmation for the bounded review
373
+ batch. In that tail flow, follow `create-campaign-v2-tail`: call
374
+ `select_promising_posts({ campaignOfferId, selectionMode: "replace",
375
+ selections, headlineICPCriteria })`, then call
376
+ `import_leads({ campaignOfferId, provider: "signal-discovery",
377
+ targetLeadCount })` for the approved review batch without asking for another
378
+ yes/no gate. Do not import more than the approved bounded batch.
369
379
 
370
380
  ```json
371
381
  import_leads({
@@ -407,9 +417,15 @@ Then run post-confirm routing in this order:
407
417
  - Recency (≤6 weeks = active LinkedIn users who will see outreach)
408
418
  - **Include 3-5 headline filtering criteria**
409
419
  4. If you are estimating whether Signals is viable before import, fetch engagers for 1-3 promising posts and compute a sampled headline pass rate before estimating reachable leads.
410
- 5. Ask for explicit confirmation to import leads (e.g., "Does this look right? Should I import leads now?")
411
- 6. If user confirms, call `import_leads`. If not, refine selections/criteria and ask again.
412
- 7. When the lead list finishes and the user confirms it looks good, call `confirm_lead_list`.
420
+ 5. Standalone Signal Discovery flow: ask for explicit confirmation to import
421
+ leads (e.g., "Does this look right? Should I import leads now?").
422
+ `create-campaign-v2` tail flow: if the user already approved the source
423
+ decision, that approval is the import confirmation for the bounded review
424
+ batch; do not ask again.
425
+ 6. If confirmation exists, call `import_leads`. If not, refine
426
+ selections/criteria and ask again.
427
+ 7. When the lead list finishes and the user confirms it looks good, call
428
+ `confirm_lead_list`.
413
429
  </search_flow>
414
430
 
415
431
  <selection_rules>
@@ -490,6 +506,8 @@ select_promising_posts({
490
506
  1. Search signals (Round 1) → Get raw post data
491
507
  2. (Optional) Search signals (Round 2) → More keywords, more posts
492
508
  3. Select `selectionTarget` promising posts with headlineICPCriteria
493
- 4. Ask the user to confirm before importing leads
494
- 5. If user confirms, call `import_leads`
509
+ 4. Standalone flow: ask the user to confirm before importing leads.
510
+ `create-campaign-v2` after source approval: continue without a second
511
+ import confirmation gate.
512
+ 5. If confirmation exists, call `import_leads`
495
513
  </correct_flow>