@sellable/mcp 0.1.258 → 0.1.259
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/dist/index-dev.js +0 -0
- package/dist/index.js +0 -0
- package/dist/server.js +4 -1
- package/dist/tools/csv-dnc.d.ts +36 -0
- package/dist/tools/csv-dnc.js +94 -2
- package/dist/tools/engage-discovery.d.ts +0 -21
- package/dist/tools/engage-discovery.js +9 -136
- package/dist/tools/leads.d.ts +381 -21
- package/dist/tools/leads.js +219 -5
- package/dist/tools/registry.d.ts +207 -23
- package/package.json +1 -1
- package/skills/create-campaign/SKILL.md +6 -0
- package/skills/create-campaign-v2/references/filter-leads.md +2 -0
- package/skills/create-campaign-v2/references/lead-validation-preview.md +2 -0
- package/skills/create-campaign-v2/references/step-13-import-leads.md +3 -1
- package/skills/create-post/SKILL.md +28 -122
- package/skills/create-post/references/gold-standard-post-pack.md +0 -11
- package/skills/create-post/references/hook-research-playbook.md +15 -314
- package/skills/create-post/references/post-file-contract.md +0 -21
- package/skills/create-post/references/post-validation.md +15 -205
- package/skills/find-leads/SKILL.md +6 -0
- package/skills/create-post/references/linkedin-preview-rendering.md +0 -176
- package/skills/research/config.json +0 -9
|
@@ -60,9 +60,8 @@ Do:
|
|
|
60
60
|
|
|
61
61
|
- capture rough ideas, voice memos, freestyle notes, and ad hoc prompts
|
|
62
62
|
- research currently working LinkedIn hooks
|
|
63
|
-
- reverse engineer why source hooks work, what shape to keep, and what not to copy
|
|
64
63
|
- develop premise cards with real story/observed tension and reader value
|
|
65
|
-
-
|
|
64
|
+
- generate hook candidates
|
|
66
65
|
- draft a post body that stays true to the source idea
|
|
67
66
|
- run validation before calling a draft ready
|
|
68
67
|
- save ideas, hook research, drafts, and published records under `~/.sellable/content/linkedin/**`
|
|
@@ -85,7 +84,6 @@ Before drafting, load all required assets with `mcp__sellable__get_subskill_asse
|
|
|
85
84
|
3. `subskillName: "create-post", assetPath: "references/premise-development.md"`
|
|
86
85
|
4. `subskillName: "create-post", assetPath: "references/post-validation.md"`
|
|
87
86
|
5. `subskillName: "create-post", assetPath: "references/gold-standard-post-pack.md"`
|
|
88
|
-
6. `subskillName: "create-post", assetPath: "references/linkedin-preview-rendering.md"`
|
|
89
87
|
|
|
90
88
|
If any required asset is missing, unreadable, truncated without continuation, or internally inconsistent, return:
|
|
91
89
|
|
|
@@ -306,8 +304,7 @@ If local idea capture succeeds but auth/workspace is missing, keep the idea and
|
|
|
306
304
|
|
|
307
305
|
## Step 1: Hook Research
|
|
308
306
|
|
|
309
|
-
Use `references/hook-research-playbook.md
|
|
310
|
-
`references/linkedin-preview-rendering.md`.
|
|
307
|
+
Use `references/hook-research-playbook.md`.
|
|
311
308
|
|
|
312
309
|
If the host supports background agents, delegate the search/fetch/autopsy work
|
|
313
310
|
to one bounded `research-worker` before hook candidate generation. The worker
|
|
@@ -319,16 +316,12 @@ and drafting gate.
|
|
|
319
316
|
The research worker must return a compact packet only:
|
|
320
317
|
|
|
321
318
|
- source examples kept and rejected
|
|
322
|
-
- hook reverse-engineering autopsies: why each source hook works, which shape to
|
|
323
|
-
keep, what not to copy, and what payoff the body must deliver
|
|
324
319
|
- full adapted hook blocks
|
|
325
|
-
- angle territories tested before drafting
|
|
326
320
|
- market belief map: resonating ideas, implicit beliefs, audience wants, resentments, fears, and credible controversy angles
|
|
327
321
|
- premise inputs: real scenes, observed tensions, reader value openings, and proof gaps
|
|
328
|
-
- reach-normalized signal notes, including follower-band fit when available
|
|
329
322
|
- exact phrase patterns and sentence shapes
|
|
330
323
|
- body structures and exact body language moves
|
|
331
|
-
-
|
|
324
|
+
- preview measurements
|
|
332
325
|
- track-person and gold-standard recommendations
|
|
333
326
|
- blocked states or confidence gaps
|
|
334
327
|
|
|
@@ -339,24 +332,18 @@ the exact extracted phrase shapes.
|
|
|
339
332
|
Default flow:
|
|
340
333
|
|
|
341
334
|
1. Convert the idea into 3-8 search keywords.
|
|
342
|
-
2. Call `mcp__sellable__search_engagement_posts` with an explicit multi-month window. Default to `maxAgeDays: 120`, tightening to 30-60 days only when the topic is trend-sensitive.
|
|
343
|
-
3. Shortlist posts by topic fit,
|
|
344
|
-
4. Because search results may only include previews, call `mcp__sellable__fetch_linkedin_posts` for shortlisted authors/profile URLs and match recent posts by URL/activity ID when full text is needed.
|
|
335
|
+
2. Call `mcp__sellable__search_engagement_posts` with an explicit multi-month window. Default to `maxAgeDays: 120`, tightening to 30-60 days only when the topic is trend-sensitive.
|
|
336
|
+
3. Shortlist high-engagement posts by topic fit, hook strength, creator repeat evidence, and weighted engagement quality.
|
|
337
|
+
4. Because search results may only include previews, call `mcp__sellable__fetch_linkedin_posts` for shortlisted authors/profile URLs and match recent posts by URL/activity ID when full text is needed.
|
|
345
338
|
5. If full text cannot be matched, record `full_text_unavailable` and use only the preview. Do not invent missing body details.
|
|
346
|
-
6. Weigh shares/reposts above comments, comments above reactions, and reactions as weak reach unless paired with stronger signals.
|
|
339
|
+
6. Weigh shares/reposts above comments, comments above reactions, and reactions as weak reach unless paired with stronger signals. If shares/reposts are unavailable, record `repost_data_unavailable`.
|
|
347
340
|
7. Penalize lead-magnet or giveaway mechanics unless the user explicitly asks for a lead magnet post.
|
|
348
341
|
8. Build a market belief map before hook generation: what the space is rewarding, what the audience implicitly believes, what they want permission to say, what they resent or fear, what they will argue with, and which controversial angle the user can credibly own. If the user's raw idea is internally coherent but not attached to a live market tension, do not draft from the internal idea alone; present stronger directions or rewrite the draft angle around the external tension.
|
|
349
342
|
9. Extract premise inputs: real story/scene possibilities, observed tensions, useful reader takeaways, and proof gaps. A good hook cannot rescue a premise with no value.
|
|
350
343
|
10. For story posts, extract the story mechanism that made the post work, not just the first line.
|
|
351
344
|
11. Extract hook structures plus specific reusable words, phrases, sentence
|
|
352
345
|
shapes, transitions, and body language patterns.
|
|
353
|
-
12.
|
|
354
|
-
type, click question, promised payoff, specificity anchor, tension opened,
|
|
355
|
-
source shape to keep, source words not to copy, and adaptation rule for the
|
|
356
|
-
user's idea.
|
|
357
|
-
13. Render each kept source hook and adapted hook block through the LinkedIn
|
|
358
|
-
preview rendering contract. Character counts alone are not enough.
|
|
359
|
-
14. Save the research with `mcp__sellable__save_hook_research`.
|
|
346
|
+
12. Save the research with `mcp__sellable__save_hook_research`.
|
|
360
347
|
|
|
361
348
|
Record provenance:
|
|
362
349
|
|
|
@@ -365,29 +352,18 @@ Record provenance:
|
|
|
365
352
|
- search window
|
|
366
353
|
- source post URLs
|
|
367
354
|
- authors/profile URLs
|
|
368
|
-
- author follower counts and target follower-band fit when available
|
|
369
355
|
- engagement totals and available likes/comments/shares breakdown
|
|
370
|
-
- reach-normalized scoring fields and confidence notes
|
|
371
356
|
- creator repeat evidence
|
|
372
357
|
- lead-magnet or engagement-bait penalties
|
|
373
358
|
- story mechanism when relevant
|
|
374
359
|
- full-text match status
|
|
375
|
-
- source hook
|
|
376
|
-
authenticated LinkedIn screenshots, or a search preview
|
|
360
|
+
- source hook preview measurements and whether they came from full text or a search preview
|
|
377
361
|
- selected hook patterns
|
|
378
|
-
- hook reverse-engineering autopsies, including `clickQuestion`,
|
|
379
|
-
`promisedPayoff`, `sourceShapeToKeep`, `sourceWordsNotToCopy`, and
|
|
380
|
-
`adaptationRule`
|
|
381
362
|
- market belief map and selected controversy
|
|
382
363
|
- premise cards and selected premise
|
|
383
364
|
- exact phrase patterns and sentence shapes
|
|
384
365
|
- body structures and body language patterns
|
|
385
366
|
- why each pattern fits the user's idea and voice
|
|
386
|
-
- `whyTheHookCarries`: why the selected hook works from the words, tension, and
|
|
387
|
-
content pattern independent of the source creator's reach
|
|
388
|
-
- `whyTheReachEvidenceIsTrustworthy`: follower-band fit, reach-adjusted score,
|
|
389
|
-
baseline lift, share/comment quality, or why a large-account example is only
|
|
390
|
-
secondary pattern evidence
|
|
391
367
|
|
|
392
368
|
## Step 1.5: Research Learning Report
|
|
393
369
|
|
|
@@ -413,9 +389,6 @@ Research status:
|
|
|
413
389
|
- keywords:
|
|
414
390
|
- full-text coverage:
|
|
415
391
|
- repost/share data:
|
|
416
|
-
- target follower band:
|
|
417
|
-
- reach-normalized winners:
|
|
418
|
-
- big-account examples used only as secondary pattern evidence:
|
|
419
392
|
|
|
420
393
|
Best source examples:
|
|
421
394
|
1. author, URL, engagement, why kept, why not copied
|
|
@@ -436,15 +409,7 @@ Premise cards:
|
|
|
436
409
|
Hook patterns learned:
|
|
437
410
|
1. full adapted hook block
|
|
438
411
|
- source mechanism:
|
|
439
|
-
-
|
|
440
|
-
- click question:
|
|
441
|
-
- promised payoff:
|
|
442
|
-
- source shape to keep:
|
|
443
|
-
- source words not to copy:
|
|
444
|
-
- rendered preview:
|
|
445
|
-
- mobile visible block:
|
|
446
|
-
- desktop visible block:
|
|
447
|
-
- verdict:
|
|
412
|
+
- preview budget:
|
|
448
413
|
- internal question:
|
|
449
414
|
- why it fits / why it does not:
|
|
450
415
|
|
|
@@ -472,9 +437,9 @@ Save recommendations:
|
|
|
472
437
|
- gold-standard candidates:
|
|
473
438
|
|
|
474
439
|
Recommended draft directions:
|
|
475
|
-
1. premise card + hook
|
|
476
|
-
2. premise card + hook
|
|
477
|
-
3. premise card + hook
|
|
440
|
+
1. premise card + hook block + body structure
|
|
441
|
+
2. premise card + hook block + body structure
|
|
442
|
+
3. premise card + hook block + body structure
|
|
478
443
|
```
|
|
479
444
|
|
|
480
445
|
Keep this report concise enough to read, but concrete enough that another agent
|
|
@@ -508,48 +473,17 @@ unless the premise still has concrete reader value.
|
|
|
508
473
|
|
|
509
474
|
## Step 2: Hook Candidates
|
|
510
475
|
|
|
511
|
-
Generate
|
|
512
|
-
|
|
513
|
-
selected.
|
|
514
|
-
|
|
515
|
-
Minimum exploration:
|
|
516
|
-
|
|
517
|
-
- normal drafting: at least 8 distinct angle territories and 24 hook candidates
|
|
518
|
-
- hook-critical requests, "nail the hook," "a ton of angles," or space research:
|
|
519
|
-
at least 12 distinct angle territories and 40 hook candidates
|
|
520
|
-
- smaller set only when the user explicitly asks for fewer options
|
|
521
|
-
|
|
522
|
-
Angle territories must be genuinely different. Use options such as enemy/tool
|
|
523
|
-
contrast, hidden asset, first-person build proof, workflow reveal, contrarian
|
|
524
|
-
category claim, mistake/confession, market timing, operator pain,
|
|
525
|
-
asset/free-reveal without comment bait, specific person/company signal,
|
|
526
|
-
before/after transformation, and question hook.
|
|
476
|
+
Generate at least 12 hook candidates from the selected premise unless the user
|
|
477
|
+
requested a smaller set. Do not generate hooks directly from the raw idea before
|
|
478
|
+
the premise is selected.
|
|
527
479
|
|
|
528
480
|
Each hook must include:
|
|
529
481
|
|
|
530
482
|
- selected premise
|
|
531
|
-
- angle territory
|
|
532
483
|
- premise tension opened
|
|
533
484
|
- reader value implied
|
|
534
485
|
- source hook pattern
|
|
535
|
-
- source shape kept
|
|
536
|
-
- source words not copied
|
|
537
486
|
- why it fits this idea
|
|
538
|
-
- `renderedPreview` using `references/linkedin-preview-rendering.md`
|
|
539
|
-
- `mobileRenderedPreviewBlock`
|
|
540
|
-
- `desktopRenderedPreviewBlock`
|
|
541
|
-
- `mobileRenderedLines`
|
|
542
|
-
- `desktopRenderedLines`
|
|
543
|
-
- `firstScreenPromise`
|
|
544
|
-
- `intentionalOpenLoop`
|
|
545
|
-
- `specificClickQuestionVisible`
|
|
546
|
-
- `seeMoreClickReason`
|
|
547
|
-
- `clickQuestion`
|
|
548
|
-
- `payoffAfterFold`
|
|
549
|
-
- `bodyProofObligation`
|
|
550
|
-
- `corePainProofOrCuriosityVisibleMobile`
|
|
551
|
-
- `corePointVisibleMobile`
|
|
552
|
-
- `pointAfterMobileClamp`
|
|
553
487
|
- `charCount`
|
|
554
488
|
- `charCountIncludingNewlines`
|
|
555
489
|
- `firstLineChars`
|
|
@@ -566,50 +500,26 @@ Each hook must include:
|
|
|
566
500
|
- `rewriteIfTruncated`
|
|
567
501
|
- proof/story dependency
|
|
568
502
|
- AI-tell risk
|
|
569
|
-
- why it should win
|
|
570
|
-
- why it should lose
|
|
571
503
|
- score
|
|
572
504
|
|
|
573
505
|
Do not copy source wording. Copy only the structure.
|
|
574
506
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
-
|
|
581
|
-
-
|
|
582
|
-
-
|
|
583
|
-
- line height: `21px`
|
|
584
|
-
- white space: `pre-wrap`
|
|
585
|
-
- overflow wrap: `break-word`
|
|
586
|
-
- review clamp: first 3 rendered text lines
|
|
587
|
-
|
|
588
|
-
Use the rendered gates from `references/linkedin-preview-rendering.md`:
|
|
589
|
-
|
|
590
|
-
- `pass`: the mobile rendered preview shows the pain, proof, or curiosity by
|
|
591
|
-
the end of the first 3 rendered lines, and either the core point is
|
|
592
|
-
understandable without opening "see more" or an intentional open loop creates
|
|
593
|
-
a specific click question with an immediate planned payoff.
|
|
594
|
-
- `warn`: the mobile rendered preview creates useful curiosity but the core
|
|
595
|
-
point or click question is slightly softened by wrapping, blank-line rhythm,
|
|
596
|
-
or one missing context word. A compact fallback is required.
|
|
597
|
-
- `fail`: the hook's real point appears after the first 3 mobile rendered
|
|
598
|
-
lines without an intentional open-loop plan, the visible open loop is vague,
|
|
599
|
-
the first rendered line is generic setup, blank lines consume the preview
|
|
600
|
-
before the reader sees the point, or desktop fit is the only reason it looks
|
|
601
|
-
good.
|
|
507
|
+
Use this conservative mobile-first LinkedIn preview gate. LinkedIn does not
|
|
508
|
+
publish exact "see more" cutoff rules, and rendering varies by device, app
|
|
509
|
+
version, font, media, and line break. These are v1 safety budgets, not claims
|
|
510
|
+
about an official LinkedIn limit:
|
|
511
|
+
|
|
512
|
+
- `pass`: hook is <= 110 chars including newlines, every nonblank line is <= 45 chars, and the hook's core point lands before likely truncation.
|
|
513
|
+
- `warn`: hook is 111-140 chars including newlines, any nonblank line is 46-55 chars, or blank lines create visual-line risk. Blank lines are allowed, but they count as physical lines.
|
|
514
|
+
- `fail`: hook is > 140 chars including newlines, any nonblank line is > 55 chars, or the hook's point depends on text after likely truncation.
|
|
602
515
|
|
|
603
516
|
Desktop preview usually has more room. Still record `desktopPreviewFit`, but
|
|
604
517
|
never let desktop fit compensate for a mobile `fail`.
|
|
605
518
|
|
|
606
|
-
If a hook's point depends on text after the
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
selected hook may carry a `warn` only when the warning is explicit and the
|
|
611
|
-
validation receipt includes a compact fallback. A hook with no rendered mobile
|
|
612
|
-
and desktop preview record cannot be selected.
|
|
519
|
+
If a hook's point depends on text after the likely preview, rewrite it before
|
|
520
|
+
selecting it. A selected hook may carry a `warn` only when the warning is about
|
|
521
|
+
intentional blank-line rhythm or a slight line-length overage; include a compact
|
|
522
|
+
fallback in the validation receipt.
|
|
613
523
|
|
|
614
524
|
## Step 3: Draft
|
|
615
525
|
|
|
@@ -639,14 +549,10 @@ Every saved draft needs a validation receipt with:
|
|
|
639
549
|
- selected premise card
|
|
640
550
|
- candidate hooks considered
|
|
641
551
|
- selected hook and why
|
|
642
|
-
- hook reverse-engineering audit
|
|
643
|
-
- hook angle matrix summary
|
|
644
|
-
- see-more click audit
|
|
645
552
|
- proof claims used and source
|
|
646
553
|
- story/proof files consulted
|
|
647
554
|
- gold standards consulted
|
|
648
555
|
- LinkedIn preview audit
|
|
649
|
-
- rendered mobile and desktop hook preview blocks
|
|
650
556
|
- premise/value audit findings
|
|
651
557
|
- simplifier/concrete-language audit findings
|
|
652
558
|
- voice audit findings
|
|
@@ -119,8 +119,6 @@ Show compact candidate cards. Include:
|
|
|
119
119
|
- why it might belong in the pack
|
|
120
120
|
- hook mechanism
|
|
121
121
|
- hook preview budget status and measurement basis
|
|
122
|
-
- rendered mobile preview block and verdict
|
|
123
|
-
- rendered desktop preview block and verdict
|
|
124
122
|
- content/body mechanism
|
|
125
123
|
- rhythm notes
|
|
126
124
|
- sentence-structure notes
|
|
@@ -196,15 +194,6 @@ Tags:
|
|
|
196
194
|
- longest nonblank line chars:
|
|
197
195
|
- blank-line visual risk:
|
|
198
196
|
- source text basis:
|
|
199
|
-
- render basis:
|
|
200
|
-
- css contract version:
|
|
201
|
-
- mobile rendered preview block:
|
|
202
|
-
- desktop rendered preview block:
|
|
203
|
-
- mobile rendered lines:
|
|
204
|
-
- desktop rendered lines:
|
|
205
|
-
- core pain/proof/curiosity visible on mobile:
|
|
206
|
-
- core point visible on mobile:
|
|
207
|
-
- point after mobile clamp:
|
|
208
197
|
- preview budget status:
|
|
209
198
|
- mobile preview fit:
|
|
210
199
|
- desktop preview fit:
|