@sellable/mcp 0.1.12 → 0.1.14

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.12 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
86
+ npx -y @sellable/install@0.1.14 --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.12 --host codex
93
+ npx -y @sellable/install@0.1.14 --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.12",
3
+ "version": "0.1.14",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -125,53 +125,90 @@ Validated draft directory:
125
125
  - Workspace sender id or known sender: call `get_sender` or `enrich_sender`.
126
126
  Then summarize what you found in one or two lines and ask the user to confirm
127
127
  the campaign subject and sender before continuing.
128
- - If the user did not provide the launch identity, make the first quick question
129
- panel an identity gate. The point of this gate is not "pick a sender"; it is
130
- to learn who the user is / what company we are launching for, and who we
131
- should send from. Before that gate, call `list_senders` once if it is
132
- available, only so you can offer connected senders as shortcuts. The
133
- customer-facing shape should be:
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 a structured
133
+ confirmation question:
134
134
 
135
135
  ```text
136
- I found these connected senders in {workspace}: {sender names}.
136
+ I’m ready to build this in {workspace}. I found {matched sender} connected here.
137
137
 
138
- First I need to know who this campaign is for and who we’re sending from. If
139
- one of these connected senders is you, pick them; otherwise paste your LinkedIn
140
- URL or company website.
138
+ Is that you, and is this campaign for {company}?
141
139
  ```
142
140
 
143
- The identity gate should ask:
141
+ The options must be:
144
142
 
145
- 1. `Who is this campaign for?` Options: connected sender names if available,
146
- `I’ll paste a LinkedIn profile`, `I’ll paste a company website/domain`,
147
- `Other / custom`.
148
- 2. `Who should the LinkedIn messages send from?` Options:
149
- `same person/company`, connected sender names if available,
150
- `I’ll paste a different sender profile`, `Other / custom`.
143
+ 1. `Yes, that's me and this is for {company}`
144
+ 2. `That's me, but this is for a different company`
145
+ 3. `No, I'll paste my LinkedIn URL so you can look me up`
146
+ 4. `No, I'll paste the company website instead`
147
+ 5. `Other / custom`
151
148
 
152
- After that answer, do the lightweight lookup. For a connected sender, call
153
- `enrich_sender` and identify their current or most recent company. For a
154
- LinkedIn profile, call `fetch_linkedin_profile` and infer the current or most
155
- recent company from the profile. Then ask:
149
+ If the user chooses option 2, ask for the company website/domain and call
150
+ `fetch_company` when possible, otherwise one web lookup. If the user chooses
151
+ option 3, ask for their LinkedIn URL, call `fetch_linkedin_profile`, infer
152
+ their current or most recent company, then confirm company and sender again.
153
+ If the user chooses option 4, ask for the company website/domain, call
154
+ `fetch_company` when possible, otherwise one web lookup, then ask who the
155
+ LinkedIn messages should send from.
156
+
157
+ If there is no strong sender match, make the first quick question panel ask
158
+ for the user's LinkedIn URL or company website. The point of this gate is not
159
+ "pick a sender"; it is to learn who the user is, infer the current or most
160
+ recent company, and then confirm who we are sending from. The customer-facing
161
+ shape should be:
162
+
163
+ ```text
164
+ I’m ready to build this in {workspace}.
165
+
166
+ First, what’s your LinkedIn URL? If you’d rather start from the company, paste
167
+ the company website instead.
168
+ ```
169
+
170
+ The LinkedIn/company identity gate should ask:
171
+
172
+ 1. `What’s your LinkedIn URL?` Options: `I’ll paste my LinkedIn profile`,
173
+ `I’ll paste the company website instead`, `Other / custom`.
174
+
175
+ After that answer, do the lightweight lookup. For a LinkedIn profile, call
176
+ `fetch_linkedin_profile` and infer the user's current or most recent company
177
+ from the profile. For a company website, call `fetch_company` when possible,
178
+ otherwise one web lookup.
179
+
180
+ If `list_senders` did not already run, call it once after the lookup to see
181
+ whether the fetched user appears to match a connected sender. If there is a
182
+ likely match, ask:
156
183
 
157
184
  ```text
158
- Cool — I have this as {campaign subject/company}, sending from {sender}. Is that right?
185
+ Cool — are you {matched sender}, and is this campaign for {company}?
159
186
  ```
160
187
 
188
+ If there is no likely sender match, ask:
189
+
190
+ ```text
191
+ Cool — I have this campaign as {company}. Who should the LinkedIn messages send from?
192
+ ```
193
+
194
+ Sender options should include connected sender names if available, `same as
195
+ me`, `I’ll paste a different sender profile`, and `Other / custom`.
196
+
161
197
  After the user confirms the subject and sender, run one lightweight company
162
- lookup (`fetch_company` when possible, otherwise one web lookup), then ask the
163
- campaign setup questions. The setup questions should use the confirmed company
164
- context so they do not feel generic. If identity is still unavailable, use
165
- neutral/custom intake options instead of guessed vertical-specific options.
198
+ lookup if it has not already run, then ask the campaign setup questions. The
199
+ setup questions should use the confirmed company context so they do not feel
200
+ generic. If identity is still unavailable, use neutral/custom intake options
201
+ instead of guessed vertical-specific options.
166
202
 
167
203
  - Before the identity gate, use this customer-facing shape:
168
204
 
169
205
  ```text
170
206
  I’m ready to build the campaign in {workspace}.
171
207
 
172
- First I need to confirm who this campaign is for and who we’re sending from.
173
- If you already have a connected sender, I can use that to infer the company;
174
- otherwise paste a LinkedIn profile or company website and I’ll look it up.
208
+ First I’ll check whether your Sellable token already tells me who you are. If
209
+ not, I’ll ask for your LinkedIn URL or company website, look it up, then
210
+ confirm the company and sender before we pick the target, offer, proof, and
211
+ lead source.
175
212
 
176
213
  Then I’ll turn that into a campaign brief for you to approve before anything is created.
177
214
  ```
@@ -192,7 +229,8 @@ Validated draft directory:
192
229
  structured question gate, do not run source discovery, Sales Nav, Prospeo,
193
230
  Signals, Bash, Read, Write, Edit, Glob, Grep, full company research, or
194
231
  draft-directory inspection/creation. `list_senders` is allowed once before the
195
- first identity gate so the user can pick from connected senders. Do
232
+ first identity gate as a quiet token/sender inference shortcut, and once means
233
+ once: do not call it again after a LinkedIn lookup if it already ran. Do
196
234
  draft-directory setup only after the founder answers. After launch identity is
197
235
  confirmed, the setup packet must ask buyer, offer/CTA, proof, and lead source,
198
236
  and all four questions must include an `Other / custom` option.
@@ -113,7 +113,9 @@
113
113
  "identityLookup": 1,
114
114
  "companyLookupAfterIdentityConfirm": 1
115
115
  },
116
- "preferConnectedSendersFirst": true,
116
+ "quietlyCheckConnectedSendersFirst": true,
117
+ "preferUserLinkedInWhenSenderInferenceIsWeak": true,
118
+ "doNotPresentSenderPickerBeforeIdentityInference": true,
117
119
  "confirmCompanyBeforeStrategyQuestions": true,
118
120
  "mustNotInferFromNameOnly": true,
119
121
  "fallback": "ask identity gate first; use neutral/custom intake options only when identity remains unavailable"