Postking social
Teach any AI agent to run your content marketing. Open-source skill for PostKing - generate posts, plan content weeks, ship blog articles, build landing pages - installable in Hermes, Claude, and Codex.
npx -y skills add bitsandtea/postking-skills --skill postking-socialAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Generate, approve, and schedule social posts on PostKing across LinkedIn, X/Twitter, Instagram, Threads, and Facebook — plan a recurring weekly content cadence (Smart Week), repurpose a URL/blog/text/existing post into platform-tailored posts, pick or regenerate a post visual, and pull trending hooks for inspiration.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
8.9 KB, as published. Nobody here has run it
PostKing Social
Handles 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.
When to Use
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.
When NOT to Use
- Blog articles (writing, publishing, WordPress/Medium/Substack) →
postking-blog. - Landing pages or side pages →
postking-landing-pages. - Multi-channel campaign briefs and strategy (Storylines) →
postking-storylines. - Subreddit-specific matching or native Reddit rewrites →
postking-reddit. - Managing saved voice profiles themselves, or a standalone de-slop/AI-detection pass →
postking-brand-voice. - No active brand yet, or first-time social account connection →
postking-getting-started.
Minimal tool subset
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.
Procedure
Generate, approve, and schedule a post
generate_post({ platform, variations?, theme, voice?, brandId? })— ALWAYS passthemewith 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 singlepostId(variation 1 is the primary, saved content — all variations live under that onepostId, never call it again to "get the others").- Show the variation(s) to the user; ask which one (if more than one) and what time.
approve_post({ postId, scheduledAt, timezone? })—scheduledAtis a future ISO 8601 datetime. This is the free-tier choke point. There is novariationparam 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.
Plan a content week (Smart Week)
get_weekly_schedule({ brandId? })— view the current cadence, if any.set_weekly_schedule({ enabled?, leadTimeDays?, timezone?, voiceProfileId?, dayConfigs, brandId? })wheredayConfigsis an array of{ dayOfWeek (0=Sun…6=Sat), mediums: [{ medium, postsPerDay }] }. There are nomonday/tuesday/… params and the flag isenabled, notenable— those are CLI-only sugar.run_weekly_schedule_day({ date, brandId? })—dateisYYYY-MM-DD. This is the Smart Week engine; call it per day, or leave the scheduleenabledto 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.
Repurpose a URL, blog, or text into multi-platform posts
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.- Text input:
sourceType: "text", sourceContent: "<text>". - From an existing blog:
sourceType: "blog", sourceBlogId: <articleId>. - From an existing post:
sourceType: "social_post", sourcePostId: <postId>. - Optional:
angle,variations,voiceProfileIds(single ID applies to all platforms, or["x:id1","linkedin:id2"]per platform).
- Text input:
get_post({ postId })per generated post — inspect before scheduling.approve_post({ postId, scheduledAt })— free-tier choke point.get_calendar({})— confirm.
Pick a visual for a post
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 numericpickparam on the MCP tool (that's CLI-only sugar); you must supply one ofstyle,assetId, orslot, or the tool errors. Passkind: "quote"(or"card"/"photo"/etc.) when the chosen option is a quote/card template style — omittingkinddefaults to"card"and rejects quote styles.- "Show me more" →
regenerate_post_visual({ postId, platform, loadExternal: true })pulls additional stock results, then re-rungenerate_post_visual_options. clear_post_visual({ postId, platform })to remove a pick. For carousels: set cards first (set_post_cards/edit_post_card), thengenerate_post_carousel({ postId }).
Trends as hooks
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.
CLI fast path
| 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.
Pitfalls
approve_posthas novariationparam 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 bygenerate_post/get_post) to edit the saved content directly.set_weekly_scheduleneedsdayConfigs, not per-day flags. Passingmonday/tuesday/etc. orenable(instead ofenabled) will fail validation.pick_post_visualneeds an explicitstyle/assetId/slot. There is no index-basedpickparam — always callgenerate_post_visual_optionsfirst and copy its fields.- Omitting
themeongenerate_postgives a random topic. Always pass it when the user wants specific content. - Visuals are never auto-attached.
generate_postprepares visual options but does not attach one — nothing changes untilpick_post_visualis called. INSUFFICIENT_CREDITS/FREE_CAP_REACHED— surface the error envelope'scheckoutUrlin one line and stop; don't retry or recap.
Verification
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.