Install
openclaw skills install @bitsandtea/postking-getting-startedFirst-run flow for PostKing — authenticate, top up credits, onboard a brand from a URL, connect socials, and ship a first post.
openclaw skills install @bitsandtea/postking-getting-startedThe full zero-to-first-post path: connect, authenticate, fund the balance, onboard a brand from its website, connect socials, and ship a first scheduled post. This is the first skill to run for any new user or freshly-connected agent.
Use this as the very first skill for any new user or freshly-connected agent session: checking auth state, funding credits, onboarding the first brand, connecting social accounts, or shipping the first post. Also use it any time you hit UNAUTHORIZED, INSUFFICIENT_CREDITS, or TRIAL_EXPIRED from another skill and need to route back through auth/billing.
Not for day-to-day content work once a brand is onboarded and funded — hand off to the postking-social/postking skill for calendar review, posts, blogs, and repurposing. Not for SEO, campaigns, competitor research, Reddit, or voice/quality passes — those are their own skills (postking-seo, postking-storylines, postking-competitor-intel, postking-reddit, postking-brand-voice).
This skill needs 17 tools out of PostKing's 200+, grouped by stage:
Auth
health — no-auth status check; always call this first.login_start, login_complete — stdio device-flow authentication.Credits & billing
get_credits — check balance and free-tier status.billing_list_packs — list one-off credit packs.billing_topup — buy a pack.billing_wallet — check the unified credit balance.billing_list_tiers — list subscription tiers.billing_subscribe — start a subscription.Brand onboarding
onboard_brand — crawl a website, analyze audience, generate themes.create_brand — manual brand creation without a website crawl.get_onboarding_status — poll onboarding progress.list_themes — review generated content themes.Socials
check_social_accounts — see what's connected.generate_connect_link — get an OAuth link for a platform.First post
generate_post — draft post variations.approve_post — lock in a variation and schedule.(whoami and logout are also available if you need to confirm identity or sign out, but aren't required for this flow.)
None — this is the first skill to run when connecting to PostKing.
This is a multi-stage flow. Obey these rules throughout:
Call health. This requires no authentication and tells you whether you're already logged in and what to do next. Always start here.
https://mcp.postking.app via an OAuth-aware host): health reports that authentication already happened at the connector. Do not call login_start — there's no in-session login step.health reports whether a token is stored. If not, continue to Step 2.Call login_start. It returns a URL and a short code and begins polling on its own — the tool call itself waits for the browser approval step and reports success or timeout; you don't need a separate confirmation turn.
Show the URL and code to the user verbatim (no paraphrasing or redaction) and tell them to open it and approve. Use login_complete only if your client's flow separates "start" from "poll" — most stdio clients handle both in one login_start call.
Call get_credits (detail: "short" for just the number, "full" for complete billing context).
0, or a later operation returns INSUFFICIENT_CREDITS → go to Step 4.Ask the user once which they prefer: a one-off credit pack (agent-native default, instant off-session charge) or a subscription.
One-off pack:
billing_list_packs — SKUs agent_4/agent_5/agent_25/agent_50 = $4/160cr, $5/220cr, $25/1200cr, $50/2600cr. The $5 pack covers a full demo run (a week of posts + SEO pipeline + a landing page). Show the options and let the user pick — don't guess.billing_topup({ packSku: "<chosen>" }):
status: "paid" (common case, card on file) — instant off-session charge; response includes the new balance. Done immediately, do not poll.checkoutUrl returned (no card on file) — present the URL, have the user complete Stripe Checkout, then poll billing_wallet every few seconds (cap ~5 minutes) until credits rises by the expected amount. Hosted Checkout sessions expire after ~30 minutes of inactivity — call billing_topup again for a fresh URL if that happens.Subscription:
billing_list_tiers — GROWTH / PRO / ENTERPRISE. Ask which tier.billing_subscribe({ tier, interval }) (interval: "month" or "year") — returns a checkoutUrl. Human-completion is the cleanest path: the user completes Checkout, the webhook provisions the account (grants credits, activates the plan).billing_wallet (or get_credits) every few seconds (cap ~5 minutes) until the subscription is active. The agent spends from the same unified User.credits pool either way — there's no separate agent wallet.get_onboarding_status (or check via health/prior context) to see whether a brand already exists. If the user has zero brands, onboarding is required — don't proceed to anything else.acme.com — still right, or different?") and wait for explicit confirmation. Never onboard silently on remembered values.onboard_brand({ websiteUrl, name }) — crawls the site, analyzes audience, generates themes. Typically 30–90s.create_brand({ name, description, tone, audience }) for manual setup without a crawl.get_onboarding_status({ brandId }) — poll until analysis/theme generation finishes.list_themes({ brandId }) — surface the generated themes (titles + one-line gloss each) and ask the user whether to keep, edit, or regenerate. Don't proceed silently.Deeper brand & theme editing (optional, outside this skill's minimal subset) — get_brand_info for the full audience/positioning reveal, edit_theme/delete_theme/generate_themes for individual theme edits or regeneration. These are covered in the postking skill; use them there once onboarding is complete if the user wants finer control.
check_social_accounts({ brandId }) — see what's connected.generate_connect_link({ brandId, platform }) — platforms: linkedin, x, instagram, threads, facebook. Show the URL and ask the user to confirm once they've completed OAuth.generate_post({ brandId, platform, variations: 3 }) — show the variations.approve_post({ postId, variation, schedule }) — locks it in.postking skill from here for calendar review and everything else day-to-day.If a shell is available, the same flow via pking (npm package postking-cli):
pking me # check auth
pking login-start # print URL+code (device flow)
pking login-finish # complete after user approves
pking user credits # check balance
pking billing packs # list one-off packs
pking billing topup --pack <sku> # buy a pack
pking billing tiers # list subscription tiers
pking billing subscribe --tier <TIER> [--interval year]
pking onboard <websiteUrl> --name "<Name>" # crawl + analyze + themes
pking brand create <name> --description "..." --tone "..." --audience "..." # manual
pking brand themes list # review generated themes
pking social check # see connected accounts
pking social connect-platform --platform <linkedin|x|instagram|threads|facebook>
pking posts generate --platform <p> --variations 3
pking posts approve <postId> --variation <n> --schedule <iso>
pking login (unsplit) blocks for up to 15 minutes polling — prefer login-start / login-finish in an agent context to avoid timeouts. For new users without an account yet, pking register-start --email <email> / pking register-finish runs the equivalent magic-link registration flow.
INSUFFICIENT_CREDITS (HTTP 402) — balance too low. Run Step 4.RATE_LIMITED — back off using the retryAfter value in the error envelope before retrying.UNAUTHORIZED — the stored token is invalid or expired. Re-run login_start (stdio) or reconnect the connector (remote/OAuth transport).TRIAL_EXPIRED — upgrade via the checkoutUrl returned in the error envelope.VALIDATION — invalid email format or a missing required field.NOT_FOUND on the onboarding/audience status — analysis hasn't finished yet; wait briefly and retry once on the user's say-so, don't loop silently.billing_topup or billing_subscribe again for a fresh checkoutUrl.health should return successfully and report the current auth state before doing anything else.get_onboarding_status({ brandId }) should report a terminal (non-running) state.check_social_accounts({ brandId }) should reflect the platform just connected.Once authenticated, funded, and onboarded:
postking — day-to-day content: posts, content weeks, repurposing, blogs, landing pages, visuals, trends.postking-seo — SEO / GEO from seed keywords to published articles.postking-storylines — multi-channel marketing campaigns (Storylines).postking-competitor-intel — discover, register, and analyze a brand's competitors.