Social0 Social Media Skill
Autonomously 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.
Keeping This Skill Updated
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 |
Setup
- Create a Social0 account at social0.app
- Connect social accounts in Dashboard → Connections
- Authenticate with the CLI (preferred) or connect MCP (fallback)
A — CLI (preferred)
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).
B — Remote MCP (when no shell)
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"
}
}
}
C — Local MCP npx (stdio hosts)
{
"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) |
Handling missing auth
- CLI:
social0 loginwith a key from https://social0.app/dashboard/api-keys — or setSOCIAL0_API_KEY - Hosted MCP: reconnect at
https://mcp.social0.app/mcpand complete OAuth - Local MCP: put the key in the MCP
envblock, then reload MCP - Stop — do not invent keys or search keychains for secrets
- OAuth creates a connector API key (UI may show “Claude MCP Connector”); revoke anytime in Dashboard → API keys
Auth (REST fallback)
If calling the API directly:
Authorization: Bearer <SOCIAL0_API_KEY>
Base URL: https://api.social0.app/v1
Interactive docs: api.social0.app/docs
CLI commands (preferred)
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 |
Quick CLI examples
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.
MCP tools (fallback)
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) |
Media (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.
Publish status
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 |
Recommended agent workflow
- Prefer CLI if
social0/npx social0works; otherwise use MCP tools social0 accounts/list_accountsbefore the first publish in a session- Simple one-shot →
social0 publish …or MCPpublish_now/schedule_content - User wants to edit first → draft → edit → publish / schedule
- With media → upload first (
social0 uploadorupload_media), then pass media IDs - After publish → return
tracking_idand poll status to terminal - On
partial→ summarize which platforms failed and why - Never invent account UUIDs or tracking IDs
- Never claim CLI/MCP can connect Instagram/Facebook/etc. — send users to the dashboard
- Schedules: confirm timezone; CLI accepts natural language (
tomorrow 9am); MCP expects UTC ISO-8601 - Publishing confirmation: unless the user clearly says “post now” / “publish immediately”, confirm before live publish. Drafts are safe; live posts are not.
Platform names
Canonical enums:
instagram,tiktok,youtube,twitter_x,linkedin,facebook,pinterest,threads,bluesky
Aliases: 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.
Platform gotchas
- Each platform posts independently. One failure does not roll back others. Always check publish status.
- Ambiguous accounts return an error listing IDs — list accounts and retry with IDs.
- Media must be Social0 media IDs on posts — upload first; do not paste Drive/Dropbox share links as
media. - Non-direct URLs fail quietly for MCP
upload_mediaurl— need a direct file URL the server can download. - X/Twitter captions are short — keep within ~280 characters when targeting
twitter_x. - Connecting accounts is dashboard-only — CLI/MCP cannot complete platform OAuth (CLI can open the connect URL via
social0 accounts connect).
Out of scope
- Completing platform OAuth inside the chat (dashboard or
accounts connectlink) - Analytics, inbox, social listening
- Dashboard-only features not on
/v1
REST API (last resort)
Use 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
Tips
- Prefer
social0CLI for agents with shell access (Cursor, Claude Code, terminals, CI) - Prefer hosted
https://mcp.social0.app/mcponly when the AI host supports remote MCP and has no shell - Prefer one-shot publish for simple “post this to LinkedIn and X” requests
- Always poll status after multi-platform or video publishes
- Use drafts when testing to avoid accidental live posts
- Keep hashtags modest (about 4–5) unless the user asks otherwise
- Convert local times to UTC before MCP
scheduled_at(CLI natural language handles timezone via config) - CLI package is
social0; MCP package is@social0/mcp(npx -y @social0/mcp; unscopedsocial0-mcpis a deprecated alias)
