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 the Social0 CLI (preferred) or MCP. Covers account listing, media upload, drafts, instant publish, scheduling, and per-platform publish status.
openclaw skills install @abhishek-b-r/social0Autonomously manage social posting via Social0 — draft, publish, and schedule to 9 platforms from chat or the terminal.
Prefer the social0 CLI whenever the agent has a shell (npx social0 or a global social0 install). Use MCP only when the host has no reliable shell (e.g. Claude.ai / ChatGPT connectors). Use the REST API only if both CLI and MCP are 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/cli, docs.social0.app/docs/integrations/mcp, or github.com/Abhishek-B-R/social0-cli.
CLI: github.com/Abhishek-B-R/social0-cli · npm social0
MCP: github.com/Abhishek-B-R/social0-mcp · npm @social0/mcp
Docs: CLI · MCP
Product: social0.app
| Installation | How to update |
|---|---|
| MoltHub / ClawHub | Re-publish or pull latest skill version |
| Cursor / Claude | Re-copy skills/social0/ or sync from the MCP GitHub repo |
| Manual | Pull latest from the repo |
Needs Node.js 20+ and a key from Dashboard → API keys (sk_live_…):
npm install -g social0
# or: npx social0 …
social0 login # paste sk_live_… (or: echo "sk_live_…" | social0 login)
social0 whoami
social0 accounts
For CI / headless: set SOCIAL0_API_KEY in the environment (not written to disk).
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"
}
}
}
{
"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) |
social0 login with a key from https://social0.app/dashboard/api-keys — or set SOCIAL0_API_KEYhttps://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
Run these via shell when available. Use --json when you need machine-readable output.
| Command | Description |
|---|---|
social0 accounts | List connected accounts (numeric IDs + platforms). Call first when accounts are ambiguous |
social0 post create | Create a draft (--content, --platform, interactive wizard) |
social0 post list / show / edit / delete | Manage drafts and posts |
social0 upload <file> | Upload media → media ID |
social0 publish … | Publish flags, draft ID, latest, markdown, or stdin |
social0 schedule <id> --time "tomorrow 9am" | Schedule with natural language times |
social0 drafts / drafts publish / drafts schedule | Draft workflow |
social0 status <tracking-id> | Poll publish job until terminal |
social0 whoami / doctor | Auth + connectivity checks |
social0 accounts
social0 publish --content "Launching today!" --platform twitter linkedin
social0 upload ./hero.png
social0 schedule <draft-id> --time "tomorrow 9am"
social0 status <tracking-id>
Accounts accept numeric IDs (1, 2) or platform names (twitter, linkedin). Prefer platform names when stable; IDs can reorder after reconnects.
Use when the host exposes Social0 as MCP tools and shell/CLI is not available.
| 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. With the CLI, prefer social0 upload ./local-file.png.
After publish (CLI social0 status or MCP get_publish_status), 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 |
social0 / npx social0 works; otherwise use MCP toolssocial0 accounts / list_accounts before the first publish in a sessionsocial0 publish … or MCP publish_now / schedule_contentsocial0 upload or upload_media), then pass media IDstracking_id and poll status to terminalpartial → summarize which platforms failed and whytomorrow 9am); MCP expects UTC ISO-8601Canonical 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 ID/UUID from accounts / list_accounts.
media.upload_media url — need a direct file URL the server can download.twitter_x.social0 accounts connect).accounts connect link)/v1Use when CLI and MCP are 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
social0 CLI for agents with shell access (Cursor, Claude Code, terminals, CI)https://mcp.social0.app/mcp only when the AI host supports remote MCP and has no shellscheduled_at (CLI natural language handles timezone via config)social0; MCP package is @social0/mcp (npx -y @social0/mcp; unscoped social0-mcp is a deprecated alias)