scrapeloop-mcp 0.28.0 → 0.30.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 +13 -8
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrapeloop-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.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
|
@@ -591,14 +591,14 @@ const TOOLS = {
|
|
|
591
591
|
run: (a) => api('GET', `/plans/${enc(a.plan_id)}/budget`),
|
|
592
592
|
},
|
|
593
593
|
set_scrape_plan_budget: {
|
|
594
|
-
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. owner_website explicitly permits the free bounded system Owner name finder; it still needs a saved job and attempt. review_history permits only the system Google review stats preset with source explicitly outscraper and a separate review_budget in USD, default zero. Select an existing connection from get_scrape_plan_budget.review_connections. Omitted review_budget preserves saved settings. Each row reserves 0.147 USD; recorded units use the published ceiling, not a confirmed account invoice. Unknown requests stay held and never retry. Google-first, custom recipes and other paid vendors remain blocked. Use review_complete_scrape_plan to check readiness before requesting exact launch approval.', inputSchema: obj({
|
|
594
|
+
def: { description: 'Save reviewed credit limits and Table ownership for a paused complete-search plan with a ready-email goal. Monthly lead credits always need a numeric cap. Explicit null removes only the extra lifetime lead or monthly/lifetime verify cap; omission is rejected. Zero blocks spending. No-cap checks still require allowed tools, bounded jobs and available workspace credits. Never infer no cap without approval. 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. website_language permits the free bounded Website languages preset with a saved attempt. owner_website explicitly permits the free bounded system Owner name finder; it still needs a saved job and attempt. review_history permits only the system Google review stats preset with source explicitly outscraper and a separate review_budget in USD, default zero. Select an existing connection from get_scrape_plan_budget.review_connections. Omitted review_budget preserves saved settings. Each row reserves 0.147 USD; recorded units use the published ceiling, not a confirmed account invoice. Unknown requests stay held and never retry. Google-first, custom recipes and other paid vendors remain blocked. Use review_complete_scrape_plan to check readiness before requesting exact launch approval.', inputSchema: obj({
|
|
595
595
|
plan_id: { ...S, format: 'uuid' }, expected_revision: { ...S, format: 'uuid' },
|
|
596
596
|
limits: obj({
|
|
597
597
|
monthly_lead_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
598
|
-
lifetime_lead_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
599
|
-
monthly_verify_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
600
|
-
lifetime_verify_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
601
|
-
allowed_checks: { type: 'array', items: { ...S, enum: ['verify_email', 'verify_catchall', 'verify_phone', 'owner_website', 'review_history'] }, maxItems:
|
|
598
|
+
lifetime_lead_credits: { type: ['integer', 'null'], minimum: 0, maximum: 1000000000 },
|
|
599
|
+
monthly_verify_credits: { type: ['integer', 'null'], minimum: 0, maximum: 1000000000 },
|
|
600
|
+
lifetime_verify_credits: { type: ['integer', 'null'], minimum: 0, maximum: 1000000000 },
|
|
601
|
+
allowed_checks: { type: 'array', items: { ...S, enum: ['verify_email', 'verify_catchall', 'verify_phone', 'owner_website', 'review_history', 'website_language'] }, maxItems: 6 },
|
|
602
602
|
review_budget: obj({ monthly_usd: { type: 'number', minimum: 0, maximum: 1000000, multipleOf: 0.001 }, lifetime_usd: { type: 'number', minimum: 0, maximum: 1000000, multipleOf: 0.001 }, credential_id: { type: ['string', 'null'], format: 'uuid' } }, ['monthly_usd', 'lifetime_usd', 'credential_id']),
|
|
603
603
|
}, ['monthly_lead_credits', 'lifetime_lead_credits', 'monthly_verify_credits', 'lifetime_verify_credits', 'allowed_checks']),
|
|
604
604
|
list_ids: { type: 'array', items: { ...S, format: 'uuid' }, minItems: 1, maxItems: 20 },
|
|
@@ -1112,6 +1112,7 @@ const TOOLS = {
|
|
|
1112
1112
|
inputSchema: obj(
|
|
1113
1113
|
{
|
|
1114
1114
|
name: S,
|
|
1115
|
+
qualification: { ...O, description: 'Optional campaign entry rule: {rule: be_dutch, evidence_column_id, max_age_days: 90}. Use {} for no rule. Read get_campaign_qualification for eligible evidence columns.' },
|
|
1115
1116
|
sender_options: { ...O, description: "GoHighLevel SMS choices: workflow_id, tags, require_verified_mobile, voip_counts_as_mobile, missing_fields (ask, create, never)." },
|
|
1116
1117
|
icon: { type: ["string", "null"], description: "One or two emoji, or null to clear." },
|
|
1117
1118
|
source_list_id: S,
|
|
@@ -1145,15 +1146,19 @@ const TOOLS = {
|
|
|
1145
1146
|
'allow_risky_emails', 'offload_enabled', 'offload_no_reply_days', 'offload_to_instantly',
|
|
1146
1147
|
'offload_to_scrapeloop', 'offload_scrapeloop_list_id',
|
|
1147
1148
|
'drip_daily_count', 'target_active_count', 'cooldown_days', 'resting_period_days',
|
|
1148
|
-
'recycle_mode', 'prioritize_fresh', 'bounce_instantly_list_id', 'sender_options', 'icon',
|
|
1149
|
+
'recycle_mode', 'prioritize_fresh', 'bounce_instantly_list_id', 'sender_options', 'icon', 'qualification',
|
|
1149
1150
|
]) {
|
|
1150
1151
|
if (a[k] !== undefined && a[k] !== null) body[k] = a[k];
|
|
1151
1152
|
}
|
|
1152
1153
|
return api('POST', '/campaigns', body);
|
|
1153
1154
|
},
|
|
1154
1155
|
},
|
|
1156
|
+
get_campaign_qualification: {
|
|
1157
|
+
def: { description: 'Read the saved entry rule and accessible Website languages columns. This starts no checks. Belgium Dutch rules hold missing, expired, changed or unknown website evidence and excluded regions before upload. Existing sender leads are not removed.', inputSchema: obj({ campaign_id: S }, ['campaign_id']) },
|
|
1158
|
+
run: (a) => api('GET', `/campaigns/${enc(a.campaign_id)}/qualification`),
|
|
1159
|
+
},
|
|
1155
1160
|
update_campaign: {
|
|
1156
|
-
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.", properties: { 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']) },
|
|
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} requires current Dutch website evidence outside Wallonia. This changes future uploads only; it does not remove sender leads or start checks.", properties: { 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']) },
|
|
1157
1162
|
run: (a) => api('PATCH', `/campaigns/${enc(a.campaign_id)}`, a.patch || {}),
|
|
1158
1163
|
},
|
|
1159
1164
|
duplicate_campaign: {
|
|
@@ -2484,7 +2489,7 @@ const TOOLS = {
|
|
|
2484
2489
|
limit: N,
|
|
2485
2490
|
sort: S,
|
|
2486
2491
|
q: S,
|
|
2487
|
-
filter: { ...O, description: 'FilterExpr JSON (object): server-side row filter; adds total_filtered.' },
|
|
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 malformed or blank addresses under exclusions. No DNS or provider lookup.' },
|
|
2488
2493
|
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.' },
|
|
2489
2494
|
},
|
|
2490
2495
|
['list_id'],
|