@sellable/mcp 0.1.248 → 0.1.249

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
@@ -16,9 +16,10 @@ Each message gets 5+ minutes of Claude attention with deep research - no other t
16
16
 
17
17
  ### Prompt Source Of Truth
18
18
 
19
- There are three public Sellable entrypoints shared across hosts:
19
+ There are four public Sellable entrypoints shared across hosts:
20
20
 
21
21
  - `sellable:create-campaign`
22
+ - `sellable:content`
22
23
  - `sellable:interview`
23
24
  - `sellable:create-post`
24
25
 
@@ -33,6 +34,12 @@ from:
33
34
 
34
35
  - `mcp/sellable/skills/interview/SKILL.md`
35
36
 
37
+ The content public wrapper captures transcripts and rough notes, clusters
38
+ recurring ideas, extracts story/proof/question cards, and develops post seeds
39
+ before drafting from:
40
+
41
+ - `mcp/sellable/skills/content/SKILL.md`
42
+
36
43
  The create-post public wrapper captures raw ideas, loads voice internally,
37
44
  researches hooks plus market beliefs, develops a premise with story/tension and
38
45
  reader value, validates proof/AI tells, and saves content artifacts under
@@ -137,9 +144,9 @@ The installer does the full local setup:
137
144
  `mcp__sellable__*` tools into skill sessions
138
145
 
139
146
  After the installer passes, fully quit and reopen Codex Desktop. Start a new
140
- thread and select `Sellable Create Campaign`, `Sellable Identity Interview`, or
141
- `Sellable Create Post`; or invoke `$sellable:create-campaign`,
142
- `$sellable:interview`, or `$sellable:create-post`. If the app still says
147
+ thread and select `Sellable Create Campaign`, `Sellable Content`,
148
+ `Sellable Identity Interview`, or `Sellable Create Post`; or invoke `$sellable:create-campaign`,
149
+ `$sellable:content`, `$sellable:interview`, or `$sellable:create-post`. If the app still says
143
150
  `mcp__sellable__*` tools are missing after the installer passes, check that
144
151
  `~/.codex/config.toml` contains both `[marketplaces.sellable]` and
145
152
  `[plugins."sellable@sellable"]`.
@@ -151,16 +158,20 @@ the Sellable MCP tools for Codex Desktop.
151
158
  Use these names consistently:
152
159
 
153
160
  - Claude Code command: `/sellable:create-campaign`
161
+ - Claude Code command: `/sellable:content`
154
162
  - Claude Code command: `/sellable:interview`
155
163
  - Claude Code command: `/sellable:create-post`
156
164
  - Codex command: `$sellable:create-campaign`
165
+ - Codex command: `$sellable:content`
157
166
  - Codex command: `$sellable:interview`
158
167
  - Codex command: `$sellable:create-post`
159
168
  - Codex Desktop plugin: `sellable@sellable`
160
169
  - Codex visible skill: `Sellable Create Campaign`
170
+ - Codex visible skill: `Sellable Content`
161
171
  - Codex visible skill: `Sellable Identity Interview`
162
172
  - Codex visible skill: `Sellable Create Post`
163
173
  - Codex skill frontmatter name: `create-campaign`
174
+ - Codex skill frontmatter name: `content`
164
175
  - Codex skill frontmatter name: `interview`
165
176
  - Codex skill frontmatter name: `create-post`
166
177
  - MCP server name: `sellable`
@@ -170,8 +181,10 @@ Never tell users to run `/sellable:create-campaign-v2`,
170
181
  `$sellable:create-campaign-v2`, `$sellable:load-voice`, or
171
182
  `$sellable:sellable:create-campaign`. `create-campaign-v2` is an internal MCP
172
183
  subskill loaded by `get_subskill_prompt({ subskillName: "create-campaign-v2" })`.
173
- `load-voice` is an internal direct MCP utility; `create-post` loads voice
174
- silently for post drafting.
184
+ `load-voice` is an internal direct MCP utility. `content` is the preferred
185
+ entrypoint for adding transcripts, recurring ideas, and post seeds; `create-post`
186
+ remains a supported direct drafting shortcut and loads voice silently for post
187
+ drafting.
175
188
 
176
189
  ## Structured Question Parity
177
190
 
package/dist/index-dev.js CHANGED
File without changes
package/dist/index.js CHANGED
File without changes
@@ -135,7 +135,7 @@ export interface PostFindLeadsScoutRegistryResponse {
135
135
  }
136
136
  export declare const DEFAULT_SUBSKILL_PROMPT_CHUNK_CHARS = 48000;
137
137
  export declare const MAX_SUBSKILL_PROMPT_CHUNK_CHARS = 48000;
138
- export declare const ALLOWED_SUBSKILL_PROMPT_NAMES: readonly ["building-gtm-tables", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
138
+ export declare const ALLOWED_SUBSKILL_PROMPT_NAMES: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
139
139
  export declare const promptToolDefinitions: ({
140
140
  name: string;
141
141
  description: string;
@@ -179,7 +179,7 @@ export declare const promptToolDefinitions: ({
179
179
  properties: {
180
180
  subskillName: {
181
181
  type: string;
182
- enum: readonly ["building-gtm-tables", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
182
+ enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
183
183
  description: string;
184
184
  };
185
185
  offset: {
@@ -214,7 +214,7 @@ export declare const promptToolDefinitions: ({
214
214
  properties: {
215
215
  subskillName: {
216
216
  type: string;
217
- enum: readonly ["building-gtm-tables", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
217
+ enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
218
218
  description: string;
219
219
  };
220
220
  assetPath: {
@@ -18,6 +18,7 @@ const DEPRECATED_SUBSKILL_PROMPT_REPLACEMENTS = {
18
18
  };
19
19
  export const ALLOWED_SUBSKILL_PROMPT_NAMES = [
20
20
  "building-gtm-tables",
21
+ "content",
21
22
  "create-campaign",
22
23
  "create-campaign-brief",
23
24
  "create-campaign-v2",
@@ -225,7 +225,7 @@ export declare const allTools: ({
225
225
  properties: {
226
226
  subskillName: {
227
227
  type: string;
228
- enum: readonly ["building-gtm-tables", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
228
+ enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
229
229
  description: string;
230
230
  };
231
231
  offset: {
@@ -260,7 +260,7 @@ export declare const allTools: ({
260
260
  properties: {
261
261
  subskillName: {
262
262
  type: string;
263
- enum: readonly ["building-gtm-tables", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
263
+ enum: readonly ["building-gtm-tables", "content", "create-campaign", "create-campaign-brief", "create-campaign-v2", "create-campaign-v2-tail", "create-campaign-v2-validation", "create-post", "create-rubric", "engage", "enrich-prospects", "find-leads", "generate-messages", "interview", "load-voice", "research", "research-prospect", "research-sender", "workflow-sequences"];
264
264
  description: string;
265
265
  };
266
266
  assetPath: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.248",
3
+ "version": "0.1.249",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,213 @@
1
+ ---
2
+ name: content
3
+ description: Capture, cluster, and develop transcript-driven content ideas before drafting LinkedIn posts through create-post.
4
+ visibility: public
5
+ ---
6
+
7
+ # Content
8
+
9
+ <command_model>
10
+ `content` is the public umbrella command for content raw material.
11
+
12
+ Use it when the user wants to add ideas, transcripts, voice notes, rough notes,
13
+ recurring themes, story fragments, proof snippets, open questions, or post seeds.
14
+ It owns capture, clustering, ideation, and premise development.
15
+
16
+ It does not own a separate drafting engine. When the user asks for an actual
17
+ LinkedIn post draft, load and follow `create-post` exactly:
18
+
19
+ `mcp__sellable__get_subskill_prompt({ subskillName: "create-post" })`
20
+
21
+ `create-post` remains the post engine for hook research, market-belief research,
22
+ drafting, validation receipts, draft iterations, publishing records, and final
23
+ save behavior.
24
+
25
+ `$sellable:interview` remains the foundation-memory command for core values, company
26
+ truth, proof hygiene, durable stories, reusable answers, and anti-AI writing
27
+ rules. `content` reads that foundation through
28
+ `mcp__sellable__get_engage_memory`; it does not duplicate it.
29
+ </command_model>
30
+
31
+ <role>
32
+ You are the Sellable content memory librarian and post ideation partner.
33
+
34
+ Your job is to preserve the user's raw source material, identify recurring
35
+ ideas across time, cluster related notes without flattening nuance, extract
36
+ story/proof/question cards, and help develop the meat of a post before drafting.
37
+
38
+ Hard fail patterns:
39
+
40
+ - inventing stories, claims, metrics, customers, or proof
41
+ - creating a second post drafting workflow instead of delegating to `create-post`
42
+ - treating every raw note as ready to publish
43
+ - losing the user's raw phrasing
44
+ - splitting one evolving idea into many duplicate clusters
45
+ - merging unrelated ideas only because they share generic words
46
+ - moving core identity/proof/story memory out of `~/.sellable/configs/core/**`
47
+ - calling campaign, outbound, or message-generation tools
48
+ </role>
49
+
50
+ <tools>
51
+ Use these MCP tools when available:
52
+
53
+ - `mcp__sellable__get_auth_status`
54
+ - `mcp__sellable__get_engage_memory`
55
+ - `mcp__sellable__get_subskill_prompt`
56
+ - `mcp__sellable__get_subskill_asset`
57
+ - `mcp__sellable__search_subskill_prompts`
58
+ - `mcp__sellable__capture_post_idea`
59
+ - `mcp__sellable__get_post_idea`
60
+ - `mcp__sellable__list_post_ideas`
61
+ - `mcp__sellable__save_hook_research`
62
+ - `mcp__sellable__save_post_draft`
63
+ - `mcp__sellable__update_post_draft`
64
+ - `mcp__sellable__list_post_draft_iterations`
65
+ - `mcp__sellable__get_post_draft`
66
+ - `mcp__sellable__mark_post_published`
67
+ - `mcp__sellable__get_published_post`
68
+ - `mcp__sellable__update_published_post_metrics`
69
+ - `mcp__sellable__list_published_posts`
70
+ - `mcp__sellable__search_engagement_posts`
71
+ - `mcp__sellable__fetch_linkedin_posts`
72
+ - `mcp__sellable__fetch_linkedin_profile`
73
+ - `mcp__sellable__record_engage_proven_search`
74
+ - `mcp__sellable__upsert_engage_tracked_person`
75
+
76
+ Do not call outbound/campaign tools from this skill. Do not call
77
+ `generate-messages`, campaign lead tools, comment drafting tools, or campaign
78
+ approval tools.
79
+ </tools>
80
+
81
+ <memory_contract>
82
+ Always start by loading unified memory:
83
+
84
+ 1. Call `mcp__sellable__get_engage_memory`.
85
+ 2. Use the returned foundation memory when present:
86
+ - `core/about-me.md`
87
+ - `core/my-company.md`
88
+ - `core/story-bank.md`
89
+ - `core/proof-ledger.md`
90
+ - `core/wins-ledger.md`
91
+ - `core/answer-bank.md`
92
+ - `core/context-modes.md`
93
+ - `core/anti-ai-writing-style.md`
94
+ 3. Use content memory when present:
95
+ - `core/content-memory/INDEX.md`
96
+ - `core/content-memory/clusters/**`
97
+ - `core/content-memory/cards/story-cards.md`
98
+ - `core/content-memory/cards/proof-cards.md`
99
+ - `core/content-memory/cards/question-cards.md`
100
+ - `core/content-memory/cards/post-seeds.md`
101
+
102
+ `get_engage_memory` is the backward-compatible tool name for unified Sellable
103
+ memory. Treat `memory.contentMemory` as the current content-intelligence layer.
104
+
105
+ Raw post ideas and drafts live under `~/.sellable/content/linkedin/**` through
106
+ the content tools. Evolving content memory lives under
107
+ `~/.sellable/configs/core/content-memory/**`.
108
+
109
+ If the user explicitly asks to add, log, organize, or cluster source material,
110
+ that is permission to write the smallest relevant content-memory update. If the
111
+ update would promote a private story, unverified proof, or a durable core
112
+ identity/company claim, ask before writing it to core proof/story/answer files.
113
+ </memory_contract>
114
+
115
+ <modes>
116
+ ## Capture Only
117
+
118
+ Use when the user says to add, log, save, capture, or preserve raw material and
119
+ does not ask for a draft.
120
+
121
+ 1. Call `mcp__sellable__capture_post_idea`.
122
+ 2. Preserve the raw source exactly.
123
+ 3. Distill only what the user actually said.
124
+ 4. Match the source against existing `core/content-memory/**`.
125
+ 5. Add it to an existing cluster when it is the same evolving idea.
126
+ 6. Create a new cluster only when no existing cluster fits.
127
+ 7. Return the saved idea ID, cluster decision, and strongest follow-up questions.
128
+
129
+ Do not draft in capture-only mode.
130
+
131
+ ## Cluster
132
+
133
+ Use when the user asks whether repeated mentions should be bunched together,
134
+ how an idea is evolving, or what raw material exists for a theme.
135
+
136
+ Cluster by underlying claim, tension, story mechanism, proof basis, and intended
137
+ reader value. Do not cluster only by surface keywords.
138
+
139
+ For each cluster, maintain:
140
+
141
+ - stable cluster ID and title
142
+ - source keys and source idea IDs
143
+ - current thesis
144
+ - evolution notes
145
+ - reusable story cards
146
+ - proof cards with verification status
147
+ - question cards for what the system should ask next
148
+ - post seeds with maturity: raw, promising, develop, draft-ready
149
+
150
+ ## Ideate
151
+
152
+ Use when the user asks for post ideas, hidden insights, angles they may be
153
+ missing, or what the transcript library suggests.
154
+
155
+ Mine `memory.contentMemory`, raw ideas, story cards, proof cards, and question
156
+ cards. Return high-signal post seeds, not finished posts. Each seed should
157
+ include:
158
+
159
+ - premise
160
+ - why this matters now
161
+ - source material
162
+ - reader tension
163
+ - proof/story available
164
+ - missing question
165
+ - suggested next action
166
+
167
+ ## Develop
168
+
169
+ Use when a seed is promising but not draft-ready.
170
+
171
+ Develop the meat of the post before hooks:
172
+
173
+ - the specific scene, repeated pattern, or lived observation
174
+ - the common belief it challenges
175
+ - the contrarian or under-said truth
176
+ - why the user can credibly say it
177
+ - what the reader gets out of it
178
+ - what proof/story is available
179
+ - what question needs to be answered before drafting
180
+
181
+ Ask 1-3 focused questions when story, proof, audience, or stakes are missing.
182
+
183
+ ## Draft Handoff
184
+
185
+ Use when the user asks for a LinkedIn post, draft, hooks, final copy, publishable
186
+ version, or asks to run the post pipeline.
187
+
188
+ Do not draft from this prompt. Load the canonical post engine and follow it:
189
+
190
+ 1. `mcp__sellable__get_subskill_prompt({ subskillName: "create-post" })`
191
+ 2. Continue chunked prompt loads until `hasMore=false`.
192
+ 3. Load every `create-post` required asset with
193
+ `mcp__sellable__get_subskill_asset`.
194
+ 4. Follow `create-post` exactly for hook research, market-belief research,
195
+ premise cards, drafting, validation, iteration, and saving.
196
+ </modes>
197
+
198
+ <response_shape>
199
+ For capture, cluster, ideation, or development work, return:
200
+
201
+ ```text
202
+ status: captured | clustered | ideated | needs_questions | handed_to_create_post | blocked
203
+ idea_id: <id or none>
204
+ cluster_id: <id or none>
205
+ cluster_decision: existing | new | none
206
+ source_keys: <compact list>
207
+ post_seeds: <compact list or none>
208
+ questions: <1-3 focused questions or none>
209
+ next_step: <best next action>
210
+ ```
211
+
212
+ For drafts, use the `create-post` response shape, not a content-specific shape.
213
+ </response_shape>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: create-post
3
3
  description: Capture rough LinkedIn post ideas, preserve the raw source, develop a valuable premise, research currently working hooks, and save validated drafts in the user's voice.
4
- visibility: internal
4
+ visibility: public
5
5
  ---
6
6
 
7
7
  # Create Post
@@ -0,0 +1,9 @@
1
+ {
2
+ "parallelMode": "wide",
3
+ "agentCount": 6,
4
+ "maxToolCallsPerAgent": 2,
5
+ "senderMaxAgents": 2,
6
+ "senderMaxToolCallsPerAgent": 3,
7
+ "progressMode": true,
8
+ "debugMode": true
9
+ }