@sellable/mcp 0.1.104 → 0.1.105
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/agents/source-scout-linkedin-engagement.md +4 -4
- package/agents/source-scout-prospeo-contact.md +4 -3
- package/agents/source-scout-sales-nav.md +3 -2
- package/dist/tools/leads.js +3 -3
- package/package.json +1 -1
- package/skills/create-campaign-v2/SKILL.md +12 -0
- package/skills/create-campaign-v2/core/flow.v2.json +28 -1
|
@@ -7,10 +7,10 @@ Required first step:
|
|
|
7
7
|
- Load the canonical provider prompt before searching. If the parent supplies a
|
|
8
8
|
draft `campaignOfferId`, call `get_provider_prompt({ provider:
|
|
9
9
|
"signal-discovery", campaignOfferId, confirmed: true })` and include that same
|
|
10
|
-
`campaignOfferId`
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
campaignless preview mode.
|
|
10
|
+
`campaignOfferId` plus `currentStep: "signal-discovery"` in `search_signals`
|
|
11
|
+
so the user can watch source work in the campaign UI. Treat that as a
|
|
12
|
+
campaign-attached persisted search; do not run a post-mint search without the
|
|
13
|
+
campaign ID. If no campaign ID is supplied, run campaignless preview mode.
|
|
14
14
|
|
|
15
15
|
Use the inherited Sellable MCP tools when available:
|
|
16
16
|
|
|
@@ -6,9 +6,10 @@ Required first step:
|
|
|
6
6
|
|
|
7
7
|
- Load the canonical provider prompt before searching. If the parent supplies a
|
|
8
8
|
draft `campaignOfferId`, call `get_provider_prompt({ provider: "prospeo",
|
|
9
|
-
campaignOfferId, confirmed: true })` and include that same `campaignOfferId`
|
|
10
|
-
`search_prospeo` so the user can watch source
|
|
11
|
-
campaign ID is supplied, run campaignless
|
|
9
|
+
campaignOfferId, confirmed: true })` and include that same `campaignOfferId`
|
|
10
|
+
plus `currentStep: "prospeo"` in `search_prospeo` so the user can watch source
|
|
11
|
+
work in the campaign UI. If no campaign ID is supplied, run campaignless
|
|
12
|
+
preview mode. Treat post-mint
|
|
12
13
|
searches with `campaignOfferId` as campaign-attached persisted search tabs;
|
|
13
14
|
do not run a live campaign search without the campaign ID.
|
|
14
15
|
|
|
@@ -7,8 +7,9 @@ Required first step:
|
|
|
7
7
|
- Load the canonical provider prompt before searching. If the parent supplies a
|
|
8
8
|
draft `campaignOfferId`, call `get_provider_prompt({ provider: "sales-nav",
|
|
9
9
|
campaignOfferId, confirmed: true })` and include that same `campaignOfferId` in
|
|
10
|
-
`search_sales_nav` so the user can watch
|
|
11
|
-
campaign ID is supplied, run
|
|
10
|
+
`search_sales_nav` with `currentStep: "sales-nav"` so the user can watch
|
|
11
|
+
source work in the campaign UI. If no campaign ID is supplied, run
|
|
12
|
+
campaignless preview mode. Treat post-mint
|
|
12
13
|
searches with `campaignOfferId` as campaign-attached persisted search tabs;
|
|
13
14
|
do not run a live campaign search without the campaign ID.
|
|
14
15
|
|
package/dist/tools/leads.js
CHANGED
|
@@ -594,7 +594,7 @@ export const leadToolDefinitions = [
|
|
|
594
594
|
},
|
|
595
595
|
{
|
|
596
596
|
name: "search_sales_nav",
|
|
597
|
-
description: 'Search LinkedIn Sales Navigator. Requires get_provider_prompt({ provider: "sales-nav" }) first. Returns normalized results with pagination. `campaignOfferId` is optional for directional preview runs; include it only when the search should be associated with a campaign.',
|
|
597
|
+
description: 'Search LinkedIn Sales Navigator. Requires get_provider_prompt({ provider: "sales-nav" }) first. Returns normalized results with pagination. `campaignOfferId` is optional for directional preview runs; include it only when the search should be associated with a campaign. Post-mint create-campaign-v2 watch runs MUST pass campaignOfferId and currentStep: "sales-nav" so the search appears in the watched campaign UI. Omitting campaignOfferId post-mint orphans the search from the UI.',
|
|
598
598
|
inputSchema: {
|
|
599
599
|
type: "object",
|
|
600
600
|
properties: {
|
|
@@ -739,7 +739,7 @@ export const leadToolDefinitions = [
|
|
|
739
739
|
},
|
|
740
740
|
{
|
|
741
741
|
name: "search_prospeo",
|
|
742
|
-
description: 'Search Prospeo for people using filters and optional domainFilterId. Requires get_provider_prompt({ provider: "prospeo" }) first. When targeting known accounts, call load_csv_domains for CSV-on-disk workflows or save_domain_filters for pasted/raw domain lists, then pass domainFilterId. Raw domain inputs and company-name targeting are NOT supported in this MCP tool. Strategy: start with 2-3 high-signal filters (title/seniority + industry or domainFilterId + headcount), then tighten one filter at a time. For security, AppSec, SOC, RevOps, Demand Gen, and similar function-specific lanes, do not widen with bare seniority labels like "Head" or "Director" alone; pair them with explicit function-title keywords and inspect the sample for off-function `Head of X` leakage. Prefer person location over company HQ unless HQ is explicitly needed. `campaignOfferId` routing rule: OMIT campaignOfferId ONLY in pre-mint Phase 84 `find leads` discovery mode (validating ICP before the commit gate). In every other context — post-mint lead additions, operator-driven searches on a live campaign, any search where the intent is to persist results to a specific campaign — you MUST pass campaignOfferId so the search shows up in that campaign\'s Contact Search panel. Omitting campaignOfferId post-mint orphans the search from the UI. Returns normalized results with pagination.',
|
|
742
|
+
description: 'Search Prospeo for people using filters and optional domainFilterId. Requires get_provider_prompt({ provider: "prospeo" }) first. When targeting known accounts, call load_csv_domains for CSV-on-disk workflows or save_domain_filters for pasted/raw domain lists, then pass domainFilterId. Raw domain inputs and company-name targeting are NOT supported in this MCP tool. Strategy: start with 2-3 high-signal filters (title/seniority + industry or domainFilterId + headcount), then tighten one filter at a time. For security, AppSec, SOC, RevOps, Demand Gen, and similar function-specific lanes, do not widen with bare seniority labels like "Head" or "Director" alone; pair them with explicit function-title keywords and inspect the sample for off-function `Head of X` leakage. Prefer person location over company HQ unless HQ is explicitly needed. `campaignOfferId` routing rule: OMIT campaignOfferId ONLY in pre-mint Phase 84 `find leads` discovery mode (validating ICP before the commit gate). In every other context — post-mint lead additions, operator-driven searches on a live campaign, any search where the intent is to persist results to a specific campaign — you MUST pass campaignOfferId so the search shows up in that campaign\'s Contact Search panel. Post-mint create-campaign-v2 watch runs MUST pass currentStep: "prospeo". Omitting campaignOfferId post-mint orphans the search from the UI. Returns normalized results with pagination.',
|
|
743
743
|
inputSchema: {
|
|
744
744
|
type: "object",
|
|
745
745
|
properties: {
|
|
@@ -848,7 +848,7 @@ export const leadToolDefinitions = [
|
|
|
848
848
|
},
|
|
849
849
|
{
|
|
850
850
|
name: "search_signals",
|
|
851
|
-
description: 'Search LinkedIn posts for signal discovery. Requires get_provider_prompt({ provider: "signal-discovery" }) first. Supports keyword search, profile posts, company posts, or a single post URL. Use campaignless preview mode for directional discovery; include `campaignOfferId`
|
|
851
|
+
description: 'Search LinkedIn posts for signal discovery. Requires get_provider_prompt({ provider: "signal-discovery" }) first. Supports keyword search, profile posts, company posts, or a single post URL. Use campaignless preview mode for directional discovery; include `campaignOfferId` when the search should persist into campaign state. Post-mint create-campaign-v2 watch runs MUST pass campaignOfferId and currentStep: "signal-discovery" so the search appears in the watched campaign UI. Omitting campaignOfferId post-mint orphans the search from the UI. Returns a compact summary with recommended posts to avoid context bloat.',
|
|
852
852
|
inputSchema: {
|
|
853
853
|
type: "object",
|
|
854
854
|
properties: {
|
package/package.json
CHANGED
|
@@ -432,6 +432,13 @@ to be worth a LinkedIn test. I'll compare source paths by expected volume,
|
|
|
432
432
|
sampled ICP fit, activity/warmth signal, cleanup risk, and tradeoffs. This
|
|
433
433
|
usually takes ~3-5 min, and I'll show you the source decision + sample before
|
|
434
434
|
anything goes live.`
|
|
435
|
+
- In watch mode, do not leave the user sitting on only `pick-provider` while
|
|
436
|
+
source scouts run. Move the campaign to the likely primary source lane
|
|
437
|
+
(`signal-discovery`, `sales-nav`, or `prospeo`) before background source
|
|
438
|
+
scouts, then run the first campaign-attached provider prompt + provider search
|
|
439
|
+
in the parent thread with `campaignOfferId`, `confirmed: true`, and
|
|
440
|
+
`currentStep` when the tool accepts it. Background scouts may continue after
|
|
441
|
+
the visible campaign tab exists.
|
|
435
442
|
- After the lead sample/source decision is ready and approved,
|
|
436
443
|
show the next progress line:
|
|
437
444
|
`Lead source is set. I'll import the first 15-row review batch into the
|
|
@@ -542,6 +549,11 @@ message we should test.`
|
|
|
542
549
|
then draft the message from the same sample.` Never say `kicking off two
|
|
543
550
|
workstreams`, `in parallel`, or `background` unless parallel branches were
|
|
544
551
|
actually launched.
|
|
552
|
+
- Source scout parallelism must not hide all provider work from the watch UI.
|
|
553
|
+
The parent thread owns the first visible provider search: call the chosen
|
|
554
|
+
provider prompt/search with the minted CampaignOffer id and provider
|
|
555
|
+
`currentStep` before waiting on source-scout results, so relevant search tabs
|
|
556
|
+
appear in real time.
|
|
545
557
|
- For post-lead workstreams, first call
|
|
546
558
|
`get_post_find_leads_scout_registry` and launch exactly the returned
|
|
547
559
|
`filter-leads` and `message-generation` scouts when real subagents are
|
|
@@ -520,6 +520,33 @@
|
|
|
520
520
|
"when": "before_source_scouts_or_provider_search",
|
|
521
521
|
"chatRenderRule": "Move the campaign watch view to Find Contacts before the main thread starts comparing source paths. Do not mention MCP or local artifacts."
|
|
522
522
|
},
|
|
523
|
+
{
|
|
524
|
+
"action": "advance_watch_to_initial_source_lane",
|
|
525
|
+
"tool": "update_campaign",
|
|
526
|
+
"requiredFields": [
|
|
527
|
+
"campaignId",
|
|
528
|
+
"currentStep"
|
|
529
|
+
],
|
|
530
|
+
"currentStepByPrimaryLane": {
|
|
531
|
+
"signals": "signal-discovery",
|
|
532
|
+
"salesNav": "sales-nav",
|
|
533
|
+
"prospeo": "prospeo",
|
|
534
|
+
"apollo": "apollo-ai",
|
|
535
|
+
"existingList": "saved-lists",
|
|
536
|
+
"uploadedDomains": "prospeo"
|
|
537
|
+
},
|
|
538
|
+
"when": "before_background_source_scouts",
|
|
539
|
+
"rule": "Choose the likely primary visible source lane from source intake, brief preference, or the best first lane the main thread will actually search. Do this before waiting on background scouts so watch mode never sits on only Pick Provider while source work happens elsewhere."
|
|
540
|
+
},
|
|
541
|
+
{
|
|
542
|
+
"action": "run_first_campaign_attached_source_search",
|
|
543
|
+
"requiredFields": [
|
|
544
|
+
"campaignOfferId",
|
|
545
|
+
"currentStep"
|
|
546
|
+
],
|
|
547
|
+
"before": "waiting_on_background_source_scouts",
|
|
548
|
+
"rule": "Before relying on background source scouts, the parent thread must run the first provider prompt + provider search for the chosen visible lane with campaignOfferId and currentStep (signal-discovery, sales-nav, or prospeo) so the campaign UI creates the corresponding live search/tab. Background scouts may continue after that, but the user must see at least one relevant campaign-attached search begin in the watched page."
|
|
549
|
+
},
|
|
523
550
|
{
|
|
524
551
|
"action": "render_find_leads_progress",
|
|
525
552
|
"requiredVisibleContent": [
|
|
@@ -555,7 +582,7 @@
|
|
|
555
582
|
"action": "run_subskill",
|
|
556
583
|
"target": "find-leads",
|
|
557
584
|
"mode": "campaign-attached-required",
|
|
558
|
-
"sourceScoutRule": "Shell-first flow requires the CampaignOffer campaignId from durable state. Pass campaignId as campaignOfferId into every provider prompt/search that can persist source state (`get_provider_prompt({ provider, campaignOfferId, confirmed: true })`, `search_signals`, `search_sales_nav`, `search_prospeo`) so the user can watch the selected source inside the campaign. The later import_leads call must use the same campaignOfferId. When several source lanes are credible, scout them independently, then write one primary source recommendation and any runner-up tradeoffs. Do not import, confirm, enrich, queue, or start leads during source discovery."
|
|
585
|
+
"sourceScoutRule": "Shell-first flow requires the CampaignOffer campaignId from durable state. Pass campaignId as campaignOfferId into every provider prompt/search that can persist source state (`get_provider_prompt({ provider, campaignOfferId, confirmed: true })`, `search_signals`, `search_sales_nav`, `search_prospeo`) and include currentStep for tools that accept it so the user can watch the selected source inside the campaign. In watch mode, run the first campaign-attached provider search in the parent thread before waiting on background scouts; subagents can explore runner-up lanes after the visible campaign tab exists. The later import_leads call must use the same campaignOfferId. When several source lanes are credible, scout them independently, then write one primary source recommendation and any runner-up tradeoffs. Do not import, confirm, enrich, queue, or start leads during source discovery."
|
|
559
586
|
},
|
|
560
587
|
{
|
|
561
588
|
"action": "optional_debug_artifacts",
|