scrapeloop-mcp 0.14.0 → 0.16.0
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/package.json +1 -1
- package/src/index.js +14 -2
- package/src/mutation-policies.js +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrapeloop-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "Scrapeloop MCP server - set up and run Scrapeloop end-to-end (integrations, scraping, lead database, verification, cleaners, enrichment, strategies, Instantly campaigns) from any MCP client (Claude Desktop, Cursor, ChatGPT, …).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
package/src/index.js
CHANGED
|
@@ -551,7 +551,7 @@ const TOOLS = {
|
|
|
551
551
|
},
|
|
552
552
|
create_scrape_plan: {
|
|
553
553
|
def: {
|
|
554
|
-
description: 'Save a scrape plan into an existing writable Table. Native coverage_mode complete requires start_mode draft, a stable scope_operation_id and no monthly raw-row caps or repeats. It saves the whole scope in restartable batches and
|
|
554
|
+
description: 'Save a scrape plan into an existing writable Table. Native coverage_mode complete requires start_mode draft, a stable scope_operation_id and no monthly raw-row caps or repeats. It saves the whole scope in restartable batches and requires saved shared budgets and the exact complete-plan launch review before Start. Set start_mode to draft to save without starting searches or spending. The default active mode starts approved work and can spend credits or vendor money. Preview the exact choices first and stay within the approved limit and time period. Pass explicit territory values and matching billing limits. Reuse the same idempotency_key after a lost reply, inspect list_scrape_plans and never create a second plan to escape an uncertain result. Over-time limits reset monthly; a total one-time approval does not authorize recurring spend.',
|
|
555
555
|
inputSchema: obj({ ...PLAN_FIELDS, scope_operation_id: { ...S, format: 'uuid' }, target_list_id: { ...S, format: 'uuid' }, start_mode: { ...S, enum: ['active', 'draft'] } }, [...PLAN_REQUIRED, 'target_list_id']),
|
|
556
556
|
},
|
|
557
557
|
run: ({ idempotency_key: _key, ...body }) => api('POST', '/plans', body),
|
|
@@ -587,7 +587,7 @@ const TOOLS = {
|
|
|
587
587
|
run: (a) => api('GET', `/plans/${enc(a.plan_id)}/budget`),
|
|
588
588
|
},
|
|
589
589
|
set_scrape_plan_budget: {
|
|
590
|
-
def: { description: 'Save reviewed credit limits and Table ownership for a paused complete-search plan with a ready-email goal. Include Raw, Email ready and every check Table. One Table belongs to one budget. Preserve expected_revision from the current budget; omit it only for the first save. A lost reply requires readback before retry. This starts no work and does not enable checks. BYOK paid vendors are not supported by these limits.
|
|
590
|
+
def: { description: 'Save reviewed credit limits and Table ownership for a paused complete-search plan with a ready-email goal. Include Raw, Email ready and every check Table. One Table belongs to one budget. Preserve expected_revision from the current budget; omit it only for the first save. A lost reply requires readback before retry. This starts no work and does not enable checks. BYOK paid vendors are not supported by these limits. Use review_complete_scrape_plan to check readiness before requesting exact launch approval.', inputSchema: obj({
|
|
591
591
|
plan_id: { ...S, format: 'uuid' }, expected_revision: { ...S, format: 'uuid' },
|
|
592
592
|
limits: obj({
|
|
593
593
|
monthly_lead_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
@@ -600,6 +600,14 @@ const TOOLS = {
|
|
|
600
600
|
}, ['plan_id', 'limits', 'list_ids']) },
|
|
601
601
|
run: ({ plan_id, ...body }) => api('PUT', `/plans/${enc(plan_id)}/budget`, body),
|
|
602
602
|
},
|
|
603
|
+
review_complete_scrape_plan: {
|
|
604
|
+
def: { description: 'Read the exact complete-search scope, ready-output goal, Table rules, shared limits and current launch blockers. Free read. This does not start source work, checks or campaigns.', inputSchema: obj({ plan_id: { ...S, format: 'uuid' } }, ['plan_id']) },
|
|
605
|
+
run: (a) => api('GET', `/plans/${enc(a.plan_id)}/launch-review`),
|
|
606
|
+
},
|
|
607
|
+
launch_complete_scrape_plan: {
|
|
608
|
+
def: { description: 'Start or resume a complete native search after explicit approval of the exact reviewed plan, enabled checks and monthly/full-plan limits. This can spend credits. Requires the snapshot hash and updated timestamp from review_complete_scrape_plan, plus one stable operation UUID. A changed plan needs a fresh review. After uncertainty, read the plan and review; preserve the same operation and body. Never use this for sender Start or GHL writes.', inputSchema: obj({ plan_id: { ...S, format: 'uuid' }, operation_id: { ...S, format: 'uuid' }, snapshot_hash: { ...S, pattern: '^[0-9a-f]{64}$' }, expected_updated_at: { ...S, format: 'date-time' } }, ['plan_id', 'operation_id', 'snapshot_hash', 'expected_updated_at']) },
|
|
609
|
+
run: ({ plan_id, ...body }) => api('POST', `/plans/${enc(plan_id)}/launch`, body),
|
|
610
|
+
},
|
|
603
611
|
pause_scrape_plan: {
|
|
604
612
|
def: { description: 'Pause new work from a scrape plan. A job already running may still finish. Inspect the plan and its jobs after pausing.', inputSchema: obj({ plan_id: { ...S, format: 'uuid' } }, ['plan_id']) },
|
|
605
613
|
run: (a) => api('POST', `/plans/${enc(a.plan_id)}/pause`),
|
|
@@ -1004,6 +1012,10 @@ const TOOLS = {
|
|
|
1004
1012
|
def: { description: 'Read campaign membership, actual daily email activity, sequence steps, sending calendar and monthly full-sequence estimates. Counts shared Instantly mailbox capacity once and exposes stale or unknown reads. Other sender metrics may be unavailable. This never fills or starts campaigns, and the estimate does not change scrape goals or budgets.', inputSchema: obj({}) },
|
|
1005
1013
|
run: () => api('GET', '/campaigns/sending-metrics'),
|
|
1006
1014
|
},
|
|
1015
|
+
get_campaign_ready_supply: {
|
|
1016
|
+
def: { description: 'Read dated verified ready stock, count shared businesses and emails once, and compare planning shares with estimated remaining-month demand. Includes linked goals, coverage and shared credit allowance. This is a read-only planning view, not a reservation or sender approval. Unknown proof remains unknown; the baseline estimate still excludes actual follow-up scheduling and sender queues.', inputSchema: obj({}) },
|
|
1017
|
+
run: () => api('GET', '/campaigns/supply'),
|
|
1018
|
+
},
|
|
1007
1019
|
get_campaign_setup_options: {
|
|
1008
1020
|
def: { description: 'Read this workspace\'s channel choices and defaults for new campaign drafts. Explicit create choices win. Reading options changes nothing and starts no campaign.', inputSchema: obj({}) },
|
|
1009
1021
|
run: () => api('GET', '/campaigns/options'),
|
package/src/mutation-policies.js
CHANGED
|
@@ -44,6 +44,7 @@ export const MUTATION_POLICIES = Object.freeze({
|
|
|
44
44
|
preview_scrape_plan: read(),
|
|
45
45
|
create_scrape_plan: keyed('POST', ['list_scrape_plans'], ['name', 'target_list_id', 'kind']),
|
|
46
46
|
pause_scrape_plan: never('POST', ['get_scrape_plan'], ['plan_id']),
|
|
47
|
+
launch_complete_scrape_plan: reconcile('POST', ['get_scrape_plan', 'review_complete_scrape_plan'], ['plan_id', 'operation_id', 'snapshot_hash', 'expected_updated_at']),
|
|
47
48
|
start_scrape_plan: never('POST', ['get_scrape_plan'], ['plan_id']),
|
|
48
49
|
set_scrape_plan_ready_goal: reconcile('PUT', ['get_scrape_plan_ready_goal'], ['plan_id', 'goal']),
|
|
49
50
|
set_scrape_plan_budget: reconcile('PUT', ['get_scrape_plan_budget'], ['plan_id', 'limits', 'list_ids']),
|