@anysiteio/agent-skills 1.3.0 → 2.0.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 (37) hide show
  1. package/.claude-plugin/marketplace.json +61 -1
  2. package/.claude-plugin/plugin.json +5 -1
  3. package/README.md +27 -33
  4. package/bin/install.js +186 -135
  5. package/bundles.json +19 -0
  6. package/package.json +3 -2
  7. package/skills/anysite-audience-analysis/SKILL.md +110 -38
  8. package/skills/anysite-audience-analysis/references/PLATFORM_COVERAGE.md +38 -19
  9. package/skills/anysite-audience-analysis/references/TOOL_MAPPING.md +16 -11
  10. package/skills/anysite-brand-reputation/SKILL.md +105 -43
  11. package/skills/anysite-competitor-analyzer/SKILL.md +170 -111
  12. package/skills/anysite-competitor-intelligence/SKILL.md +201 -116
  13. package/skills/anysite-competitor-intelligence/references/ANALYSIS_PATTERNS.md +17 -13
  14. package/skills/anysite-content-analytics/SKILL.md +101 -33
  15. package/skills/anysite-crm-account-brief/SKILL.md +71 -0
  16. package/skills/anysite-crm-audit/SKILL.md +59 -0
  17. package/skills/anysite-crm-champions/SKILL.md +76 -0
  18. package/skills/anysite-crm-competitor-intel/SKILL.md +74 -0
  19. package/skills/anysite-crm-enrich/SKILL.md +84 -0
  20. package/skills/anysite-crm-lookalikes/SKILL.md +64 -0
  21. package/skills/anysite-crm-prospect/SKILL.md +90 -0
  22. package/skills/anysite-crm-score/SKILL.md +72 -0
  23. package/skills/anysite-crm-setup/SKILL.md +147 -0
  24. package/skills/anysite-crm-signals/SKILL.md +96 -0
  25. package/skills/anysite-influencer-discovery/SKILL.md +123 -71
  26. package/skills/anysite-lead-generation/SKILL.md +288 -256
  27. package/skills/anysite-lead-generation/references/LINKEDIN_STRATEGIES.md +79 -71
  28. package/skills/anysite-lead-generation/references/WEB_SCRAPING.md +121 -87
  29. package/skills/anysite-market-research/SKILL.md +117 -68
  30. package/skills/anysite-mcp/SKILL.md +128 -0
  31. package/skills/anysite-mcp-migration/SKILL.md +290 -0
  32. package/skills/anysite-person-analyzer/SKILL.md +86 -53
  33. package/skills/anysite-trend-analysis/SKILL.md +119 -55
  34. package/skills/anysite-vc-analyst/SKILL.md +12 -2
  35. package/skills/competitor-discovery/SKILL.md +350 -0
  36. package/skills/customer-pain-mining/SKILL.md +318 -0
  37. package/skills/positioning-map/SKILL.md +314 -0
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: anysite-lead-generation
3
- description: Lead generation and prospecting using anysite MCP server for LinkedIn prospect discovery, email finding, company research, and contact enrichment. Extract contacts from websites, find decision-makers at target companies, and build qualified prospect lists for sales, recruiting, and business development. Supports LinkedIn (primary), web scraping for contact extraction, and Instagram business discovery. Use when users need to build prospect lists, find decision-makers, extract contact information, research potential customers, or enrich existing leads with additional data.
3
+ description: Lead generation and prospecting using anysite MCP server for LinkedIn prospect discovery, email finding, company research, and contact enrichment. Extract contacts from websites, find decision-makers at target companies, and build qualified prospect lists for sales, recruiting, and business development. Supports LinkedIn (primary), web scraping for contact extraction, and Instagram business discovery. Research and list-building only - this skill does NOT write to a CRM. For finding leads AND pushing them into a connected CRM use anysite-crm-prospect; for filling gaps in existing CRM records use anysite-crm-enrich. Use when users need to build prospect lists, find decision-makers, extract contact information, or research potential customers outside a CRM context.
4
4
  ---
5
5
 
6
6
  # anysite Lead Generation
@@ -21,10 +21,24 @@ This skill provides comprehensive lead generation capabilities with the added be
21
21
 
22
22
  ## Supported Platforms
23
23
 
24
- - **LinkedIn** (Primary): People search, profile enrichment, email discovery, company research, employee listings
25
- - **Web Scraping**: Contact extraction from websites, sitemap parsing, general web data
26
- - **Instagram**: Business account discovery and profile analysis (supplementary)
27
- - **Y Combinator**: Startup company and founder research (supplementary)
24
+ - **LinkedIn** (Primary): People search, profile enrichment, email discovery, company research, employee listings
25
+ - **Web Scraping**: Contact extraction from websites, sitemap parsing, general web data
26
+ - **Instagram**: Business account discovery and profile analysis (supplementary)
27
+ - **Y Combinator**: Startup company and founder research (supplementary)
28
+
29
+ ## v2 API Overview
30
+
31
+ All data fetching uses the universal `execute()` tool with four parameters: `source`, `category`, `endpoint`, `params`. Supporting tools:
32
+
33
+ - **`execute(source, category, endpoint, params)`** - Fetch data. Returns first page of items + `cache_key`.
34
+ - **`get_page(cache_key, offset, limit)`** - Load additional pages from a previous execute() result using the returned `cache_key` and `next_offset`.
35
+ - **`query_cache(cache_key, conditions, sort_by, aggregate, group_by)`** - Filter, sort, count, or aggregate already-fetched data without a new API call.
36
+ - **`export_data(cache_key, format)`** - Export a full dataset as CSV, JSON, or JSONL. Returns a download URL.
37
+ - **`discover(source, category)`** - Inspect available endpoints and their accepted params (use when unsure about params).
38
+
39
+ ### Error Handling
40
+
41
+ v2 responses may include an `llm_hint` field with human-readable guidance when something goes wrong (e.g., invalid params, rate limits). Always check for `llm_hint` in the response and follow its advice before retrying.
28
42
 
29
43
  ## Quick Start
30
44
 
@@ -32,58 +46,69 @@ This skill provides comprehensive lead generation capabilities with the added be
32
46
 
33
47
  Choose the appropriate data source based on your prospecting goal:
34
48
 
35
- | Goal | Primary Tool | Use Case |
36
- |------|-------------|----------|
37
- | Find prospects by title/company | `search_linkedin_users` | B2B prospecting, targeted outreach |
38
- | Enrich existing leads | `get_linkedin_profile` | Add work history, education, skills |
39
- | Find verified emails | `find_linkedin_user_email` | Email outreach campaigns |
40
- | Extract website contacts | `parse_webpage` | Get emails/phones from contact pages |
41
- | Research target companies | `search_linkedin_companies` | Account-based marketing (ABM) |
42
- | Find company employees | `search_linkedin_users` + company filter | Multi-threading into accounts |
49
+ | Goal | v2 Call | Use Case |
50
+ |------|---------|----------|
51
+ | Find prospects by title/company | `execute("linkedin", "search", "search_users", {...})` | B2B prospecting, targeted outreach |
52
+ | Enrich existing leads | `execute("linkedin", "user", "get", {"user": ...})` | Add work history, education, skills |
53
+ | Find verified emails | `execute("linkedin", "email", "find", {"user": ...})` | Email outreach campaigns |
54
+ | Extract website contacts | `execute("webparser", "parse", "parse", {"url": ...})` | Get emails/phones from contact pages |
55
+ | Research target companies | `execute("linkedin", "search", "search_companies", {...})` | Account-based marketing (ABM) |
56
+ | Find company employees | `execute("linkedin", "search", "search_users", {...})` + company filter | Multi-threading into accounts |
43
57
 
44
58
  ### Step 2: Execute Data Collection
45
59
 
46
- Use anysite MCP tools directly to gather lead data:
60
+ Use anysite MCP v2 tools directly to gather lead data:
47
61
 
48
62
  **Example: Find Sales VPs in San Francisco**
49
63
  ```
50
- Tool: mcp__anysite__search_linkedin_users
64
+ Tool: mcp__anysite__execute
51
65
  Parameters:
52
- - title: "VP Sales"
53
- - location: "San Francisco Bay Area"
54
- - count: 25
66
+ - source: "linkedin"
67
+ - category: "search"
68
+ - endpoint: "search_users"
69
+ - params: {"title": "VP Sales", "location": "San Francisco Bay Area", "count": 25}
55
70
  ```
56
71
 
57
72
  **Example: Enrich a LinkedIn Profile**
58
73
  ```
59
- Tool: mcp__anysite__get_linkedin_profile
74
+ Tool: mcp__anysite__execute
60
75
  Parameters:
61
- - user: "linkedin.com/in/johndoe" or "johndoe"
62
- - with_experience: true
63
- - with_education: true
64
- - with_skills: true
76
+ - source: "linkedin"
77
+ - category: "user"
78
+ - endpoint: "get"
79
+ - params: {"user": "linkedin.com/in/johndoe", "with_experience": true, "with_education": true, "with_skills": true}
65
80
  ```
66
81
 
67
82
  **Example: Find Email Address**
68
83
  ```
69
- Tool: mcp__anysite__find_linkedin_user_email
84
+ Tool: mcp__anysite__execute
70
85
  Parameters:
71
- - email: "john@company.com" (for reverse lookup)
72
- - count: 5
86
+ - source: "linkedin"
87
+ - category: "email"
88
+ - endpoint: "find"
89
+ - params: {"user": "johndoe"}
73
90
  ```
74
91
 
75
92
  **Example: Extract Contacts from Website**
76
93
  ```
77
- Tool: mcp__anysite__parse_webpage
94
+ Tool: mcp__anysite__execute
78
95
  Parameters:
79
- - url: "https://company.com/contact"
80
- - extract_contacts: true
81
- - strip_all_tags: true
96
+ - source: "webparser"
97
+ - category: "parse"
98
+ - endpoint: "parse"
99
+ - params: {"url": "https://company.com/contact", "extract_contacts": true, "strip_all_tags": true}
82
100
  ```
83
101
 
84
102
  ### Step 3: Process and Analyze Results
85
103
 
86
- Review the returned data for:
104
+ After execute() returns data with a `cache_key`, use v2 post-processing:
105
+
106
+ - **Filter results**: `query_cache(cache_key, conditions=[{"field": "title", "operator": "contains", "value": "VP"}])`
107
+ - **Sort results**: `query_cache(cache_key, sort_by=[{"field": "follower_count", "order": "desc"}])`
108
+ - **Count results**: `query_cache(cache_key, aggregate=[{"function": "count", "field": "*"}])`
109
+ - **Get more pages**: `get_page(cache_key, offset=next_offset, limit=10)`
110
+
111
+ Also review the returned data for:
87
112
  - **Profile completeness**: Work history, education, skills presence
88
113
  - **Contact quality**: Email deliverability, phone format
89
114
  - **Relevance scoring**: Title match, company fit, location alignment
@@ -98,15 +123,23 @@ Choose your preferred output format:
98
123
  - Includes actionable next steps
99
124
  - Shows data quality metrics
100
125
 
101
- **CSV Export**
102
- - Full prospect list with all fields
103
- - Ready for CRM import (Salesforce, HubSpot, etc.)
104
- - Includes: Name, Title, Company, Location, Email, LinkedIn URL, Work History
126
+ **CSV Export (via v2 export_data)**
127
+ ```
128
+ Tool: mcp__anysite__export_data
129
+ Parameters:
130
+ - cache_key: <cache_key from execute>
131
+ - format: "csv"
132
+ ```
133
+ Returns a download URL. Ready for CRM import (Salesforce, HubSpot, etc.)
105
134
 
106
- **JSON Export**
107
- - Structured data for custom integration
108
- - Complete API response with metadata
109
- - Ideal for automation and data pipelines
135
+ **JSON Export (via v2 export_data)**
136
+ ```
137
+ Tool: mcp__anysite__export_data
138
+ Parameters:
139
+ - cache_key: <cache_key from execute>
140
+ - format: "json"
141
+ ```
142
+ Returns a download URL. Structured data for custom integration.
110
143
 
111
144
  ## Common Workflows
112
145
 
@@ -118,38 +151,44 @@ Choose your preferred output format:
118
151
 
119
152
  1. **Search for prospects**
120
153
  ```
121
- Tool: mcp__anysite__search_linkedin_users
154
+ Tool: mcp__anysite__execute
122
155
  Parameters:
123
- - keywords: "SaaS software cloud"
124
- - title: "Head of Marketing, VP Marketing, CMO"
125
- - location: "United States"
126
- - company_keywords: "software"
127
- - count: 50
156
+ - source: "linkedin"
157
+ - category: "search"
158
+ - endpoint: "search_users"
159
+ - params: {"keywords": "SaaS software cloud", "title": "Head of Marketing, VP Marketing, CMO", "location": "United States", "company_keywords": "software", "count": 50}
128
160
  ```
129
161
 
130
162
  2. **Enrich top prospects** (for first 10-20 results)
131
163
  ```
132
164
  For each prospect from step 1:
133
- Tool: mcp__anysite__get_linkedin_profile
165
+ Tool: mcp__anysite__execute
134
166
  Parameters:
135
- - user: <prospect_username>
136
- - with_experience: true
137
- - with_education: true
138
- - with_skills: false (unless skills matter for qualification)
167
+ - source: "linkedin"
168
+ - category: "user"
169
+ - endpoint: "get"
170
+ - params: {"user": "<prospect_username>", "with_experience": true, "with_education": true}
139
171
  ```
140
172
 
141
173
  3. **Find email addresses**
142
174
  ```
143
175
  For each qualified prospect:
144
- Tool: mcp__anysite__find_linkedin_user_email
145
- Then try:
146
- Tool: mcp__anysite__get_linkedin_user_email_db
176
+ Tool: mcp__anysite__execute
177
+ Parameters:
178
+ - source: "linkedin"
179
+ - category: "email"
180
+ - endpoint: "find"
181
+ - params: {"user": "<prospect_username>"}
147
182
  ```
148
183
 
149
184
  4. **Export to CRM**
150
- - Format as CSV with fields: Full Name, Title, Company, Location, Email, LinkedIn URL
151
- - Import to your CRM system
152
- - Set up outreach sequences
185
+ ```
186
+ Tool: mcp__anysite__export_data
187
+ Parameters:
188
+ - cache_key: <cache_key from search>
189
+ - format: "csv"
190
+ ```
191
+ Import the CSV to your CRM system and set up outreach sequences.
153
192
 
154
193
  **Expected Output**:
155
194
  - 50 prospects with LinkedIn profiles
@@ -165,41 +204,55 @@ Tool: mcp__anysite__get_linkedin_user_email_db
165
204
 
166
205
  1. **Research target companies**
167
206
  ```
168
- Tool: mcp__anysite__search_linkedin_companies
207
+ Tool: mcp__anysite__execute
169
208
  Parameters:
170
- - keywords: <your ICP description>
171
- - industry: <target industry>
172
- - employee_count: ["51-200", "201-500"]
173
- - location: <target location>
174
- - count: 20
209
+ - source: "linkedin"
210
+ - category: "search"
211
+ - endpoint: "search_companies"
212
+ - params: {"keywords": "<your ICP description>", "industry": "<target industry>", "employee_count": ["51-200", "201-500"], "location": "<target location>", "count": 20}
175
213
  ```
176
214
 
177
215
  2. **Get company details**
178
216
  ```
179
217
  For each target company:
180
- Tool: mcp__anysite__get_linkedin_company
218
+ Tool: mcp__anysite__execute
181
219
  Parameters:
182
- - company: <company_identifier or URL>
220
+ - source: "linkedin"
221
+ - category: "company"
222
+ - endpoint: "get"
223
+ - params: {"company": "<company_identifier or URL>"}
183
224
  ```
184
225
 
185
226
  3. **Find employees at target companies**
186
227
  ```
187
228
  For each target company:
188
- Tool: mcp__anysite__search_linkedin_users
229
+ Tool: mcp__anysite__execute
189
230
  Parameters:
190
- - company_keywords: "<Company Name>"
191
- - title: "VP, Director, Head of, Chief"
192
- - count: 10
231
+ - source: "linkedin"
232
+ - category: "search"
233
+ - endpoint: "search_users"
234
+ - params: {"company_keywords": "<Company Name>", "title": "VP, Director, Head of, Chief", "count": 10}
193
235
  ```
194
236
 
195
237
  4. **Enrich decision-makers**
196
238
  ```
197
239
  For each decision-maker:
198
- Tool: mcp__anysite__get_linkedin_profile
199
- Tool: mcp__anysite__find_linkedin_user_email
240
+ Tool: mcp__anysite__execute
241
+ source: "linkedin", category: "user", endpoint: "get", params: {"user": "<username>"}
242
+ Tool: mcp__anysite__execute
243
+ source: "linkedin", category: "email", endpoint: "find", params: {"user": "<username>"}
200
244
  ```
201
245
 
202
- 5. **Create ABM campaign**
246
+ 5. **Filter and analyze with query_cache**
247
+ ```
248
+ Tool: mcp__anysite__query_cache
249
+ Parameters:
250
+ - cache_key: <cache_key from employee search>
251
+ - conditions: [{"field": "title", "operator": "contains", "value": "VP"}]
252
+ - sort_by: [{"field": "name", "order": "asc"}]
253
+ ```
254
+
255
+ 6. **Create ABM campaign**
203
256
  - Group prospects by company
204
257
  - Identify multi-threading opportunities
205
258
  - Build company-specific messaging
@@ -219,18 +272,24 @@ Tool: mcp__anysite__find_linkedin_user_email
219
272
  1. **Get company websites**
220
273
  ```
221
274
  From LinkedIn company search or existing list
222
- Tool: mcp__anysite__get_linkedin_company
275
+ Tool: mcp__anysite__execute
276
+ Parameters:
277
+ - source: "linkedin"
278
+ - category: "company"
279
+ - endpoint: "get"
280
+ - params: {"company": "<company_identifier>"}
223
281
  Extract: company website URLs
224
282
  ```
225
283
 
226
284
  2. **Parse contact pages**
227
285
  ```
228
286
  For each website:
229
- Tool: mcp__anysite__parse_webpage
287
+ Tool: mcp__anysite__execute
230
288
  Parameters:
231
- - url: "https://company.com/contact"
232
- - extract_contacts: true
233
- - strip_all_tags: true
289
+ - source: "webparser"
290
+ - category: "parse"
291
+ - endpoint: "parse"
292
+ - params: {"url": "https://company.com/contact", "extract_contacts": true, "strip_all_tags": true}
234
293
 
235
294
  Alternative pages to try:
236
295
  - /contact
@@ -241,18 +300,21 @@ Alternative pages to try:
241
300
 
242
301
  3. **Parse team pages** (if available)
243
302
  ```
244
- Tool: mcp__anysite__parse_webpage
303
+ Tool: mcp__anysite__execute
245
304
  Parameters:
246
- - url: "https://company.com/team"
247
- - extract_contacts: true
305
+ - source: "webparser"
306
+ - category: "parse"
307
+ - endpoint: "parse"
308
+ - params: {"url": "https://company.com/team", "extract_contacts": true}
248
309
  ```
249
310
 
250
311
  4. **Get sitemap** (for comprehensive coverage)
251
312
  ```
252
- Tool: mcp__anysite__get_sitemap
313
+ Tool: mcp__anysite__discover
253
314
  Parameters:
254
- - url: "https://company.com"
255
- - count: 50
315
+ - source: "webparser"
316
+ - category: "parse"
317
+ (Use discover to find the sitemap endpoint and its params, then execute accordingly)
256
318
 
257
319
  Identify pages likely to contain contacts:
258
320
  - /contact, /team, /about, /leadership
@@ -282,30 +344,47 @@ Required skills, titles, experience level, location
282
344
 
283
345
  2. **Search for candidates**
284
346
  ```
285
- Tool: mcp__anysite__search_linkedin_users
347
+ Tool: mcp__anysite__execute
348
+ Parameters:
349
+ - source: "linkedin"
350
+ - category: "search"
351
+ - endpoint: "search_users"
352
+ - params: {"keywords": "Python React AWS", "title": "Software Engineer, Senior Engineer", "location": "Remote", "count": 100}
353
+ ```
354
+
355
+ 3. **Get more results with pagination**
356
+ ```
357
+ If response includes next_offset:
358
+ Tool: mcp__anysite__get_page
286
359
  Parameters:
287
- - keywords: <technical skills, e.g., "Python React AWS">
288
- - title: <relevant titles, e.g., "Software Engineer, Senior Engineer">
289
- - location: <location or "Remote">
290
- - count: 100
360
+ - cache_key: <cache_key from search>
361
+ - offset: <next_offset>
362
+ - limit: 50
291
363
  ```
292
364
 
293
- 3. **Enrich candidate profiles**
365
+ 4. **Enrich candidate profiles**
294
366
  ```
295
367
  For promising candidates:
296
- Tool: mcp__anysite__get_linkedin_profile
297
- Tool: mcp__anysite__get_linkedin_user_experience
298
- Tool: mcp__anysite__get_linkedin_user_skills
299
- Tool: mcp__anysite__get_linkedin_user_education
368
+ Tool: mcp__anysite__execute
369
+ source: "linkedin", category: "user", endpoint: "get", params: {"user": "<username>", "with_experience": true, "with_education": true, "with_skills": true}
300
370
  ```
301
371
 
302
- 4. **Find contact information**
372
+ 5. **Find contact information**
303
373
  ```
304
- Tool: mcp__anysite__find_linkedin_user_email
305
- Tool: mcp__anysite__get_linkedin_user_email_db
374
+ Tool: mcp__anysite__execute
375
+ source: "linkedin", category: "email", endpoint: "find", params: {"user": "<username>"}
306
376
  ```
307
377
 
308
- 5. **Build candidate pipeline**
378
+ 6. **Filter candidates with query_cache**
379
+ ```
380
+ Tool: mcp__anysite__query_cache
381
+ Parameters:
382
+ - cache_key: <cache_key from search>
383
+ - conditions: [{"field": "location", "operator": "contains", "value": "Remote"}]
384
+ - sort_by: [{"field": "follower_count", "order": "desc"}]
385
+ ```
386
+
387
+ 7. **Build candidate pipeline**
309
388
  - Score candidates on skills match
310
389
  - Prioritize by years of experience
311
390
  - Create outreach sequence
@@ -321,11 +400,11 @@ Tool: mcp__anysite__get_linkedin_user_email_db
321
400
  ### Primary Tools
322
401
 
323
402
  #### LinkedIn People Search
324
- **Tool**: `mcp__anysite__search_linkedin_users`
403
+ **v2 Call**: `execute("linkedin", "search", "search_users", {...})`
325
404
 
326
405
  Search for LinkedIn users by various criteria.
327
406
 
328
- **Parameters**:
407
+ **Parameters** (passed in `params`):
329
408
  - `keywords` (optional): General keywords for search
330
409
  - `title` (optional): Job title keywords (e.g., "VP Sales", "Software Engineer")
331
410
  - `company_keywords` (optional): Company name keywords
@@ -335,7 +414,7 @@ Search for LinkedIn users by various criteria.
335
414
  - `last_name` (optional): Last name
336
415
  - `count` (default: 10): Number of results to return
337
416
 
338
- **Returns**: List of user profiles with name, title, location, profile URL, and URN
417
+ **Returns**: List of user profiles with name, title, location, profile URL, and URN. Includes `cache_key` for pagination and filtering.
339
418
 
340
419
  **Use Cases**:
341
420
  - Find prospects by title and location
@@ -343,12 +422,14 @@ Search for LinkedIn users by various criteria.
343
422
  - Search for alumni from specific schools
344
423
  - Build prospect lists for outreach
345
424
 
425
+ **Pagination**: If `next_offset` is returned, call `get_page(cache_key, next_offset, limit)` for more results.
426
+
346
427
  #### LinkedIn Profile Details
347
- **Tool**: `mcp__anysite__get_linkedin_profile`
428
+ **v2 Call**: `execute("linkedin", "user", "get", {"user": ...})`
348
429
 
349
430
  Get comprehensive profile information for a LinkedIn user.
350
431
 
351
- **Parameters**:
432
+ **Parameters** (passed in `params`):
352
433
  - `user` (required): LinkedIn username or full profile URL
353
434
  - `with_education` (default: true): Include education history
354
435
  - `with_experience` (default: true): Include work experience
@@ -363,52 +444,33 @@ Get comprehensive profile information for a LinkedIn user.
363
444
  - Understand prospect's career path
364
445
 
365
446
  #### Email Finding
366
- **Tool**: `mcp__anysite__find_linkedin_user_email`
447
+ **v2 Call**: `execute("linkedin", "email", "find", {"user": ...})`
367
448
 
368
449
  Search for email addresses associated with LinkedIn profiles.
369
450
 
370
- **Parameters**:
371
- - `email` (required): Email address for reverse lookup
372
- - `count` (default: 5): Number of results
373
- - `request_timeout` (default: 300): Timeout in seconds
451
+ **Parameters** (passed in `params`):
452
+ - `user` (required): LinkedIn username or profile URL
374
453
 
375
- **Returns**: LinkedIn profiles associated with email addresses
454
+ **Returns**: Email addresses associated with the LinkedIn profile
376
455
 
377
456
  **Use Cases**:
378
457
  - Find verified emails for prospects
379
- - Reverse lookup email to LinkedIn profile
380
458
  - Enrich contact databases
381
-
382
- #### Email Database Lookup
383
- **Tool**: `mcp__anysite__get_linkedin_user_email_db`
384
-
385
- Retrieve cached email address for a LinkedIn profile.
386
-
387
- **Parameters**:
388
- - `profile` (required): LinkedIn profile URL
389
- - `request_timeout` (default: 300): Timeout in seconds
390
-
391
- **Returns**: Email address if available in database
392
-
393
- **Use Cases**:
394
- - Quick email lookup for known profiles
395
- - Batch email enrichment
396
- - Contact data verification
459
+ - Build email outreach lists
397
460
 
398
461
  #### Company Search
399
- **Tool**: `mcp__anysite__search_linkedin_companies`
462
+ **v2 Call**: `execute("linkedin", "search", "search_companies", {...})`
400
463
 
401
464
  Search for LinkedIn companies by various criteria.
402
465
 
403
- **Parameters**:
466
+ **Parameters** (passed in `params`):
404
467
  - `keywords` (optional): Company name or description keywords
405
468
  - `location` (optional): Company location
406
469
  - `industry` (optional): Industry type
407
470
  - `employee_count` (optional): Array of employee count ranges (e.g., ["51-200", "201-500"])
408
471
  - `count` (required): Number of results to return
409
- - `request_timeout` (default: 300): Timeout in seconds
410
472
 
411
- **Returns**: List of companies with name, industry, size, location, and URN
473
+ **Returns**: List of companies with name, industry, size, location, and URN. Includes `cache_key`.
412
474
 
413
475
  **Use Cases**:
414
476
  - Identify target accounts for ABM
@@ -417,13 +479,12 @@ Search for LinkedIn companies by various criteria.
417
479
  - Market segmentation analysis
418
480
 
419
481
  #### Company Details
420
- **Tool**: `mcp__anysite__get_linkedin_company`
482
+ **v2 Call**: `execute("linkedin", "company", "get", {"company": ...})`
421
483
 
422
484
  Get detailed information about a LinkedIn company.
423
485
 
424
- **Parameters**:
486
+ **Parameters** (passed in `params`):
425
487
  - `company` (required): Company identifier or LinkedIn URL
426
- - `request_timeout` (default: 300): Timeout in seconds
427
488
 
428
489
  **Returns**: Company profile with description, industry, size, specialties, website
429
490
 
@@ -434,16 +495,10 @@ Get detailed information about a LinkedIn company.
434
495
  - Qualify accounts before prospecting
435
496
 
436
497
  #### Company Employee Stats
437
- **Tool**: `mcp__anysite__get_linkedin_company_employee_stats`
498
+ **v2 Call**: `discover("linkedin", "company")` to find the employee stats endpoint, then `execute(...)` with the discovered endpoint and params.
438
499
 
439
500
  Get employee statistics and insights for a company.
440
501
 
441
- **Parameters**:
442
- - `urn` (required): Company URN from company lookup
443
- - `request_timeout` (default: 300): Timeout in seconds
444
-
445
- **Returns**: Employee count, growth metrics, department distribution
446
-
447
502
  **Use Cases**:
448
503
  - Track hiring velocity (company growth)
449
504
  - Identify growing departments
@@ -453,17 +508,15 @@ Get employee statistics and insights for a company.
453
508
  ### Supporting Tools
454
509
 
455
510
  #### Web Contact Extraction
456
- **Tool**: `mcp__anysite__parse_webpage`
511
+ **v2 Call**: `execute("webparser", "parse", "parse", {"url": ...})`
457
512
 
458
513
  Extract content and contact information from web pages.
459
514
 
460
- **Parameters**:
515
+ **Parameters** (passed in `params`):
461
516
  - `url` (required): Webpage URL
462
517
  - `extract_contacts` (default: false): Extract emails, phones, social links
463
518
  - `strip_all_tags` (default: true): Remove HTML tags
464
519
  - `only_main_content` (default: true): Extract only main content area
465
- - `same_origin_links` (default: false): Include only same-domain links
466
- - `request_timeout` (default: 300): Timeout in seconds
467
520
 
468
521
  **Returns**: Page content, contacts (emails, phones), links
469
522
 
@@ -474,58 +527,55 @@ Extract content and contact information from web pages.
474
527
  - Discover team member information
475
528
 
476
529
  #### Sitemap Parsing
477
- **Tool**: `mcp__anysite__get_sitemap`
530
+ **v2 Call**: `discover("webparser", "parse")` to find the sitemap endpoint, then `execute(...)` with discovered endpoint and params.
478
531
 
479
532
  Retrieve sitemap URLs from a website.
480
533
 
481
- **Parameters**:
482
- - `url` (required): Website URL
483
- - `count` (default: 50): Number of URLs to return
484
- - `request_timeout` (default: 300): Timeout in seconds
485
-
486
- **Returns**: List of URLs from sitemap
487
-
488
534
  **Use Cases**:
489
535
  - Find all pages on a website
490
536
  - Identify contact/team pages
491
537
  - Comprehensive website crawling
492
538
  - Discover hidden landing pages
493
539
 
494
- #### LinkedIn User Experience
495
- **Tool**: `mcp__anysite__get_linkedin_user_experience`
540
+ #### LinkedIn User Posts
541
+ **v2 Call**: `execute("linkedin", "post", "get_user_posts", {"user": ...})`
542
+
543
+ Get recent posts from a LinkedIn user for engagement research.
496
544
 
497
- Get detailed work experience history for a LinkedIn user.
545
+ **Use Cases**:
546
+ - Research prospect interests and activity
547
+ - Identify conversation starters
548
+ - Analyze thought leadership topics
498
549
 
499
- **Parameters**:
500
- - `urn` (required): User URN from search or profile
501
- - `count` (default: 10): Number of experience entries
502
- - `request_timeout` (default: 300): Timeout in seconds
550
+ #### LinkedIn Post Search
551
+ **v2 Call**: `execute("linkedin", "post", "search_posts", {...})`
503
552
 
504
- **Returns**: Detailed work history with dates, descriptions, companies
553
+ Search LinkedIn posts by keywords.
505
554
 
506
555
  **Use Cases**:
507
- - Deep work history analysis
508
- - Career path research
509
- - Qualification scoring
510
- - Experience validation
556
+ - Find prospects discussing relevant topics
557
+ - Monitor industry conversations
558
+ - Identify engaged professionals
559
+
560
+ #### LinkedIn Job Search
561
+ **v2 Call**: `execute("linkedin", "job_search", "search_jobs", {...})`
511
562
 
512
- #### LinkedIn User Skills
513
- **Tool**: `mcp__anysite__get_linkedin_user_skills`
563
+ Search LinkedIn job postings.
514
564
 
515
- Get skills and endorsements for a LinkedIn user.
565
+ **Use Cases**:
566
+ - Identify companies that are hiring (growth signals)
567
+ - Find companies investing in specific roles
568
+ - Research market demand
516
569
 
517
- **Parameters**:
518
- - `urn` (required): User URN
519
- - `count` (default: 10): Number of skills to return
520
- - `request_timeout` (default: 300): Timeout in seconds
570
+ #### Google LinkedIn Search
571
+ **v2 Call**: `execute("linkedin", "google", "search", {"query": ...})`
521
572
 
522
- **Returns**: Skills list with endorsement counts
573
+ Search Google for LinkedIn profiles.
523
574
 
524
575
  **Use Cases**:
525
- - Technical skills validation
526
- - Expertise assessment
527
- - Candidate qualification
528
- - Skills-based matching
576
+ - Find profiles that LinkedIn search misses
577
+ - Search by specific phrases
578
+ - Discover profiles with particular keywords
529
579
 
530
580
  ## Output Formats
531
581
 
@@ -567,7 +617,7 @@ Next Steps:
567
617
 
568
618
  ### CSV Export
569
619
 
570
- Use CSV format for CRM import and spreadsheet analysis.
620
+ Use `export_data(cache_key, "csv")` to get a download URL for CRM import and spreadsheet analysis.
571
621
 
572
622
  **How to Request**:
573
623
  "Export the results as CSV"
@@ -583,15 +633,9 @@ Full Name,First Name,Last Name,Title,Company,Location,Email,Phone,LinkedIn URL,P
583
633
  - Spreadsheet analysis and filtering
584
634
  - Team collaboration via Google Sheets
585
635
 
586
- **CSV Benefits**:
587
- - Universal format for all CRM systems
588
- - Easy filtering and sorting
589
- - Compatible with email tools
590
- - Shareable with team members
591
-
592
636
  ### JSON Export
593
637
 
594
- Use JSON format for programmatic access and custom integration.
638
+ Use `export_data(cache_key, "json")` to get a download URL for programmatic access and custom integration.
595
639
 
596
640
  **How to Request**:
597
641
  "Export the results as JSON"
@@ -643,7 +687,7 @@ Use JSON format for programmatic access and custom integration.
643
687
 
644
688
  Combine LinkedIn data with other platforms for comprehensive lead profiles:
645
689
 
646
- **Pattern**: LinkedIn Company Website Instagram (for B2C)
690
+ **Pattern**: LinkedIn -> Company Website -> Instagram (for B2C)
647
691
 
648
692
  1. Find prospect on LinkedIn
649
693
  2. Get company website from LinkedIn company profile
@@ -653,11 +697,11 @@ Combine LinkedIn data with other platforms for comprehensive lead profiles:
653
697
 
654
698
  **Example**:
655
699
  ```
656
- 1. search_linkedin_users Find "Emily Chen" at "FashionBrand"
657
- 2. get_linkedin_company("FashionBrand") Get website URL
658
- 3. parse_webpage(website + "/contact") Get phone, email
659
- 4. search_instagram_posts(query="FashionBrand") Find official account
660
- 5. get_instagram_user("fashionbrand") Verify business account, get follower count
700
+ 1. execute("linkedin", "search", "search_users", {"keywords": "Emily Chen", "company_keywords": "FashionBrand"})
701
+ 2. execute("linkedin", "company", "get", {"company": "FashionBrand"}) -> Get website URL
702
+ 3. execute("webparser", "parse", "parse", {"url": "<website>/contact", "extract_contacts": true}) -> Get phone, email
703
+ 4. execute("instagram", "search", "search_users", {"query": "FashionBrand"}) -> Find official account
704
+ 5. execute("instagram", "user", "user", {"user": "fashionbrand"}) -> Verify business account, get follower count
661
705
  ```
662
706
 
663
707
  ### Boolean Search Patterns
@@ -718,18 +762,24 @@ Score prospects based on multiple criteria:
718
762
  - **50-69**: Qualified - Standard outreach
719
763
  - **<50**: Unqualified - Nurture or discard
720
764
 
765
+ Use `query_cache()` to filter by score thresholds:
766
+ ```
767
+ query_cache(cache_key, conditions=[{"field": "score", "operator": ">=", "value": 70}], sort_by=[{"field": "score", "order": "desc"}])
768
+ ```
769
+
721
770
  ### Automated Prospect Enrichment
722
771
 
723
772
  Systematic enrichment workflow for large lists:
724
773
 
725
774
  **Process**:
726
- 1. **Initial Search**: Get 100-500 prospects from LinkedIn search
727
- 2. **First Filter**: Remove obviously unqualified (wrong title, location, etc.)
728
- 3. **Batch Enrichment**: Enrich top 50 prospects with full profiles
729
- 4. **Email Discovery**: Find emails for top 25 prospects
730
- 5. **Web Research**: Extract company contacts for remaining prospects
731
- 6. **Final Scoring**: Apply lead scoring framework
732
- 7. **Export**: Generate CSV for top-scored leads only
775
+ 1. **Initial Search**: Get 100-500 prospects from LinkedIn search via execute()
776
+ 2. **Paginate**: Use get_page() to collect all results beyond the first page
777
+ 3. **First Filter**: Use query_cache() to remove obviously unqualified (wrong title, location, etc.)
778
+ 4. **Batch Enrichment**: Enrich top 50 prospects with full profiles via execute()
779
+ 5. **Email Discovery**: Find emails for top 25 prospects via execute()
780
+ 6. **Web Research**: Extract company contacts for remaining prospects
781
+ 7. **Final Scoring**: Apply lead scoring framework
782
+ 8. **Export**: Use export_data(cache_key, "csv") for top-scored leads
733
783
 
734
784
  **Efficiency Tips**:
735
785
  - Start with larger searches (100+) to account for filtering
@@ -743,6 +793,8 @@ Systematic enrichment workflow for large lists:
743
793
 
744
794
  This skill focuses on B2B lead generation where LinkedIn, web scraping, and professional networks provide the most comprehensive data. For local business discovery and contact extraction, the combination of LinkedIn company search and web scraping provides strong coverage.
745
795
 
796
+ **Note on Crunchbase**: Crunchbase tools are disabled in v2. Use LinkedIn company search and Y Combinator data as alternatives for company research and funding information.
797
+
746
798
  ### Rate Limits and Timeouts
747
799
 
748
800
  **Default Timeout**: 300 seconds (5 minutes) per MCP tool call
@@ -753,10 +805,7 @@ This skill focuses on B2B lead generation where LinkedIn, web scraping, and prof
753
805
  - Make multiple calls for larger lists
754
806
  - Allow processing time between batches
755
807
 
756
- 2. **Increase Timeout**: Use `request_timeout` parameter for complex queries
757
- - Company employee searches: 400-500 seconds
758
- - Profile enrichment: 300-400 seconds
759
- - Email finding: 400-600 seconds
808
+ 2. **Pagination**: Use `get_page(cache_key, offset, limit)` to retrieve additional results without re-executing the search.
760
809
 
761
810
  3. **Parallel Processing**: For independent queries
762
811
  - Search multiple locations simultaneously
@@ -766,32 +815,26 @@ This skill focuses on B2B lead generation where LinkedIn, web scraping, and prof
766
815
  **Example**:
767
816
  ```
768
817
  Instead of:
769
- search_linkedin_users(count=200) May timeout
818
+ execute("linkedin", "search", "search_users", {"count": 200}) -> May timeout
770
819
 
771
820
  Do this:
772
- search_linkedin_users(count=50, location="California")
773
- search_linkedin_users(count=50, location="New York")
774
- search_linkedin_users(count=50, location="Texas")
775
- search_linkedin_users(count=50, location="Florida")
821
+ execute("linkedin", "search", "search_users", {"count": 50, "location": "California"})
822
+ execute("linkedin", "search", "search_users", {"count": 50, "location": "New York"})
823
+ execute("linkedin", "search", "search_users", {"count": 50, "location": "Texas"})
824
+ execute("linkedin", "search", "search_users", {"count": 50, "location": "Florida"})
776
825
  ```
777
826
 
778
827
  ### Data Freshness
779
828
 
780
829
  **LinkedIn Data**: Real-time access through anysite MCP
781
- - No caching (always current)
782
- - Profile updates reflected immediately
830
+ - Results cached for 7 days via cache_key (use get_page/query_cache without re-fetching)
831
+ - Profile updates reflected in new execute() calls
783
832
  - Company changes visible in real-time
784
833
 
785
- **Email Database**: May have stale entries
786
- - `get_linkedin_user_email_db` returns cached emails
787
- - Some emails may be outdated
788
- - Verify before mass outreach
789
-
790
834
  **Recommendation**:
791
- 1. Use `find_linkedin_user_email` for current email discovery
792
- 2. Fall back to `get_linkedin_user_email_db` if first method fails
793
- 3. Validate emails before sending (use email validation service)
794
- 4. Update your CRM when emails bounce
835
+ 1. Use `execute("linkedin", "email", "find", {"user": ...})` for email discovery
836
+ 2. Validate emails before sending (use email validation service)
837
+ 3. Update your CRM when emails bounce
795
838
 
796
839
  ### Privacy and Compliance
797
840
 
@@ -838,24 +881,21 @@ For advanced techniques and strategies, see:
838
881
  - Broaden search criteria (remove some filters)
839
882
  - Try location variations: "San Francisco", "San Francisco Bay Area", "SF"
840
883
  - Use partial titles: "Sales" instead of "Vice President of Sales"
841
- - Verify company names with `search_linkedin_companies` first
884
+ - Verify company names with `execute("linkedin", "search", "search_companies", {...})` first
885
+ - Check `llm_hint` in the response for guidance
842
886
 
843
887
  **Example Fix**:
844
888
  ```
845
- Too Restrictive:
846
- title="Vice President of Enterprise Sales"
847
- location="San Francisco, California"
848
- company_keywords="Salesforce Inc"
889
+ Too Restrictive:
890
+ execute("linkedin", "search", "search_users", {"title": "Vice President of Enterprise Sales", "location": "San Francisco, California", "company_keywords": "Salesforce Inc"})
849
891
 
850
- Better:
851
- title="VP Sales OR Head of Sales"
852
- location="San Francisco Bay Area"
853
- company_keywords="Salesforce"
892
+ Better:
893
+ execute("linkedin", "search", "search_users", {"title": "VP Sales OR Head of Sales", "location": "San Francisco Bay Area", "company_keywords": "Salesforce"})
854
894
  ```
855
895
 
856
896
  #### 2. Email Not Found
857
897
 
858
- **Symptoms**: `find_linkedin_user_email` returns no results
898
+ **Symptoms**: Email find returns no results
859
899
 
860
900
  **Causes**:
861
901
  - Email not in database
@@ -863,16 +903,15 @@ company_keywords="Salesforce"
863
903
  - Email verification required
864
904
 
865
905
  **Solutions**:
866
- 1. Try `get_linkedin_user_email_db` as alternative
867
- 2. Extract email from company website instead
868
- 3. Use email pattern guessing (firstname.lastname@company.com)
869
- 4. Check for email in LinkedIn profile "Contact Info" section
906
+ 1. Extract email from company website instead
907
+ 2. Use email pattern guessing (firstname.lastname@company.com)
908
+ 3. Check for email in LinkedIn profile "Contact Info" section
870
909
 
871
910
  **Alternative Workflow**:
872
911
  ```
873
- 1. get_linkedin_profile(user) Get current company
874
- 2. get_linkedin_company(company) Get company website
875
- 3. parse_webpage(website + "/contact") Extract company emails
912
+ 1. execute("linkedin", "user", "get", {"user": "<username>"}) -> Get current company
913
+ 2. execute("linkedin", "company", "get", {"company": "<company>"}) -> Get company website
914
+ 3. execute("webparser", "parse", "parse", {"url": "<website>/contact", "extract_contacts": true}) -> Extract company emails
876
915
  4. Use email pattern: first.last@companydomain.com
877
916
  ```
878
917
 
@@ -887,26 +926,18 @@ company_keywords="Salesforce"
887
926
 
888
927
  **Solutions**:
889
928
  - Reduce `count` parameter (try 25-50 instead of 100+)
890
- - Increase `request_timeout` to 400-600 seconds
891
929
  - Break large searches into multiple smaller searches
892
930
  - Simplify search criteria
931
+ - Check `llm_hint` for retry guidance
893
932
 
894
933
  **Example**:
895
934
  ```
896
- May Timeout:
897
- search_linkedin_users(
898
- title="Software Engineer",
899
- count=500,
900
- request_timeout=300
901
- )
935
+ May Timeout:
936
+ execute("linkedin", "search", "search_users", {"title": "Software Engineer", "count": 500})
902
937
 
903
- Better:
904
- search_linkedin_users(
905
- title="Software Engineer",
906
- count=50,
907
- request_timeout=400
908
- )
909
- # Then make additional calls for more results
938
+ Better:
939
+ execute("linkedin", "search", "search_users", {"title": "Software Engineer", "count": 50})
940
+ # Then use get_page(cache_key, next_offset, 50) for additional results
910
941
  ```
911
942
 
912
943
  #### 4. Incomplete Profile Data
@@ -919,8 +950,7 @@ search_linkedin_users(
919
950
  - Profile hasn't been updated
920
951
 
921
952
  **Solutions**:
922
- - Set `with_experience=true`, `with_education=true` explicitly
923
- - Try getting detailed experience with `get_linkedin_user_experience`
953
+ - Set `with_experience`, `with_education`, `with_skills` to true in params
924
954
  - Accept incomplete data and supplement with web research
925
955
  - Focus on prospects with complete profiles
926
956
 
@@ -945,6 +975,7 @@ search_linkedin_users(
945
975
  - Verify MCP server is running and configured
946
976
  - Check MCP server logs for errors
947
977
  - Ensure authentication is set up correctly
978
+ - Check `llm_hint` field in error responses for actionable guidance
948
979
 
949
980
  **Skill-Specific Questions**:
950
981
  - Review reference documentation in `references/` folder
@@ -955,6 +986,7 @@ search_linkedin_users(
955
986
  - Validate search criteria before large batches
956
987
  - Test with small `count` values first
957
988
  - Review data quality in chat summary before export
989
+ - Use `query_cache()` to filter low-quality results
958
990
 
959
991
  **Integration Problems**:
960
992
  - Verify CSV format matches your CRM requirements
@@ -969,11 +1001,11 @@ search_linkedin_users(
969
1001
 
970
1002
  **Process**:
971
1003
  1. Define ICP: VP/Director level, Enterprise Software, 500-5000 employees
972
- 2. Search LinkedIn: `title="VP Sales" company_keywords="Enterprise Software" count=100`
973
- 3. Filter by company size using `search_linkedin_companies`
1004
+ 2. Search LinkedIn: `execute("linkedin", "search", "search_users", {"title": "VP Sales", "company_keywords": "Enterprise Software", "count": 100})`
1005
+ 3. Filter by company size using `execute("linkedin", "search", "search_companies", {...})`
974
1006
  4. Enrich top 30 prospects with full profiles
975
1007
  5. Find emails for top 20 prospects
976
- 6. Export CSV for Salesforce import
1008
+ 6. Export CSV via `export_data(cache_key, "csv")` for Salesforce import
977
1009
 
978
1010
  **Success Metrics**:
979
1011
  - 100 prospects found and qualified
@@ -986,8 +1018,8 @@ search_linkedin_users(
986
1018
  **Goal**: Source 50 Python engineers for startup
987
1019
 
988
1020
  **Process**:
989
- 1. Search: `keywords="Python Django AWS" title="Software Engineer" location="Remote" count=100`
990
- 2. Filter: Remove <2 years experience
1021
+ 1. Search: `execute("linkedin", "search", "search_users", {"keywords": "Python Django AWS", "title": "Software Engineer", "location": "Remote", "count": 100})`
1022
+ 2. Filter: Use `query_cache()` to remove <2 years experience
991
1023
  3. Enrich: Get skills and education for top 50
992
1024
  4. Score: Rank by skills match and experience level
993
1025
  5. Contact: Find emails for top 25
@@ -1004,9 +1036,9 @@ search_linkedin_users(
1004
1036
  **Goal**: Find potential integration partners in marketing tech
1005
1037
 
1006
1038
  **Process**:
1007
- 1. Search companies: `keywords="marketing automation" employee_count=["51-200"]`
1008
- 2. Identify decision-makers: `title="VP Product OR Head of Partnerships" company_keywords=<company>`
1009
- 3. Research: Get company details and recent LinkedIn posts
1039
+ 1. Search companies: `execute("linkedin", "search", "search_companies", {"keywords": "marketing automation", "employee_count": ["51-200"]})`
1040
+ 2. Identify decision-makers: `execute("linkedin", "search", "search_users", {"title": "VP Product OR Head of Partnerships", "company_keywords": "<company>"})`
1041
+ 3. Research: Get company details and recent LinkedIn posts via `execute("linkedin", "post", "get_user_posts", {"user": ...})`
1010
1042
  4. Enrich: Full profiles for all decision-makers
1011
1043
  5. Personalize: Reference their product and use cases
1012
1044
  6. Multi-channel: LinkedIn + email outreach