scrapeloop-mcp 0.36.0 → 0.37.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/index.js +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "scrapeloop-mcp",
3
- "version": "0.36.0",
3
+ "version": "0.37.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
@@ -658,7 +658,7 @@ const TOOLS = {
658
658
  run: ({ plan_id, ...body }) => api('POST', `/plans/${enc(plan_id)}/launch`, body),
659
659
  },
660
660
  check_scrape_plan_stop: {
661
- def: { description: 'Look at the stop a complete search plan is on. Use it when get_scrape_plan shows the block "A check is on hold". With dry_run true (the default) it only reads the saved records of the held Table check job. It says what it found, what would happen and how many check credits that could use, and it returns job_ids. To carry on, call it again with dry_run false and those same job_ids. It then acts only when the records prove that is safe: it ends the held job, gives unused held check credits back, runs free checks that never finished again, and runs paid checks that never started inside the plan limits. A paid check that got no answer is closed and never asked again. It sends no request to a checker itself. The answer has outcome safe, needs_person, wait or nothing, with a title, plain lines and a next line, all ready to show the person. Always show the dry run lines first and carry on only after the person says yes. If the held jobs changed since the dry run, nothing is changed and a fresh dry run comes back with changed true. A second call after it carried on finds nothing on hold. A held map search and a failed Table move are named and left to a person.', inputSchema: obj({ plan_id: { ...S, format: 'uuid' }, dry_run: B, job_ids: { ...ARR({ ...S, format: 'uuid' }), maxItems: 20 } }, ['plan_id']) },
661
+ def: { description: 'Look at the stop a complete search plan is on. Use it when get_scrape_plan shows the block "A check is on hold", "Search needs review" or "A lead could not be moved between Tables". With dry_run true (the default) it only reads saved records. It says what it found and what would happen, with the credits that could use, and it returns job_ids: the ids of the held jobs and failed moves it looked at. To carry on, call it again with dry_run false and those same job_ids. It then acts only where the records prove that is safe. A held Table check: it ends the held job, gives unused held check credits back, runs free checks that never finished again, and runs paid checks that never started inside the plan limits, unless a person pressed Stop on the Table: then those stay closed. A paid check that got no answer is closed and never asked again. It sends no request to a checker itself. A held map search: it puts the same search back in the queue with its same held lead credits. At most one map square that got no answer is searched again, in at most 2 extra rounds per square (the app tries a square up to 3 times in one round). A review count read that got no answer is closed and never asked again. A plan that a person paused stays paused: the search only finishes what it already read. A failed Table move: it only marks the move done when the lead is already in the Table it had to go to. It never moves a lead. The answer has outcome safe, needs_person, wait or nothing, with a title, plain lines and a next line, all ready to show the person. Always show the dry run lines first and carry on only after the person says yes. If the stops changed since the dry run, nothing is changed and a fresh dry run comes back with changed true. A second call after it carried on finds nothing on hold.', inputSchema: obj({ plan_id: { ...S, format: 'uuid' }, dry_run: B, job_ids: { ...ARR({ ...S, format: 'uuid' }), maxItems: 40 } }, ['plan_id']) },
662
662
  run: (a) => {
663
663
  const dryRun = a.dry_run !== false;
664
664
  if (!dryRun && !Array.isArray(a.job_ids)) {