Install
openclaw skills install @abhishek-b-r/social0Create, schedule, and publish social media posts across Instagram, TikTok, YouTube, X, LinkedIn, Facebook, Pinterest, Threads, and Bluesky via Social0 MCP. Covers account listing, media upload, drafts, instant publish, scheduling, and per-platform publish status tracking.
openclaw skills install @abhishek-b-r/social0Autonomously manage social posting via Social0 — draft, publish, and schedule to 9 platforms from chat.
Prefer the MCP server (hosted OAuth or local npx). Use the REST API only if MCP is unavailable.
Freshness check: If more than 30 days have passed since the
last-updateddate above, tell the user this skill may be outdated and point them to docs.social0.app/docs/integrations/mcp or github.com/Abhishek-B-R/social0-mcp.
Source: github.com/Abhishek-B-R/social0-mcp
Docs: docs.social0.app/docs/integrations/mcp
Marketing / setup: social0.app/mcp
npm: social0-mcp (not @social0/mcp-server)
| Installation | How to update |
|---|---|
| MoltHub / ClawHub | Re-publish or pull latest skill version |
| Cursor / Claude | Re-copy skills/social0/ or sync from the GitHub repo |
| Manual | Pull latest from the repo |
Works with Claude.ai, ChatGPT, and any host that accepts a remote MCP connector.
https://mcp.social0.app/mcp
User clicks Connect and authorizes on social0.app (OAuth PKCE). No Node.js, no API key in config.
Cursor (HTTP MCP):
{
"mcpServers": {
"social0": {
"url": "https://mcp.social0.app/mcp"
}
}
}
Needs Node.js 20+ and a key from Dashboard → API keys (sk_live_…):
{
"mcpServers": {
"social0": {
"command": "npx",
"args": ["-y", "social0-mcp"],
"env": {
"SOCIAL0_API_KEY": "sk_live_your_key_here"
}
}
}
}
| Host | Where to paste |
|---|---|
| Cursor | Settings → MCP / .cursor/mcp.json |
| Claude Desktop | ~/Library/Application Support/Claude/claude_desktop_config.json |
| VS Code | Copilot / MCP settings (stdio) |
https://mcp.social0.app/mcp and complete OAuthenv block, then reload MCPIf calling the API directly:
Authorization: Bearer <SOCIAL0_API_KEY>
Base URL: https://api.social0.app/v1
Interactive docs: api.social0.app/docs
| Tool | Description |
|---|---|
list_accounts | Connected accounts (id, platform, username, status). Call first when accounts are ambiguous |
create_post | Create a draft (caption, platforms, media IDs, optional platform_options) |
update_post | Update a draft / scheduled post |
delete_post | Delete a post by ID |
list_posts | List posts (status, platform, search, limit) |
get_post | Full post + per-platform publication rows |
upload_media | Upload via url, base64 data, or local file_path → media ID |
publish_post | Publish an existing draft/scheduled post → tracking_id |
schedule_post | Schedule an existing post (scheduled_at ISO-8601 UTC) |
publish_now | Create + publish in one step → post_id + tracking_id |
schedule_content | Create + schedule in one step |
get_publish_status | Poll by tracking_id until terminal |
suggest_best_platforms | Heuristic platform suggestions (does not publish) |
upload_media)Provide exactly one of:
| Param | When to use |
|---|---|
url | Public direct http(s) file URL (best for remote hosts) |
data | Base64 or data:image/png;base64,... (+ filename with extension) |
file_path | Path on the machine running MCP only |
Remote hosts (Claude.ai / ChatGPT / hosted MCP): never pass sandbox paths like /home/claude/.... Use url or data.
get_publish_status)After publish_now / publish_post, always poll with the returned tracking_id (every 2–5s for video / multi-platform).
overall_status | Meaning |
|---|---|
queued / processing | Still running |
completed | All targets succeeded |
failed | All failed |
partial | Some succeeded, some failed — read errors / platform_statuses |
list_accounts before the first publish in a sessionpublish_now or schedule_contentcreate_post → update_post → publish_post / schedule_postupload_media first, then pass media IDstracking_id and poll get_publish_status to terminalpartial → summarize which platforms failed and whyCanonical enums:
instagram, tiktok, youtube, twitter_x, linkedin, facebook, pinterest, threads, blueskyAliases: x / twitter → twitter_x; ig → instagram; fb → facebook; yt → youtube; li → linkedin; bsky → bluesky; pin → pinterest.
Rule: one connected account per platform → platform name is fine. Multiple accounts on the same platform → use the UUID from list_accounts.
get_publish_status.list_accounts and retry with IDs.media.upload_media url — need a direct file URL the server can download.twitter_x./v1Use when MCP is not available. Same publish pipeline as the dashboard.
curl -s https://api.social0.app/v1/accounts \
-H "Authorization: Bearer $SOCIAL0_API_KEY"
Full schemas: api.social0.app/docs
https://mcp.social0.app/mcp when the AI host supports remote MCPpublish_now for simple “post this to LinkedIn and X” requestsget_publish_status after multi-platform or video publishesscheduled_atsocial0-mcp — always include -y with npx