scrapeloop-mcp 0.5.0 → 0.7.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 +64 -3
- package/package.json +6 -1
- package/src/index.js +1718 -116
package/README.md
CHANGED
|
@@ -42,8 +42,8 @@ pair it with the generated instructions pack (skill `dist/chatgpt-instructions.m
|
|
|
42
42
|
|
|
43
43
|
## Scopes
|
|
44
44
|
|
|
45
|
-
The key's scopes gate
|
|
46
|
-
gating lives in the API as 402s
|
|
45
|
+
The key's scopes gate tenant data reads, writes, and spend. Catalog reads remain
|
|
46
|
+
free, and credit gating lives in the API as 402s. The "MCP / full automation" preset requests the
|
|
47
47
|
full set so the setup flow works end-to-end:
|
|
48
48
|
|
|
49
49
|
```
|
|
@@ -70,7 +70,33 @@ cleaners, strategy tags, vendors, scopes, and the ordered 7 setup steps) and
|
|
|
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` |
|
|
75
|
+
|
|
76
|
+
`import_leads`, `preview_import`, and `import_leads_csv` accept raw identities
|
|
77
|
+
without placeholder emails. Each row needs an email, LinkedIn URL, external ID,
|
|
78
|
+
or absolute source URL. The default match order is normalized email, canonical
|
|
79
|
+
LinkedIn, then external/source identity, all scoped to the API key's workspace.
|
|
80
|
+
A later import with a real email enriches the existing raw lead.
|
|
81
|
+
Mutating imports generate one `operation_id` and reuse it across transient HTTP
|
|
82
|
+
retries. The API returns the first committed result for the same key and
|
|
83
|
+
payload, and rejects reuse with different inputs. If every response is lost,
|
|
84
|
+
retry the original request with the exact key returned in the error.
|
|
85
|
+
|
|
86
|
+
Manual Table columns and cells are zero-cost, and cell writes are limited to
|
|
87
|
+
active static Tables. Archived Tables must be unarchived before column or cell
|
|
88
|
+
writes. Select types require 1-100 declared options. Every cell must include a
|
|
89
|
+
typed value, with explicit `null` reserved for clearing. `set_table_cells`
|
|
90
|
+
accepts at most 500 cells and 256 KiB of JSON, validates the complete batch,
|
|
91
|
+
then persists it as one atomic upsert.
|
|
92
|
+
|
|
93
|
+
`create_table`, `create_table_column`, and `create_table_view` are
|
|
94
|
+
idempotent. The MCP generates one `operation_id` for the logical create and
|
|
95
|
+
reuses it across transient HTTP retries. The API returns the first resource for
|
|
96
|
+
the same key and normalized payload, including concurrent calls, and returns
|
|
97
|
+
409 if that key is reused with different inputs. If every response is lost, the
|
|
98
|
+
terminal error includes the exact key and retry call. Retry with that same key,
|
|
99
|
+
never a replacement UUID.
|
|
74
100
|
|
|
75
101
|
Credit-spending (`reveal_lead`, `save_leads`, `submit_scrape`, `verify_*`,
|
|
76
102
|
`run_enrich`) and send-starting (`activate_campaign`) tools should be preceded by the
|
|
@@ -84,4 +110,39 @@ the assistant can explain or self-correct.
|
|
|
84
110
|
SCRAPELOOP_API_URL=http://localhost:8000 \
|
|
85
111
|
SCRAPELOOP_API_KEY=sl_live_… \
|
|
86
112
|
node test/mcp_smoke.mjs # drives tools against a running API + drift-checks the manifest
|
|
113
|
+
|
|
114
|
+
node test/mcp_table_tools.mjs # offline endpoint/schema contract for Table tools
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Release readiness
|
|
118
|
+
|
|
119
|
+
MCP package releases use the `publish-mcp` GitHub Actions workflow. A release is
|
|
120
|
+
successful only after all four conditions are true:
|
|
121
|
+
|
|
122
|
+
1. The exact `mcp-v<version>` tag matches `package.json`.
|
|
123
|
+
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.
|
|
126
|
+
4. `npx scrapeloop-mcp@<version>` reports the expected version and tool count.
|
|
127
|
+
|
|
128
|
+
The Actions summary reports **Build and test** separately from **Publish and
|
|
129
|
+
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.
|
|
132
|
+
|
|
133
|
+
### Human-owned npm credential
|
|
134
|
+
|
|
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.
|
|
141
|
+
|
|
142
|
+
Local preflight, which never publishes:
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
npm ci --no-audit --no-fund
|
|
146
|
+
npm test
|
|
147
|
+
npm run release:preflight -- --tag mcp-v0.7.0
|
|
87
148
|
```
|
package/package.json
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "scrapeloop-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.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
|
+
"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",
|
|
8
|
+
"release:preflight": "node scripts/release-preflight.mjs",
|
|
9
|
+
"release:verify": "node scripts/release-installed-verify.mjs"
|
|
10
|
+
},
|
|
6
11
|
"bin": {
|
|
7
12
|
"scrapeloop-mcp": "src/index.js"
|
|
8
13
|
},
|