@sellable/mcp 0.1.51 → 0.1.52

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.51",
3
+ "version": "0.1.52",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -98,10 +98,12 @@ fits as n/N, estimated good-fit range after cleanup, expected reply-rate range,
98
98
  and confidence basis. Never show a percent like "73% match" without the
99
99
  numerator, denominator, and sample basis.
100
100
 
101
- Use rendered Markdown for campaign brief and lead-source chat, not fenced code
102
- blocks. Keep lines short, use indexed section labels, and translate internal
103
- sourcing terms into plain language. For example, explain "signal discovery" as
104
- "looking for LinkedIn activity from people already talking about this problem."
101
+ Use rendered Markdown for any user review surface, not fenced code blocks. This
102
+ includes campaign brief, lead source, lead filter, message review, and final
103
+ approval. Keep lines short, use indexed section labels and bullets, and
104
+ translate internal sourcing terms into plain language. For example, explain
105
+ "signal discovery" as "looking for LinkedIn activity from people already
106
+ talking about this problem."
105
107
 
106
108
  Every approval gate must include artifact access after the readable inline
107
109
  content. Show an `Open artifact:` line with the one key clickable markdown link
@@ -141,6 +141,29 @@ Validated draft directory:
141
141
  approval/review, lead-filter review, message review, and final approval
142
142
  packet. Do not use the link as a substitute for rendering the decision in
143
143
  chat; links are for deeper inspection.
144
+ - Any time the user is reviewing a list or decision, use rendered Markdown with
145
+ short indexed sections and bullets. Do not use label-plus-paragraph blocks
146
+ like `Key numbers:` followed by one long paragraph. Do not use fenced code
147
+ blocks for review surfaces. The readable chat surface should look like:
148
+
149
+ ```text
150
+ ## Lead source decision
151
+
152
+ **1. Chosen source**
153
+ - Signals, with a strict filter
154
+
155
+ **2. Quick numbers**
156
+ - **Signals:** 491 posts reviewed. 9/40 sampled engagers fit. Estimate:
157
+ 180-260 usable leads.
158
+ - **Sales Nav:** 2,598 active profiles. Preview was broader and noisier.
159
+
160
+ **3. Sample leads**
161
+ - Joyjit Ghosh — Co-Founder, Prospectee.io
162
+ - Ashish Rai — Founder & CEO, ReachHQ
163
+
164
+ **4. Tradeoff**
165
+ - More context, but the filter needs to cut consultants and creators.
166
+ ```
144
167
  - Do not treat the active Sellable workspace as the campaign subject. The
145
168
  workspace only tells you where the campaign will be saved. Before buyer, CTA,
146
169
  proof, or source questions, identify two things:
@@ -854,22 +877,24 @@ Required behavior:
854
877
  - `Implementation Details`
855
878
 
856
879
  When showing the filter result in chat, render a slim summary before moving to
857
- message review:
880
+ message review. Use rendered Markdown, indexed sections, and short bullets:
858
881
 
859
882
  ```text
860
- Lead filter
883
+ ## Lead filter
861
884
 
862
- Keep:
863
- {1-3 lines}
885
+ **1. Keep**
886
+ - {role/title family}
887
+ - {company/context family}
864
888
 
865
- Exclude:
866
- {1-3 lines}
889
+ **2. Exclude**
890
+ - {false-positive family}
891
+ - {false-positive family}
867
892
 
868
- Why:
869
- {sample-backed reason}
893
+ **3. Why**
894
+ - {sample-backed reason}
870
895
 
871
- Expected impact:
872
- {1 line}
896
+ **4. Expected impact**
897
+ - {1 line}
873
898
 
874
899
  Open artifact: lead-filter.md
875
900
  ```
@@ -917,7 +942,8 @@ Continue chunked-read until `hasMore=false`. Treat all chunks as one prompt load
917
942
  Do NOT proceed to Step 4 (message review gate) without loading and following the full generate-messages workflow. `message-validation.md` must prove the full workflow ran (all required sections present + raw sendable Selected Winner) before `message-review.md` can recommend `approve-message`. If the message review or approval packet is ready but the generate-messages prompt was not retrieved in this run, route back to message-generation instead of asking the commit gate.
918
943
 
919
944
  When showing message review in chat, lead with one fully filled sample message,
920
- not the tokenized template. The visible response must include:
945
+ not the tokenized template. Use rendered Markdown, indexed sections, and short
946
+ bullets around the sample. The visible response must include:
921
947
 
922
948
  - `Message review`
923
949
  - `Subject`
@@ -934,7 +960,8 @@ artifacts.
934
960
  ## Step 4: Final Approval Packet
935
961
 
936
962
  When showing the final approval packet, render a slim "ready to create" summary
937
- in chat. The visible response must include:
963
+ in chat. Use rendered Markdown, indexed sections, and short bullets. The visible
964
+ response must include:
938
965
 
939
966
  - `Ready to create campaign`
940
967
  - `Campaign`
@@ -58,6 +58,10 @@ turn anchored to that:
58
58
  Approvals only feel safe when the user can see what they are approving. Before
59
59
  any approve/revise question, show the relevant decision in plain language. For a
60
60
  brief approval, render the slim approval brief, not just a direction summary.
61
+ Any list the user is expected to review should be rendered Markdown with short
62
+ indexed sections and bullets. Avoid label-plus-paragraph blocks like
63
+ `Key numbers:` followed by a dense paragraph, and never use fenced code blocks
64
+ for review surfaces.
61
65
 
62
66
  Every approval should also give the user a way to inspect the source artifact.
63
67
  After the readable inline content, include an `Open artifact:` line with the one
@@ -140,14 +144,18 @@ Then show chosen source, why it won, expected connection acceptance, expected
140
144
  reply rate, 3-5 sample leads, and one tradeoff. Full tables belong in
141
145
  `lead-review.md`.
142
146
 
143
- Lead filter chat should always show what changed: keep, exclude, why, expected
144
- impact, and `Open artifact: lead-filter.md`.
147
+ Lead filter chat should always use indexed rendered Markdown and show what
148
+ changed: keep, exclude, why, expected impact, and
149
+ `Open artifact: lead-filter.md`.
145
150
 
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.
151
+ Message review chat should use indexed rendered Markdown, show one fully filled
152
+ sample message without tokens, and keep tokenized templates in the artifact.
153
+
154
+ Final approval chat should use indexed rendered Markdown for a ready-to-create
155
+ summary: campaign, target with concrete role/title names, lead source, filter,
156
+ one filled sample message, what approval creates, and the safety note that
157
+ nothing sends live until greenlight. Do not include sequence/settings in final
158
+ approval; that belongs after campaign creation.
151
159
 
152
160
  Avoid:
153
161
 
@@ -483,7 +483,7 @@
483
483
  "Expected impact"
484
484
  ],
485
485
  "requiredArtifactLinks": ["lead-filter.md"],
486
- "chatRenderRule": "Show a slim filter summary before message review: who we keep, who we exclude, sample-backed reason, and expected impact. Keep production rubric fields and rubric.json details in lead-filter.md/rubric.json. Do not show plain filesystem paths unless links cannot be created."
486
+ "chatRenderRule": "Show a slim rendered-Markdown filter summary before message review, never a fenced code block. Use ## Lead filter plus indexed sections and short bullets for who we keep, who we exclude, sample-backed reason, and expected impact. Keep production rubric fields and rubric.json details in lead-filter.md/rubric.json. Do not show plain filesystem paths unless links cannot be created."
487
487
  },
488
488
  {
489
489
  "action": "ask_revise_only_if_filter_is_not_confirmed",
@@ -652,7 +652,7 @@
652
652
  "Question: approve-message or revise-messaging?",
653
653
  "Recommendation:"
654
654
  ],
655
- "chatRenderRule": "Show one fully filled sample message with no {{tokens}} before asking for approval. Include subject, sample message, why it should work, one concern or None, recommendation, and Open artifact: message-review.md. Keep tokenized template, token fill basis, rendered examples, good/bad token fill examples, validation notes, and message-validation.md details in artifacts. Do not show plain filesystem paths unless links cannot be created.",
655
+ "chatRenderRule": "Show a slim rendered-Markdown message review, never a fenced code block. Use ## Message review plus indexed sections and short bullets. Show one fully filled sample message with no {{tokens}} before asking for approval. Include subject, sample message, why it should work, one concern or None, recommendation, and Open artifact: message-review.md. Keep tokenized template, token fill basis, rendered examples, good/bad token fill examples, validation notes, and message-validation.md details in artifacts. Do not show plain filesystem paths unless links cannot be created.",
656
656
  "allowedRecommendations": ["approve-message", "revise-messaging"],
657
657
  "judgeAgainst": [
658
658
  "generate-messages rules",
@@ -776,7 +776,7 @@
776
776
  "minimumVisibleDetail": "slim_final_approval_summary",
777
777
  "requiredArtifactLinks": ["approval-packet.md"],
778
778
  "artifactLinkTiming": "before_commit_gate_question",
779
- "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.",
779
+ "chatRenderRule": "Show a slim rendered-Markdown final approval packet only, never a fenced code block. Use ## Ready to create campaign plus indexed sections and short bullets. 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.",
780
780
  "userFacing": true,
781
781
  "doNotUseWords": ["anchor", "validation anchor", "lane"]
782
782
  },
@@ -875,7 +875,7 @@
875
875
  "what approval creates"
876
876
  ],
877
877
  "requiredArtifactLinks": ["approval-packet.md"],
878
- "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.",
878
+ "chatRenderRule": "Same slim rendered-Markdown approval packet as approval-packet, never a fenced code block. Use indexed sections and short bullets. 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.",
879
879
  "artifactLinkTiming": "same_turn_before_commit_question"
880
880
  },
881
881
  {