@sellable/mcp 0.1.114 → 0.1.116

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 CHANGED
File without changes
package/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.114",
3
+ "version": "0.1.116",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -165,35 +165,56 @@ linked skill versions, runbooks, npm/package details, repo-local files, VPS or
165
165
  browser automation limitations, or local skill files in normal customer-facing
166
166
  copy.
167
167
 
168
- ## Codex Watch Link Handoff
169
-
170
- When a campaign tool returns `watchUrl`, treat it as a user-opened app link, not
171
- as permission to drive the browser. A valid handoff link must be a direct
172
- `/campaign-builder/{campaignId}?mode=claude|codex` URL with the auth token and
173
- workspace routing needed for auto-login. `create_campaign.watchUrl`,
174
- `create_campaign({ campaignId }).watchUrl`, and `get_campaign.watchUrl` are all
175
- acceptable only when they return that direct campaign-builder shape.
176
-
177
- Never call browser-opening tools, shell `open`, Computer Use, or in-app browser
178
- automation just because a watch link exists. Print the link and tell the user to
179
- Command-Enter/click it when they want to watch in the app. Use this shape:
168
+ ## Watch Link Handoff
169
+
170
+ When a campaign tool returns `watchUrl`, treat it as a user-opened watch link.
171
+ A valid handoff link must be a safe direct
172
+ `/campaign-builder/{campaignId}?mode=claude|codex|watch` URL.
173
+ `create_campaign.watchUrl`, `create_campaign({ campaignId }).watchUrl`, and
174
+ `get_campaign.watchUrl` are all acceptable only when they return that direct
175
+ campaign-builder shape, with `workspaceId` used only as a safe routing hint when
176
+ needed.
177
+
178
+ Do not claim Sellable can force every host to open links in a specific browser.
179
+ The host controls link-click behavior. Do not call Chrome, browser automation,
180
+ shell `open`, Computer Use, or in-app browser-control tools just because a
181
+ watch link exists.
182
+
183
+ - In Codex Desktop, clicking a URL can open the Codex in-app browser, but that
184
+ browser is only reliable for unauthenticated/public pages. Sellable campaign
185
+ watch pages may need a signed-in session. Tell the user to click the link
186
+ first; if it lands on sign-up/auth, they should open the same link in their
187
+ regular browser to watch real-time updates.
188
+ - In Claude Code, provide the link and direct the user to open it in their
189
+ browser. If their Claude Code setup opens links in an in-app/preview browser,
190
+ that is fine, but do not attempt to open Chrome for them.
191
+
192
+ Make the direct watch link easy to copy/open, then continue with explicit
193
+ customer-facing campaign progress and `get_campaign_navigation_state`
194
+ orientation checks. Use this fallback shape:
180
195
 
181
196
  ```text
182
- Watch link: {watchUrl}
197
+ Watch link: [Open campaign]({watchUrl})
183
198
 
184
- Command-Enter or click that link to watch the campaign in Sellable. I’ll keep
185
- the brief, lead source, and message-review steps explicit here as I build.
199
+ Click that link to watch the campaign. If it opens in an in-app browser and asks
200
+ you to sign in, open the same link in your regular browser so you can watch
201
+ real-time updates from your signed-in session. I’ll keep the brief, lead source,
202
+ and message-review steps explicit here as I build.
186
203
  ```
187
204
 
188
- The watch link should auto-login through the token in the URL. If the user says
189
- the link lands on auth, 404, permission, blank, or a visible error state, recover
190
- a fresh watch link once with `create_campaign({ campaignId })` or `get_campaign`
191
- and print that link. Do not claim the browser was opened, inspected, or
192
- synchronized.
205
+ If the user reports that the watch link lands on auth, 404, permission, blank,
206
+ or an error state, recover a fresh watch link once with
207
+ `create_campaign({ campaignId })` or `get_campaign`, then print the recovered
208
+ link. Do not claim the browser was opened, inspected, or synchronized.
209
+
210
+ Never print a placeholder watch link such as "Open campaign" or "link will
211
+ update once the shell is created." If the shell is not created yet, call
212
+ `create_campaign` first. If `create_campaign` does not return `watchUrl`, stop
213
+ and surface the missing watch-link error before lead sourcing.
193
214
 
194
215
  After every `update_campaign({ campaignId, currentStep })`, use
195
216
  `get_campaign_navigation_state` when available as a compact orientation check:
196
- match the saved campaign state to the expected watch-link step, explain the
217
+ match the expected watch-link step to the saved campaign state, explain the
197
218
  current state in one sentence, and only then continue. Sender selection belongs
198
219
  at Settings after message approval and 10-row validation. After message
199
220
  validation, use Settings to help the user connect or select a LinkedIn sender.
@@ -565,6 +586,8 @@ updates.
565
586
  `message-validation.md` proves the message-review safety-gate workflow ran,
566
587
  `message-review.md` approves the template, rubrics are saved, and the
567
588
  approved message set is synced into the campaign brief.
589
+ Do not ask the user to approve the brief before shell creation unless they
590
+ explicitly requested a no-write draft; the shell itself is the review surface.
568
591
  6. The main thread owns watch navigation. Call
569
592
  `mcp__sellable__update_campaign({ campaignId, currentStep })` before major
570
593
  visible work so the user can watch progress in the app: `create-offer` for
@@ -38,7 +38,11 @@ You can watch the lead source, filters, and messages fill in from here.
38
38
 
39
39
  No leads import and nothing sends yet.
40
40
 
41
- Watch link: {watchUrl}
41
+ Watch link: [Open campaign]({watchUrl})
42
+
43
+ Click that link to watch the campaign. If it opens in an in-app browser and asks
44
+ you to sign in, open the same link in your regular browser so you can watch
45
+ real-time updates from your signed-in session.
42
46
 
43
47
  Command-Enter or click that link to watch it in Sellable.
44
48
 
@@ -58,11 +62,33 @@ clear:
58
62
  - the brief is already visible in the campaign
59
63
  - import, sequence, and start are still blocked
60
64
 
65
+ ## Browser Choice
66
+
67
+ Do not claim Sellable can force the user's host to open links in a specific
68
+ browser. The host controls link-click behavior.
69
+ Do not call Chrome, browser automation, shell `open`, Computer Use, or in-app
70
+ browser-control tools just because a watch link exists.
71
+
72
+ - Codex Desktop URL clicks can open the Codex in-app browser, but that browser
73
+ is only reliable for public or unauthenticated pages. Sellable campaign watch
74
+ pages depend on a signed-in session, so if the in-app browser lands on
75
+ sign-up/auth, tell the user to open the same link in their regular browser to
76
+ watch real-time updates.
77
+ - Claude Code should provide the link and direct the user to open it in their
78
+ browser. If the user's Claude Code setup opens links in an in-app/preview
79
+ browser, that is fine, but do not attempt to open Chrome for them.
80
+
81
+ Surface the link as a normal Markdown link and continue with explicit progress
82
+ updates in chat.
83
+
61
84
  If shell creation fails or the response is missing `watchUrl`, stop and surface
62
85
  the error. Do not continue into campaignless source scouting in the active
63
86
  shell-first flow.
64
87
  If a legacy atomic-mint response is missing `watchUrl`, it is not a silent skip.
65
88
  Stop before `save_rubrics` and recover the missing watch URL first.
89
+ Never print a placeholder link such as "Open campaign" or "link will update
90
+ once the shell is created." In the active shell-first flow, the first visible
91
+ watch link must be the real `watchUrl` returned by `create_campaign`.
66
92
 
67
93
  ## Step Orientation
68
94
 
@@ -1,9 +0,0 @@
1
- {
2
- "parallelMode": "wide",
3
- "agentCount": 6,
4
- "maxToolCallsPerAgent": 2,
5
- "senderMaxAgents": 2,
6
- "senderMaxToolCallsPerAgent": 3,
7
- "progressMode": true,
8
- "debugMode": true
9
- }