@sellable/mcp 0.1.11 → 0.1.13

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
@@ -83,14 +83,14 @@ The token is provided when you generate it. Use `list_workspaces` +
83
83
  For customer/package installs, use the public installer:
84
84
 
85
85
  ```bash
86
- npx -y @sellable/install@0.1.11 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
86
+ npx -y @sellable/install@0.1.13 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
87
87
  ```
88
88
 
89
89
  If you already have `~/.sellable/config.json`, rerun/verify without rewriting
90
90
  auth:
91
91
 
92
92
  ```bash
93
- npx -y @sellable/install@0.1.11 --host codex
93
+ npx -y @sellable/install@0.1.13 --host codex
94
94
  sellable --verify-only --host codex
95
95
  ```
96
96
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -114,8 +114,9 @@ Validated draft directory:
114
114
  loading, runbooks, local skill files, or skill versions.
115
115
  - Do not treat the active Sellable workspace as the campaign subject. The
116
116
  workspace only tells you where the campaign will be saved. Before buyer, CTA,
117
- proof, or source questions, identify and confirm who the campaign is launching
118
- for.
117
+ proof, or source questions, identify two things:
118
+ 1. who/what company this campaign is for, and
119
+ 2. who the LinkedIn messages should send from.
119
120
  - If the user supplied a LinkedIn profile, website, domain, company name, or
120
121
  sender name in the invocation, do one lightweight lookup first:
121
122
  - LinkedIn profile: call `fetch_linkedin_profile`.
@@ -123,26 +124,74 @@ Validated draft directory:
123
124
  web lookup.
124
125
  - Workspace sender id or known sender: call `get_sender` or `enrich_sender`.
125
126
  Then summarize what you found in one or two lines and ask the user to confirm
126
- the launch identity before continuing.
127
- - If the user did not provide the launch identity, make the first quick question
128
- panel an identity gate. Ask who we are launching for, with options like:
129
- 1. `Use one of my connected Sellable senders`
130
- 2. `I’ll paste a LinkedIn profile`
131
- 3. `I’ll paste a company website/domain`
132
- 4. `Other / custom`
133
- After that answer, do the lightweight lookup, confirm the company/sender
134
- context, then ask the campaign setup questions. The setup questions should use
135
- the confirmed company context so they do not feel generic. If identity is
136
- still unavailable, use neutral/custom intake options instead of guessed
137
- vertical-specific options.
127
+ the campaign subject and sender before continuing.
128
+ - If the user did not provide the launch identity, quietly call `list_senders`
129
+ once if available. This is a shortcut to deduce who the user might be from
130
+ their Sellable API token and connected LinkedIn accounts. Do not present it as
131
+ a sender picker yet. If there is one strong likely sender, use `enrich_sender`
132
+ to infer their current or most recent company, then ask:
133
+
134
+ ```text
135
+ I’m ready to build this in {workspace}. I found {matched sender} connected here.
136
+
137
+ Is that you, and is this campaign for {company}?
138
+ ```
139
+
140
+ If there is no strong sender match, make the first quick question panel ask
141
+ for the user's LinkedIn URL or company website. The point of this gate is not
142
+ "pick a sender"; it is to learn who the user is, infer the current or most
143
+ recent company, and then confirm who we are sending from. The customer-facing
144
+ shape should be:
145
+
146
+ ```text
147
+ I’m ready to build this in {workspace}.
148
+
149
+ First, what’s your LinkedIn URL? If you’d rather start from the company, paste
150
+ the company website instead.
151
+ ```
152
+
153
+ The LinkedIn/company identity gate should ask:
154
+
155
+ 1. `What’s your LinkedIn URL?` Options: `I’ll paste my LinkedIn profile`,
156
+ `I’ll paste the company website instead`, `Other / custom`.
157
+
158
+ After that answer, do the lightweight lookup. For a LinkedIn profile, call
159
+ `fetch_linkedin_profile` and infer the user's current or most recent company
160
+ from the profile. For a company website, call `fetch_company` when possible,
161
+ otherwise one web lookup.
162
+
163
+ If `list_senders` did not already run, call it once after the lookup to see
164
+ whether the fetched user appears to match a connected sender. If there is a
165
+ likely match, ask:
166
+
167
+ ```text
168
+ Cool — are you {matched sender}, and is this campaign for {company}?
169
+ ```
170
+
171
+ If there is no likely sender match, ask:
172
+
173
+ ```text
174
+ Cool — I have this campaign as {company}. Who should the LinkedIn messages send from?
175
+ ```
176
+
177
+ Sender options should include connected sender names if available, `same as
178
+ me`, `I’ll paste a different sender profile`, and `Other / custom`.
179
+
180
+ After the user confirms the subject and sender, run one lightweight company
181
+ lookup if it has not already run, then ask the campaign setup questions. The
182
+ setup questions should use the confirmed company context so they do not feel
183
+ generic. If identity is still unavailable, use neutral/custom intake options
184
+ instead of guessed vertical-specific options.
185
+
138
186
  - Before the identity gate, use this customer-facing shape:
139
187
 
140
188
  ```text
141
189
  I’m ready to build the campaign in {workspace}.
142
190
 
143
- First I need to confirm who we’re launching for. If you give me a LinkedIn
144
- profile or company website, I’ll use that to understand the company, then I’ll
145
- confirm it with you before we pick the target, offer, proof, and lead source.
191
+ First I’ll check whether your Sellable token already tells me who you are. If
192
+ not, I’ll ask for your LinkedIn URL or company website, look it up, then
193
+ confirm the company and sender before we pick the target, offer, proof, and
194
+ lead source.
146
195
 
147
196
  Then I’ll turn that into a campaign brief for you to approve before anything is created.
148
197
  ```
@@ -162,10 +211,12 @@ Validated draft directory:
162
211
  must ask for the launch identity before buyer/offer/source. Before that first
163
212
  structured question gate, do not run source discovery, Sales Nav, Prospeo,
164
213
  Signals, Bash, Read, Write, Edit, Glob, Grep, full company research, or
165
- draft-directory inspection/creation. Do draft-directory setup only after the
166
- founder answers. After launch identity is confirmed, the setup packet must ask
167
- buyer, offer/CTA, proof, and lead source, and all four questions must include
168
- an `Other / custom` option.
214
+ draft-directory inspection/creation. `list_senders` is allowed once before the
215
+ first identity gate as a quiet token/sender inference shortcut, and once means
216
+ once: do not call it again after a LinkedIn lookup if it already ran. Do
217
+ draft-directory setup only after the founder answers. After launch identity is
218
+ confirmed, the setup packet must ask buyer, offer/CTA, proof, and lead source,
219
+ and all four questions must include an `Other / custom` option.
169
220
  - After the founder answers the first strategy/source packet, explain the next
170
221
  stage only: campaign brief creation and brief approval. Use this shape:
171
222
 
@@ -28,14 +28,15 @@ approval. Hide implementation details unless they are needed to unblock setup.
28
28
  The customer believes Sellable is helping them launch a campaign. Keep every
29
29
  turn anchored to that:
30
30
 
31
- 1. Confirm who the campaign is launching for.
32
- 2. Understand the company and offer.
33
- 3. Turn that into a campaign brief.
34
- 4. Find likely responders.
35
- 5. Filter for fit.
36
- 6. Draft messages.
37
- 7. Ask for approval.
38
- 8. Create the campaign.
31
+ 1. Confirm who/what company the campaign is for.
32
+ 2. Confirm who the LinkedIn messages send from.
33
+ 3. Understand the company and offer.
34
+ 4. Turn that into a campaign brief.
35
+ 5. Find likely responders.
36
+ 6. Filter for fit.
37
+ 7. Draft messages.
38
+ 8. Ask for approval.
39
+ 9. Create the campaign.
39
40
 
40
41
  ## Progress Updates
41
42
 
@@ -100,12 +100,23 @@
100
100
  "optional": false,
101
101
  "when": "before_founder_strategy_source_packet",
102
102
  "allowedTools": [
103
+ "list_senders",
104
+ "get_sender",
105
+ "enrich_sender",
103
106
  "fetch_company",
104
107
  "fetch_linkedin_profile",
105
108
  "WebFetch",
106
109
  "WebSearch"
107
110
  ],
108
- "maxCalls": 1,
111
+ "maxCalls": {
112
+ "list_senders": 1,
113
+ "identityLookup": 1,
114
+ "companyLookupAfterIdentityConfirm": 1
115
+ },
116
+ "quietlyCheckConnectedSendersFirst": true,
117
+ "preferUserLinkedInWhenSenderInferenceIsWeak": true,
118
+ "doNotPresentSenderPickerBeforeIdentityInference": true,
119
+ "confirmCompanyBeforeStrategyQuestions": true,
109
120
  "mustNotInferFromNameOnly": true,
110
121
  "fallback": "ask identity gate first; use neutral/custom intake options only when identity remains unavailable"
111
122
  },