Examples
Practical agent recipes for Social0 MCP — publish, analytics, inbox, threads, and multi-platform jobs.
Same tools on remote (https://mcp.social0.app/mcp) and local (npx -y @social0/mcp). Tool names below match MCP tools.
Agent rules:
- Call
list_accountsbefore the first publish in a session. - After any publish, return
tracking_idand pollget_publish_statusuntil terminal (completed,failed, orpartial). - Remote hosts:
upload_mediawith publicurlor base64data— not sandboxfile_path. - MCP
scheduled_atis UTC ISO-8601 (CLI accepts natural language; MCP does not). - Quote analytics with
sampledvspartialattached — never present a sampled total as a lifetime figure. - Inbox replies are public. Carry
publication_idwith everycomment_id. DMs are X and Bluesky only today.
Schedule to X
Agent flow:
1. list_accounts
2. schedule_content({
content: "Blog post goes live in the morning — thread in replies.",
platforms: ["twitter_x"],
scheduled_at: "2026-08-04T09:00:00.000Z"
})Confirm timezone with the user before converting local time to UTC.
Instagram reel (upload + publish)
Remote host (public URL):
1. list_accounts
2. upload_media({ url: "https://cdn.example.com/reel.mp4", filename: "reel.mp4" })
→ media_id
3. publish_now({
content: "60-second product walkthrough ✨",
platforms: ["instagram"],
media: ["<media_id>"]
})
→ tracking_id
4. get_publish_status({ tracking_id: "<tracking_id>" }) # poll every 2–5sLocal MCP (file on the same machine):
upload_media({ file_path: "/Users/you/reel.mp4" })Video jobs often stay in processing longer than text — keep polling.
Thread (X / Threads / Bluesky)
MCP has no dedicated thread tool. Options:
A — Legacy --- split (X only): API splits content on a line containing only --- into a reply chain.
publish_now({
content: "1/3 — We rebuilt the publish pipeline.\n---\n2/3 — Same queue as the dashboard.\n---\n3/3 — Docs: https://social0.app/docs",
platforms: ["twitter_x"]
})B — Structured parts (recommended for media per tweet): use REST metadata.twitterThread.parts or the dashboard thread composer. MCP platform_options today covers disclosure flags (madeWithAi, paidPartnership) but not multi-part arrays — for rich threads with per-part media, use the dashboard or REST API.
C — Draft workflow: create_draft → user reviews → publish_post — still one caption unless you use REST metadata.
Threads and Bluesky use the same structured twitterThread.parts shape when posting via API.
LinkedIn post
1. list_accounts
2. publish_now({
content: "Three things we learned shipping agent-friendly CLI docs:\n\n1. Shell beats MCP when available\n2. Always poll publish status\n3. Platform names ≠ account UUIDs when accounts collide",
platforms: ["linkedin"]
})
3. get_publish_status({ tracking_id: "..." })With image:
upload_media({ url: "https://cdn.example.com/chart.png" })
publish_now({ content: "Q3 snapshot", platforms: ["linkedin"], media: ["<media_id>"] })Bulk schedule (multiple schedule_content calls)
One tool call per slot — no batch tool.
1. list_accounts
2. schedule_content({
content: "Monday motivation",
platforms: ["twitter_x", "linkedin"],
scheduled_at: "2026-08-04T08:00:00.000Z"
})
3. schedule_content({
content: "Mid-week product tip",
platforms: ["instagram"],
media: ["<media_id>"],
scheduled_at: "2026-08-06T14:00:00.000Z"
})
4. schedule_content({
content: "Friday recap",
platforms: ["threads", "bluesky"],
scheduled_at: "2026-08-08T16:00:00.000Z"
})Return each scheduled post id to the user. Edit later with update_draft / cancel with delete_draft (drafts and schedules only — not live network posts).
Multi-platform publish_now + poll
1. list_accounts
2. publish_now({
content: "Social0 MCP examples are live 🚀",
platforms: ["twitter_x", "linkedin", "threads"]
})
→ { post_id, tracking_id }
3. get_publish_status({ tracking_id }) # repeat until terminalOn partial:
- Summarize which platforms in
platform_statusessucceeded vs failed. - Read
errorsfor failure reasons. - Do not invent new tracking IDs — use the one from step 2.
TikTok in multi-platform jobs: set privacy via dashboard defaults or platform_options.tiktok.privacy_level — bare content may fail. See TikTok settings.
Optional: suggest_best_platforms
Before publishing ambiguous copy:
suggest_best_platforms({
content: "Long-form essay about B2B SaaS positioning…",
has_media: false
})Heuristic only — does not publish.
Analytics for a window
1. list_accounts
2. get_analytics({ range: "28d" })
→ Repeat the Notes: block. If sampled, say totals cover the latest N posts, not the whole profile.One post:
get_post_analytics({ post_id: "<post_uuid>" })Live analytics networks today: X, Bluesky, YouTube, TikTok, Pinterest.
Unanswered comments + reply
1. list_inbox_comments({ unanswered_only: true, range: "7d" })
→ copy comment_id and publication_id from the same thread
2. Confirm wording with the user
3. reply_to_comment({
comment_id: "<comment_id>",
publication_id: "<publication_id>",
text: "Thanks for watching!"
})Do not invent publication_id. hide is Instagram + Facebook Pages only (not live in Inbox today).
Comments live: X, Bluesky, YouTube. TikTok and Pinterest have no comments inbox.
DMs (X and Bluesky)
1. list_inbox_dms({ range: "7d" })
→ conversation_id + account
2. get_inbox_dm_thread({ conversation_id, account })
3. Confirm wording
4. reply_to_dm({ conversation_id, account, text: "On it." })Related
- MCP tools
- MCP quickstart
- CLI platform examples — preferred when the agent has a shell
- Provider settings — TikTok privacy, YouTube title, Pinterest board