@sellable/mcp 0.1.362 → 0.1.363

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.
@@ -7,9 +7,6 @@ allowed-tools:
7
7
  - mcp__sellable__get_campaign_refill_state
8
8
  - mcp__sellable__fill_campaign_horizon
9
9
  - mcp__sellable__get_campaign
10
- - mcp__sellable__get_campaign_context
11
- - mcp__sellable__update_campaign
12
- - mcp__sellable__get_provider_prompt
13
10
  - mcp__sellable__get_campaign_message_preparation_status
14
11
  - mcp__sellable__start_campaign_message_preparation
15
12
  - mcp__sellable__cancel_campaign_message_preparation
@@ -17,7 +14,6 @@ allowed-tools:
17
14
  - mcp__sellable__wait_for_lead_list_ready
18
15
  - mcp__sellable__confirm_lead_list
19
16
  - mcp__sellable__search_signals
20
- - mcp__sellable__select_promising_posts
21
17
  - mcp__sellable__fetch_post_engagers
22
18
  - mcp__sellable__search_sales_nav
23
19
  - mcp__sellable__lookup_sales_nav_filter
@@ -31,10 +27,6 @@ allowed-tools:
31
27
  - mcp__sellable__get_rows
32
28
  - mcp__sellable__get_rows_minimal
33
29
  - mcp__sellable__get_table_rows
34
- - mcp__sellable__get_campaign_table_schema
35
- - mcp__sellable__select_campaign_cells
36
- - mcp__sellable__wait_for_campaign_processing
37
- - mcp__sellable__get_sender
38
30
  ---
39
31
 
40
32
  # Refill Sends Workflow
@@ -109,42 +101,6 @@ Source replenishment choices:
109
101
  source prospects into the same campaign/source-list path, then confirm
110
102
  readiness.
111
103
 
112
- ### Running Campaign Signal Discovery Recovery
113
-
114
- For an already-running regular campaign that needs same-campaign Signal
115
- Discovery replenishment, treat the watch/current-step transition as a guarded
116
- repair, not as normal create-campaign navigation.
117
-
118
- Do not call `search_signals` with `currentStep:"signal-discovery"` directly from `currentStep:"running"`. The campaign step guard intentionally rejects that
119
- backwards transition. After exact approval and a fresh refill-state reread, clear `currentStep` only if it still exactly matches `running`:
120
-
121
- ```text
122
- update_campaign({ campaignId, currentStep:null, clearCurrentStepIfMatches:"running" })
123
- ```
124
-
125
- Then register provider preflight and run a campaign-scoped `search_signals` so
126
- post rows exist in the campaign's Signal Discovery state:
127
-
128
- ```text
129
- get_provider_prompt({ provider:"signal-discovery", campaignOfferId, confirmed:true })
130
- search_signals({ campaignOfferId, currentStep:"signal-discovery", confirmed:true, ... })
131
- ```
132
-
133
- Use `select_promising_posts` before importing. For a fresh source refill, prefer
134
- `selectionMode:"replace"` and `scrapePlanMode:"capacity-target"` with the
135
- approved `targetEngagerCount` and `maxPostsToScrape`. If the approved post set cannot cover the target, do not knowingly run an under-capacity scrape; ask for approval to expand the selected post set or switch source.
136
-
137
- If `import_leads` returns `reusedExistingSourceList` but the user explicitly
138
- approved a different selected-post scrape, retry `import_leads` with the existing `sourceLeadListId` from that response or from refill state. For Signal
139
- Discovery this bypasses the stale reuse guard and materializes the newly
140
- selected campaign-scoped posts into a fresh source list.
141
-
142
- After `wait_for_lead_list_ready`, call `confirm_lead_list` with the new
143
- source-list id and same campaign id. Pass `currentStep:"running"` to `confirm_lead_list` for an ACTIVE already-running campaign so the watched state
144
- returns to Running after same-campaign source rows are copied. Do not call
145
- `update_campaign` to fake this after the copy; `confirm_lead_list` owns the
146
- post-copy state transition.
147
-
148
104
  Before any source mutation, show exact approval evidence: workspace id,
149
105
  campaign id, workflow table id, source/provider id, source-list id when known,
150
106
  import caps, target dates/caps, dedupe/DNC/provider exclusion expectations, and
@@ -179,28 +135,11 @@ Before prep or approval mutation, reread `get_campaign_refill_state` and compare
179
135
  If they changed, stop. A second concurrent refill run must see the first run's
180
136
  import/prep state on reread and avoid duplicate work.
181
137
 
182
- After same-campaign source copy, inspect the actual campaign-table position of
183
- the copied rows before starting prep. Newly copied rows often land after the first 100 table rows. Use `get_campaign_table_schema` to read the `reviewBatch`,
184
- then use `select_campaign_cells` diagnostics against
185
- `rowSelector:{ type:"reviewBatch" }` for `enrich`, `generateMessage`, and
186
- `approved` roles when needed.
187
-
188
- If review-batch enrich cells are pending or Generate Message cells are
189
- dependency-blocked, omit `maxRowsToCheck` so the adaptive prep job can cover the
190
- bounded table scan, or set a bounded cap high enough to include appended rows
191
- when row count evidence requires it. Do not run a fixed `maxRowsToCheck:100` prep pass after appending rows to a larger existing campaign table; it can spend
192
- the whole budget on older rows and miss the refill batch.
193
-
194
138
  Scheduled success requires a post-action reread proving scheduler-owned cells
195
139
  with non-null `scheduledFor`. Prepared, approved, and ready-to-schedule rows are
196
140
  intermediate states; report them as awaiting scheduler unless scheduled cells
197
141
  are present.
198
142
 
199
- preparedMessages can remain 0 while scheduler-ready state changes downstream.
200
- After a prep job reaches a terminal state, run `wait_for_campaign_processing`
201
- when generated/pass counts are still settling, then poll `get_campaign_refill_state` until `readyToSchedule` drops, scheduled counts increase, or the state clearly
202
- remains awaiting scheduler. Do not force scheduler fields directly.
203
-
204
143
  ## Evergreen Campaign Discipline
205
144
 
206
145
  `fill_campaign_horizon` is a legacy evergreen-only lower-level primitive. Call it
@@ -1,113 +0,0 @@
1
- type SetupEvergreenCampaignsInput = {
2
- mode?: "plan" | "verify";
3
- depth?: "structure_only" | "customer_visible";
4
- yolo?: boolean;
5
- allConnectedSenders?: boolean;
6
- selectedSenderIds?: string[];
7
- postEngagerSenderIds?: string[];
8
- sharedSenderIds?: string[];
9
- bindings?: Array<{
10
- laneKey: string;
11
- campaignId: string;
12
- tableId: string;
13
- }>;
14
- planRevision?: string;
15
- selectedActionIds?: string[];
16
- receipts?: unknown[];
17
- };
18
- export declare const setupEvergreenCampaignsToolDefinitions: {
19
- name: string;
20
- description: string;
21
- inputSchema: {
22
- type: string;
23
- properties: {
24
- mode: {
25
- type: string;
26
- enum: string[];
27
- description: string;
28
- };
29
- depth: {
30
- type: string;
31
- enum: string[];
32
- description: string;
33
- };
34
- yolo: {
35
- type: string;
36
- description: string;
37
- };
38
- allConnectedSenders: {
39
- type: string;
40
- description: string;
41
- };
42
- selectedSenderIds: {
43
- type: string;
44
- items: {
45
- type: string;
46
- };
47
- maxItems: number;
48
- description: string;
49
- };
50
- postEngagerSenderIds: {
51
- type: string;
52
- items: {
53
- type: string;
54
- };
55
- maxItems: number;
56
- description: string;
57
- };
58
- sharedSenderIds: {
59
- type: string;
60
- items: {
61
- type: string;
62
- };
63
- maxItems: number;
64
- description: string;
65
- };
66
- bindings: {
67
- type: string;
68
- maxItems: number;
69
- items: {
70
- type: string;
71
- properties: {
72
- laneKey: {
73
- type: string;
74
- };
75
- campaignId: {
76
- type: string;
77
- };
78
- tableId: {
79
- type: string;
80
- };
81
- };
82
- required: string[];
83
- additionalProperties: boolean;
84
- };
85
- description: string;
86
- };
87
- planRevision: {
88
- type: string;
89
- description: string;
90
- };
91
- selectedActionIds: {
92
- type: string;
93
- items: {
94
- type: string;
95
- };
96
- maxItems: number;
97
- description: string;
98
- };
99
- receipts: {
100
- type: string;
101
- maxItems: number;
102
- items: {
103
- type: string;
104
- };
105
- description: string;
106
- };
107
- };
108
- required: never[];
109
- additionalProperties: boolean;
110
- };
111
- }[];
112
- export declare function setupEvergreenCampaigns(input: SetupEvergreenCampaignsInput): Promise<unknown>;
113
- export {};
@@ -1,100 +0,0 @@
1
- import { getApi } from "../api.js";
2
- async function postSetupEvergreenCampaigns(body) {
3
- const api = getApi();
4
- return api.post("/api/v3/mcp/setup-evergreen-campaigns", body);
5
- }
6
- export const setupEvergreenCampaignsToolDefinitions = [
7
- {
8
- name: "setup_evergreen_campaigns",
9
- description: "Evergreen campaign setup plan/verify command. Use plan mode first to inspect exact workspace/sender/campaign/table/source state and receive immutable lane packets. `selectedSenderIds` is a legacy shorthand for both scopes; prefer `postEngagerSenderIds` for the Post Engagers sender scope and `sharedSenderIds` for the shared lane sender scope when they differ. The command plans one Post Engagers lane per post-engager sender plus shared Signal Discovery and Shared Cold Fallback lanes for the shared sender set. yolo is only a parent-skill auto-execution hint for safe lane packets; this backend command remains read-only in plan mode and verifies receipts in verify mode. When safe-yolo needs normal setup work, the parent skill may ask for bounded delegated approval: one approval over the current planRevision, selected action ids, caps, allowed side-effect classes, and stop conditions lets lane workers execute without per-substep approval while staying inside that packet. Lane workers must execute creation, source import, create-campaign workflow steps, generate-messages, sequence attachment, pause_campaign review-state transition when the current table is still DRAFT, and review readiness through existing create-campaign workflow/subskills, then return receipts here for verification. Customer-visible verify receipts must include createCampaignStepReceipt with setupPlanCall, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall. messageDraftingReceipt must use statusSource:'branch' or statusSource:'packaged-generate-messages-worker' and include proof that generate-messages was loaded, start_campaign_message_preparation/get_campaign_message_preparation_status ran when the packaged worker path is used, validationResult:'passed', a passed qualityReview, and at least 3 concrete sampleMessages with row ids, generated message text, pass verdicts, and no issues; Shared Cold Fallback samples with a standalone name followed by 'Hey there' are rejected. This command does not launch campaigns, does not schedule sends, does not assign scheduler-owned send fields, does not raw-write campaign status, does not archive/delete cleanup targets, and does not spend paid credits.",
10
- inputSchema: {
11
- type: "object",
12
- properties: {
13
- mode: {
14
- type: "string",
15
- enum: ["plan", "verify"],
16
- description: 'Defaults to "plan". Verify only validates worker receipts.',
17
- },
18
- depth: {
19
- type: "string",
20
- enum: ["structure_only", "customer_visible"],
21
- description: 'Use "customer_visible" for full setup proof or "structure_only" when only ensuring lane shells/config.',
22
- },
23
- yolo: {
24
- type: "boolean",
25
- description: "plan mode only. Requests auto-executable lane packets when state is safe; never authorizes cleanup, launch, scheduling, sending, or ambiguous target choice.",
26
- },
27
- allConnectedSenders: {
28
- type: "boolean",
29
- description: "Plan sender-owned Post Engagers lanes for all eligible connected senders in the active workspace.",
30
- },
31
- selectedSenderIds: {
32
- type: "array",
33
- items: { type: "string" },
34
- maxItems: 25,
35
- description: "Legacy shorthand: exact OutboundSenderIdentity ids for both sender-owned Post Engagers lanes and shared-lane sender set. Prefer scoped fields when those differ.",
36
- },
37
- postEngagerSenderIds: {
38
- type: "array",
39
- items: { type: "string" },
40
- maxItems: 25,
41
- description: "Exact OutboundSenderIdentity ids that should receive sender-owned Post Engagers lanes.",
42
- },
43
- sharedSenderIds: {
44
- type: "array",
45
- items: { type: "string" },
46
- maxItems: 25,
47
- description: "Exact OutboundSenderIdentity ids attached to shared Signal Discovery and Shared Cold Fallback lanes.",
48
- },
49
- bindings: {
50
- type: "array",
51
- maxItems: 20,
52
- items: {
53
- type: "object",
54
- properties: {
55
- laneKey: { type: "string" },
56
- campaignId: { type: "string" },
57
- tableId: { type: "string" },
58
- },
59
- required: ["laneKey", "campaignId", "tableId"],
60
- additionalProperties: false,
61
- },
62
- description: "Exact existing campaign/table bindings to reuse for lane keys. Do not pass names.",
63
- },
64
- planRevision: {
65
- type: "string",
66
- description: "Required for verify. Copy from the immediately preceding plan.",
67
- },
68
- selectedActionIds: {
69
- type: "array",
70
- items: { type: "string" },
71
- maxItems: 20,
72
- description: "Required for verify. Immutable action ids selected from the current plan.",
73
- },
74
- receipts: {
75
- type: "array",
76
- maxItems: 20,
77
- items: { type: "object" },
78
- description: "Required for verify. Structured lane worker receipts from create-campaign/source/message/sequence execution. Customer-visible lanes must include createCampaignStepReceipt with setupPlanCall, campaignBriefReceipt, sourceDecisionReceipt, filterDecisionReceipt, messageDraftingReceipt, reviewBatchReceipt, sequenceReceipt, and verifyCall.",
79
- },
80
- },
81
- required: [],
82
- additionalProperties: false,
83
- },
84
- },
85
- ];
86
- export function setupEvergreenCampaigns(input) {
87
- return postSetupEvergreenCampaigns({
88
- mode: input.mode,
89
- yolo: input.yolo,
90
- depth: input.depth,
91
- allConnectedSenders: input.allConnectedSenders,
92
- selectedSenderIds: input.selectedSenderIds,
93
- postEngagerSenderIds: input.postEngagerSenderIds,
94
- sharedSenderIds: input.sharedSenderIds,
95
- bindings: input.bindings,
96
- planRevision: input.planRevision,
97
- selectedActionIds: input.selectedActionIds,
98
- receipts: input.receipts,
99
- });
100
- }