@sellable/mcp 0.1.18 → 0.1.19

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
@@ -83,14 +83,14 @@ The token is provided when you generate it. Use `list_workspaces` +
83
83
  For customer/package installs, use the public installer:
84
84
 
85
85
  ```bash
86
- npx -y @sellable/install@0.1.18 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
86
+ npx -y @sellable/install@0.1.19 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
87
87
  ```
88
88
 
89
89
  If you already have `~/.sellable/config.json`, rerun/verify without rewriting
90
90
  auth:
91
91
 
92
92
  ```bash
93
- npx -y @sellable/install@0.1.18 --host codex
93
+ npx -y @sellable/install@0.1.19 --host codex
94
94
  sellable --verify-only --host codex
95
95
  ```
96
96
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -318,7 +318,8 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
318
318
  strategic choice or the user has not already made the direction obvious. The
319
319
  user-facing choice should be approve/revise language, not "looks good".
320
320
  Approval options should refer to what the user just read, e.g. `Approve this
321
- brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
321
+ brief`, `Revise target`, `Revise offer/proof`, and `Other / custom`.
322
+
322
323
  - After the brief is approved or auto-confirmed, show the next progress line:
323
324
  `Cool. Now I'm going to find people who are both a good fit and likely to
324
325
  reply on LinkedIn. I'll compare source paths by expected volume, likely
@@ -517,6 +518,17 @@ Required behavior:
517
518
  keyword lanes; it does not mean 492 prospects. The source decision must name
518
519
  the actual posts we would use, show why they won, and estimate usable engagers
519
520
  from those posts after headline/sample filtering
521
+ - user-facing source logic must use numbers, not vibes. Never write a percentage
522
+ such as `73% match` without the numerator, denominator, and sample basis, e.g.
523
+ `8 of 11 sampled engagers fit the ICP (73%)`. If the sample is small, say it is
524
+ directional. If an estimate depends on assumptions, show the math: `5 selected
525
+ posts x ~40-80 reachable engagers/post x 25-40% expected fit = ~50-160 likely
526
+ usable leads`.
527
+ - source progress updates should expose the confidence-building numbers as soon
528
+ as they exist: keyword lanes searched, timeframe used, post results by lane,
529
+ finalist posts reviewed, engagers fetched, sampled engagers, sampled fits,
530
+ estimated usable leads, and what is still unknown. Do not wait until the final
531
+ approval packet to show those numbers.
520
532
  - Signals source decisions should prefer fresh posts. Default to posts from the
521
533
  last 30 days, prefer the last 7-14 days when quality is comparable, and call
522
534
  out any older post as a deliberate tradeoff. Do not hide post age inside the
@@ -545,12 +557,14 @@ Required behavior:
545
557
  - validation status: `confirmed`, `rejected`, or `unclear`
546
558
  - confidence
547
559
  - provider path used
560
+ - search lanes tested, with keyword/filter names and the timeframe used
561
+ - post/result counts by lane for discovery sources
548
562
  - supplied source type when applicable (`normal-discovery`,
549
563
  `supplied-linkedin-profiles`, `supplied-domains`, or `existing-lead-list`)
550
564
  - row/domain counts, invalid counts, duplicate counts, and sample method for
551
565
  supplied sources
552
566
  - preview count
553
- - ICP match rate
567
+ - ICP match rate with numerator/denominator and sample basis; never percent-only
554
568
  - volume comparison
555
569
  - expected LinkedIn funnel: likely connection acceptance range, likely reply
556
570
  range, and whether the estimate is sample-backed, historical, founder-supplied,
@@ -560,6 +574,11 @@ Required behavior:
560
574
  sampled engager count per selected post, sampled fit count per selected post,
561
575
  estimated usable engagers per selected post, and why each selected post is
562
576
  better than discarded posts
577
+ - for Signals-first paths: total raw post results by lane, number of finalist
578
+ posts reviewed, number of selected posts, total engagers fetched, deduped
579
+ sampled people count, sampled fit count, and the estimated likely usable people
580
+ range. Explicitly distinguish `posts found`, `engagers sampled`, and `usable
581
+ people estimated`.
563
582
  - source decision: best path, why it won, pros, cons/tradeoffs, and discarded
564
583
  source paths with the reason each lost
565
584
  - repeated false-positive patterns
@@ -571,6 +590,7 @@ For normal LinkedIn discovery, `lead-review.md` must include these
571
590
  customer-visible sections with literal headings:
572
591
 
573
592
  - `## Source Decision`
593
+ - `## Evidence Snapshot`
574
594
  - `## Selected Signal Posts` for Signals-first campaigns
575
595
  - `## Expected LinkedIn Funnel`
576
596
  - `## Sample Leads` for Signals-first campaigns
@@ -591,6 +611,17 @@ table with one row per selected or finalist post:
591
611
  - estimated usable leads
592
612
  - why use / why discard
593
613
 
614
+ `## Evidence Snapshot` must include a compact numbers-first table:
615
+
616
+ - source lane / keyword or filter
617
+ - timeframe searched
618
+ - raw results found
619
+ - finalist posts or preview rows reviewed
620
+ - sampled people
621
+ - sampled fits, shown as `n/N (%)`
622
+ - estimated usable people
623
+ - confidence note (`sample-backed`, `directional`, or `needs more sample`)
624
+
594
625
  For Signals-first campaigns, `## Sample Leads` must group representative sample
595
626
  rows by source post when possible, so the user can see not just that the search
596
627
  found posts, but which posts produce believable prospects.
@@ -602,10 +633,10 @@ directional range and label it `directional`, not definitive.
602
633
 
603
634
  When showing `lead-review.md` to the user, render the customer-visible sections
604
635
  inline. Do not compress it to a short summary or artifact links only. The
605
- visible response must include `## Source Decision`, `## Expected LinkedIn
606
- Funnel`, `## Pros`, `## Tradeoffs`, and `## Discarded Paths`. For
607
- Signals-first campaigns it must also include `## Selected Signal Posts` and
608
- `## Sample Leads`.
636
+ visible response must include `## Source Decision`, `## Evidence Snapshot`,
637
+ `## Expected LinkedIn Funnel`, `## Pros`, `## Tradeoffs`, and `## Discarded
638
+ Paths`. For Signals-first campaigns it must also include `## Selected Signal
639
+ Posts` and `## Sample Leads`.
609
640
 
610
641
  For supplied profile CSVs and existing lead lists, `lead-review.md` must not
611
642
  describe a generic TAM estimate or pretend the rows came from Sales Nav/Prospeo
@@ -79,6 +79,23 @@ Before a brief approval, the user should see:
79
79
  - risks / assumptions
80
80
  - what happens after approval
81
81
 
82
+ For lead-source decisions, confidence comes from concrete counts. Do not say
83
+ "strong sample", "73% match", or "meaningful concentration" without showing the
84
+ sample size and what was counted. Prefer:
85
+
86
+ ```text
87
+ I searched 4 signal lanes over the last 30 days. The best 5 posts produced 62
88
+ sampled engagers; 31 looked like real ICP fits, so I’d treat this as directional
89
+ 50% sample fit, not a guaranteed audience. That gives us roughly 150-300 likely
90
+ usable people if the remaining engagers behave similarly.
91
+ ```
92
+
93
+ Avoid:
94
+
95
+ ```text
96
+ The sample passed roughly 73% headline fit.
97
+ ```
98
+
82
99
  Good:
83
100
 
84
101
  ```text
@@ -277,6 +277,10 @@
277
277
  "likely reply rate",
278
278
  "signal quality",
279
279
  "tradeoffs",
280
+ "search lanes",
281
+ "timeframe",
282
+ "sample size",
283
+ "estimated usable leads",
280
284
  "source decision + sample",
281
285
  "before anything goes live"
282
286
  ],
@@ -362,6 +366,7 @@
362
366
  "artifact": "lead-review.md",
363
367
  "renderInlineSections": [
364
368
  "## Source Decision",
369
+ "## Evidence Snapshot",
365
370
  "## Selected Signal Posts",
366
371
  "## Expected LinkedIn Funnel",
367
372
  "## Sample Leads",
@@ -377,9 +382,21 @@
377
382
  "engagement or estimated engagers",
378
383
  "sampled engagers",
379
384
  "sampled fits",
385
+ "sampled fits as n/N",
380
386
  "estimated usable leads",
381
387
  "why use or discard"
382
388
  ],
389
+ "evidenceSnapshotRequiredFields": [
390
+ "source lane or keyword",
391
+ "timeframe searched",
392
+ "raw results found",
393
+ "finalist posts or preview rows reviewed",
394
+ "sampled people",
395
+ "sampled fits as n/N (%)",
396
+ "estimated usable people",
397
+ "confidence note"
398
+ ],
399
+ "forbidPercentOnlyFitRates": true,
383
400
  "doNotCompressToSummaryOnly": true,
384
401
  "doNotRenderArtifactLinksOnly": true
385
402
  },