scrapeloop-mcp 0.7.0 → 0.8.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/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  A [Model Context Protocol](https://modelcontextprotocol.io) server for Scrapeloop.
4
4
  **Set up and run Scrapeloop end-to-end from Claude Desktop, Cursor, ChatGPT, or any
5
- MCP client**connect integrations, scrape or pull from the lead database, verify
5
+ MCP client** - connect integrations, scrape or pull from the lead database, verify
6
6
  (incl. catch-all), clean, enrich, tag, and feed Instantly campaigns.
7
7
 
8
- Pair it with the [`scrapeloop-setup` skill](../skill) for a guided, step-by-step
8
+ Pair it with the [`scrapeloop` skill](../skill) for a saved Playbook setup and task
9
9
  flow ("set up Scrapeloop").
10
10
 
11
11
  ## Setup
@@ -52,7 +52,7 @@ integrations:write scrape enrich cleaners strategies campaigns:write insta
52
52
  ```
53
53
 
54
54
  A 403 with `"API key missing scope(s): …"` means the key was minted with a narrower
55
- setregenerate it with the full preset.
55
+ set - regenerate it with the full preset.
56
56
 
57
57
  ## Tools
58
58
 
@@ -64,14 +64,14 @@ cleaners, strategy tags, vendors, scopes, and the ordered 7 setup steps) and
64
64
  |------|-------|
65
65
  | Discovery | `get_capabilities`, `get_setup_status`, `get_credits`, `get_meta` |
66
66
  | Integrations (BYOK) | `list_integrations`, `create_integration`, `list_credentials`, `add_credential`, `test_credential`, `list_instantly_connections` |
67
- | Scrape | `list_scrapers`, `estimate_scrape`, `submit_scrape`, `list_jobs`, `get_job`, `cancel_job` |
67
+ | Scrape | `list_scrapers`, `estimate_scrape`, `submit_scrape`, `list_jobs`, `get_job`, `cancel_job`, `attach_job_to_table` |
68
68
  | Lead database | `search_leads`, `estimate_leads`, `reveal_lead`, `save_leads`, `bulk_verify_leads` |
69
69
  | Verify | `verify_email`, `verify_catchall` |
70
70
  | Clean | `list_cleaners`, `preview_cleaners`, `apply_cleaners` |
71
71
  | Enrich + strategies | `list_presets`, `create_preset`, `estimate_enrich`, `run_enrich`, `test_recipe`, `get_ai_settings`, `update_ai_settings`, `list_strategies`, `create_strategy`, `assign_strategy` |
72
72
  | Campaigns + Instantly | `list_instantly_campaigns`, `list_instantly_lead_lists`, `import_instantly_campaigns`, `import_instantly_lead_list`, `list_segments`, `create_segment`, `preview_segment`, `list_campaigns`, `create_campaign`, `update_campaign`, `activate_campaign`, `pause_campaign`, `sync_campaign`, `campaign_stats`, `get_sender_config`, `update_sender_config` |
73
73
  | B2B saved collections | `get_lists`, `create_list`, `add_list_members` |
74
- | Campaign-ready Tables | `get_tables`, `create_table`, `get_table_columns`, `create_table_column`, `set_table_cells`, `list_table_rows` |
74
+ | Campaign-ready Tables | `get_tables`, `create_table`, `get_table_columns`, `create_table_column`, `create_table_preset_column`, `set_table_cells`, `list_table_rows` |
75
75
 
76
76
  `import_leads`, `preview_import`, and `import_leads_csv` accept raw identities
77
77
  without placeholder emails. Each row needs an email, LinkedIn URL, external ID,
@@ -90,7 +90,16 @@ typed value, with explicit `null` reserved for clearing. `set_table_cells`
90
90
  accepts at most 500 cells and 256 KiB of JSON, validates the complete batch,
91
91
  then persists it as one atomic upsert.
92
92
 
93
- `create_table`, `create_table_column`, and `create_table_view` are
93
+ `create_table_preset_column` attaches a shipped system preset or an active
94
+ workspace preset as a real enrichment column. It requires a stable
95
+ `operation_id`, defaults `auto_run` to false, and accepts only overrides declared
96
+ by the preset. When auto-run would backfill existing rows, the first call returns
97
+ the exact row and cost estimate without writing. Repeat with `confirm_auto_run`
98
+ and that exact `confirmed_estimated_cost_usd` only after user confirmation. The
99
+ Table master switch and workspace budget caps still gate the queued work.
100
+
101
+ `create_table`, `create_table_column`, `create_table_preset_column`, and
102
+ `create_table_view` are
94
103
  idempotent. The MCP generates one `operation_id` for the logical create and
95
104
  reuses it across transient HTTP retries. The API returns the first resource for
96
105
  the same key and normalized payload, including concurrent calls, and returns
@@ -121,28 +130,40 @@ successful only after all four conditions are true:
121
130
 
122
131
  1. The exact `mcp-v<version>` tag matches `package.json`.
123
132
  2. Tests pass and the packed tarball contains only the declared package files.
124
- 3. npm accepts the exact tarball with provenance, or already has that same
125
- version with the same integrity.
133
+ 3. npm accepts the exact tarball through Trusted Publishing, or already has
134
+ that same version with the same integrity.
126
135
  4. `npx scrapeloop-mcp@<version>` reports the expected version and tool count.
127
136
 
137
+ The installed-package check removes GitHub Actions' temporary npm authentication
138
+ settings and replaces them with an empty, temporary public-registry config
139
+ before it runs `npx`. That makes the final check use the public registry exactly
140
+ like a customer install, without reusing publishing access.
141
+
128
142
  The Actions summary reports **Build and test** separately from **Publish and
129
143
  registry**. A green package build does not mean the version is published. A
130
- missing or rejected npm credential, a conflicting duplicate version, or a
131
- registry verification timeout fails the workflow.
144
+ missing OIDC identity, a rejected trusted-publisher match, a conflicting
145
+ duplicate version, or a registry verification timeout fails the workflow.
146
+
147
+ ### Trusted npm publishing
148
+
149
+ The npm package trusts only the `publish-mcp.yml` GitHub Actions workflow in
150
+ `Hinkam-Lanello/scrapeloop`. The workflow uses GitHub OIDC to request a
151
+ short-lived npm publishing identity. It must run on a GitHub-hosted runner with
152
+ `id-token: write`, Node.js 24, and npm 11.5.1 or newer. Do not add `NPM_TOKEN` or
153
+ another long-lived publish token.
132
154
 
133
- ### Human-owned npm credential
155
+ The source repository is private, so the workflow must not force npm
156
+ provenance. npm supports Trusted Publishing from a private GitHub repository,
157
+ but provenance is available only when the source repository is public.
134
158
 
135
- An npm account owner must create a publish-capable access token for
136
- `scrapeloop-mcp` and store it as the GitHub Actions repository secret
137
- `NPM_TOKEN`. Agents must not create, reveal, or enter this credential. To recover
138
- an already tagged but unpublished version, run the workflow manually with its
139
- exact existing tag. The workflow archives and publishes that tag's source rather
140
- than the current default branch.
159
+ To recover an already tagged but unpublished version, run the workflow manually
160
+ with its exact existing tag. The workflow archives and publishes that tag's
161
+ source rather than the current default branch.
141
162
 
142
163
  Local preflight, which never publishes:
143
164
 
144
165
  ```bash
145
166
  npm ci --no-audit --no-fund
146
167
  npm test
147
- npm run release:preflight -- --tag mcp-v0.7.0
168
+ npm run release:preflight -- --tag mcp-v0.7.1
148
169
  ```
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "scrapeloop-mcp",
3
- "version": "0.7.0",
4
- "description": "Scrapeloop MCP serverset 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, ).",
3
+ "version": "0.8.0",
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, \u2026).",
5
5
  "type": "module",
6
6
  "scripts": {
7
- "test": "node --check src/index.js && node test/mcp_table_tools.mjs && node test/mcp_community_intent.mjs && node test/mcp_api_key_preflight.mjs && node test/release_readiness.mjs",
7
+ "test": "node --check src/index.js && node test/mcp_table_tools.mjs && node test/mcp_playbook_plans.mjs && node test/mcp_community_intent.mjs && node test/mcp_api_key_preflight.mjs && node test/mutation_retry_contract.mjs && node test/release_readiness.mjs",
8
8
  "release:preflight": "node scripts/release-preflight.mjs",
9
9
  "release:verify": "node scripts/release-installed-verify.mjs"
10
10
  },
@@ -21,10 +21,26 @@
21
21
  "dependencies": {
22
22
  "@modelcontextprotocol/sdk": "^1.0.0"
23
23
  },
24
- "keywords": ["mcp", "scrapeloop", "leads", "b2b", "email-verification", "cold-email", "model-context-protocol"],
24
+ "keywords": [
25
+ "mcp",
26
+ "scrapeloop",
27
+ "leads",
28
+ "b2b",
29
+ "email-verification",
30
+ "cold-email",
31
+ "model-context-protocol"
32
+ ],
25
33
  "homepage": "https://scrapeloop.com",
26
- "repository": { "type": "git", "url": "git+https://github.com/Hinkam-Lanello/scrapeloop.git", "directory": "packages/mcp" },
27
- "bugs": { "url": "https://github.com/Hinkam-Lanello/scrapeloop/issues" },
28
- "publishConfig": { "access": "public" },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/Hinkam-Lanello/scrapeloop.git",
37
+ "directory": "packages/mcp"
38
+ },
39
+ "bugs": {
40
+ "url": "https://github.com/Hinkam-Lanello/scrapeloop/issues"
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
29
45
  "license": "UNLICENSED"
30
46
  }