@sellable/mcp 0.1.25 → 0.1.26

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.25 --host codex --token skt_live_your_token_here --workspace-id your_workspace_id
86
+ npx -y @sellable/install@0.1.26 --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.25 --host codex
93
+ npx -y @sellable/install@0.1.26 --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.25",
3
+ "version": "0.1.26",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -79,7 +79,11 @@ Validated draft directory:
79
79
  `request_user_input` (enabled in Default mode by
80
80
  `[features].default_mode_request_user_input = true`, not available in
81
81
  `codex exec`). Treat them as equivalent approval/intake gates and persist the
82
- same draft artifacts after the user answers. If an interactive
82
+ same draft artifacts after the user answers. Use this structured gate only for
83
+ multiple-choice decisions or approval gates. Never use it to collect open text
84
+ input like LinkedIn URLs, company domains, notes, pasted context, campaign
85
+ ideas, or feedback. For open text, ask in normal chat and wait for the user to
86
+ paste the value. If an interactive
83
87
  Codex session does not expose `request_user_input`, do not silently degrade to
84
88
  a plain chat question; stop and tell the user:
85
89
 
@@ -141,10 +145,10 @@ Validated draft directory:
141
145
  the campaign subject and sender before continuing.
142
146
  - If the user did not provide the launch identity, quietly call `list_senders`
143
147
  once if available. This is a shortcut to deduce who the user might be from
144
- their Sellable API token and connected LinkedIn accounts. Do not present it as
145
- a sender picker yet. If there is one strong likely sender, use `enrich_sender`
146
- to infer their current or most recent company, then ask a structured
147
- confirmation question:
148
+ their Sellable API token and connected LinkedIn accounts. Do not ask the user
149
+ to pick an input type before checking connected senders. If there is any likely
150
+ connected sender, use `enrich_sender` on the best match to infer their current
151
+ or most recent company, then ask a structured confirmation question:
148
152
 
149
153
  ```text
150
154
  I’m ready to build this in {workspace}. I found {matched sender} connected here.
@@ -152,25 +156,30 @@ Validated draft directory:
152
156
  Is that you, and is this campaign for {company}?
153
157
  ```
154
158
 
155
- The options must be:
159
+ The structured options must be no more than three choices:
156
160
 
157
- 1. `Yes, that's me and this is for {company}`
158
- 2. `That's me, but this is for a different company`
159
- 3. `No, I'll paste my LinkedIn URL so you can look me up`
160
- 4. `No, I'll paste the company website instead`
161
- 5. `Other / custom`
161
+ 1. `Yes use {matched sender} for {company}`
162
+ 2. `No I'll paste a LinkedIn profile`
163
+ 3. `Use a company domain instead`
162
164
 
163
- If the user chooses option 2, ask for the company website/domain and call
164
- `fetch_company` when possible, otherwise one web lookup. If the user chooses
165
- option 3, ask for their LinkedIn URL, call `fetch_linkedin_profile`, infer
166
- their current or most recent company, then confirm company and sender again.
167
- If the user chooses option 4, ask for the company website/domain, call
168
- `fetch_company` when possible, otherwise one web lookup, then ask who the
169
- LinkedIn messages should send from.
165
+ If there are multiple likely connected senders, mention the best one in the
166
+ question and use option 2 for either a different connected sender or a pasted
167
+ LinkedIn profile.
168
+
169
+ Use the structured question tool only for the choice. Do not use
170
+ `request_user_input`/`AskUserQuestion` to collect a LinkedIn URL, company
171
+ domain, or freeform text. If the user chooses option 2, ask in normal chat:
172
+ `Paste the LinkedIn URL I should use, and I’ll look it up.` Then call
173
+ `fetch_linkedin_profile`, infer their current or most recent company, and
174
+ confirm company and sender again. If the user chooses option 3, ask in normal
175
+ chat: `Paste the company domain, and I’ll do a quick lookup before we keep
176
+ going.` Then call `fetch_company` when possible, otherwise one web lookup, and
177
+ ask who the LinkedIn messages should send from.
170
178
 
171
179
  If `list_senders` returns zero connected senders, avoid the sender-confirmation
172
- branch entirely. Ask for the user's LinkedIn URL or the company they want to
173
- send on behalf of so you can research context:
180
+ branch entirely. Do not ask the user to choose an input type with the
181
+ structured question tool. Ask in normal chat for the user's LinkedIn URL or the
182
+ company they want to send on behalf of so you can research context:
174
183
 
175
184
  ```text
176
185
  I’m ready to build this in {workspace}.
@@ -180,11 +189,11 @@ Validated draft directory:
180
189
  offer, proof, and lead source.
181
190
  ```
182
191
 
183
- If there is no strong sender match, make the first setup choice ask for the
184
- user's LinkedIn URL or company website. The point of this gate is not "pick a
185
- sender"; it is to learn who the user is, infer the current or most recent
186
- company, and then confirm who we are sending from. The customer-facing shape
187
- should be:
192
+ If there is no strong sender match, do not show a structured choice that says
193
+ "LinkedIn profile" vs "Company website". The point of this gate is not "pick a
194
+ sender" or "pick an input type"; it is to learn who the user is, infer the
195
+ current or most recent company, and then confirm who we are sending from. The
196
+ customer-facing shape should be:
188
197
 
189
198
  ```text
190
199
  I’m ready to build this in {workspace}.
@@ -193,12 +202,7 @@ Validated draft directory:
193
202
  the company website instead.
194
203
  ```
195
204
 
196
- The LinkedIn/company identity gate should ask:
197
-
198
- 1. `What’s your LinkedIn URL?` Options: `I’ll paste my LinkedIn profile`,
199
- `I’ll paste the company website instead`, `Other / custom`.
200
-
201
- After that answer, do the lightweight lookup. For a LinkedIn profile, call
205
+ After the user pastes a URL/domain, do the lightweight lookup. For a LinkedIn profile, call
202
206
  `fetch_linkedin_profile` and infer the user's current or most recent company
203
207
  from the profile. For a company website, call `fetch_company` when possible,
204
208
  otherwise one web lookup.
@@ -146,10 +146,10 @@ brief before anything is created.
146
146
  Good identity setup:
147
147
 
148
148
  ```text
149
- I’ll check whether you already have a connected LinkedIn account here. If I cant
150
- confirm it, Ill ask for your LinkedIn URL or company website and use that to
151
- understand the company before we choose the target, offer, proof, and lead
152
- source.
149
+ I’ll check whether you already have a connected sender here. If I find one, Ill
150
+ ask whether thats you and whether this campaign is for that company. If not,
151
+ just paste your LinkedIn URL or company domain and I’ll look it up before we
152
+ keep going.
153
153
  ```
154
154
 
155
155
  Bad:
@@ -167,9 +167,15 @@ First I’ll check whether your Sellable token already tells me who you are.
167
167
  Better:
168
168
 
169
169
  ```text
170
- I’ll first check whether you already have a connected sender here. If not, I’ll
171
- ask for your LinkedIn URL or company website and use that to understand the
172
- campaign before we choose the audience and offer.
170
+ I found Christian Reyes connected here. Is that you, and is this campaign for
171
+ Sellable? If not, choose LinkedIn profile or company domain and I’ll ask you to
172
+ paste it in chat.
173
+ ```
174
+
175
+ Bad:
176
+
177
+ ```text
178
+ What should I use to confirm who this campaign is for?
173
179
  ```
174
180
 
175
181
  Bad: