@anysiteio/agent-skills 1.4.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 +49 -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 +19 -8
  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
@@ -17,6 +17,17 @@ Find and analyze influencers across social platforms using anysite MCP. Discover
17
17
 
18
18
  **Coverage**: 85% - Excellent for Instagram, Twitter, LinkedIn, YouTube influencers.
19
19
 
20
+ ## v2 Tool Interface
21
+
22
+ All data fetching uses the anysite v2 meta-tools:
23
+
24
+ - **execute(source, category, endpoint, params)** - Fetch data. Returns first page + `cache_key`.
25
+ - **get_page(cache_key, offset, limit)** - Load more items from a previous execute (when `next_offset` is returned).
26
+ - **query_cache(cache_key, conditions, sort_by, aggregate, group_by)** - Filter, sort, or aggregate cached data without new API calls.
27
+ - **export_data(cache_key, format)** - Export full dataset as CSV, JSON, or JSONL. Returns a download URL.
28
+
29
+ **Error handling**: Check responses for `llm_hint` fields that provide actionable guidance on failures (e.g., alias not found, URN required).
30
+
20
31
  ## Supported Platforms
21
32
 
22
33
  - ✅ **Instagram**: Profile stats, posts, followers, engagement, Reels
@@ -30,18 +41,18 @@ Find and analyze influencers across social platforms using anysite MCP. Discover
30
41
  **Step 1: Search for Influencers**
31
42
 
32
43
  By platform:
33
- - Instagram: `search_instagram_posts` with niche keywords + hashtags
34
- - Twitter: `search_twitter_users` with niche keywords
35
- - LinkedIn: `search_linkedin_users` with industry + "thought leader"
36
- - YouTube: `search_youtube_videos` with niche, then analyze channels
44
+ - Instagram: `execute("instagram", "search", "search_posts", {"query": "niche keywords", "count": 50})` with niche keywords + hashtags
45
+ - Twitter: `execute("twitter", "search", "search_users", {"query": "niche keywords", "count": 50})` with niche keywords
46
+ - LinkedIn: `execute("linkedin", "search", "search_users", {"keywords": "industry thought leader", "count": 50})` with industry + "thought leader"
47
+ - YouTube: `execute("youtube", "search", "search_videos", {"query": "niche", "count": 50})` with niche, then analyze channels
37
48
 
38
49
  **Step 2: Analyze Profiles**
39
50
 
40
51
  Get detailed metrics:
41
- - Instagram: `get_instagram_user` followers, posts, engagement rate
42
- - Twitter: `get_twitter_user` followers, tweet frequency
43
- - YouTube: `get_youtube_channel_videos` subscribers, views, growth
44
- - LinkedIn: `get_linkedin_profile` connections, post engagement
52
+ - Instagram: `execute("instagram", "user", "user", {"user": "username"})` -> followers, posts, engagement rate
53
+ - Twitter: `execute("twitter", "user", "get", {"username": "handle"})` -> followers, tweet frequency
54
+ - YouTube: `execute("youtube", "channel", "channel_videos", {"channel": "...", "count": 30})` -> subscribers, views, growth
55
+ - LinkedIn: `execute("linkedin", "user", "user", {"user": "alias"})` -> connections, post engagement
45
56
 
46
57
  **Step 3: Evaluate Engagement**
47
58
 
@@ -51,9 +62,11 @@ Check engagement quality:
51
62
  - Audience authenticity (comment quality)
52
63
  - Content consistency (posts per week)
53
64
 
65
+ Use `query_cache(cache_key, sort_by=[{"field": "like_count", "order": "desc"}])` to rank posts by engagement without re-fetching.
66
+
54
67
  **Step 4: Build Influencer List**
55
68
 
56
- Export with:
69
+ Export with `export_data(cache_key, "csv")`:
57
70
  - Name, handle, platform
58
71
  - Follower count, engagement rate
59
72
  - Niche/topics, content type
@@ -70,18 +83,19 @@ Export with:
70
83
 
71
84
  1. **Search by Hashtag/Keywords**
72
85
  ```
73
- search_instagram_posts(
74
- query="sustainable fashion OR eco friendly fashion",
75
- count=100
76
- )
77
- Extract unique user handles from results
86
+ execute("instagram", "search", "search_posts", {
87
+ "query": "sustainable fashion OR eco friendly fashion",
88
+ "count": 100
89
+ })
90
+ -> Extract unique user handles from results
91
+ -> Use get_page(cache_key, offset, 50) if next_offset returned for more results
78
92
  ```
79
93
 
80
94
  2. **Analyze Each Creator**
81
95
  ```
82
96
  For each unique handle:
83
- get_instagram_user(username)
84
- Follower count, bio, profile type
97
+ execute("instagram", "user", "user", {"user": "username"})
98
+ -> Follower count, bio, profile type
85
99
 
86
100
  Filter for:
87
101
  - 10k-100k followers
@@ -92,19 +106,22 @@ Filter for:
92
106
  3. **Evaluate Content**
93
107
  ```
94
108
  For qualified creators:
95
- get_instagram_user_posts(username, count=30)
109
+ execute("instagram", "user", "user_posts", {"user": "username", "count": 30})
96
110
 
97
111
  Analyze:
98
112
  - Post frequency (consistency)
99
113
  - Engagement rate per post
100
114
  - Content quality and style
101
115
  - Brand partnerships visible
116
+
117
+ Use query_cache(cache_key, sort_by=[{"field": "like_count", "order": "desc"}]) to find top posts
118
+ Use query_cache(cache_key, aggregate=[{"field": "like_count", "function": "avg"}]) for average engagement
102
119
  ```
103
120
 
104
121
  4. **Check Audience Quality**
105
122
  ```
106
- get_instagram_post_likes(post_id, count=100)
107
- get_instagram_post_comments(post_id, count=50)
123
+ execute("instagram", "post", "post_likes", {"post": "post_id", "count": 100})
124
+ execute("instagram", "post", "post_comments", {"post": "post_id", "count": 50})
108
125
 
109
126
  Look for:
110
127
  - Real comments (not just emojis)
@@ -119,8 +136,8 @@ From Instagram bio:
119
136
  - Website links
120
137
 
121
138
  If LinkedIn mentioned:
122
- search_linkedin_users(first_name, last_name)
123
- get_linkedin_profile(user)
139
+ execute("linkedin", "search", "search_users", {"keywords": "first_name last_name"})
140
+ execute("linkedin", "user", "user", {"user": "alias_from_search"})
124
141
  ```
125
142
 
126
143
  **Expected Output**:
@@ -129,6 +146,8 @@ If LinkedIn mentioned:
129
146
  - Contact information for 60-70%
130
147
  - Partnership fit scores
131
148
 
149
+ Use `export_data(cache_key, "csv")` to generate a downloadable influencer list.
150
+
132
151
  ### Workflow 2: LinkedIn Thought Leader Identification
133
152
 
134
153
  **Scenario**: Find B2B thought leaders in SaaS/sales
@@ -137,22 +156,25 @@ If LinkedIn mentioned:
137
156
 
138
157
  1. **Search for Active Posters**
139
158
  ```
140
- search_linkedin_users(
141
- keywords="SaaS sales thought leader",
142
- title="VP Sales OR Head of Sales OR Chief Revenue Officer",
143
- count=100
144
- )
159
+ execute("linkedin", "search", "search_users", {
160
+ "keywords": "SaaS sales thought leader",
161
+ "title": "VP Sales OR Head of Sales OR Chief Revenue Officer",
162
+ "count": 100
163
+ })
145
164
  ```
146
165
 
147
166
  2. **Analyze Post Activity**
148
167
  ```
149
168
  For each candidate:
150
- get_linkedin_user_posts(urn, count=50)
169
+ execute("linkedin", "post", "get_user_posts", {"user": "urn", "count": 50})
151
170
 
152
171
  Filter for:
153
172
  - Posts 2-3x per week minimum
154
173
  - High engagement (100+ reactions)
155
174
  - Original content (not just shares)
175
+
176
+ Use query_cache(cache_key, conditions=[{"field": "comment_count", "operator": ">", "value": 10}])
177
+ to filter for high-engagement posts
156
178
  ```
157
179
 
158
180
  3. **Evaluate Influence**
@@ -162,6 +184,11 @@ Check post engagement:
162
184
  - Comment quality and quantity
163
185
  - Share count
164
186
  - Follower growth signals
187
+
188
+ Use query_cache(cache_key, aggregate=[
189
+ {"field": "comment_count", "function": "avg"},
190
+ {"field": "share_count", "function": "avg"}
191
+ ]) for average metrics
165
192
  ```
166
193
 
167
194
  4. **Assess Content Quality**
@@ -179,6 +206,8 @@ Review posts for:
179
206
  - Engagement metrics
180
207
  - Partnership opportunities (guest posts, quotes, etc.)
181
208
 
209
+ Use `export_data(cache_key, "csv")` to export the thought leader list.
210
+
182
211
  ### Workflow 3: YouTube Creator Research
183
212
 
184
213
  **Scenario**: Find YouTube creators in tech reviews
@@ -187,29 +216,32 @@ Review posts for:
187
216
 
188
217
  1. **Search for Niche Content**
189
218
  ```
190
- search_youtube_videos(
191
- query="tech review 2026",
192
- count=100
193
- )
194
- Extract unique channel names
219
+ execute("youtube", "search", "search_videos", {
220
+ "query": "tech review 2026",
221
+ "count": 100
222
+ })
223
+ -> Extract unique channel names
224
+ -> Use get_page(cache_key, offset, 50) if more results needed
195
225
  ```
196
226
 
197
227
  2. **Analyze Channels**
198
228
  ```
199
229
  For each channel:
200
- get_youtube_channel_videos(channel, count=30)
230
+ execute("youtube", "channel", "channel_videos", {"channel": "channel_id", "count": 30})
201
231
 
202
232
  Check:
203
233
  - Subscriber count
204
234
  - Upload frequency
205
235
  - Average views per video
206
236
  - Video length (long-form vs shorts)
237
+
238
+ Use query_cache(cache_key, aggregate=[{"field": "view_count", "function": "avg"}]) for average views
207
239
  ```
208
240
 
209
241
  3. **Evaluate Video Performance**
210
242
  ```
211
243
  For top videos:
212
- get_youtube_video(video_id)
244
+ execute("youtube", "video", "video", {"video": "video_id"})
213
245
 
214
246
  Metrics:
215
247
  - View count
@@ -220,7 +252,7 @@ Metrics:
220
252
 
221
253
  4. **Analyze Audience Engagement**
222
254
  ```
223
- get_youtube_video_comments(video_id, count=100)
255
+ execute("youtube", "video", "video_comments", {"video": "video_id", "count": 100})
224
256
 
225
257
  Look for:
226
258
  - Active community
@@ -234,39 +266,50 @@ Look for:
234
266
  - Engagement analysis
235
267
  - Partnership fit assessment
236
268
 
237
- ## MCP Tools Reference
269
+ Use `export_data(cache_key, "csv")` to export channel data.
270
+
271
+ ## MCP Tools Reference (v2)
238
272
 
239
273
  ### Instagram
240
- - `search_instagram_posts` - Find posts by keywords/hashtags
241
- - `get_instagram_user` - Get profile with followers, bio
242
- - `get_instagram_user_posts` - Get recent posts with engagement
243
- - `get_instagram_post_likes` - Check audience authenticity
244
- - `get_instagram_post_comments` - Analyze engagement quality
245
- - `get_instagram_user_friendships` - Get followers list (for analysis)
274
+ - `execute("instagram", "search", "search_posts", {"query": ..., "count": N})` - Find posts by keywords/hashtags
275
+ - `execute("instagram", "user", "user", {"user": ...})` - Get profile with followers, bio
276
+ - `execute("instagram", "user", "user_posts", {"user": ..., "count": N})` - Get recent posts with engagement
277
+ - `execute("instagram", "post", "post_likes", {"post": ..., "count": N})` - Check audience authenticity
278
+ - `execute("instagram", "post", "post_comments", {"post": ..., "count": N})` - Analyze engagement quality
279
+ - `execute("instagram", "user", "user_friendships", {"user": ..., "count": N, "type": "followers"})` - Get followers list (for analysis)
246
280
 
247
281
  ### Twitter/X
248
- - `search_twitter_users` - Find users by keywords/bio
249
- - `get_twitter_user` - Get profile with followers, tweets
250
- - `get_twitter_user_posts` - Get recent tweets with engagement
251
- - `search_twitter_posts` - Find influential tweets in niche
282
+ - `execute("twitter", "search", "search_users", {"query": ..., "count": N})` - Find users by keywords/bio
283
+ - `execute("twitter", "user", "get", {"username": ...})` - Get profile with followers, tweets
284
+ - `execute("twitter", "user_tweets", "get", {"username": ...})` - Get recent tweets with engagement
285
+ - `execute("twitter", "search", "search_posts", {"query": ..., "count": N})` - Find influential tweets in niche
252
286
 
253
287
  ### LinkedIn
254
- - `search_linkedin_users` - Find professionals by keywords/title
255
- - `get_linkedin_profile` - Get complete profile
256
- - `get_linkedin_user_posts` - Get post history and engagement
257
- - `get_linkedin_user_skills` - Verify expertise
258
- - `get_linkedin_user_connections` - Network size (for own account)
288
+ - `execute("linkedin", "search", "search_users", {"keywords": ..., "count": N})` - Find professionals by keywords/title
289
+ - `execute("linkedin", "user", "user", {"user": ...})` - Get complete profile (includes skills with `with_skills: true`)
290
+ - `execute("linkedin", "post", "get_user_posts", {"user": "urn", "count": N})` - Get post history and engagement
291
+ - `execute("linkedin", "user", "user_skills", {"urn": ..., "count": N})` - Verify expertise (requires URN from profile)
292
+
293
+ Note: LinkedIn connection count is returned in the profile response (`connection_count` field). No separate endpoint needed.
259
294
 
260
295
  ### YouTube
261
- - `search_youtube_videos` - Find videos by keywords
262
- - `get_youtube_channel_videos` - Get all videos from channel
263
- - `get_youtube_video` - Get video metrics (views, likes)
264
- - `get_youtube_video_comments` - Analyze audience engagement
296
+ - `execute("youtube", "search", "search_videos", {"query": ..., "count": N})` - Find videos by keywords
297
+ - `execute("youtube", "channel", "channel_videos", {"channel": ..., "count": N})` - Get all videos from channel
298
+ - `execute("youtube", "video", "video", {"video": ...})` - Get video metrics (views, likes)
299
+ - `execute("youtube", "video", "video_comments", {"video": ..., "count": N})` - Analyze audience engagement
265
300
 
266
301
  ### Reddit
267
- - `search_reddit_posts` - Find influential posts in subreddits
268
- - `reddit_user_posts` - Get user's post history
269
- - `reddit_user_comments` - Analyze community engagement
302
+ - `execute("reddit", "search", "search_posts", {"query": ..., "count": N})` - Find influential posts in subreddits
303
+ - `execute("reddit", "user", "user_posts", {"username": ..., "count": N})` - Get user's post history
304
+ - `execute("reddit", "user", "user_comments", {"username": ..., "count": N})` - Analyze community engagement
305
+
306
+ ### Web Scraping
307
+ - `execute("webparser", "parse", "parse", {"url": ...})` - Scrape any webpage for contact info, media kits, etc.
308
+
309
+ ### Pagination, Caching & Export
310
+ - `get_page(cache_key, offset, limit)` - Fetch additional pages from any execute() result
311
+ - `query_cache(cache_key, conditions, sort_by, aggregate, group_by)` - Filter/sort/aggregate cached data
312
+ - `export_data(cache_key, "csv"|"json"|"jsonl")` - Export full dataset as downloadable file
270
313
 
271
314
  ## Output Formats
272
315
 
@@ -276,14 +319,14 @@ Look for:
276
319
  - Partnership recommendations
277
320
  - Contact information found
278
321
 
279
- **CSV Export**:
322
+ **CSV Export** (via `export_data(cache_key, "csv")`):
280
323
  - Influencer name, handle, platform
281
324
  - Followers, engagement rate
282
325
  - Niche, content type
283
326
  - Email, website
284
327
  - Fit score (1-100)
285
328
 
286
- **JSON Export**:
329
+ **JSON Export** (via `export_data(cache_key, "json")`):
287
330
  - Complete profile data
288
331
  - All posts with engagement
289
332
  - Audience demographics (if available)
@@ -332,8 +375,8 @@ Benefits:
332
375
  - Niche expertise
333
376
 
334
377
  Discovery approach:
335
- - Use hashtag searches
336
- - Analyze engagement vs. reach
378
+ - Use hashtag searches via execute("instagram", "search", "search_posts", ...)
379
+ - Use query_cache() to filter by engagement rate vs. reach
337
380
  - Prioritize niche relevance over size
338
381
  ```
339
382
 
@@ -342,9 +385,12 @@ Discovery approach:
342
385
  Identify influencers active across platforms:
343
386
  ```
344
387
  1. Find on Instagram/Twitter
345
- 2. Search LinkedIn for professional presence
346
- 3. Check for YouTube channel
347
- 4. Look for website/blog (parse_webpage)
388
+ 2. Search LinkedIn for professional presence:
389
+ execute("linkedin", "search", "search_users", {"keywords": "name"})
390
+ 3. Check for YouTube channel:
391
+ execute("youtube", "search", "search_videos", {"query": "creator name", "count": 10})
392
+ 4. Look for website/blog:
393
+ execute("webparser", "parse", "parse", {"url": "website_url"})
348
394
 
349
395
  Benefits:
350
396
  - Multiple touchpoints
@@ -358,15 +404,16 @@ Benefits:
358
404
  Analyze who follows the influencer:
359
405
  ```
360
406
  Instagram:
361
- - get_instagram_user_friendships(followers, count=100)
407
+ - execute("instagram", "user", "user_friendships", {"user": "username", "count": 100, "type": "followers"})
362
408
  - Analyze follower profiles for patterns
409
+ - Use query_cache(cache_key, group_by="location") to segment by geography
363
410
 
364
411
  LinkedIn:
365
412
  - Check who engages with posts
366
- - Identify follower job titles/industries
413
+ - Identify follower job titles/industries from post comments
367
414
 
368
415
  YouTube:
369
- - Analyze comment demographics
416
+ - Analyze comment demographics via execute("youtube", "video", "video_comments", ...)
370
417
  - Check subscriber locations (if available)
371
418
  ```
372
419
 
@@ -383,16 +430,21 @@ YouTube:
383
430
  - Reduce minimum follower requirements
384
431
 
385
432
  **Low Engagement Rates**:
386
- - Filter for engagement rate > 2-3%
433
+ - Use `query_cache(cache_key, conditions=[{"field": "engagement_rate", "operator": ">", "value": 0.03}])` to filter
387
434
  - Focus on micro-influencers (smaller = higher engagement)
388
435
  - Check for bot followers (sudden spikes)
389
436
 
390
437
  **No Contact Information**:
391
438
  - Check bio for email/website
392
- - Look for LinkedIn profile
393
- - Try website domain (parse_webpage)
439
+ - Look for LinkedIn profile via `execute("linkedin", "search", "search_users", {"keywords": "name"})`
440
+ - Try website domain: `execute("webparser", "parse", "parse", {"url": "domain"})`
394
441
  - Search for media kit or press page
395
442
 
443
+ **API Errors**:
444
+ - Check `llm_hint` in error responses for actionable guidance
445
+ - LinkedIn endpoints requiring URN: get URN from profile response first, do not guess aliases
446
+ - Use `execute("linkedin", "search", "search_users", ...)` to find correct aliases before fetching profiles
447
+
396
448
  ---
397
449
 
398
450
  **Ready to discover influencers?** Ask Claude to help you find content creators, analyze engagement, or build influencer lists for your marketing campaigns!