scrapeloop-mcp 0.26.0 → 0.28.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 +7 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrapeloop-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.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,15 @@ 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.
|
|
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({
|
|
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
598
|
lifetime_lead_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
599
599
|
monthly_verify_credits: { type: 'integer', minimum: 0, maximum: 1000000000 },
|
|
600
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'] }, maxItems:
|
|
601
|
+
allowed_checks: { type: 'array', items: { ...S, enum: ['verify_email', 'verify_catchall', 'verify_phone', 'owner_website', 'review_history'] }, maxItems: 5 },
|
|
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']),
|
|
602
603
|
}, ['monthly_lead_credits', 'lifetime_lead_credits', 'monthly_verify_credits', 'lifetime_verify_credits', 'allowed_checks']),
|
|
603
604
|
list_ids: { type: 'array', items: { ...S, format: 'uuid' }, minItems: 1, maxItems: 20 },
|
|
604
605
|
}, ['plan_id', 'limits', 'list_ids']) },
|
|
@@ -1028,6 +1029,10 @@ const TOOLS = {
|
|
|
1028
1029
|
def: { description: 'Read the versioned draft GHL setup guide. Pass check_account=true for four free GET checks of the exact connected account, draft workflow names, contact fields and setting formats. No installs, saves, contacts, sender writes or paid calls. This is not an importable snapshot. Workflow steps, per-intake identity, outcome returns and owned-contact proof remain separate and launch_ready is always false.', inputSchema: obj({ campaign_id: S, check_account: B }, ['campaign_id']) },
|
|
1029
1030
|
run: (a) => a.campaign_id ? api('GET', `/campaigns/${enc(a.campaign_id)}/ghl-package${qs({ check_account: a.check_account })}`) : { ok: false, status: 400, error: { detail: 'campaign_id is required.' } },
|
|
1030
1031
|
},
|
|
1032
|
+
get_campaign_ghl_intake_review: {
|
|
1033
|
+
def: { description: 'Read source candidates for a paused GHL shared journey, or pass lead_id for a free primary contact comparison. Checks current verified mobile, local stops, mapped fields, exact account, phone/email matches, GHL stops and prior intake markers. At most five provider reads, including read-only POST contact searches. No contact, field or workflow writes. Results expire after one minute and never approve sending; additional-address matching and the durable writer remain required. Pass after to read the next source page.', inputSchema: obj({ campaign_id: S, lead_id: S, after: S }, ['campaign_id']) },
|
|
1034
|
+
run: (a) => a.campaign_id ? api('GET', `/campaigns/${enc(a.campaign_id)}/ghl-intake-review${qs({ lead_id: a.lead_id, after: a.after })}`) : { ok: false, status: 400, error: { detail: 'campaign_id is required.' } },
|
|
1035
|
+
},
|
|
1031
1036
|
get_campaign_ghl_returns: {
|
|
1032
1037
|
def: { description: 'Review the account-bound receiving address and signed GoHighLevel return counts for a shared journey. A saved address is not live delivery or provider removal proof. Unmatched updates remain saved; missing signed phone identity stays held. Read only.', inputSchema: obj({ campaign_id: S }, ['campaign_id']) },
|
|
1033
1038
|
run: (a) => a.campaign_id ? api('GET', `/campaigns/${enc(a.campaign_id)}/ghl-returns`) : { ok: false, status: 400, error: { detail: 'campaign_id is required.' } },
|