io.github.bitsandtea/postking-mcp
NPM · POSTKING-MCP · 2 COMPONENTS · SCANNED AUG 3
PostKing MCP server for managing brands, generating posts, scheduling content, and publishing blogs.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security37
- Malware scan not yet available for this package.Unverified
- Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.Partial
- No install/post-install scripts declared.Pass
- Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 26 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability76
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 32233 tokens (~146/item across 220 items; 220 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 96% of tool parameters carry a description.Partial
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
npm · postking-mcp
claude mcp add bitsandtea-postking-mcp -- npx -y postking-mcp
codex mcp add bitsandtea-postking-mcp -- npx -y postking-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"bitsandtea-postking-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"postking-mcp"
],
"enabled": true
}
}
} openclaw mcp add bitsandtea-postking-mcp --command npx --arg -y --arg postking-mcp
mcp_servers:
bitsandtea-postking-mcp:
command: "npx"
args: ["-y", "postking-mcp"] {
"mcpServers": {
"bitsandtea-postking-mcp": {
"command": "npx",
"args": [
"-y",
"postking-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 3 Aug 26 −3
No change was recorded against any check on this day. Supply Chain Security went from 47 to 37. Other categories moved too: Stability & Change Management rose 4.
- 2 Aug 26 +32
- Provenance: unverified → fail ▼ security
- Install scripts: unverified → pass ▲ security
- Known CVEs: unverified → partial ▲ security
- Schema quality: unverified → good ▲ functional
- Stability: unverified → 0.23 ▲ functional
- License: unverified → pass ▲ functional
- Dependency health: unverified → partial ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Maintenance: unverified → pass ▲ functional
- Licence: MIT functional
- 31 Jul 26 −8
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 27 Jul 26 33
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Analysed npm/[email protected]
Provenance none
Ecosystem: npm · Outcome: none
Dependencies 96 packages
96 packages in the resolved dependency tree · 96 deprecated · 29 stale.
The dependency tree was only partially resolved, so these counts may be incomplete.
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
add_domain ~100
Add a new custom domain to the active brand. After adding, call verify_domain to check DNS and activate it.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| domain | string | yes | Domain name, e.g. 'myblog.com' (protocol and www stripped automatically) |
| isPrimary | boolean | — | Set as primary domain for the brand |
| primaryContentType | string | — | What this domain primarily serves |
No output schema declared.
No examples provided.
approve_post ~110
Approve and schedule a draft post. Requires a future datetime. The scheduledAt must be an ISO 8601 UTC datetime, e.g. 2026-03-11T09:00:00Z. After approving, the post status becomes 'scheduled'.
| Name | Type | Req | Description |
|---|---|---|---|
| postId | string | yes | Post ID to approve |
| scheduledAt | string | yes | Future ISO 8601 UTC datetime to post at |
| timezone | string | — | User timezone, e.g. 'America/New_York' |
No output schema declared.
No examples provided.
billing_list_packs ~71
List available credit packs for one-off top-ups. Returns all packs with their SKU, price in USD, and credit amount. Call this tool first to show the user their options, then ask which pack they want. Only after the user explicitly chooses a pack, call billing_topup with that packSku.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
billing_list_tiers ~59
List available PostKing subscription tiers (GROWTH, PRO, ENTERPRISE). Returns each tier's name, price in USD, monthly credits, and billing interval options. Use billing_subscribe to create a subscription Checkout session for a chosen tier.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
billing_subscribe ~113
Create a Stripe Checkout session for a PostKing subscription. Returns { checkoutUrl, sessionId, tier, interval, amountUsd }. Subscription credits refill User.credits each billing period. The subscription Checkout is best completed by a human; the Link virtual card covers the first invoice only (renewals need a durable payment method).
| Name | Type | Req | Description |
|---|---|---|---|
| interval | string | — | Billing interval: "month" (default) or "year". |
| tier | string | yes | Subscription tier. One of: GROWTH, PRO, ENTERPRISE. |
No output schema declared.
No examples provided.
billing_topup ~324
Top up credits by charging the account's card on file (Stripe off-session). Prefers the headless path — no checkout link required. IMPORTANT: Only call this tool after the USER has explicitly chosen a specific pack — it triggers a real charge. To show the user their options first, call billing_list_packs and present the results; do NOT pick a pack on the user's behalf. The response is ONE OF two shapes: (1) Headless success (default when a card is on file): { status: 'paid', paymentIntentId, amountUsd, credits, balance, packSku, cardLast4/receiptUrl when available }. When you receive status === 'paid', the payment has already completed and the credits are in the wallet NOW. Announce to the user: payment ID, last-4 card digits, credits added, and new balance. You are DONE — do NOT call billing_wallet to poll. (2) Checkout fallback (only when there is no card on file): { checkoutUrl, sessionId, amountUsd, credits, packSku }. When you receive checkoutUrl, hand that link to the user so they can complete payment in their browser. Valid skus: agent_4 ($4 / 160 credits), agent_5 ($5 / 220 credits), agent_25 ($25 / 1200 credits), agent_50 ($50 / 2600 credits).
| Name | Type | Req | Description |
|---|---|---|---|
| packSku | string | yes | Credit pack SKU to purchase. One of: agent_4, agent_5, agent_25, agent_50. |
No output schema declared.
No examples provided.
billing_wallet ~93
Fetch the user's credit balance and recent usage entries. Returns { credits, recent } where recent is the last ~10 usage rows. Poll this to confirm a top-up landed ONLY after a billing_topup CHECKOUT result (one that returned a checkoutUrl), until credits rise. Do NOT poll after a status:'paid' headless top-up — those credits are already applied and the new balance is in the topup response.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
brand_truth_create ~192
Capture brand truths from plain natural-language text. Describe facts/observations about the brand in ordinary prose — a sentence or short paragraph (≤8000 chars). Do NOT pre-classify, pre-format, or guess the taxonomy: PostKing's LLM extraction pipeline reads the text and decides which atomic 'brand truths' to persist and which to skip (duplicates, too vague, or previously rejected facts). Returns { addedCount, skippedCount, added, skipped }: 'added' are the truths that were stored; 'skipped' lists each rejected quote with a reason. Review both — the skipped reasons tell you what didn't make it in and why.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| text | string | yes | Free-form natural-language description of facts/observations about the brand (≤8000 chars). Write it as plain prose — the extraction pipeline handles classification. |
No output schema declared.
No examples provided.
brand_truth_delete ~84
Delete a brand truth by ID. This also records rejection memory: the system learns to stop re-suggesting that fact during future extractions. Use it deliberately — deleting a truth teaches PostKing that the fact should not come back.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| id | string | yes | Brand truth entry ID to delete. |
No output schema declared.
No examples provided.
brand_truth_get ~165
Fetch a single brand truth by ID. short {id,name,type,pinned}; medium adds personaScope+tags+summary+timestamps; full = raw (includes full content). Use detail='full' to retrieve the complete content body.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| detail | string | — | Verbosity of returned item(s): "short" = id + primary label + status (cheap list scan); "medium" = key summary fields + counts (a useful glance); "full" = the complete object. Default "full". Lists d… |
| id | string | yes | Brand truth entry ID to retrieve. |
No output schema declared.
No examples provided.
brand_truth_list ~244
List the brand's stored brand truths (atomic facts/observations used to ground generation). short {id,name,type,pinned}; medium adds personaScope+tags+summary+timestamps; full = raw. Filter by type, personaScope, tags (array or comma-separated), or a free-text query.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| detail | string | — | Verbosity of returned item(s): "short" = id + primary label + status (cheap list scan); "medium" = key summary fields + counts (a useful glance); "full" = the complete object. Default "short". Lists… |
| limit | integer | — | Max number of entries to return. |
| personaScope | string | — | Filter by persona scope. |
| query | string | — | Free-text search across truth name/content. |
| tags | — | — | Filter by tags. Accepts an array (['pricing','tone']) or a comma-separated string ('pricing,tone'). |
| type | string | — | Filter by truth type. |
No output schema declared.
No examples provided.
brand_truth_update ~204
Targeted edit of an existing, known brand truth (by ID). This does NOT re-run the LLM extraction pipeline — it writes the provided fields directly. Use it to correct wording (name/description/content), fix the type/personaScope, adjust tags, or pin/unpin. To capture NEW facts from prose, use brand_truth_create instead.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| content | string | — | Updated full content body of the truth. |
| description | string | — | Updated description/summary. |
| id | string | yes | Brand truth entry ID to update. |
| name | string | — | Updated short label/name. |
| personaScope | string | — | Updated persona scope. |
| pinned | boolean | — | Pin (true) or unpin (false) this truth. |
| tags | array | — | Replacement tag list. Pass [] to clear all tags. |
| type | string | — | Reclassify the truth type. |
No output schema declared.
No examples provided.
cancel_post ~44
Cancel a scheduled or approved post, reverting it to draft status without deleting it. Use delete_post to remove it entirely.
| Name | Type | Req | Description |
|---|---|---|---|
| postId | string | yes | Post ID to cancel |
No output schema declared.
No examples provided.
check_ai_content ~49
Check whether text is likely AI-generated. Returns a score and analysis.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| text | string | yes | Text to check |
No output schema declared.
No examples provided.
check_social_accounts ~139
List all connected and disconnected social accounts for the active brand. Lists default short; pass detail=medium/full for more fields. Run before posting to confirm platform availability.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| detail | string | — | Verbosity of returned item(s): "short" = id + primary label + status (cheap list scan); "medium" = key summary fields + counts (a useful glance); "full" = the complete object. Default "short". Lists… |
No output schema declared.
No examples provided.
clear_post_visual ~74
Remove the selected visual from a post for a specific platform. Includes editInVisualEditor: a direct URL to edit the post in the visual editor (when active brand is set).
| Name | Type | Req | Description |
|---|---|---|---|
| platform | string | yes | Platform to clear the visual for, e.g. 'linkedin' |
| postId | string | yes | Post ID |
No output schema declared.
No examples provided.
competitor_add ~98
Async. Batch-add competitor domains (1–20) to the brand. Returns { operationId, status } — poll get_job until state=completed. Each domain triggers crawl + profile analysis. Typically takes ~2–5 min.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| domains | array | yes | One to twenty competitor domains to add (e.g. ['acme.com', 'rival.io']). |
No output schema declared.
No examples provided.
competitor_analyze ~106
Async. Trigger analysis for existing BrandCompetitor rows that are pending or failed. Use competitor_add to create new rows; use this to retry failed ones. Returns { operationId, status } — poll get_job until state=completed. Typically takes ~2–5 min.
| Name | Type | Req | Description |
|---|---|---|---|
| brandCompetitorIds | array | yes | IDs of existing BrandCompetitor rows to (re-)analyze (1–20). |
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_comparison_sources ~56
List the data sources used to build the brand's competitive comparison. Returns raw source records (URLs, snippets, timestamps) — useful for auditing comparison accuracy.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_delete ~61
Soft-delete a tracked competitor from the brand. No credits are refunded. Use competitor_update (empty body) to restore.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| competitorId | string | yes | BrandCompetitor ID to delete. |
No output schema declared.
No examples provided.
competitor_generate_overview ~62
Async. Generate the competitive landscape overview (uses ~20 credits). Returns { operationId, status } — poll get_job until state=completed. Typically takes ~2–5 min.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_get_comparison ~162
Get the brand's head-to-head competitive comparison. short {id,status,generatedAt,competitorCount}; medium adds summary+strengths+weaknesses; full = raw. Returns null when no comparison has been generated yet — use competitor_recompute_comparison to generate.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| detail | string | — | Verbosity of returned item(s): "short" = id + primary label + status (cheap list scan); "medium" = key summary fields + counts (a useful glance); "full" = the complete object. Default "full". Lists d… |
No output schema declared.
No examples provided.
competitor_get_overview ~147
Get the brand's competitive landscape overview. short {id,status,generatedAt}; medium adds summary excerpt; full = raw. Returns null when no overview exists — use competitor_generate_overview to create one.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| detail | string | — | Verbosity of returned item(s): "short" = id + primary label + status (cheap list scan); "medium" = key summary fields + counts (a useful glance); "full" = the complete object. Default "full". Lists d… |
No output schema declared.
No examples provided.
competitor_list ~156
List the brand's tracked competitors. short {id,domain,analysisState}; medium adds source,creditsCharged,lastError,addedAt,lastCrawledAt,cacheSource; full = raw. Also returns a dashboard link to the Competitors tab.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| detail | string | — | Verbosity of returned item(s): "short" = id + primary label + status (cheap list scan); "medium" = key summary fields + counts (a useful glance); "full" = the complete object. Default "short". Lists… |
No output schema declared.
No examples provided.
competitor_probe ~85
Start a competitor discovery probe. PostKing crawls the web to find rival domains automatically. Returns { started: true } when kicked off, or { alreadyRan, status } when a probe result already exists. Poll competitor_probe_status to check readiness, then use competitor_probe_classify to accept/reject candidates.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_probe_classify ~162
Classify a discovered (or manually added) competitor candidate. 'direct' seeds a BrandCompetitor row; 'similar' and 'not_relevant' update the probe JSON only. Call once per domain. Probe must be in completed state first. Returns { candidates } — the updated full candidate list.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| classification | string | yes | 'direct' = head-to-head competitor (adds to tracked list); 'similar' = adjacent market; 'not_relevant' = not a competitor. |
| domain | string | yes | The competitor domain to classify (e.g. 'rival.io'). |
| name | string | — | Optional human-readable name for the competitor (used when adding manually). |
No output schema declared.
No examples provided.
competitor_probe_status ~66
Check the status of the competitor discovery probe. Returns { status, candidates? } — status is one of: pending | running | completed | failed. When completed, candidates contains the discovered domains ready for classification.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_recompute_comparison ~53
Trigger a fresh head-to-head comparison recompute. Use after adding or re-analyzing competitors to get an up-to-date comparison.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_refresh ~64
Async. Refresh all active competitors for the brand (re-crawl + re-profile). Returns { operationId, status } — poll get_job until state=completed. Typically takes ~2–5 min.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
competitor_update ~108
Update a competitor's settings. Currently supports toggling excludeFromSeoPull (removes the domain from keyword-gap pull without deleting it). Send an empty body to restore a soft-deleted competitor.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| competitorId | string | yes | BrandCompetitor ID to update. |
| excludeFromSeoPull | boolean | — | When true, excludes this competitor from the SEO keyword-pull. Omit to restore a soft-deleted row. |
No output schema declared.
No examples provided.
connect_domain_to_publication ~111
Connect a verified domain to a blog publication so articles are served from that domain.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| domainId | string | yes | Domain ID (from list_domains) |
| pathPrefix | string | — | Path prefix if routingType is 'path', e.g. '/blog' |
| publicationId | string | yes | Blog publication ID (from list_blogs) |
| routingType | string | — | How the blog is routed on the domain |
No output schema declared.
No examples provided.
create_api_key ~81
Create a new PostKing API key. The raw token (pk_live_*) is returned ONCE in this response and never shown again. Store it immediately — treat it like a password. Scope: 'write' (default) or 'read'.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string | — | Descriptive name for the key |
| scope | string | — | Permission scope |
No output schema declared.
No examples provided.
create_blog_author ~82
Create a new author for blog articles. Returns an authorId that can be used in generate_blog_post and update_blog_article.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| string | — | Author email address | |
| firstName | string | yes | Author first name |
| lastName | string | yes | Author last name |
No output schema declared.
No examples provided.
create_blog_category ~78
Create a new category in a blog publication.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| description | string | — | — |
| name | string | yes | Category name |
| publicationId | string | yes | Blog publication ID |
| slug | string | yes | URL slug, e.g. 'marketing-tips' |
No output schema declared.
No examples provided.
create_brand ~154
STEP 1 of brand onboarding (manual path — no website crawl). Creates a new brand from user-supplied name/description, sets it as active, then RETURNS a `nextStep` payload telling you to ask the user which platforms they publish on. After the user answers, call `set_brand_mediums` with their picks. Ask the user for a description if they did not provide one — onboarding will fail without it.
| Name | Type | Req | Description |
|---|---|---|---|
| audience | string | — | Target audience description |
| description | string | — | Brand description (required if no website) |
| name | string | yes | Brand name |
| tone | string | — | Writing tone, e.g. 'Bold & Direct' |
| website | string | — | Website URL |
No output schema declared.
No examples provided.
create_comparison_page ~698
Create a comparison / 'X vs Y' / 'best <category>' page for the brand WITHOUT going through the full SEO cluster → brief flow. One call kicks off generation, then this tool polls until the page is built and returns its slug(s) + link. `mode` controls the engine: 'research' crawls the named competitors + live SERP results before writing — slower (can take several minutes) but produces the strongest, best-grounded page; 'simple' skips all crawling and lets the LLM author from what you provide — fast, best when you already have the facts or just want a quick draft. When your inputs are sparse (few/no options, no domains, no seedData), prefer 'research' — it will discover and ground the comparison for you and yield a far stronger page than 'simple'. `seedData` (simple mode): paste your own raw facts/notes/competitor details here and the LLM writes from them instead of crawling — this is how you feed your own data and avoid a crawl. Async — fires the create, then polls the operation up to ~5 min. On success returns { briefId, sidePageId, sidePageSlug, landingPageSlug, webUrl, warnings }. If it is still running after the wait, returns { status: 'still_generating', operationId } — poll get_job with that operationId until state is 'completed'; do NOT fabricate the page yourself. Any `warnings` are surfaced verbatim — relay them to the user (e.g. sparse-input notes such as 'research mode would produce a stronger page').
| Name | Type | Req | Description |
|---|---|---|---|
| allowGenericRoundup | boolean | — | Allow a generic category roundup when no concrete options are supplied. |
| brandId | string | — | Brand ID (defaults to active brand) |
| briefData | — | — | Advanced: a full pre-built structured comparison brief. When supplied, generation uses it directly and skips the LLM authoring step. |
| mode | string | yes | Generation engine. 'research' = crawl the competitors + live SERP, then write (slower, strongest, best for sparse inputs). 'simple' = no crawl, LLM authors from what you pass (fast; pair with seedDat… |
| options | array | — | The things being compared. Omit to let research mode discover them. |
| parentLandingPageSlug | string | — | Slug of the parent landing page to nest this comparison under. Defaults to the brand's primary landing page. |
| pinnedCompetitor | object | — | A specific competitor to anchor a head-to-head comparison around. |
| preset | string | — | Page shape: head_to_head (X vs Y), alternatives_listicle (X vs alternatives), or category_roundup (best <category>). Inferred when omitted. |
| primaryKeyword | string | yes | The topic/keyword the page targets, e.g. "Acme vs alternatives", "best CRM for startups", "Notion vs Obsidian". |
| proposedSlug | string | — | Desired URL slug fragment for the new page (auto-generated from primaryKeyword if omitted). |
| seedData | string | — | Simple-mode only: your own raw data/notes/facts about the options. When set, the LLM writes from this instead of crawling — feed it here to avoid a research crawl. |
| voiceProfileId | string | — | Voice profile ID to write the page in. |
No output schema declared.
No examples provided.
create_post ~168
Save a post draft with custom content to one or more platforms. Supported platforms: x, linkedin, instagram, threads, facebook. After creating, call approve_post with a future ISO 8601 datetime to schedule it. To check which platforms are connected first, call check_social_accounts. Each created post includes editInVisualEditor: a direct URL to edit it in the visual editor.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| content | string | yes | Post content |
| platforms | array | yes | One or more platforms: x | linkedin | instagram | threads | facebook |
| scheduledAt | string | — | ISO 8601 UTC datetime to schedule immediately on save, e.g. 2026-03-11T09:00:00Z |
No output schema declared.
No examples provided.
create_publication ~78
Create a new blog publication (the container that articles live under). Returns a publicationId needed for generate_blog_post.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| description | string | — | — |
| layout | string | — | — |
| title | string | yes | Publication name, e.g. 'My Blog' |
No output schema declared.
No examples provided.
dashboard_link ~111
Return a clickable browser link to a PostKing dashboard page. ALWAYS use this instead of guessing dashboard URLs. The SEO roadmap / content plan is section 'seo_briefs' (or 'seo' for the overview) — there is NO '/seo/roadmap' page.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| section | string | — | Dashboard section to link to. Defaults to 'overview'. SEO roadmap/content plan → 'seo_briefs'. Reddit module → 'reddit'. |
No output schema declared.
No examples provided.
delete_asset ~64
Soft-delete an asset from the brand library. Pass confirm: true to proceed.
| Name | Type | Req | Description |
|---|---|---|---|
| assetId | string | yes | Asset ID to delete |
| brandId | string | — | Brand ID (defaults to active brand) |
| confirm | boolean | yes | Must be true to confirm deletion |
No output schema declared.
No examples provided.
delete_blog_article ~43
Permanently delete a blog article.
| Name | Type | Req | Description |
|---|---|---|---|
| articleId | string | yes | Blog article ID |
| brandId | string | — | Brand ID (uses active brand if omitted) |
No output schema declared.
No examples provided.
delete_domain ~41
Remove a custom domain. Connected blogs and landing pages are unlinked but not deleted.
| Name | Type | Req | Description |
|---|---|---|---|
| domainId | string | yes | Domain ID to delete (from list_domains) |
No output schema declared.
No examples provided.
delete_landing_page ~51
Permanently delete a landing page. Pass confirm: true to proceed — this is irreversible.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | yes | Must be true to confirm deletion |
| slug | string | yes | Landing page slug |
No output schema declared.
No examples provided.
delete_post ~38
Cancel and delete a post regardless of its current status (draft, scheduled, or posted).
| Name | Type | Req | Description |
|---|---|---|---|
| postId | string | yes | Post ID to delete |
No output schema declared.
No examples provided.
delete_side_page ~56
Delete a side page. Pass confirm: true to proceed.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | yes | Must be true to confirm deletion |
| sideKey | string | yes | Side page key |
| slug | string | yes | Parent landing page slug |
No output schema declared.
No examples provided.
delete_theme ~45
Delete a content theme from the active brand.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (uses active brand if omitted) |
| themeId | string | yes | Theme ID to delete |
No output schema declared.
No examples provided.
delete_weekly_schedule ~56
Permanently remove the weekly schedule for the active brand. Pass confirm: true to proceed.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| confirm | boolean | yes | Must be true to confirm deletion |
No output schema declared.
No examples provided.
disable_weekly_schedule ~43
Pause the weekly content schedule without deleting it. Re-enable later with enable_weekly_schedule.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
No output schema declared.
No examples provided.
disconnect_social_account ~47
Disconnect a social account by its account ID.
| Name | Type | Req | Description |
|---|---|---|---|
| accountId | string | yes | Social account ID to disconnect |
| brandId | string | — | Brand ID (uses active brand if omitted) |
No output schema declared.
No examples provided.
edit_audience ~257
Async LLM ai-edit of the brand's audience/ICP. Describe the change in `prompt` (natural language). `sections` is REQUIRED — the audience section(s) to edit (e.g. 'demographics', 'painPoints', 'positioning'). If unsure which sections are valid for this brand, call preview_audience_edit first and use the section keys it returns. Returns { operationId, status } — poll get_job(operationId) until state is 'completed' (or 'failed'/'cancelled' on error). Only one audience edit can run at a time; a second call returns an 'already_running' notice. Typically takes ~30–90 s.
| Name | Type | Req | Description |
|---|---|---|---|
| brandId | string | — | Brand ID (defaults to active brand) |
| prompt | string | yes | Natural-language instruction describing the change to make to the audience/ICP. |
| sections | array | yes | REQUIRED. Audience section keys to edit (e.g. ['demographics'], ['painPoints'], ['positioning']). Call preview_audience_edit to discover valid values for this brand. |
| subsections | object | — | Optional map of section → subsection keys to scope the edit more narrowly (e.g. { demographics: ['ageRange'] }). |
No output schema declared.
No examples provided.