scrapeloop-mcp 0.6.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.
Files changed (3) hide show
  1. package/README.md +64 -3
  2. package/package.json +6 -1
  3. package/src/index.js +1716 -142
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 the **write/spend** surface (reads are free + ungated; credit
46
- gating lives in the API as 402s). The "MCP / full automation" preset requests the
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
- | Lists | `get_lists`, `create_list`, `add_list_members` |
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.6.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
  },