@sellable/mcp 0.1.511 → 0.1.513

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.
@@ -0,0 +1,96 @@
1
+ ---
2
+ name: refill-sends-v2
3
+ description: Plan refill sends v2 work through the read-only three-lane dry-run planner.
4
+ visibility: public
5
+ allowed-tools:
6
+ - mcp__sellable__refill_sends_v2
7
+ - mcp__sellable__get_refill_plan_v2
8
+ - mcp__sellable__get_subskill_prompt
9
+ - mcp__sellable__get_subskill_asset
10
+ - mcp__sellable__get_auth_status
11
+ - mcp__sellable__get_active_workspace
12
+ - mcp__sellable__list_workspaces
13
+ - mcp__sellable__get_workspace
14
+ ---
15
+
16
+ # Refill Sends V2
17
+
18
+ Use this public command wrapper for refill planning requests such as "refill
19
+ sends", "fill evergreen senders", "load everyone up", "plan Damiano", or "show a
20
+ dry-run for this workspace".
21
+
22
+ Host command names:
23
+
24
+ - Claude Code: `/sellable:refill-sends-v2`
25
+ - Codex: `$sellable:refill-sends-v2`
26
+
27
+ This is plan-only, read-only, dry-run, zero mutations. It creates no campaigns,
28
+ does not prepare or approve messages, does not start campaigns, does not
29
+ schedule or send messages, does not refresh paid InMail credit facts, and does
30
+ not change source configuration. Execution remains in the Phase 86 workflow.
31
+
32
+ ## Entry
33
+
34
+ Resolve the explicit `workspaceId` from the request, automation config, or
35
+ active workspace readback. Scheduled or autonomous usage must carry
36
+ `workspaceId` on every tool call. If the workspace is missing or ambiguous, stop
37
+ with `WORKSPACE_REQUIRED`; do not switch the shared active workspace.
38
+
39
+ Start with the command contract:
40
+
41
+ ```text
42
+ refill_sends_v2({ workspaceId })
43
+ ```
44
+
45
+ Then load the internal workflow prompt and flow asset:
46
+
47
+ ```text
48
+ get_subskill_prompt({ subskillName: "refill-sends-v2-workflow" })
49
+ get_subskill_asset({ subskillName: "refill-sends-v2-workflow", assetPath: "core/flow.v1.json" })
50
+ ```
51
+
52
+ Continue both loads until `hasMore:false`; parse the flow JSON and verify
53
+ `workflow:"refill-sends-v2-workflow"` with a `v1` version before the planner
54
+ call.
55
+
56
+ Call the dry-run planner with the explicit workspace id:
57
+
58
+ ```text
59
+ get_refill_plan_v2({ workspaceId, intent:"auto", senderIds?, runState?, journal?, journalNote? })
60
+ ```
61
+
62
+ The default `intent:"auto"` checks the three lane-source families in order:
63
+
64
+ - `managed_waterfall` for product-managed evergreen waterfall lanes.
65
+ - `dashboard_evergreen` for dashboard-visible evergreen campaigns.
66
+ - `active_campaign` for regular active campaigns that should refill through a
67
+ deterministic lane chain.
68
+
69
+ Use `senderIds` only when the user scoped the request to exact senders. Use
70
+ `runState` only for an explicit what-if dry run; otherwise let the MCP read
71
+ local lane memory hints. Leave `journal` enabled unless the user specifically
72
+ asked for no local journal.
73
+
74
+ ## Report
75
+
76
+ Review the returned packet before giving a recommendation:
77
+
78
+ - `planRevision` starts with `pr1:`.
79
+ - `stateRevision` identifies the current readback.
80
+ - `packet` is the operator-facing facts receipt.
81
+ - `plans[]` contains per-sender lane decisions and itinerary details.
82
+ - `globalActionQueue[]` is a dry-run sequence only.
83
+ - `evergreen.laneOrder[].source` uses `managed_waterfall`,
84
+ `dashboard_evergreen`, or `active_campaign`.
85
+ - `evergreen.senderLaneSelections[].laneChain` records the ordered lane chain
86
+ when a regular active campaign chain is selected.
87
+ - Terminals can include `done` or `no_refillable_campaigns`.
88
+ - A membership 403 must return the structured `workspace_access` blocker; report
89
+ it as a read-only blocker, not a login retry.
90
+ - `journalPath` points to the dry-run markdown journal written by the MCP.
91
+ - `sideEffects` must be all false.
92
+
93
+ Report campaign names and sender names first, ids second. Include the lane
94
+ source, lane chain when present, chosen rung, itinerary, plan revision, journal
95
+ path, and any blockers or warnings. Stop after the report; do not execute the
96
+ action queue.
@@ -0,0 +1,127 @@
1
+ ---
2
+ name: refill-sends-v2-workflow
3
+ description: Internal read-only workflow for refill sends v2 dry-run planning.
4
+ visibility: internal
5
+ allowed-tools:
6
+ - mcp__sellable__refill_sends_v2
7
+ - mcp__sellable__get_refill_plan_v2
8
+ - mcp__sellable__get_subskill_prompt
9
+ - mcp__sellable__get_subskill_asset
10
+ - mcp__sellable__get_auth_status
11
+ - mcp__sellable__get_active_workspace
12
+ - mcp__sellable__list_workspaces
13
+ - mcp__sellable__get_workspace
14
+ ---
15
+
16
+ # Refill Sends V2 Workflow
17
+
18
+ This internal workflow is the read-only, dry-run, zero mutations plan surface
19
+ for refill sends v2. The workflow has three gates: bootstrap, plan, and report.
20
+ It covers product-managed evergreen workspaces, dashboard evergreen workspaces,
21
+ and non-evergreen active campaign workspaces without creating new campaigns.
22
+
23
+ Runtime flow asset: after loading this prompt, load
24
+ `get_subskill_asset({ subskillName: "refill-sends-v2-workflow", assetPath: "core/flow.v1.json" })`
25
+ through MCP, continue chunks until `hasMore:false`, parse the JSON, and verify
26
+ `workflow:"refill-sends-v2-workflow"` with a `v1` version before any planner
27
+ call. If the asset cannot load or parse, stop with
28
+ `blocked:refill_sends_v2_workflow_asset_unavailable`; do not emulate it from
29
+ local files or memory.
30
+
31
+ ## G0 Bootstrap Facts
32
+
33
+ Resolve the request-scoped `workspaceId` using read-only auth and workspace
34
+ tools. Scheduled or autonomous runs must not rely on implicit workspace state.
35
+ Call `refill_sends_v2({ workspaceId })` first to receive the command contract,
36
+ then call `get_refill_plan_v2({ workspaceId, intent:"auto" })` for the dry-run
37
+ packet.
38
+
39
+ Optional inputs:
40
+
41
+ - `senderIds`: exact sender scope when the user named senders.
42
+ - `intent`: defaults to `auto`. Use explicit `evergreen`, `plain`, or `active`
43
+ only for a what-if comparison.
44
+ - `runState`: synthetic v1 lane memory for what-if dry runs. Use it only when
45
+ the user intentionally wants a hypothetical cursor, pin, cooldown state, or
46
+ laneChain replay.
47
+ - `journal:false`: skip the local journal only when explicitly requested.
48
+ - `journalNote`: append operator context to the dry-run terminal section.
49
+
50
+ ## G1 Lane Sources
51
+
52
+ The planner reports the lane source for every selected lane:
53
+
54
+ 1. `managed_waterfall`: product-managed evergreen waterfall lanes.
55
+ 2. `dashboard_evergreen`: dashboard-visible evergreen campaigns that are not in
56
+ the managed waterfall snapshot.
57
+ 3. `active_campaign`: regular active campaigns ranked into a deterministic
58
+ laneChain for non-evergreen refill planning.
59
+
60
+ If no lane family has refillable campaigns, report `no_refillable_campaigns`.
61
+ If the user lacks membership on a requested workspace, report the structured
62
+ `workspace_access` blocker with the workspace id and journal path.
63
+
64
+ ## G2 Refill Ladder
65
+
66
+ The planner chooses from this locked rung order:
67
+
68
+ 1. `start_campaign`: a paused selected lane has scheduler-ready supply but must
69
+ be live before the scheduler can pick it up.
70
+ 2. `approve_messages`: generated rows are ready for a bounded approval step.
71
+ 3. `wait_for_active_work`: enrichment, generation, import, or preparation is
72
+ already active, so the next honest action is to wait for that work to finish.
73
+ 4. `enrich_more`: exact-set enrichment can close the current ready gap.
74
+ 5. `reconcile_source_copy`: same-source rows exist and can be copied without
75
+ changing source family or source fingerprint.
76
+ 6. `add_leads_same_source`: the same source path can add bounded new supply.
77
+ 7. `paid_lane_fallback`: paid InMail is blocked or below threshold, so the same
78
+ waterfall can fall back to an existing supported lane.
79
+ 8. `next_campaign`: the current lane is exhausted, cooling down, pinned away, or
80
+ unsafe, and the next surviving campaign lane should be inspected.
81
+ 9. `wait_for_scheduler`: ready or projected supply covers the target, and only
82
+ scheduler pickup remains.
83
+ 10. `done`: the sender or lane is complete for the selected target window, a
84
+ scheduler cap makes additional preparation unnecessary, or
85
+ `no_refillable_campaigns` is the honest terminal.
86
+
87
+ Forward-only lane rule: a lane can move to a later rung or a later surviving
88
+ campaign, but the dry-run packet must not jump backward to invent work that the
89
+ facts do not support. Pinned-campaign rule: a pinned campaign stays selected
90
+ until the planner proves a blocker, cooldown, exhaustion, or safer next lane.
91
+ Capped-is-complete rule: when scheduler capacity is lower than the requested
92
+ target and ready/projected coverage satisfies that cap, report `done` with the
93
+ cap reason. Honest-itinerary rule: show what was checked, what was skipped, and
94
+ why; never hide uncertainty behind a confident source recommendation.
95
+
96
+ Guardrails: no campaign creation, no provider-family switch, no threshold
97
+ lowering, no scheduler writes, no launch/send/archive/delete, no
98
+ brief/filter/message/sequence/sender mutation, no message preparation, no
99
+ message approval, no paid InMail credit refresh, no source mutation, no row
100
+ queueing, and no campaign status change.
101
+
102
+ ## Journal
103
+
104
+ `get_refill_plan_v2` writes a local dry-run journal unless `journal:false` is
105
+ passed. Read the returned `journalPath` from the tool result and include it in
106
+ the report. The journal contains bootstrap, plan, and terminal sections plus an
107
+ index line under the run journal directory. If the tool returns
108
+ `journalPath:null` with a `journalWriteFailed` warning, report the warning and
109
+ continue with the dry-run packet; do not retry by writing local files yourself.
110
+
111
+ ## Report Contract
112
+
113
+ Completion means packet reviewed and journal written. Merely calling
114
+ `get_refill_plan_v2` is not completion proof.
115
+
116
+ Report these facts:
117
+
118
+ - workspace id and selected sender scope;
119
+ - plan revision and state revision;
120
+ - selected campaign, lane source, and laneChain per sender;
121
+ - chosen rung and dry-run action queue;
122
+ - itinerary, skipped lanes, blockers, cooldowns, and warnings;
123
+ - `no_refillable_campaigns` terminals and `workspace_access` blockers;
124
+ - journal path;
125
+ - side effects proof, which must show all false values.
126
+
127
+ Stop after the report. This workflow never executes the action queue.
@@ -0,0 +1,266 @@
1
+ {
2
+ "version": "v1.0",
3
+ "workflow": "refill-sends-v2-workflow",
4
+ "principle": "Plan refill sends v2 as a read-only dry-run with zero mutations across managed_waterfall, dashboard_evergreen, and active_campaign lane sources.",
5
+ "laneSources": ["managed_waterfall", "dashboard_evergreen", "active_campaign"],
6
+ "terminalReasons": ["done", "no_refillable_campaigns"],
7
+ "blockers": ["workspace_access"],
8
+ "enumeratedRungs": [
9
+ "start_campaign",
10
+ "approve_messages",
11
+ "wait_for_active_work",
12
+ "enrich_more",
13
+ "reconcile_source_copy",
14
+ "add_leads_same_source",
15
+ "paid_lane_fallback",
16
+ "next_campaign",
17
+ "wait_for_scheduler",
18
+ "done"
19
+ ],
20
+ "requiredBootstrap": [
21
+ {
22
+ "tool": "get_auth_status",
23
+ "purpose": "Confirm MCP auth before reading workspace or plan facts."
24
+ },
25
+ {
26
+ "tool": "get_active_workspace",
27
+ "purpose": "Resolve explicit workspace evidence when the request did not provide workspaceId."
28
+ },
29
+ {
30
+ "tool": "refill_sends_v2",
31
+ "requiredValues": {
32
+ "workspaceId": "{workspaceId}"
33
+ },
34
+ "requiredOutput": [
35
+ "readOnly true",
36
+ "approvalContract says Phase 86 handles execution"
37
+ ]
38
+ },
39
+ {
40
+ "tool": "get_subskill_prompt",
41
+ "requiredValues": {
42
+ "subskillName": "refill-sends-v2-workflow"
43
+ },
44
+ "mustReadUntil": {
45
+ "hasMore": false
46
+ }
47
+ },
48
+ {
49
+ "tool": "get_subskill_asset",
50
+ "requiredValues": {
51
+ "subskillName": "refill-sends-v2-workflow",
52
+ "assetPath": "core/flow.v1.json"
53
+ },
54
+ "mustReadUntil": {
55
+ "hasMore": false
56
+ },
57
+ "validation": {
58
+ "workflow": "refill-sends-v2-workflow",
59
+ "versionPrefix": "v1",
60
+ "requiredTopLevelKeys": [
61
+ "states",
62
+ "gateOrder",
63
+ "enumeratedRungs",
64
+ "verification",
65
+ "laneSources",
66
+ "terminalReasons",
67
+ "blockers"
68
+ ]
69
+ }
70
+ },
71
+ {
72
+ "tool": "get_refill_plan_v2",
73
+ "requiredValues": {
74
+ "workspaceId": "{workspaceId}",
75
+ "intent": "auto"
76
+ },
77
+ "requiredOutput": [
78
+ "planRevision or workspace_access blocker",
79
+ "stateRevision",
80
+ "packet",
81
+ "journalPath",
82
+ "sideEffects"
83
+ ]
84
+ }
85
+ ],
86
+ "gateOrder": ["bootstrap", "plan", "report"],
87
+ "states": [
88
+ {
89
+ "id": "bootstrap",
90
+ "description": "Load the read-only command contract, workflow prompt, flow asset, and workspace facts.",
91
+ "allowedTools": [
92
+ "get_auth_status",
93
+ "get_active_workspace",
94
+ "list_workspaces",
95
+ "get_workspace",
96
+ "refill_sends_v2",
97
+ "get_subskill_prompt",
98
+ "get_subskill_asset",
99
+ "get_refill_plan_v2"
100
+ ],
101
+ "onEnter": [
102
+ {
103
+ "tool": "get_auth_status"
104
+ },
105
+ {
106
+ "tool": "refill_sends_v2",
107
+ "requiredFields": ["workspaceId"]
108
+ },
109
+ {
110
+ "tool": "get_subskill_prompt",
111
+ "requiredValues": {
112
+ "subskillName": "refill-sends-v2-workflow"
113
+ }
114
+ },
115
+ {
116
+ "tool": "get_subskill_asset",
117
+ "requiredValues": {
118
+ "subskillName": "refill-sends-v2-workflow",
119
+ "assetPath": "core/flow.v1.json"
120
+ }
121
+ }
122
+ ],
123
+ "transitions": {
124
+ "contract_loaded": "plan"
125
+ }
126
+ },
127
+ {
128
+ "id": "plan",
129
+ "description": "Call the read-only refill sends v2 dry-run planner exactly once for this invocation.",
130
+ "allowedTools": ["get_refill_plan_v2"],
131
+ "onEnter": [
132
+ {
133
+ "tool": "get_refill_plan_v2",
134
+ "requiredFields": ["workspaceId"],
135
+ "optionalFields": [
136
+ "intent",
137
+ "senderIds",
138
+ "runState",
139
+ "journal",
140
+ "journalNote"
141
+ ]
142
+ }
143
+ ],
144
+ "requiredOutput": [
145
+ "sideEffects all false",
146
+ "planRevision starts with pr1: unless blocker is workspace_access",
147
+ "journalPath reported",
148
+ "chosen evergreenRung is in enumeratedRungs",
149
+ "lane sources are managed_waterfall, dashboard_evergreen, or active_campaign",
150
+ "terminal can be no_refillable_campaigns"
151
+ ],
152
+ "allowedRungsSource": "enumeratedRungs",
153
+ "doNotAllow": [
154
+ "add_column",
155
+ "add_on_demand_leads",
156
+ "add_rubric_item",
157
+ "add_teammate",
158
+ "add_to_comment_campaign",
159
+ "add_to_connection_campaign",
160
+ "add_to_inmail_campaign",
161
+ "archive_campaign",
162
+ "attach_recommended_sequence",
163
+ "attach_sequence",
164
+ "bulk_enrich_with_prospeo",
165
+ "cancel_campaign_message_preparation",
166
+ "cancel_lead_import",
167
+ "capture_post_idea",
168
+ "check_rubric",
169
+ "commit_blueprint",
170
+ "confirm_harvest_job_companies",
171
+ "confirm_lead_list",
172
+ "confirm_prospeo_company_accounts",
173
+ "copy_sender_config",
174
+ "create_campaign",
175
+ "create_on_demand_campaign",
176
+ "create_on_demand_table",
177
+ "create_workspace",
178
+ "create_workflow_table",
179
+ "delete_column",
180
+ "delete_rubric_item",
181
+ "duplicate_campaign",
182
+ "enrich_with_prospeo",
183
+ "fill_campaign_horizon",
184
+ "get_or_create_direct_campaign_table",
185
+ "import_leads",
186
+ "load_csv_dnc_entries",
187
+ "load_csv_domains",
188
+ "load_csv_linkedin_leads",
189
+ "mark_post_published",
190
+ "migrate_flat_configs",
191
+ "pause_campaign",
192
+ "pause_direct_campaign",
193
+ "pause_on_demand_campaign",
194
+ "prepare_campaign_ab_test",
195
+ "queue_campaign_cells",
196
+ "queue_cells",
197
+ "record_campaign_review_batch",
198
+ "record_engage_proven_search",
199
+ "refill_sends",
200
+ "refresh_paid_inmail_credits",
201
+ "revise_message_template_and_rerun",
202
+ "save_domain_filters",
203
+ "save_hook_research",
204
+ "save_post_draft",
205
+ "save_rubrics",
206
+ "send_inbox_draft",
207
+ "send_inbox_manual_reply",
208
+ "set_active_workspace",
209
+ "set_campaign_waterfall_order",
210
+ "set_company_info",
211
+ "set_engage_state",
212
+ "set_engage_style_guide",
213
+ "set_headline_icp_criteria",
214
+ "set_sender_routing",
215
+ "setup_evergreen_campaigns",
216
+ "start_campaign",
217
+ "start_campaign_message_preparation",
218
+ "start_direct_campaign",
219
+ "start_on_demand_campaign",
220
+ "update_campaign",
221
+ "update_campaign_brief",
222
+ "update_cell",
223
+ "update_column",
224
+ "update_inbox_draft",
225
+ "update_post_draft",
226
+ "update_published_post_metrics",
227
+ "update_rubric_item",
228
+ "upsert_engage_tracked_person",
229
+ "upsert_rubric"
230
+ ],
231
+ "transitions": {
232
+ "packet_returned": "report",
233
+ "workspace_access": "report"
234
+ }
235
+ },
236
+ {
237
+ "id": "report",
238
+ "description": "Present packet, lane source, laneChain, itinerary, warnings, blockers, plan revision, and journal path; then stop.",
239
+ "allowedTools": [],
240
+ "onEnter": [
241
+ {
242
+ "action": "present_packet_itinerary_and_journal_path"
243
+ }
244
+ ],
245
+ "terminal": true
246
+ }
247
+ ],
248
+ "verification": {
249
+ "requiredProof": [
250
+ "sideEffects all false in get_refill_plan_v2 response",
251
+ "planRevision has pr1: prefix unless blocker is workspace_access",
252
+ "journalPath reported or journalWriteFailed warning surfaced",
253
+ "chosen evergreenRung belongs to enumeratedRungs",
254
+ "lane source belongs to managed_waterfall, dashboard_evergreen, active_campaign",
255
+ "laneChain recorded when active_campaign chain is selected",
256
+ "no_refillable_campaigns terminal reported when no lane is refillable",
257
+ "packet reviewed with itinerary and blockers"
258
+ ],
259
+ "notCompletionProof": [
260
+ "called get_refill_plan_v2 alone",
261
+ "action queue exists",
262
+ "ready rows alone",
263
+ "operator wants execution"
264
+ ]
265
+ }
266
+ }