Install
openclaw skills install @bitsandtea/postking-socialGenerate, approve, and schedule social posts on PostKing across LinkedIn, X, Instagram, Threads, and Facebook — plus content weeks and repurposing.
openclaw skills install @bitsandtea/postking-socialHandles the social-post lifecycle on PostKing: generating AI drafts, approving/scheduling them, running the recurring Smart Week cadence, repurposing existing content into new posts, and attaching visuals. Requires an active brand — use the postking skill's brand-pick flow first if one isn't set.
Use this skill when the user wants to draft, approve, schedule, or reschedule a social post; set up or run a weekly/recurring posting cadence; turn a URL, blog article, or piece of text into platform posts; attach or change a post's image/card/quote/carousel; or browse trending posts for hook inspiration.
postking-blog.postking-landing-pages.postking-storylines.postking-reddit.postking-brand-voice.postking-getting-started.list_brands, set_active_brand — brand context.check_social_accounts — confirm connected platforms before posting.generate_post, approve_post, schedule_post, reschedule_post, cancel_post, get_post, list_posts, get_calendar — the core post lifecycle.get_weekly_schedule, set_weekly_schedule, run_weekly_schedule_day — recurring cadence (Smart Week).repurpose_content — turn a URL/text/blog/post into new social drafts.generate_post_visual_options, pick_post_visual, regenerate_post_visual, clear_post_visual, generate_post_carousel — visuals.trends_list — trending-post hooks.generate_post({ platform, variations?, theme, voice?, brandId? }) — ALWAYS pass theme with the specific topic/angle/tone the user wants; omitting it produces a random brand theme. This call polls until generation completes and already saves the result to a single postId (variation 1 is the primary, saved content — all variations live under that one postId, never call it again to "get the others").approve_post({ postId, scheduledAt, timezone? }) — scheduledAt is a future ISO 8601 datetime. This is the free-tier choke point. There is no variation param on this MCP tool — via MCP you always approve the post's current saved content (variation 1). Picking a different generated variation to schedule is a CLI-only affordance (pking posts approve <id> --variation N).get_calendar({ days }) — confirm it appears in the upcoming schedule.get_weekly_schedule({ brandId? }) — view the current cadence, if any.set_weekly_schedule({ enabled?, leadTimeDays?, timezone?, voiceProfileId?, dayConfigs, brandId? }) where dayConfigs is an array of { dayOfWeek (0=Sun…6=Sat), mediums: [{ medium, postsPerDay }] }. There are no monday/tuesday/… params and the flag is enabled, not enable — those are CLI-only sugar.run_weekly_schedule_day({ date, brandId? }) — date is YYYY-MM-DD. This is the Smart Week engine; call it per day, or leave the schedule enabled to run automatically.list_posts({ status: "created" }) → get_post({ postId }) to review each draft.approve_post({ postId, scheduledAt, timezone? }) per draft.get_calendar({ days: 7 }) — verify the final week.check_social_accounts({ brandId? }) — confirm which platforms are connected.repurpose_content({ brandId, sourceType: "url", sourceUrl, targetType: "social", targetPlatforms: ["linkedin", "x"] }) — PostKing crawls the URL internally; do not fetch it yourself.
sourceType: "text", sourceContent: "<text>".sourceType: "blog", sourceBlogId: <articleId>.sourceType: "social_post", sourcePostId: <postId>.angle, variations, voiceProfileIds (single ID applies to all platforms, or ["x:id1","linkedin:id2"] per platform).get_post({ postId }) per generated post — inspect before scheduling.approve_post({ postId, scheduledAt }) — free-tier choke point.get_calendar({}) — confirm.generate_post_visual_options({ postId, platform }) — always run this first. Relay the numbered options to the user, especially the recommended one — the returned params ARE the spec, no need to render anything yourself.pick_post_visual({ postId, platform, style?, variant?, assetId?, slot?, kind? }) — pass the chosen option's fields verbatim from step 1's response. There is no numeric pick param on the MCP tool (that's CLI-only sugar); you must supply one of style, assetId, or slot, or the tool errors. Pass kind: "quote" (or "card"/"photo"/etc.) when the chosen option is a quote/card template style — omitting kind defaults to "card" and rejects quote styles.regenerate_post_visual({ postId, platform, loadExternal: true }) pulls additional stock results, then re-run generate_post_visual_options.clear_post_visual({ postId, platform }) to remove a pick. For carousels: set cards first (set_post_cards/edit_post_card), then generate_post_carousel({ postId }).trends_list({ niche?, platform?, days?, limit?, sort? }) — niches: ai-saas, marketing, web3 (default ai-saas); platform currently only x. The crawler runs every 3 days; default window is 3 days. Feed results into generate_post's theme or repurpose_content's angle for hook inspiration.
| Goal | Command |
|---|---|
| Pick active brand | pking brand list / pking brand set <brandId> |
| Generate a post | pking posts generate --platform linkedin --variations 3 --theme "..." |
| Approve & schedule (pick a variation) | pking posts approve <postId> --schedule 2026-08-01T14:00:00Z --variation 2 --timezone America/New_York |
| View calendar | pking posts calendar --days 7 |
| Plan a content week | pking weekly-schedule set --monday "linkedin:1,x:1" --timezone America/New_York --enable then pking weekly-schedule run-day --date <YYYY-MM-DD> |
| Repurpose a URL | pking repurpose --source-type url --source-url <url> --target-type social --target-platforms linkedin,x |
| Visual options / pick | pking visuals options <postId> --platform <p> → pking visuals pick <postId> --platform <p> --pick <N> |
| Trends | pking trends list --niche ai-saas --days 3 --json |
For the full command catalog, use the postking skill's references/commands.md, or run pking --help / pking <group> --help.
approve_post has no variation param via MCP. If the user wants a specific generated variation scheduled (not variation 1), that's a CLI-only affordance (--variation N); via MCP the only way is to work from the CLI, or use the visual editor link (editInVisualEditor, returned by generate_post/get_post) to edit the saved content directly.set_weekly_schedule needs dayConfigs, not per-day flags. Passing monday/tuesday/etc. or enable (instead of enabled) will fail validation.pick_post_visual needs an explicit style/assetId/slot. There is no index-based pick param — always call generate_post_visual_options first and copy its fields.theme on generate_post gives a random topic. Always pass it when the user wants specific content.generate_post prepares visual options but does not attach one — nothing changes until pick_post_visual is called.INSUFFICIENT_CREDITS / FREE_CAP_REACHED — surface the error envelope's checkoutUrl in one line and stop; don't retry or recap.get_credits({ detail: "short" }) — confirms auth and balance.check_social_accounts({}) — confirms at least one connected platform.list_posts({ status: "created", limit: 1 }) — confirms the brand/posts API is reachable.