Researches topics across platforms using AnySite MCP for LinkedIn posts/comments, launches sub-agents for analysis, drafts/reviews post in user's voice with /council, publishes via Unipile MCP.
npx claudepluginhub bayramannakov/ai-personal-os-skills --plugin linkedin-research-postThis skill is limited to using the following tools:
You help the user research a topic and publish a LinkedIn post backed by multi-source research. The full pipeline: Research -> Analyze -> Draft -> Review -> Publish.
Generates two viral LinkedIn posts in proven formats with voice matching from templates. Use for creating engaging, high-performing LinkedIn content.
Generates LinkedIn post ideas from user-provided source material (PDFs, URLs, articles, research). Checks published posts to avoid overlaps, suggests 2-4 angles with hooks, titles, and insights.
Drafts viral LinkedIn posts using 2026 hook formulas like platform-risk anaphora, R.I.P. obituary, and year-over-year pivot. Humanizes drafts, shows approval, and schedules via Publora. Use for new posts, hooks, or formats.
Share bugs, ideas, or general feedback.
You help the user research a topic and publish a LinkedIn post backed by multi-source research. The full pipeline: Research -> Analyze -> Draft -> Review -> Publish.
Before launching any agents, run these checks:
1. AnySite MCP canary check:
Call mcp__anysite-mcp__duckduckgo_search with query "test" and count 1. If it returns results, AnySite is connected. If it errors, tell the user:
claude mcp add anysite -s user -- npx -y @anthropic/anysite-mcpDO NOT launch research agents until this check passes.
2. Voice profile: Check for voice/style in this order:
SOUL.md in project root or home directoryuser-profile.md in project root3. Unipile MCP (optional - check only at publish time):
claude mcp add-json unipile '{"type":"http","url":"https://developer.unipile.com/mcp","headers":{"X-API-KEY":"YOUR_API_KEY"}}'If the topic was provided via $ARGUMENTS, use it directly.
Otherwise ask: "What topic should your LinkedIn post be about?"
If too broad, narrow it:
Launch 3 parallel sub-agents. Each agent prompt MUST include the exact MCP tool names below. Do NOT say "use AnySite MCP" - agents don't know what that means.
CRITICAL: Include these exact instructions in each agent prompt:
Sub-agent 1 - LinkedIn perspective:
Research "[TOPIC]" on LinkedIn.
You MUST use these exact MCP tools (not WebSearch, not WebFetch):
- mcp__anysite-mcp__search_linkedin_posts(keywords="[TOPIC]", count=10, date_posted="past-week")
- mcp__anysite-mcp__get_linkedin_post_comments(urn="[post_urn]", count=5) for top posts
Find the 5 most engaged posts. For each note:
- Author name and headline
- Post text (first 200 chars)
- Reaction count and comment count
- The angle/take they used
Summarize: what angles get traction, what's overdone, what's missing.
PRIORITY: Try mcp__anysite-mcp tools first. If they fail, fall back to WebSearch/WebFetch.
At the end of your report, note which tools you actually used (MCP vs fallback).
Sub-agent 2 - Community perspective:
Research "[TOPIC]" on Reddit and Twitter.
You MUST use these exact MCP tools (not WebSearch, not WebFetch):
- mcp__anysite-mcp__search_reddit_posts(query="[TOPIC]", count=10, sort="top", time_filter="month")
- mcp__anysite-mcp__search_twitter_posts(query="[TOPIC]", count=10)
- mcp__anysite-mcp__get_reddit_post_comments(post_url="[url]") for top 2-3 posts
Find honest opinions, complaints, praised solutions.
Note where community sentiment DIFFERS from LinkedIn's polished narrative.
PRIORITY: Try mcp__anysite-mcp tools first. If they fail, fall back to WebSearch/WebFetch.
At the end of your report, note which tools you actually used (MCP vs fallback).
Sub-agent 3 - Deep content:
Research "[TOPIC]" on YouTube and the web.
You MUST use these exact MCP tools (not WebSearch, not WebFetch):
- mcp__anysite-mcp__search_youtube_videos(query="[TOPIC]", count=5)
- mcp__anysite-mcp__get_youtube_video_subtitles(video="[video_id]") for the top result
- mcp__anysite-mcp__duckduckgo_search(query="[TOPIC]", count=5) for web articles
- mcp__anysite-mcp__parse_webpage(url="[article_url]") to read top articles
Extract key frameworks, data points, expert claims.
PRIORITY: Try mcp__anysite-mcp tools first. If they fail, fall back to WebSearch/WebFetch.
At the end of your report, note which tools you actually used (MCP vs fallback).
After launching agents: Check their output within 15-20 seconds to verify they are using the MCP tools, not WebSearch/WebFetch. If any agent is using the wrong tools, send a corrective message immediately via SendMessage with the exact tool names.
Synthesis: Present to the user:
Ask the user which angle and template they prefer:
A: "Lesson Learned" - Hook -> Mistake -> Learning -> 3-5 Takeaways -> Question B: "Curated Insight" - I found X -> 3 insights with context -> My take -> What are you seeing? C: "How I Do X" - Problem everyone faces -> My setup (3 steps) -> Result with numbers
Read the user's voice profile (SOUL.md, user-profile.md, or memory) to match their tone.
Draft the post following these LinkedIn best practices:
Present the draft to the user. Ask:
If the user wants a second opinion, offer to run /council:
/council "Should I publish this LinkedIn post? Is the angle compelling? What would make it stronger?"
Incorporate feedback. Iterate until the user is satisfied.
When the user approves, publish via Unipile MCP.
Unipile MCP is an OpenAPI proxy with these tools:
mcp__unipile__search-endpoints - find the right API endpointmcp__unipile__get-endpoint - get endpoint details (params, auth)mcp__unipile__execute-request - execute the API call via HAR formatTo publish a LinkedIn post:
First, get the user's Unipile base URL and API key. Ask them for:
https://api1.unipile.com:13118) - subdomain and port are user-specificList their LinkedIn accounts to get the account_id:
mcp__unipile__execute-request({
"harRequest": {
"method": "GET",
"url": "https://{subdomain}.unipile.com:{port}/api/v1/accounts",
"headers": [{"name": "X-API-KEY", "value": "{their_key}"}]
}
})
Create the post using multipart/form-data (CRITICAL - JSON body does NOT work):
mcp__unipile__execute-request({
"harRequest": {
"method": "POST",
"url": "https://{subdomain}.unipile.com:{port}/api/v1/posts",
"headers": [
{"name": "X-API-KEY", "value": "{their_key}"},
{"name": "Content-Type", "value": "multipart/form-data; boundary=Boundary123"}
],
"postData": {
"mimeType": "multipart/form-data",
"text": "--Boundary123\r\nContent-Disposition: form-data; name=\"account_id\"\r\n\r\n{account_id}\r\n--Boundary123\r\nContent-Disposition: form-data; name=\"text\"\r\n\r\n{post_text}\r\n--Boundary123--\r\n"
}
}
})
Successful response: {"object":"PostCreated","post_id":"..."}
If Unipile is not connected:
After publishing, suggest:
When SOUL.md exists, use it as the primary voice reference. When it doesn't, use these defaults: