Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.bitsandtea/postking-mcp

NPM · POSTKING-MCP · 2 COMPONENTS · SCANNED SEP 30

PostKing MCP server for managing brands, generating posts, scheduling content, and publishing blogs.

+18 this week 84 Trust /100
Trust breakdown (7 categories)

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 → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 31 of 94 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency45
Schema Quality & AI Usability83
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).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 Management100
  • No destabilizing schema changes in the last 30 days.Pass
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
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 25 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "delete_theme" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 221 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the io.github.bitsandtea/postking-mcp server?

io.github.bitsandtea/postking-mcp runs locally as an npm package, launched with npx -y postking-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · postking-mcp

# add to Claude Code
claude mcp add bitsandtea-postking-mcp -- npx -y postking-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "bitsandtea-postking-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "postking-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "bitsandtea-postking-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "postking-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add bitsandtea-postking-mcp -- npx -y postking-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "bitsandtea-postking-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "postking-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add bitsandtea-postking-mcp --command npx --arg -y --arg postking-mcp
# ~/.hermes/config.yaml
mcp_servers:
  bitsandtea-postking-mcp:
    command: "npx"
    args: ["-y", "postking-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "bitsandtea-postking-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "postking-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add bitsandtea-postking-mcp -t stdio -c npx -a -y postking-mcp
// mcp.json
{
  "mcpServers": {
    "bitsandtea-postking-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "postking-mcp"
      ]
    }
  }
}
Changelog

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.

  • 30 Sept 26 +1
    • Stability: 0.97 → pass security
  • 28 Sept 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 25 Sept 26 +15
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 23 Sept 26 −3
    • Stability: pass → 0.77 functional
  • 22 Sept 26 +1
    • Stability: 0.97 → pass security
  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 90 to 93. That category is still filling its 30-day observation window: 27 days of observed history at the previous scan, 28 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

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 30 Sept 2026 · Analysed npm/postking-mcp@1.1.7

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 94 packages
Packages resolved 94
Stale 31
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 220 exposed · ~31,224 tokens

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. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
add_domain ~100

Add a new custom domain to the active brand. After adding, call verify_domain to check DNS and activate it.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
domainstringyesDomain name, e.g. 'myblog.com' (protocol and www stripped automatically)
isPrimaryboolean–Set as primary domain for the brand
primaryContentTypestring–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'.

NameTypeReqDescription
postIdstringyesPost ID to approve
scheduledAtstringyesFuture ISO 8601 UTC datetime to post at
timezonestring–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).

NameTypeReqDescription
intervalstring–Billing interval: "month" (default) or "year".
tierstringyesSubscription 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).

NameTypeReqDescription
packSkustringyesCredit 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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
textstringyesFree-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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
idstringyesBrand 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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
detailstring–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…
idstringyesBrand 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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
detailstring–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…
limitinteger–Max number of entries to return.
personaScopestring–Filter by persona scope.
querystring–Free-text search across truth name/content.
tags––Filter by tags. Accepts an array (['pricing','tone']) or a comma-separated string ('pricing,tone').
typestring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
contentstring–Updated full content body of the truth.
descriptionstring–Updated description/summary.
idstringyesBrand truth entry ID to update.
namestring–Updated short label/name.
personaScopestring–Updated persona scope.
pinnedboolean–Pin (true) or unpin (false) this truth.
tagsarray–Replacement tag list. Pass [] to clear all tags.
typestring–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.

NameTypeReqDescription
postIdstringyesPost 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.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
textstringyesText 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.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
detailstring–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).

NameTypeReqDescription
platformstringyesPlatform to clear the visual for, e.g. 'linkedin'
postIdstringyesPost 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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
domainsarrayyesOne 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.

NameTypeReqDescription
brandCompetitorIdsarrayyesIDs of existing BrandCompetitor rows to (re-)analyze (1–20).
brandIdstring–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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
competitorIdstringyesBrandCompetitor 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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
detailstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
detailstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
detailstring–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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
classificationstringyes'direct' = head-to-head competitor (adds to tracked list); 'similar' = adjacent market; 'not_relevant' = not a competitor.
domainstringyesThe competitor domain to classify (e.g. 'rival.io').
namestring–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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
competitorIdstringyesBrandCompetitor ID to update.
excludeFromSeoPullboolean–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.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
domainIdstringyesDomain ID (from list_domains)
pathPrefixstring–Path prefix if routingType is 'path', e.g. '/blog'
publicationIdstringyesBlog publication ID (from list_blogs)
routingTypestring–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'.

NameTypeReqDescription
namestring–Descriptive name for the key
scopestring–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.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
emailstring–Author email address
firstNamestringyesAuthor first name
lastNamestringyesAuthor last name

No output schema declared.

No examples provided.

create_blog_category ~78

Create a new category in a blog publication.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
descriptionstring––
namestringyesCategory name
publicationIdstringyesBlog publication ID
slugstringyesURL 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.

NameTypeReqDescription
audiencestring–Target audience description
descriptionstring–Brand description (required if no website)
namestringyesBrand name
tonestring–Writing tone, e.g. 'Bold & Direct'
websitestring–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').

NameTypeReqDescription
allowGenericRoundupboolean–Allow a generic category roundup when no concrete options are supplied.
brandIdstring–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.
modestringyesGeneration 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…
optionsarray–The things being compared. Omit to let research mode discover them.
parentLandingPageSlugstring–Slug of the parent landing page to nest this comparison under. Defaults to the brand's primary landing page.
pinnedCompetitorobject–A specific competitor to anchor a head-to-head comparison around.
presetstring–Page shape: head_to_head (X vs Y), alternatives_listicle (X vs alternatives), or category_roundup (best <category>). Inferred when omitted.
primaryKeywordstringyesThe topic/keyword the page targets, e.g. "Acme vs alternatives", "best CRM for startups", "Notion vs Obsidian".
proposedSlugstring–Desired URL slug fragment for the new page (auto-generated from primaryKeyword if omitted).
seedDatastring–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.
voiceProfileIdstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
contentstringyesPost content
platformsarrayyesOne or more platforms: x | linkedin | instagram | threads | facebook
scheduledAtstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
descriptionstring––
layoutstring––
titlestringyesPublication 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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
sectionstring–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.

NameTypeReqDescription
assetIdstringyesAsset ID to delete
brandIdstring–Brand ID (defaults to active brand)
confirmbooleanyesMust be true to confirm deletion

No output schema declared.

No examples provided.

delete_blog_article ~43

Permanently delete a blog article.

NameTypeReqDescription
articleIdstringyesBlog article ID
brandIdstring–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.

NameTypeReqDescription
domainIdstringyesDomain 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.

NameTypeReqDescription
confirmbooleanyesMust be true to confirm deletion
slugstringyesLanding 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).

NameTypeReqDescription
postIdstringyesPost ID to delete

No output schema declared.

No examples provided.

delete_side_page ~56

Delete a side page. Pass confirm: true to proceed.

NameTypeReqDescription
confirmbooleanyesMust be true to confirm deletion
sideKeystringyesSide page key
slugstringyesParent landing page slug

No output schema declared.

No examples provided.

delete_theme ~45

Delete a content theme from the active brand.

NameTypeReqDescription
brandIdstring–Brand ID (uses active brand if omitted)
themeIdstringyesTheme 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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
confirmbooleanyesMust 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.

NameTypeReqDescription
brandIdstring–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.

NameTypeReqDescription
accountIdstringyesSocial account ID to disconnect
brandIdstring–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.

NameTypeReqDescription
brandIdstring–Brand ID (defaults to active brand)
promptstringyesNatural-language instruction describing the change to make to the audience/ICP.
sectionsarrayyesREQUIRED. Audience section keys to edit (e.g. ['demographics'], ['painPoints'], ['positioning']). Call preview_audience_edit to discover valid values for this brand.
subsectionsobject–Optional map of section → subsection keys to scope the edit more narrowly (e.g. { demographics: ['ageRange'] }).

No output schema declared.

No examples provided.

Common questions

What is the io.github.bitsandtea/postking-mcp server?

io.github.bitsandtea/postking-mcp is listed in the public MCP registry as io.github.bitsandtea/postking-mcp. PostKing MCP server for managing brands, generating posts, scheduling content, and publishing blogs. This page covers its npm package (postking-mcp).

Is the io.github.bitsandtea/postking-mcp server safe to use?

io.github.bitsandtea/postking-mcp scores 84 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 30 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.bitsandtea/postking-mcp server expose?

io.github.bitsandtea/postking-mcp exposes 220 tools: login_start, login_complete, logout, whoami, list_brands, and 215 more. Their descriptions and schemas cost roughly 31,224 tokens of context every time the server is loaded.

Is the io.github.bitsandtea/postking-mcp server still maintained?

io.github.bitsandtea/postking-mcp is still listed as active in the MCP registry. We last reached this channel on 30 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.bitsandtea/postking-mcp server under?

io.github.bitsandtea/postking-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.