MCP tools reference
Complete reference for all 13 Social0 MCP tools.
Overview
The Social0 MCP server exposes 13 tools. Each tool maps to one or more /v1 REST API calls. Users can pass platform names (e.g. linkedin, twitter_x) or account UUIDs in platforms[].
Platform names
| User says | Pass as |
|---|---|
linkedin | |
| X / Twitter | twitter_x |
instagram | |
facebook | |
| Threads | threads |
| TikTok | tiktok |
| YouTube | youtube |
pinterest | |
| Bluesky | bluesky |
Aliases: x, twitter → twitter_x; ig → instagram; fb → facebook; yt → youtube.
If multiple accounts exist on one platform, pass the account UUID from list_accounts.
Post status filters (list_posts)
draft | scheduled | publishing | published | partial | failed
Datetime format
Schedule fields use ISO 8601. Prefer UTC (2026-07-12T09:00:00.000Z) or the REST API +default suffix for dashboard timezone. See Schedule guide.
list_accounts
Description: List all connected social accounts for the authenticated user.
When to use: Before publishing — confirm which platforms are connected and get account UUIDs.
Parameters: None
Returns: Array of accounts with id, platform, username, is_active, token_status.
Example user prompt: "Show my connected Social0 accounts."
REST API called: GET /v1/accounts
Errors:
| Error | Fix |
|---|---|
401 Unauthorized | Check API key — create a new key |
| Empty list | Connect accounts in the dashboard first |
create_post
Description: Create a draft post without publishing.
When to use: "Draft a LinkedIn post about X" — save for later editing or publishing.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
content | string | Yes | Post text |
platforms | string[] | Yes | Platform names or account UUIDs |
media | string[] | No | Media IDs from upload_media |
Returns: { post_id }
Example user prompt: "Draft a LinkedIn post about AI trends in 2026."
Example flow:
list_accounts→ confirm LinkedIn connectedcreate_post({ content: "...", platforms: ["linkedin"] })→post_id- Optionally
publish_post({ post_id })later
REST API called: POST /v1/posts
Errors:
| Error | Fix |
|---|---|
No connected linkedin account | Connect LinkedIn in Connections |
Multiple twitter_x accounts | Use account UUID from list_accounts |
update_post
Description: Update an existing draft or scheduled post.
When to use: "Edit my draft" or change content/platforms before publishing.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | Post UUID |
content | string | No | Updated text |
platforms | string[] | No | Updated platform list |
media | string[] | No | Updated media IDs |
Returns: Updated post object.
Example user prompt: "Update my draft to mention the product launch date."
REST API called: PATCH /v1/posts/:id
delete_post
Description: Delete a draft or scheduled post.
When to use: "Delete yesterday's draft."
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | Post UUID |
Returns: Success confirmation.
Example user prompt: "Delete my latest draft."
REST API called: DELETE /v1/posts/:id
list_posts
Description: List posts with optional filters.
When to use: "Show scheduled posts" or "List my drafts."
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status | string | No | draft, scheduled, published, failed, etc. |
platform | string | No | Filter by platform |
search | string | No | Search post content |
limit | number | No | Max results (default 20) |
Returns: Paginated list of posts.
Example user prompt: "Show all scheduled posts."
REST API called: GET /v1/posts
get_post
Description: Get full post details including per-platform publication status.
When to use: After publish completes — see final URLs and per-platform errors.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | Post UUID |
Returns: Post with platforms[] showing status, error, platform_post_url per account.
Example user prompt: "Open post details for my last publish."
REST API called: GET /v1/posts/:id
Note: Use this for final truth after get_publish_status shows a terminal job status.
publish_post
Description: Publish an existing draft or scheduled post immediately.
When to use: "Publish my draft now."
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | Post UUID |
platforms | string[] | No | Override target platforms |
Returns: { tracking_id, status: "queued" }
Example user prompt: "Publish my latest draft to LinkedIn and X."
Example flow:
publish_post({ post_id })→tracking_idget_publish_status({ tracking_id })→ poll until terminalget_post({ post_id })→ final per-platform results
REST API called: POST /v1/posts/:id/publish
Multi-platform publishes fan out in parallel. Poll get_publish_status every 2–5 seconds.
schedule_post
Description: Schedule an existing post for future delivery.
When to use: "Schedule my draft for tomorrow at 9 AM."
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
post_id | string | Yes | Post UUID |
scheduled_at | string | Yes | ISO 8601 datetime |
platforms | string[] | No | Override target platforms |
Returns: Scheduled post object.
Example user prompt: "Schedule my draft for 2026-07-15T09:00:00+default."
REST API called: POST /v1/posts/:id/schedule
upload_media
Description: Upload an image or video file from the local filesystem.
When to use: "Upload logo.png" before creating a post with media.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
file_path | string | Yes | Absolute or relative path to file |
Returns: { media_id, url }
Example user prompt: "Upload ./assets/logo.png."
Example flow:
upload_media({ file_path: "./logo.png" })→media_idcreate_postorpublish_nowwithmedia: [media_id]
REST API called: POST /v1/media/presign → PUT → POST /v1/media/confirm
Limits: JPG, PNG, GIF, WebP ≤ 50 MB; MP4, MOV, WebM ≤ 500 MB.
publish_now
Description: Create and publish a post in one step.
When to use: "Post this to LinkedIn now" — fastest path for immediate publishing.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
content | string | Yes | Post text |
platforms | string[] | Yes | Platform names or account UUIDs |
media | string[] | No | Media IDs |
Returns: { post_id, tracking_id, status: "queued" }
Example user prompt: "Post 'Just shipped v2!' to LinkedIn and X right now."
REST API called: POST /v1/posts/publish
schedule_content
Description: Create and schedule a new post in one step.
When to use: "Schedule a post for tomorrow at 9 AM on LinkedIn."
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
content | string | Yes | Post text |
platforms | string[] | Yes | Platform names or account UUIDs |
scheduled_at | string | Yes | ISO 8601 datetime |
media | string[] | No | Media IDs |
Returns: Created scheduled post.
Example user prompt: "Schedule tomorrow's product launch at 9 AM on LinkedIn and X."
REST API called: POST /v1/posts/schedule
get_publish_status
Description: Poll publish job progress after publish_post or publish_now.
When to use: After any publish — "Did my post publish?" or "Check tracking ID …"
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
tracking_id | string | Yes | UUID from publish response |
Returns:
| MCP field | API field | Description |
|---|---|---|
overall_status | status | queued, processing, completed, failed, partial |
progress.total | total | Platforms in job |
progress.completed | completed | Succeeded count |
progress.failed | failed | Failed count |
platform_statuses | platform_statuses | Per-platform phase and message |
errors | errors | Failed platform details |
failure_reason | failure_reason | First failure (terminal jobs only) |
Example user prompt: "Did my post publish? Check tracking ID abc-123."
Example flow (LinkedIn + X):
- First poll:
overall_status: processing, oneplatform_uploading, oneplatform_queued - Final poll:
partialif X fails,completedif both succeed
Polling guidance:
- Poll every 2–5 seconds while
overall_statusisprocessing - Stop when
overall_statusiscompleted,failed, orpartial - Video posts may take 1–5+ minutes
completed_atis set only when the job is terminal
Terminal outcomes:
| Outcome | overall_status | User message |
|---|---|---|
| All ok | completed | Published to all platforms |
| All failed | failed | Check errors[], reconnect accounts |
| Mixed | partial | Published to some platforms — list failures |
Platform phase values:
| Phase | Meaning |
|---|---|
platform_queued | Platform job accepted |
platform_uploading | Upload/publish in progress |
platform_success | Published on that platform |
platform_failed | Failed — read error / message |
REST API called: GET /v1/jobs/:trackingId
Optional: Integrators can use SSE at GET /v1/jobs/:trackingId/stream (not exposed as an MCP tool today). See Jobs reference.
suggest_best_platforms
Description: Recommend platforms based on content length, media type, and connected accounts.
When to use: "Where should I post this?" or "Which platforms fit this caption?"
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
content | string | Yes | Post text |
has_media | boolean | No | Whether post includes media |
media_is_video | boolean | No | Whether media is video |
Returns: Ranked platform recommendations with reasoning.
Example user prompt: "Which platforms should I publish 'Just shipped v2!' to?"
REST API called: Client-side heuristic (optionally uses GET /v1/accounts for connected platforms)
Post status vs job status
| Concept | Values | Where |
|---|---|---|
Publish job (tracking_id) | queued, processing, completed, failed, partial | get_publish_status |
Post (post_id) | draft, scheduled, publishing, published, partial, failed | get_post, list_posts, dashboard |
During publish, the post is usually publishing. When all platforms finish: all success → published; all failure → failed; mixed → partial.