Create, schedule, and manage social media posts across Instagram, Facebook, X/Twitter, LinkedIn, and TikTok via the Social by InstantDM API and hosted MCP se...
Integrations
Social0
Try itCreate, 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.
What it does
Create, 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.
The skill document
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
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 | Upload media → media ID |
social0 publish … | Publish flags, draft ID, latest, markdown, or stdin |
social0 schedule --time "tomorrow 9am" | Schedule with natural language times |
social0 drafts / drafts publish / drafts schedule | Draft workflow |
social0 status | 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 --time "tomorrow 9am"
social0 status
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)
Related skills
Publish a social media post right now to one or more connected accounts (X, LinkedIn, Instagram, TikTok, Facebook, Threads, Bluesky, YouTube, Pinterest) through PostLake. Use when the user wants to post immediately.
Schedule social media posts to 13 platforms (Bluesky, Threads, Instagram, LinkedIn, Mastodon, YouTube, Facebook Pages, Pinterest, Telegram, X/Twitter, Nostr)...
Schedule, draft, or publish social posts across 9 platforms via the AdaptlyPost API, with explicit confirmation before every post.
List the social accounts connected to PostLake (X, LinkedIn, Instagram, TikTok, Facebook, Threads, Bluesky, YouTube, Pinterest) and their status. Use this first, before publishing, to get the account ids to post to.
Schedule a social media post for a future time through PostLake, and list, reschedule, or cancel scheduled posts. Use when the user wants to post later or plan a calendar.