@sellable/mcp 0.1.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 (200) hide show
  1. package/.claude-plugin/plugin.json +12 -0
  2. package/.mcp.json +9 -0
  3. package/README.md +355 -0
  4. package/dist/api.d.ts +21 -0
  5. package/dist/api.js +73 -0
  6. package/dist/auth.d.ts +60 -0
  7. package/dist/auth.js +246 -0
  8. package/dist/engage-memory.d.ts +63 -0
  9. package/dist/engage-memory.js +354 -0
  10. package/dist/index-dev.d.ts +2 -0
  11. package/dist/index-dev.js +17 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.js +8 -0
  14. package/dist/server.d.ts +1 -0
  15. package/dist/server.js +499 -0
  16. package/dist/skills.d.ts +11 -0
  17. package/dist/skills.js +97 -0
  18. package/dist/tools/auth.d.ts +30 -0
  19. package/dist/tools/auth.js +124 -0
  20. package/dist/tools/blueprint-commit.d.ts +174 -0
  21. package/dist/tools/blueprint-commit.js +286 -0
  22. package/dist/tools/bootstrap.d.ts +64 -0
  23. package/dist/tools/bootstrap.js +246 -0
  24. package/dist/tools/campaigns.d.ts +589 -0
  25. package/dist/tools/campaigns.js +892 -0
  26. package/dist/tools/cells.d.ts +58 -0
  27. package/dist/tools/cells.js +48 -0
  28. package/dist/tools/context.d.ts +88 -0
  29. package/dist/tools/context.js +271 -0
  30. package/dist/tools/csv-domains.d.ts +73 -0
  31. package/dist/tools/csv-domains.js +464 -0
  32. package/dist/tools/csv-linkedin.d.ts +102 -0
  33. package/dist/tools/csv-linkedin.js +712 -0
  34. package/dist/tools/direct-campaigns.d.ts +240 -0
  35. package/dist/tools/direct-campaigns.js +250 -0
  36. package/dist/tools/engage-bootstrap.d.ts +94 -0
  37. package/dist/tools/engage-bootstrap.js +205 -0
  38. package/dist/tools/engage-discovery.d.ts +78 -0
  39. package/dist/tools/engage-discovery.js +150 -0
  40. package/dist/tools/engage-memory.d.ts +181 -0
  41. package/dist/tools/engage-memory.js +143 -0
  42. package/dist/tools/engage-state.d.ts +72 -0
  43. package/dist/tools/engage-state.js +62 -0
  44. package/dist/tools/enrichment.d.ts +167 -0
  45. package/dist/tools/enrichment.js +174 -0
  46. package/dist/tools/flow-preflight.d.ts +68 -0
  47. package/dist/tools/flow-preflight.js +138 -0
  48. package/dist/tools/framework.d.ts +44 -0
  49. package/dist/tools/framework.js +153 -0
  50. package/dist/tools/interaction-mode.d.ts +27 -0
  51. package/dist/tools/interaction-mode.js +102 -0
  52. package/dist/tools/leads.d.ts +2417 -0
  53. package/dist/tools/leads.js +2307 -0
  54. package/dist/tools/linkedin.d.ts +210 -0
  55. package/dist/tools/linkedin.js +229 -0
  56. package/dist/tools/navigation.d.ts +91 -0
  57. package/dist/tools/navigation.js +381 -0
  58. package/dist/tools/one-off.d.ts +229 -0
  59. package/dist/tools/one-off.js +273 -0
  60. package/dist/tools/processing.d.ts +70 -0
  61. package/dist/tools/processing.js +56 -0
  62. package/dist/tools/prompts.d.ts +211 -0
  63. package/dist/tools/prompts.js +210 -0
  64. package/dist/tools/provider-preflight.d.ts +21 -0
  65. package/dist/tools/provider-preflight.js +59 -0
  66. package/dist/tools/readiness.d.ts +261 -0
  67. package/dist/tools/readiness.js +510 -0
  68. package/dist/tools/rows.d.ts +126 -0
  69. package/dist/tools/rows.js +105 -0
  70. package/dist/tools/rubrics.d.ts +497 -0
  71. package/dist/tools/rubrics.js +681 -0
  72. package/dist/tools/senders.d.ts +44 -0
  73. package/dist/tools/senders.js +69 -0
  74. package/dist/tools/sequencer.d.ts +127 -0
  75. package/dist/tools/sequencer.js +194 -0
  76. package/dist/tools/tables.d.ts +35 -0
  77. package/dist/tools/tables.js +36 -0
  78. package/dist/tools/verify-row.d.ts +36 -0
  79. package/dist/tools/verify-row.js +38 -0
  80. package/dist/tools/workspaces.d.ts +140 -0
  81. package/dist/tools/workspaces.js +139 -0
  82. package/dist/utils/workspace-root.d.ts +1 -0
  83. package/dist/utils/workspace-root.js +39 -0
  84. package/package.json +46 -0
  85. package/skills/building-gtm-tables/SKILL.md +216 -0
  86. package/skills/building-gtm-tables/core/auto-execute.yaml +19 -0
  87. package/skills/building-gtm-tables/core/blueprint-schema.json +72 -0
  88. package/skills/building-gtm-tables/references/brief-to-blueprint.md +334 -0
  89. package/skills/building-gtm-tables/references/column-type-catalog.md +318 -0
  90. package/skills/building-gtm-tables/references/common-blueprints.fixtures.ts +199 -0
  91. package/skills/building-gtm-tables/references/common-blueprints.md +44 -0
  92. package/skills/building-gtm-tables/references/failure-taxonomy.md +197 -0
  93. package/skills/building-gtm-tables/references/uat-seed-prompts.md +37 -0
  94. package/skills/building-gtm-tables/references/verify-loop.md +74 -0
  95. package/skills/campaign-messages/SKILL.md +173 -0
  96. package/skills/campaign-messages/flow.v1.json +75 -0
  97. package/skills/craft-message/SKILL.md +401 -0
  98. package/skills/create-campaign/ARCHITECTURE.md +232 -0
  99. package/skills/create-campaign/DISCUSS.md +296 -0
  100. package/skills/create-campaign/FLOW_ASCII.md +240 -0
  101. package/skills/create-campaign/HOST-PARITY-CHECKLIST.md +49 -0
  102. package/skills/create-campaign/README.md +142 -0
  103. package/skills/create-campaign/SKILL.md +286 -0
  104. package/skills/create-campaign/context/README.md +67 -0
  105. package/skills/create-campaign/context/_TEMPLATE.md +12 -0
  106. package/skills/create-campaign/context/context.md +35 -0
  107. package/skills/create-campaign/context/learnings.md +16 -0
  108. package/skills/create-campaign/context/registry.json +19 -0
  109. package/skills/create-campaign/core/flow.v1.json +217 -0
  110. package/skills/create-campaign/core/policy.md +191 -0
  111. package/skills/create-campaign/core/providers/apollo.json +35 -0
  112. package/skills/create-campaign/core/providers/prospeo.json +34 -0
  113. package/skills/create-campaign/core/providers/registry.json +31 -0
  114. package/skills/create-campaign/core/providers/sales-nav.json +37 -0
  115. package/skills/create-campaign/core/providers/signal-discovery.json +42 -0
  116. package/skills/create-campaign/references/brief-template.md +64 -0
  117. package/skills/create-campaign/references/campaign-quality.md +84 -0
  118. package/skills/create-campaign/references/copy-calibration-examples.md +120 -0
  119. package/skills/create-campaign/references/offer-patterns.md +108 -0
  120. package/skills/create-campaign/references/provider-selection-strategy.md +212 -0
  121. package/skills/create-campaign/references/question-examples.md +167 -0
  122. package/skills/create-campaign/references/token-fill-examples.md +81 -0
  123. package/skills/create-campaign-brief/ARCHITECTURE.md +72 -0
  124. package/skills/create-campaign-brief/DISCUSS.md +64 -0
  125. package/skills/create-campaign-brief/README.md +176 -0
  126. package/skills/create-campaign-brief/SKILL.md +537 -0
  127. package/skills/create-campaign-brief/references/brief-synthesis-rules.md +100 -0
  128. package/skills/create-campaign-brief/references/brief-template.md +220 -0
  129. package/skills/create-campaign-brief/references/campaign-idea-options.md +30 -0
  130. package/skills/create-campaign-brief/references/copy-appendix-template.md +62 -0
  131. package/skills/create-campaign-brief/references/draft-lifecycle.md +23 -0
  132. package/skills/create-campaign-brief/references/examples/MANIFEST.json +89 -0
  133. package/skills/create-campaign-brief/references/examples/briefs/clover.md +223 -0
  134. package/skills/create-campaign-brief/references/examples/briefs/galley.md +222 -0
  135. package/skills/create-campaign-brief/references/examples/briefs/gelee.md +220 -0
  136. package/skills/create-campaign-brief/references/examples/briefs/hey-digital.md +234 -0
  137. package/skills/create-campaign-brief/references/examples/briefs/persona.md +231 -0
  138. package/skills/create-campaign-brief/references/examples/briefs/revvix.md +220 -0
  139. package/skills/create-campaign-brief/references/examples/briefs/sellable-dev.md +220 -0
  140. package/skills/create-campaign-brief/references/examples/briefs/superposition.md +233 -0
  141. package/skills/create-campaign-brief/references/examples/briefs/superpower.md +219 -0
  142. package/skills/create-campaign-brief/references/examples/briefs/westpark-villas.md +220 -0
  143. package/skills/create-campaign-brief/references/icp-lock-question-bank.md +43 -0
  144. package/skills/create-campaign-brief/references/messaging-inputs.md +58 -0
  145. package/skills/create-campaign-brief/references/output-acceptance-rubric.md +62 -0
  146. package/skills/create-campaign-brief/references/phase75-active-runtime-message-pack.md +248 -0
  147. package/skills/create-campaign-brief/references/phase75-canonical-brief-template.md +319 -0
  148. package/skills/create-campaign-brief/references/phase75-good-brief-and-messaging-examples.md +445 -0
  149. package/skills/create-campaign-brief/references/quick-research-protocol.md +39 -0
  150. package/skills/create-campaign-brief/references/reference-sheet-protocol.md +60 -0
  151. package/skills/create-campaign-brief/references/zero-shot-iteration-rules.md +66 -0
  152. package/skills/create-campaign-v2/SKILL.md +1619 -0
  153. package/skills/create-campaign-v2/core/auto-execute.README.md +219 -0
  154. package/skills/create-campaign-v2/core/auto-execute.yaml +121 -0
  155. package/skills/create-campaign-v2/core/flow.v2.json +1643 -0
  156. package/skills/create-campaign-v2/core/policy.md +82 -0
  157. package/skills/create-campaign-v2/references/ai-tells.md +253 -0
  158. package/skills/create-campaign-v2/references/approval-gate-framing.md +346 -0
  159. package/skills/create-campaign-v2/references/draft-lifecycle.md +110 -0
  160. package/skills/create-campaign-v2/references/escalation-ladder.md +119 -0
  161. package/skills/create-campaign-v2/references/filter-leads.md +495 -0
  162. package/skills/create-campaign-v2/references/final-handoff-contract.md +176 -0
  163. package/skills/create-campaign-v2/references/gold-standard-message-examples.md +394 -0
  164. package/skills/create-campaign-v2/references/gold-standard-message-patterns.md +314 -0
  165. package/skills/create-campaign-v2/references/gold-standard-message-validation-example.md +212 -0
  166. package/skills/create-campaign-v2/references/lead-validation-preview.md +172 -0
  167. package/skills/create-campaign-v2/references/parallel-critique-protocol.md +368 -0
  168. package/skills/create-campaign-v2/references/sample-validation-loop.md +289 -0
  169. package/skills/create-campaign-v2/references/step-13-import-leads.md +151 -0
  170. package/skills/create-campaign-v2/references/step-15-re-cascade.md +90 -0
  171. package/skills/create-campaign-v2/references/thomas-revision-filters.md +521 -0
  172. package/skills/create-campaign-v2/references/thomas-variant-selection.md +202 -0
  173. package/skills/create-campaign-v2/references/tier-routing-matrix.md +66 -0
  174. package/skills/create-campaign-v2/references/validation-criteria.md +367 -0
  175. package/skills/create-campaign-v2/references/watch-link-handoff.md +106 -0
  176. package/skills/create-campaign-v2-validation/SKILL.md +296 -0
  177. package/skills/create-post/SKILL.md +1308 -0
  178. package/skills/create-rubric/SKILL.md +251 -0
  179. package/skills/engage/SKILL.md +549 -0
  180. package/skills/engage/core/README.md +23 -0
  181. package/skills/engage/core/proven-searches.json +11 -0
  182. package/skills/engage/core/style-guide.template.md +47 -0
  183. package/skills/engage/core/tracked-people.json +10 -0
  184. package/skills/enrich-prospects/SKILL.md +97 -0
  185. package/skills/find-leads/SKILL.md +467 -0
  186. package/skills/generate-messages/SKILL.md +2361 -0
  187. package/skills/interview/SKILL.md +132 -0
  188. package/skills/interview/core/ENGAGE_STYLE_GUIDE.template.md +54 -0
  189. package/skills/interview/core/ICP.template.md +54 -0
  190. package/skills/interview/core/VOICE_PROFILE.template.md +101 -0
  191. package/skills/providers/apollo.md +520 -0
  192. package/skills/providers/prospeo.md +398 -0
  193. package/skills/providers/sales-nav.md +372 -0
  194. package/skills/providers/signal-discovery.md +495 -0
  195. package/skills/research/SKILL.md +258 -0
  196. package/skills/research/config.json +9 -0
  197. package/skills/research/override.md +13 -0
  198. package/skills/research-prospect/SKILL.md +99 -0
  199. package/skills/research-sender/SKILL.md +158 -0
  200. package/skills/workflow-sequences/SKILL.md +85 -0
@@ -0,0 +1,246 @@
1
+ import { resetApi } from "../api.js";
2
+ import { getAuthStatus } from "./auth.js";
3
+ import { getCampaignContext } from "./context.js";
4
+ import { getCampaignFramework } from "./framework.js";
5
+ import { getSubskillPrompt, listSubskillPrompts, } from "./prompts.js";
6
+ function toErrorMessage(error) {
7
+ return error instanceof Error ? error.message : String(error);
8
+ }
9
+ function toGuidance(check, message) {
10
+ if (check === "auth") {
11
+ return "Run get_auth_status and fix auth/workspace setup before continuing.";
12
+ }
13
+ if (check === "framework") {
14
+ return "Fix framework files and rerun bootstrap_create_campaign.";
15
+ }
16
+ if (check === "resume_context") {
17
+ return "Confirm the campaignId exists and is accessible, then retry bootstrap_create_campaign.";
18
+ }
19
+ if (check === "subskill_catalog") {
20
+ return "Ensure MCP skills are readable from mcp/sellable/skills before retrying.";
21
+ }
22
+ if (check === "create_campaign_subskill") {
23
+ return "Ensure create-campaign subskill exists and can be loaded via get_subskill_prompt.";
24
+ }
25
+ return `Resolve: ${message}`;
26
+ }
27
+ function pushBlockingError(blockingErrors, check, message) {
28
+ blockingErrors.push({
29
+ check,
30
+ message,
31
+ guidance: toGuidance(check, message),
32
+ });
33
+ }
34
+ export const bootstrapToolDefinitions = [
35
+ {
36
+ name: "bootstrap_create_campaign",
37
+ description: "Run canonical create-campaign preflight in deterministic order: auth, framework, optional resume context, and create-campaign subskill loading.",
38
+ inputSchema: {
39
+ type: "object",
40
+ properties: {
41
+ campaignId: {
42
+ type: "string",
43
+ description: "Optional campaign ID. When provided, bootstrap checks resume context and returns resume diagnostics.",
44
+ },
45
+ flowVersion: {
46
+ type: "string",
47
+ enum: ["v1", "v2"],
48
+ description: "Framework flow version (default: v1).",
49
+ },
50
+ includeTableCheck: {
51
+ type: "boolean",
52
+ description: "When resuming with campaignId, include workflow table readiness check in context lookup (default: true).",
53
+ },
54
+ refreshContext: {
55
+ type: "boolean",
56
+ description: "When true and campaignId is provided, force refresh campaign context cache.",
57
+ },
58
+ },
59
+ additionalProperties: false,
60
+ },
61
+ },
62
+ ];
63
+ export async function bootstrapCreateCampaign(input = {}) {
64
+ const flowVersion = input.flowVersion || "v1";
65
+ const campaignId = input.campaignId || null;
66
+ const includeTableCheck = input.includeTableCheck !== false;
67
+ const refreshContext = input.refreshContext === true;
68
+ const requiredChecks = [];
69
+ const blockingErrors = [];
70
+ let auth = null;
71
+ let framework = null;
72
+ let campaignContext = null;
73
+ let subskillCatalog = null;
74
+ let createCampaignSubskill = null;
75
+ const runAuthCheck = async () => {
76
+ let status = await getAuthStatus();
77
+ let retried = false;
78
+ // Some local-dev stacks can return transient 404 HTML during route warmup.
79
+ // Retry once with a fresh API client to avoid false-negative bootstrap blocks.
80
+ if (!status.ok && status.error?.type === "api") {
81
+ retried = true;
82
+ resetApi();
83
+ status = await getAuthStatus();
84
+ }
85
+ return { status, retried };
86
+ };
87
+ try {
88
+ const authCheck = await runAuthCheck();
89
+ auth = authCheck.status;
90
+ const ok = authCheck.status.ok === true;
91
+ requiredChecks.push({
92
+ key: "auth",
93
+ ok,
94
+ blocking: !ok,
95
+ detail: ok
96
+ ? authCheck.retried
97
+ ? "Authenticated with active workspace (after retry)."
98
+ : "Authenticated with active workspace."
99
+ : authCheck.status.error?.message || "Authentication check failed.",
100
+ });
101
+ if (!ok) {
102
+ pushBlockingError(blockingErrors, "auth", authCheck.status.error?.message || "Authentication check failed.");
103
+ }
104
+ }
105
+ catch (error) {
106
+ const message = toErrorMessage(error);
107
+ requiredChecks.push({
108
+ key: "auth",
109
+ ok: false,
110
+ blocking: true,
111
+ detail: message,
112
+ });
113
+ pushBlockingError(blockingErrors, "auth", message);
114
+ }
115
+ try {
116
+ framework = getCampaignFramework({
117
+ flowVersion,
118
+ includePlugins: true,
119
+ });
120
+ requiredChecks.push({
121
+ key: "framework",
122
+ ok: true,
123
+ blocking: false,
124
+ detail: `Framework ${framework.flowVersion} loaded.`,
125
+ });
126
+ }
127
+ catch (error) {
128
+ const message = toErrorMessage(error);
129
+ requiredChecks.push({
130
+ key: "framework",
131
+ ok: false,
132
+ blocking: true,
133
+ detail: message,
134
+ });
135
+ pushBlockingError(blockingErrors, "framework", message);
136
+ }
137
+ if (campaignId) {
138
+ try {
139
+ campaignContext = await getCampaignContext({
140
+ campaignId,
141
+ flowVersion,
142
+ includeTableCheck,
143
+ refresh: refreshContext,
144
+ });
145
+ requiredChecks.push({
146
+ key: "resume_context",
147
+ ok: true,
148
+ blocking: false,
149
+ detail: "Resume context loaded.",
150
+ });
151
+ }
152
+ catch (error) {
153
+ const message = toErrorMessage(error);
154
+ requiredChecks.push({
155
+ key: "resume_context",
156
+ ok: false,
157
+ blocking: true,
158
+ detail: message,
159
+ });
160
+ pushBlockingError(blockingErrors, "resume_context", message);
161
+ }
162
+ }
163
+ else {
164
+ requiredChecks.push({
165
+ key: "resume_context",
166
+ ok: true,
167
+ blocking: false,
168
+ detail: "No campaignId provided; running fresh create flow bootstrap.",
169
+ });
170
+ }
171
+ try {
172
+ subskillCatalog = listSubskillPrompts(50, true, true);
173
+ requiredChecks.push({
174
+ key: "subskill_catalog",
175
+ ok: true,
176
+ blocking: false,
177
+ detail: `${subskillCatalog.total} subskill prompt(s) indexed.`,
178
+ });
179
+ }
180
+ catch (error) {
181
+ const message = toErrorMessage(error);
182
+ requiredChecks.push({
183
+ key: "subskill_catalog",
184
+ ok: false,
185
+ blocking: true,
186
+ detail: message,
187
+ });
188
+ pushBlockingError(blockingErrors, "subskill_catalog", message);
189
+ }
190
+ try {
191
+ const subskillName = flowVersion === "v2" ? "create-campaign-v2" : "create-campaign";
192
+ createCampaignSubskill = getSubskillPrompt(subskillName);
193
+ requiredChecks.push({
194
+ key: "create_campaign_subskill",
195
+ ok: true,
196
+ blocking: false,
197
+ detail: `${subskillName} subskill loaded.`,
198
+ });
199
+ }
200
+ catch (error) {
201
+ const message = toErrorMessage(error);
202
+ requiredChecks.push({
203
+ key: "create_campaign_subskill",
204
+ ok: false,
205
+ blocking: true,
206
+ detail: message,
207
+ });
208
+ pushBlockingError(blockingErrors, "create_campaign_subskill", message);
209
+ }
210
+ const resumeDetected = Boolean(campaignId && campaignContext);
211
+ const safeToProceed = blockingErrors.length === 0;
212
+ const workspaceLabel = auth?.activeWorkspaceName || auth?.activeWorkspaceId;
213
+ const workspaceNotice = workspaceLabel
214
+ ? ` IMPORTANT: Tell the user which workspace is active: "${workspaceLabel}".`
215
+ : "";
216
+ const nextStep = safeToProceed
217
+ ? resumeDetected
218
+ ? `Bootstrap complete.${workspaceNotice} Resume using campaign context, then load ${createCampaignSubskill?.name ?? "create-campaign"} instructions with get_subskill_prompt({ subskillName: "${createCampaignSubskill?.name ?? "create-campaign"}" }).`
219
+ : flowVersion === "v2"
220
+ ? `Bootstrap complete.${workspaceNotice} Load create-campaign-v2 instructions with get_subskill_prompt({ subskillName: "create-campaign-v2" }), then start with the create-campaign-brief interview stage. Do not call create_campaign until the v2 approval gate returns approve.`
221
+ : `Bootstrap complete.${workspaceNotice} Load ${createCampaignSubskill?.name ?? "create-campaign"} instructions with get_subskill_prompt({ subskillName: "${createCampaignSubskill?.name ?? "create-campaign"}" }) and follow that flow before calling create_campaign.`
222
+ : "Bootstrap incomplete. Resolve blockingErrors and rerun bootstrap_create_campaign before provider/search/import tools.";
223
+ // Strip prompt body from createCampaignSubskill — it's loaded via the host
224
+ // skill prompt. Only return metadata to save context tokens.
225
+ const subskillMeta = createCampaignSubskill
226
+ ? {
227
+ name: createCampaignSubskill.name,
228
+ description: createCampaignSubskill.description,
229
+ visibility: createCampaignSubskill.visibility,
230
+ }
231
+ : null;
232
+ return {
233
+ requiredChecks,
234
+ blockingErrors,
235
+ resumeDetected,
236
+ nextStep,
237
+ safeToProceed,
238
+ flowVersion,
239
+ campaignId,
240
+ auth,
241
+ framework,
242
+ campaignContext,
243
+ subskillCatalog,
244
+ createCampaignSubskill: subskillMeta,
245
+ };
246
+ }