@sellable/mcp 0.1.48 → 0.1.50

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.48",
3
+ "version": "0.1.50",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -92,14 +92,17 @@ clear business decisions, tradeoffs, and approval gates. Use product language:
92
92
  When explaining lead-source decisions, show the concrete counts behind the
93
93
  logic: lanes searched, timeframe, raw result counts, finalist posts or preview
94
94
  rows, sampled people, sampled fits as n/N (%), estimated usable people, and the
95
- confidence basis. Never show a percent like "73% match" without the numerator,
96
- denominator, and sample basis.
95
+ confidence basis. Break estimates out by provider/source angle in bullet form
96
+ instead of showing only one raw total. Each angle should show raw pool, sampled
97
+ fits as n/N, estimated good-fit range after cleanup, expected reply-rate range,
98
+ and confidence basis. Never show a percent like "73% match" without the
99
+ numerator, denominator, and sample basis.
97
100
 
98
101
  Every approval gate must include artifact access after the readable inline
99
102
  content. Show an `Open artifact:` line with the one key clickable markdown link
100
103
  for that stage. Do not show raw filesystem paths unless links cannot be created
101
104
  or the user asks. Do this for brief approval, lead-source approval/review,
102
- lead-filter review, message review, sequence/settings, and final approval
105
+ lead-filter review, message review, and final approval
103
106
  packet. The link is for deeper inspection; never use it as a substitute for
104
107
  showing the decision in chat.
105
108
 
@@ -56,7 +56,6 @@ Validated draft directory:
56
56
  lead-review.md
57
57
  lead-sample.json
58
58
  lead-filter.md
59
- sequence-settings.md
60
59
  message-prep.md # optional speed artifact
61
60
  message-candidate-drafts.md # optional provisional message artifact
62
61
  message-validation.md
@@ -139,9 +138,9 @@ Validated draft directory:
139
138
  content. Show a short `Open artifact:` line with the one key clickable
140
139
  markdown link for that stage. Do not show raw filesystem paths unless links
141
140
  cannot be created or the user asks. Do this for brief approval, lead-source
142
- approval/review, lead-filter review, message review, sequence/settings, and
143
- final approval packet. Do not use the link as a substitute for rendering the
144
- decision in chat; links are for deeper inspection.
141
+ approval/review, lead-filter review, message review, and final approval
142
+ packet. Do not use the link as a substitute for rendering the decision in
143
+ chat; links are for deeper inspection.
145
144
  - Do not treat the active Sellable workspace as the campaign subject. The
146
145
  workspace only tells you where the campaign will be saved. Before buyer, CTA,
147
146
  proof, or source questions, identify two things:
@@ -329,7 +328,7 @@ me`, `I’ll paste a different sender profile`, and `Other / custom`.
329
328
  Campaign brief
330
329
 
331
330
  Target:
332
- ...
331
+ ... (include concrete role/title names, not just a broad persona)
333
332
 
334
333
  Core pain:
335
334
  ...
@@ -423,10 +422,6 @@ should test for this campaign. Those can run in parallel and usually take
423
422
  - `lead-review.md` and `lead-sample.json` are the required outputs of `find leads`.
424
423
  - `lead-filter.md` is the primary output of `filter leads`.
425
424
  - `rubric.json` is optional and secondary to `lead-filter.md`.
426
- - `sequence-settings.md` is a cheap pre-mint preview artifact. It summarizes
427
- recommended sequence/settings for the user's approval packet. It must not call
428
- sequence tools or rerun research; actual sequence attachment still happens
429
- after campaign creation via `attach_recommended_sequence`.
430
425
  - `message-prep.md` is an optional speed artifact produced by the explicit
431
426
  message path after find-leads. It can prepare proof inventory, buyer
432
427
  objections, CTA options, gold-standard strategy maps, and candidate angles
@@ -696,12 +691,17 @@ table with one row per selected or finalist post:
696
691
  `## Evidence Snapshot` must include a compact numbers-first table:
697
692
 
698
693
  - source lane / keyword or filter
694
+ - provider/source angle label, e.g. `Signals / AI outbound posts`,
695
+ `Sales Nav / active SaaS founders + GTM leaders`, or
696
+ `Prospeo / domain-filtered agencies`
699
697
  - timeframe searched
700
698
  - raw results found
701
699
  - finalist posts or preview rows reviewed
702
700
  - sampled people
703
701
  - sampled fits, shown as `n/N (%)`
704
702
  - estimated usable people
703
+ - estimated good-fit range after cleanup
704
+ - expected reply-rate range
705
705
  - confidence note (`sample-backed`, `directional`, or `needs more sample`)
706
706
 
707
707
  For Signals-first campaigns, `## Sample Leads` must group representative sample
@@ -719,8 +719,9 @@ chat, not the full evidence table. The visible response must include:
719
719
  - `Lead source decision`
720
720
  - `Chosen source`
721
721
  - `Why it won`
722
- - `Key numbers` with raw volume, sampled fit rate as `n/N`, estimated usable
723
- leads, expected connection acceptance range, and expected reply rate range
722
+ - `Quick numbers` as bullet points, with one provider/source angle per bullet.
723
+ Each bullet must include raw volume, sampled fit rate as `n/N`, estimated
724
+ good-fit range after cleanup, and expected reply-rate range when available.
724
725
  - `Sample leads` with 3-5 representative `Name — Title, Company` rows
725
726
  - `Tradeoff`
726
727
  - `Open artifact: lead-review.md`
@@ -729,6 +730,20 @@ Keep `## Evidence Snapshot`, selected posts, discarded paths, full sample rows,
729
730
  and `lead-sample.json` details in artifacts. Do not show raw filesystem paths
730
731
  unless links cannot be created or the user asks.
731
732
 
733
+ Use this chat shape for the quick-number bullets:
734
+
735
+ ```text
736
+ Quick numbers:
737
+ - Signals / AI outbound posts: 249 posts found. Sampled 40 engagers; 18/40
738
+ looked usable. Estimate: 100-250 good warm fits. Expected reply: 6-12%.
739
+ - Sales Nav / active SaaS founders + GTM leaders: 27,454 active profiles before
740
+ filtering. First 25 had 12 strong/probable fits. Estimate: 300-800 good fits
741
+ after title/company cleanup. Expected reply: 4-9%.
742
+ - Prospeo / domain-filtered agencies: 1,000+ likely contacts if we need scale,
743
+ but weaker LinkedIn activity. Estimate: 500-1,000 contacts. Expected reply:
744
+ 2-5%.
745
+ ```
746
+
732
747
  After the lead source is set, use this progress copy before the parallel
733
748
  filter/message work:
734
749
 
@@ -890,52 +905,25 @@ Keep tokenized templates, token fill basis, rendered examples, good/bad token
890
905
  fill examples, validation notes, and `message-validation.md` details in
891
906
  artifacts.
892
907
 
893
- ## Step 4: Sequence + Settings Preview
894
-
895
- Before the final approval packet, write a cheap `sequence-settings.md` preview.
896
- This is a planning artifact only. Do not call `attach_sequence` or
897
- `attach_recommended_sequence` here, and do not rerun research or message
898
- generation. Actual sequence attachment happens after campaign creation at
899
- `awaiting-user-greenlight`.
900
-
901
- Show this slim chat summary:
902
-
903
- ```text
904
- Sequence + settings
905
-
906
- Recommended sequence:
907
- Recommended LinkedIn sequence based on the connected sender’s tier and limits.
908
-
909
- Review batch:
910
- First review batch only.
911
-
912
- Launch state:
913
- Paused / review-gated. Nothing sends live until final greenlight.
914
-
915
- Safety checks:
916
- Sender and workspace will be checked again before start.
917
-
918
- Open artifact: sequence-settings.md
919
- ```
920
-
921
- ## Step 5: Final Approval Packet
908
+ ## Step 4: Final Approval Packet
922
909
 
923
910
  When showing the final approval packet, render a slim "ready to create" summary
924
911
  in chat. The visible response must include:
925
912
 
926
913
  - `Ready to create campaign`
927
914
  - `Campaign`
928
- - `Target`
915
+ - `Target` with concrete role/title names
929
916
  - `Lead source` with one key metric
930
917
  - `Filter`
931
918
  - `Sample message` with one fully filled sample and no `{{tokens}}`
932
- - `Sequence/settings`
933
919
  - `What approval creates`
934
920
  - `Safety`
935
921
  - `Open artifact: approval-packet.md`
936
922
 
937
923
  Keep tokenized templates, evidence tables, rubrics, validation notes, and long
938
- implementation details in `approval-packet.md`.
924
+ implementation details in `approval-packet.md`. Do not include
925
+ sequence/settings in the final approval packet; sequence attachment and launch
926
+ settings happen after campaign creation and before the later greenlight.
939
927
 
940
928
  ## Tail (MANDATORY TOOL ORDER + Steps 13-16 + Threshold Trips + Hard Rules)
941
929
 
@@ -122,17 +122,32 @@ sampled engagers; 31 looked like real ICP fits, so I’d treat this as direction
122
122
  usable people if the remaining engagers behave similarly.
123
123
  ```
124
124
 
125
- Lead review chat should be short and numeric: chosen source, why it won, raw
126
- volume, sampled fit rate as `n/N`, estimated good fits, expected connection
127
- acceptance, expected reply rate, 3-5 sample leads, and one tradeoff. Full tables
128
- belong in `lead-review.md`.
125
+ Lead review chat should be short and numeric. It must include bullet-pointed
126
+ provider/source-angle estimates, one bullet per angle, so the sourcing logic is
127
+ easy to scan:
128
+
129
+ ```text
130
+ Quick numbers:
131
+ - Signals / AI outbound posts: 249 posts found. Sampled 40 engagers; 18/40
132
+ looked usable. Estimate: 100-250 good warm fits.
133
+ - Sales Nav / active SaaS founders + GTM leaders: 27,454 active profiles before
134
+ filtering. First 25 had 12 strong/probable fits. Estimate: 300-800 good fits.
135
+ - Sales Nav / agencies + GTM consultants: smaller but higher intent. Estimate:
136
+ 150-400 good fits.
137
+ ```
138
+
139
+ Then show chosen source, why it won, expected connection acceptance, expected
140
+ reply rate, 3-5 sample leads, and one tradeoff. Full tables belong in
141
+ `lead-review.md`.
129
142
 
130
143
  Lead filter chat should always show what changed: keep, exclude, why, expected
131
144
  impact, and `Open artifact: lead-filter.md`.
132
145
 
133
- Final approval chat should be a ready-to-create summary: campaign, target, lead
134
- source, filter, sequence/settings, one filled sample message, what approval
135
- creates, and the safety note that nothing sends live until greenlight.
146
+ Final approval chat should be a ready-to-create summary: campaign, target with
147
+ concrete role/title names, lead source, filter, one filled sample message, what
148
+ approval creates, and the safety note that nothing sends live until greenlight.
149
+ Do not include sequence/settings in final approval; that belongs after campaign
150
+ creation.
136
151
 
137
152
  Avoid:
138
153
 
@@ -385,6 +385,7 @@
385
385
  "why use or discard"
386
386
  ],
387
387
  "evidenceSnapshotRequiredFields": [
388
+ "provider/source angle label",
388
389
  "source lane or keyword",
389
390
  "timeframe searched",
390
391
  "raw results found",
@@ -392,12 +393,14 @@
392
393
  "sampled people",
393
394
  "sampled fits as n/N (%)",
394
395
  "estimated usable people",
396
+ "estimated good-fit range after cleanup",
397
+ "expected reply-rate range",
395
398
  "confidence note"
396
399
  ],
397
400
  "forbidPercentOnlyFitRates": true,
398
401
  "requiredArtifactLinks": ["lead-review.md"],
399
402
  "artifactLinkTiming": "before_next_step_or_revision_question",
400
- "chatRenderRule": "Show a slim decision summary only: chosen source, why it won, raw volume, sampled fit rate as n/N, estimated usable leads, expected connection acceptance range, expected reply rate range, 3-5 representative sample leads, and one tradeoff. Keep evidence tables, selected posts, discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
403
+ "chatRenderRule": "Show a slim decision summary only: chosen source, why it won, bullet-pointed Quick numbers with one provider/source angle per bullet, raw volume, sampled fit rate as n/N, estimated good-fit range after cleanup, expected connection acceptance range, expected reply rate range, 3-5 representative sample leads, and one tradeoff. Keep evidence tables, selected posts, discarded paths, full sample rows, and lead-sample.json details in lead-review.md. Do not show plain filesystem paths unless links cannot be created."
401
404
  },
402
405
  {
403
406
  "action": "render_post_lead_parallel_progress",
@@ -727,60 +730,11 @@
727
730
  "watchRequired": false,
728
731
  "waitFor": ["message_approved", "revise_messaging"],
729
732
  "transitions": {
730
- "message_approved": "sequence-settings-preview",
733
+ "message_approved": "approval-packet",
731
734
  "revise_messaging": "message-generation"
732
735
  },
733
736
  "interruptOnly": true
734
737
  },
735
- {
736
- "id": "sequence-settings-preview",
737
- "label": "Sequence and settings preview",
738
- "normalFlow": true,
739
- "resumeOnly": false,
740
- "onEnter": [
741
- {
742
- "action": "write_sequence_settings_preview",
743
- "artifact": "sequence-settings.md",
744
- "requiredInlineMarker": "Status: sequence-settings-preview",
745
- "inputs": ["brief.md", "lead-review.md", "lead-filter.md", "message-review.md"],
746
- "mustBeFast": true,
747
- "doNotCallTailTools": true,
748
- "requiredSections": [
749
- "Recommended sequence",
750
- "Review batch",
751
- "Launch state",
752
- "Safety checks"
753
- ],
754
- "chatRenderRule": "Show a slim sequence/settings summary: recommended LinkedIn sequence based on connected sender tier and limits, first review batch only, paused/review-gated launch state, nothing sends live until final greenlight, and sender/workspace checked again before start. Keep any details in sequence-settings.md. Do not show plain filesystem paths unless links cannot be created."
755
- }
756
- ],
757
- "requiredArtifacts": [
758
- "brief.md",
759
- "lead-review.md",
760
- "lead-filter.md",
761
- "message-review.md",
762
- "message-review-decision.md"
763
- ],
764
- "producesArtifacts": ["sequence-settings.md"],
765
- "allowedTools": ["AskUserQuestion", "request_user_input"],
766
- "doNotAllow": [
767
- "attach_sequence",
768
- "attach_recommended_sequence",
769
- "create_campaign",
770
- "save_rubrics",
771
- "import_leads",
772
- "confirm_lead_list",
773
- "update_campaign",
774
- "queue_cells",
775
- "start_campaign"
776
- ],
777
- "watchRequired": false,
778
- "waitFor": "sequence_settings_ready",
779
- "transitions": {
780
- "sequence_settings_ready": "approval-packet"
781
- },
782
- "interruptOnly": true
783
- },
784
738
  {
785
739
  "id": "approval-packet",
786
740
  "label": "Approval packet",
@@ -796,8 +750,7 @@
796
750
  "lead-filter.md",
797
751
  "message-validation.md",
798
752
  "message-review.md",
799
- "message-review-decision.md",
800
- "sequence-settings.md"
753
+ "message-review-decision.md"
801
754
  ],
802
755
  "optionalFiles": ["rubric.json"]
803
756
  },
@@ -816,14 +769,13 @@
816
769
  "campaign direction",
817
770
  "lead source",
818
771
  "filter",
819
- "sequence and settings",
820
772
  "sample message",
821
773
  "what approval creates"
822
774
  ],
823
775
  "minimumVisibleDetail": "slim_final_approval_summary",
824
776
  "requiredArtifactLinks": ["approval-packet.md"],
825
777
  "artifactLinkTiming": "before_commit_gate_question",
826
- "chatRenderRule": "Show a slim final approval packet only. Include target, lead source with one key metric, filter summary, sequence/settings summary, one fully filled sample message with no {{tokens}}, what approval creates, and safety note that nothing sends live until the review/greenlight step. Keep tokenized templates, evidence tables, rubrics, and validation details in approval-packet.md. Do not show plain filesystem paths unless links cannot be created.",
778
+ "chatRenderRule": "Show a slim final approval packet only. Include target with concrete role/title names, lead source with one key metric, filter summary, one fully filled sample message with no {{tokens}}, what approval creates, and safety note that nothing sends live until the review/greenlight step. Keep tokenized templates, evidence tables, rubrics, and validation details in approval-packet.md. Do not show sequence/settings in final approval; that comes after campaign creation. Do not show plain filesystem paths unless links cannot be created.",
827
779
  "userFacing": true,
828
780
  "doNotUseWords": ["anchor", "validation anchor", "lane"]
829
781
  },
@@ -841,8 +793,7 @@
841
793
  "lead-filter.md",
842
794
  "message-validation.md",
843
795
  "message-review.md",
844
- "message-review-decision.md",
845
- "sequence-settings.md"
796
+ "message-review-decision.md"
846
797
  ],
847
798
  "producesArtifacts": ["approval-packet.md"],
848
799
  "optionalProducesArtifacts": ["customer-roleplay.md"],
@@ -919,12 +870,11 @@
919
870
  "campaign direction",
920
871
  "lead source",
921
872
  "filter",
922
- "sequence and settings",
923
873
  "sample message",
924
874
  "what approval creates"
925
875
  ],
926
876
  "requiredArtifactLinks": ["approval-packet.md"],
927
- "chatRenderRule": "Same slim approval packet as approval-packet. Include one fully filled sample message without tokens. Do not repeat tokenized template or long evidence tables in chat.",
877
+ "chatRenderRule": "Same slim approval packet as approval-packet. Include target with concrete role/title names and one fully filled sample message without tokens. Do not include sequence/settings. Do not repeat tokenized template or long evidence tables in chat.",
928
878
  "artifactLinkTiming": "same_turn_before_commit_question"
929
879
  },
930
880
  {
@@ -61,7 +61,6 @@ message-candidate-drafts.md (optional, generated from find-leads basis rows)
61
61
  message-validation.md
62
62
  message-review.md
63
63
  message-review-decision.md
64
- sequence-settings.md
65
64
  approval-packet.md
66
65
  commit-gate-decision.md
67
66
  ```
@@ -126,19 +126,20 @@ decision, not an internal validation report. Chat should show a slim approval
126
126
  surface only:
127
127
 
128
128
  1. **campaign** — company + sender
129
- 2. **target** — concise ICP summary from `brief.md`
129
+ 2. **target** — concise ICP summary from `brief.md`, including concrete
130
+ role/title names so the user can verify we are aiming at the right buyers
130
131
  3. **lead source** — selected source plus one key metric from `lead-review.md`
131
132
  (for example `17/25 sampled fits`, `520 active profiles`, or estimated usable
132
133
  leads). Put the full evidence table in `lead-review.md`, not chat.
133
134
  4. **filter** — one-line keep/exclude summary from `lead-filter.md`
134
- 5. **sequence/settings** — conservative defaults from `sequence-settings.md`:
135
- recommended sequence, first review batch, paused/review-gated launch state,
136
- nothing sends live until greenlight, sender/workspace checked again before
137
- start
138
- 6. **sample message** — one fully filled sample message with no `{{tokens}}`
139
- 7. **what approval creates** — campaign draft + review batch preparation, not
135
+ 5. **sample message** — one fully filled sample message with no `{{tokens}}`
136
+ 6. **what approval creates** campaign draft + review batch preparation, not
140
137
  live sending
141
138
 
139
+ Do not include sequence/settings in the pre-mint final approval packet. Sequence
140
+ attachment and launch settings happen after campaign creation and before the
141
+ later greenlight.
142
+
142
143
  Keep implementation details, tokenized templates, lead tables, rubric JSON, and
143
144
  validation notes available in `approval-packet.md` and the supporting artifacts.
144
145
  Do not show raw filesystem paths unless links cannot be created or the user asks.
@@ -131,6 +131,18 @@ usable leads after filtering, likely connection acceptance range, likely reply
131
131
  range, and estimate basis. If exact performance data is unavailable, use a
132
132
  directional range and label it `directional`, not definitive.
133
133
 
134
+ `## Evidence Snapshot` and the visible lead-review chat must break estimates out
135
+ by provider/source angle. Do not collapse everything into one raw count. Use
136
+ one row or bullet per angle, for example:
137
+
138
+ - `Signals / AI outbound posts`
139
+ - `Sales Nav / active SaaS founders + GTM leaders`
140
+ - `Sales Nav / agencies + GTM consultants`
141
+ - `Prospeo / domain-filtered agencies`
142
+
143
+ Each angle must show raw pool, sampled fits as `n/N`, estimated good-fit range
144
+ after cleanup, expected reply-rate range, and confidence basis.
145
+
134
146
  `lead-sample.json` must include enough structured lead data for downstream
135
147
  filtering:
136
148