{"id":68024,"plugin_id":"plugin_asdk_app_6acd3cdad1448191852757ac786a581b","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-28T13:12:10.048Z","digest":"00c4f1c092efa63d78f7c708b56ade2e8a473238d2c9ea0917f3c37d44de5bf0","against":null,"payload":{"description":"Compose, preview and publish a social media post with Ravenpost — Instagram, TikTok, X (Twitter), LinkedIn, Threads, Bluesky, YouTube, Pinterest and Telegram. Use whenever the user wants to post, tweet, share, cross-post, schedule, queue or draft something to their connected social accounts (\"post this on Instagram and X\", \"schedule a tweet for Tuesday 9am\", \"put this in the queue\", \"draft a launch post\"). Covers choosing the workspace and accounts, the per-platform limits and required fields a post can fail on, previewing before anything is written, and the confirmation a publish needs.","included_files":[{"relative_path":"references/platforms.md","size_in_bytes":3498},{"relative_path":"references/tools.md","size_in_bytes":35809}],"name":"publish-a-social-post","skill_md_contents":"---\nname: publish-a-social-post\ndescription: Compose, preview and publish a social media post with Ravenpost — Instagram, TikTok, X (Twitter), LinkedIn, Threads, Bluesky, YouTube, Pinterest and Telegram. Use whenever the user wants to post, tweet, share, cross-post, schedule, queue or draft something to their connected social accounts (\"post this on Instagram and X\", \"schedule a tweet for Tuesday 9am\", \"put this in the queue\", \"draft a launch post\"). Covers choosing the workspace and accounts, the per-platform limits and required fields a post can fail on, previewing before anything is written, and the confirmation a publish needs.\n---\n\n# Publish a social post\n\nRavenpost is compose-once, fan-out: **one post carries one caption and one set\nof media, and goes to any number of connected accounts across nine networks.**\nEach account is a separate destination with its own publish status, permalink\nand error.\n\nFull argument list for every tool: [`references/tools.md`](references/tools.md).\nCaption budgets and per-platform rules: [`references/platforms.md`](references/platforms.md).\n\n## Before writing anything\n\n**1. Settle the workspace.** Call `list_workspaces`. With exactly one, pass\nnothing and forget about it. **With more than one, ask the user which** and pass\n`workspaceId` on every later call. Do not guess and do not pick the first: a\nworkspace is a client, and the accounts differ per workspace. The server enforces\nthis — a workspace-scoped call with several available fails with an error naming\nthem, which is your cue to ask, not to retry.\n\n**2. Find the destinations.** `list_accounts` returns each account's `id`,\n`platform`, `username` and `status`. Targets are **account ids**, never platform\nnames. If the user said \"Instagram\" and two Instagram accounts are connected,\nask which; if they said \"everywhere\", list what you are about to select and let\nthem confirm.\n\n## The workflow\n\n**3. Collect what the destinations require.** Only some of this applies:\n\n- **Pinterest** — call `list_boards` for that account and pass `board`. A pin\n  belongs to a board, Pinterest has no default, and without one the post is\n  created and then fails at publish time.\n- **Instagram reel audio** — `list_audio` (omit the query for what is trending),\n  then pass the track as `audio`. Only reels, and only Instagram accounts\n  connected through Facebook; the tool says so if the account cannot.\n- **Instagram collaborators** — `collaborators` (up to three usernames) reach\n  only an Instagram account whose `connection` in `list_accounts` is\n  `FACEBOOK_LOGIN`, and never a story. On any other account they are dropped,\n  the post publishes without them, and nothing reports it afterwards — so check\n  before promising co-authors, and pass them to `preview_post`, which warns.\n- **TikTok** — the `tiktok` argument carries the creator's posting options.\n  Omit it and the post publishes **privately** (`SELF_ONLY`), which is the safe\n  default, not a bug. Say so rather than letting the user assume it went public.\n- **Media** — Instagram, TikTok, YouTube and Pinterest refuse a post with none.\n  Use the `prepare-post-media` skill; pass the returned ids as `mediaIds`.\n\n**4. Preview. Always, when you composed any part of the post.** `preview_post`\ntakes exactly `create_post`'s arguments, **writes nothing**, and returns the post\nas each destination will render it plus a `warnings` list. Fix the warnings before\nyou write. A caption 40 characters over X's budget is a rejected post, and the\npreview is the only place that is visible before the fact.\n\nSkip the preview only when the user dictated the post verbatim and asked for it\nto go out immediately.\n\n**5. Show the user what will happen, then write it.** Name the accounts, the\ncaption, and the time. `create_post` needs `caption`, `accountIds` and `action`:\n\n| `action` | What happens | When |\n|---|---|---|\n| `draft` | Saved, nothing scheduled | The user is still working on it |\n| `schedule` | Goes out at `scheduledAt` | A time was given — absolute ISO 8601 **with offset** (`2026-07-05T09:00:00+03:00`) |\n| `queue` | Goes out at the workspace's next free queue slot | \"queue it\", \"next slot\", \"whenever you normally post\" — see `list_queue_slots` |\n| `now` | Publishes immediately | **Only** when the user explicitly asked to publish now |\n\n**Publishing is the one step that cannot be undone.** People see a post within\nseconds, and a post on Instagram, Threads, TikTok or YouTube cannot be taken\ndown through Ravenpost at all — deleting in Ravenpost removes our copy and leaves\ntheirs live. So\n`action: \"now\"` and `publish_post` need an explicit instruction from the user in\nthis turn. Scheduling does not: it sits on the calendar where it can be read and\ncancelled.\n\n**6. Report what happened.** `create_post` returns the post id and its status.\nPublishing is handed to a queue, so the per-account outcome arrives after the\ncall — `get_post` shows each target's status, permalink and error. Say \"queued\nfor 3 accounts, I can check in a moment\", not \"published to 3 accounts\".\n\n## Decisions this skill makes for you\n\n**One caption per post.** The MCP surface has no per-platform caption override.\nIf the user wants different wording per network — a short X post and a long\nLinkedIn one — **create one post per group of accounts**, not one post and an\napology. Say that is what you are doing.\n\n**Hashtags** go in `hashtags`; they are appended to the caption and count\nagainst the budget like any other characters.\n\n**Threads** (`thread`) are follow-up posts published in order after the caption,\nwhich carries the media. Supported on X, Bluesky, Threads, Telegram; a platform\nwith no thread model just publishes the caption. Limits come from the strictest\nselected platform, and an over-long thread is rejected rather than trimmed.\n\n**Markdown belongs in Telegram-only posts.** Telegram renders a markdown subset\nas real formatting; every other network publishes the caption verbatim, so\n`**bold**` reaches Instagram as four asterisks.\n\n## Refuse, or stop and ask\n\n- Never invent media. The model cannot generate images or video here; the media\n  tools ingest what the user provides. If a post needs a picture and there is\n  none, ask for one.\n- Never publish, delete, or change an existing post's schedule on your own\n  initiative — only on a clear instruction.\n- Never post to an account the user did not name or approve, and never fan out\n  to \"all accounts\" without listing them first.\n- If a tool errors, read it: this server's errors name the fix (which workspaces\n  exist, which boards exist, why TikTok refused). Pass that on instead of\n  retrying the same call.\n\n## Worked example\n\n> \"Schedule this for Tuesday 9am on Instagram and X: *Ravenpost 1.0 is out.*\"\n\n1. `list_workspaces` → one workspace, nothing to ask.\n2. `list_accounts` → `acc_ig` (@ravenpost), `acc_x` (@ravenpost).\n3. `preview_post` with `caption`, `accountIds: [acc_ig, acc_x]` → warning:\n   *Instagram requires media*. Ask the user for an image, upload it, preview\n   again — clean, 31/280 characters.\n4. Confirm: \"Instagram @ravenpost and X @ravenpost, Tuesday 16 Sep 09:00\n   (+03:00).\"\n5. `create_post` with `action: \"schedule\"` and\n   `scheduledAt: \"2026-09-16T09:00:00+03:00\"`.\n6. Report the post id and that both destinations are scheduled.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}