scrapeloop-mcp 0.30.0 → 0.31.1
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 +6 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrapeloop-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.1",
|
|
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
|
@@ -573,10 +573,11 @@ const TOOLS = {
|
|
|
573
573
|
run: (a) => api('GET', `/plans/${enc(a.plan_id)}/yield`),
|
|
574
574
|
},
|
|
575
575
|
set_scrape_plan_ready_goal: {
|
|
576
|
-
def: { description: 'Save a verified-email goal on a native Maps draft without repeat searches. Choose the ready Table and its email campaign, monthly goal/minimum, unused-stock ceiling and evidence rules. Pass the reviewed expected_updated_at from get_scrape_plan. Counts require current input-bound verification, qualification, campaign fields and sender-history checks. This does not start scraping, verification or campaigns. Complete-search pacing must be available before Start.', inputSchema: obj({
|
|
576
|
+
def: { description: 'Save a verified-email goal on a native Maps draft without repeat searches. Choose the ready Table and its email campaign, monthly goal/minimum, optional hard-maximum mode, unused-stock ceiling and evidence rules. Pass the reviewed expected_updated_at from get_scrape_plan. Counts require current input-bound verification, qualification, campaign fields and sender-history checks. This does not start scraping, verification or campaigns. Complete-search pacing must be available before Start.', inputSchema: obj({
|
|
577
577
|
plan_id: { ...S, format: 'uuid' }, expected_updated_at: { ...S, format: 'date-time' },
|
|
578
578
|
goal: obj({ kind: { ...S, enum: ['verified_email'] }, ready_list_id: { ...S, format: 'uuid' },
|
|
579
579
|
campaign_id: { ...S, format: 'uuid' }, monthly_goal: { type: 'integer', minimum: 1, maximum: 1000000 },
|
|
580
|
+
limit_mode: { ...S, enum: ['target', 'maximum'] },
|
|
580
581
|
monthly_minimum: { type: 'integer', minimum: 0, maximum: 1000000 },
|
|
581
582
|
stock_ceiling: { type: 'integer', minimum: 1, maximum: 1000000 }, timezone: S,
|
|
582
583
|
evidence_max_age_days: { type: 'integer', minimum: 1, maximum: 90 }, allow_resolved_catchall: B,
|
|
@@ -1116,6 +1117,7 @@ const TOOLS = {
|
|
|
1116
1117
|
sender_options: { ...O, description: "GoHighLevel SMS choices: workflow_id, tags, require_verified_mobile, voip_counts_as_mobile, missing_fields (ask, create, never)." },
|
|
1117
1118
|
icon: { type: ["string", "null"], description: "One or two emoji, or null to clear." },
|
|
1118
1119
|
source_list_id: S,
|
|
1120
|
+
eligibility_rule: { type: ["object", "null"], additionalProperties: false, required: ["source_list_id", "filter"], properties: { source_list_id: S, filter: O }, description: "Optional Current qualification: an open static evidence Table and nonempty current lead/column conditions. The API binds reviewed columns. Null turns this check off." },
|
|
1119
1121
|
segment_id: S,
|
|
1120
1122
|
sender_credential_id: S,
|
|
1121
1123
|
external_list_id: S,
|
|
@@ -1142,7 +1144,7 @@ const TOOLS = {
|
|
|
1142
1144
|
run: (a) => {
|
|
1143
1145
|
const body = { name: a.name, sender_credential_id: a.sender_credential_id, external_list_id: a.external_list_id };
|
|
1144
1146
|
for (const k of [
|
|
1145
|
-
'source_list_id', 'segment_id', 'instantly_campaign_name', 'feed_mode', 'drip_strategy',
|
|
1147
|
+
'source_list_id', 'segment_id', 'instantly_campaign_name', 'feed_mode', 'drip_strategy', 'eligibility_rule',
|
|
1146
1148
|
'allow_risky_emails', 'offload_enabled', 'offload_no_reply_days', 'offload_to_instantly',
|
|
1147
1149
|
'offload_to_scrapeloop', 'offload_scrapeloop_list_id',
|
|
1148
1150
|
'drip_daily_count', 'target_active_count', 'cooldown_days', 'resting_period_days',
|
|
@@ -1158,7 +1160,7 @@ const TOOLS = {
|
|
|
1158
1160
|
run: (a) => api('GET', `/campaigns/${enc(a.campaign_id)}/qualification`),
|
|
1159
1161
|
},
|
|
1160
1162
|
update_campaign: {
|
|
1161
|
-
def: { description: 'Patch a campaign (feed_mode, target_active_count, cooldown_days, external_list_id, …). Switching feed_mode on for an already active campaign runs the same check as campaign_readiness_check: any fail answers 422 with the report under detail.readiness.', inputSchema: obj({ campaign_id: S, patch: { ...O, description: "Campaign settings to change. qualification: {} disables the gate; {rule: be_dutch, evidence_column_id: UUID, max_age_days: 90}
|
|
1163
|
+
def: { description: 'Patch a campaign (feed_mode, target_active_count, cooldown_days, external_list_id, …). Switching feed_mode on for an already active campaign runs the same check as campaign_readiness_check: any fail answers 422 with the report under detail.readiness.', inputSchema: obj({ campaign_id: S, patch: { ...O, description: "Campaign settings to change. eligibility_rule uses {source_list_id, filter} for Current qualification, or null to turn it off. qualification: {} disables the Belgium website language gate; {rule: be_dutch, evidence_column_id: UUID, max_age_days: 90} enables it. Read back after saving. These settings do not start checks or remove sender leads.", properties: { eligibility_rule: { type: ["object", "null"], additionalProperties: false, required: ["source_list_id", "filter"], properties: { source_list_id: S, filter: O } }, qualification: { ...O, description: "Belgium website language rule, or {} to disable." }, sender_options: { ...O, description: "GoHighLevel SMS settings. Only supplied keys change." }, icon: { type: ["string", "null"], description: "One or two emoji, or null to clear." } }, additionalProperties: true } }, ['campaign_id', 'patch']) },
|
|
1162
1164
|
run: (a) => api('PATCH', `/campaigns/${enc(a.campaign_id)}`, a.patch || {}),
|
|
1163
1165
|
},
|
|
1164
1166
|
duplicate_campaign: {
|
|
@@ -2489,7 +2491,7 @@ const TOOLS = {
|
|
|
2489
2491
|
limit: N,
|
|
2490
2492
|
sort: S,
|
|
2491
2493
|
q: S,
|
|
2492
|
-
filter: { ...O, description: 'FilterExpr JSON (object): server-side row filter; adds total_filtered. lead.email_domain derives the exact lowercase domain from the current email, separate from website lead.domain. Use eq/any_of/none_of for exact lists; add not_empty to hold
|
|
2494
|
+
filter: { ...O, description: 'FilterExpr JSON (object): server-side row filter; adds total_filtered. lead.email_domain derives the exact lowercase domain from the current email, separate from website lead.domain. lead.gcid reads an exact Google category ID from current source data; it does not prove business fit. Use eq/any_of/none_of for exact lists; add not_empty to hold missing or malformed values. No DNS or provider lookup.' },
|
|
2493
2495
|
view_id: { ...S, description: 'A saved custom view uuid or a system key (errored_rows/fully_enriched/data_only) from list_table_views. An ad-hoc filter/sort replaces the view\'s.' },
|
|
2494
2496
|
},
|
|
2495
2497
|
['list_id'],
|