Skip to main content
Glama

create_post

Creates social media posts across multiple platforms, saving them as drafts for review by default; optionally schedules direct publishing at a set future time.

Instructions

Create a post in Posthive. BY DEFAULT posts are saved as DRAFTS and require manual approval in the Posthive review queue before anything is published. Nothing is published automatically unless schedule_directly is explicitly set to true with a future scheduled_time. Use list_accounts to get valid account IDs before calling this tool. Each platform has its own character limit for both the post text and the first_comment — the request is rejected with a 400 if either exceeds it for any selected account: Bluesky 300, Threads/Mastodon/Pinterest 500, Instagram/TikTok 2200, Discord 2000, LinkedIn 3000, Telegram/Tumblr 4096, YouTube 5000, Nostr/Lemmy 10000, Twitter/X 25000, Facebook 63206. Check the content and first_comment length against the shortest limit among the selected platforms before calling, and warn the user if a caption (especially a long hashtag block) would be rejected. TikTok accounts require a video in media_urls (.mp4/.mov) plus tiktok_privacy_level, or the request is rejected with a 400.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "content": "<content>",
      "account_ids": "<account_ids>"
    },
    "name": "create_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
contentYesThe post text content.
dry_runNoWhen true, runs the full pipeline without real API calls.
media_typeNoInstagram media type. 'post' = feed image/carousel, 'reel' = video reel, 'story' = story. Only relevant for Instagram accounts.
media_urlsNoArray of already-uploaded media URLs (images or video). Upload via POST /api/v1/upload first to get URLs.
account_idsYesArray of account IDs to post to. Use list_accounts to get IDs.
per_accountNoPer-account content overrides. Keys are account IDs.
tiktok_titleNoTikTok video title/caption. Defaults to content if omitted.
youtube_typeNoYouTube video type. 'short' = YouTube Short (vertical, ≤60s), 'video' = standard upload. Only relevant for YouTube accounts.
first_commentNoOptional first comment to fire immediately after the post goes live.
repeat_ends_atNoISO 8601 datetime after which no more repeat occurrences are created. Omit for indefinite repeating.
scheduled_timeNoISO 8601 datetime for when the post should go live. Required when schedule_directly is true.
repeat_intervalNoRepeat this post automatically after each successful publish. Spawns the next occurrence at the same time.
schedule_directlyNoWhen true, post is scheduled directly and will publish at scheduled_time without manual approval. Requires scheduled_time. Defaults to false (saves as draft).
tiktok_your_brandNoMark as promoting your own brand for TikTok commercial disclosure.
tiktok_disable_duetNoDisable duets on the TikTok video. Defaults to true.
tiktok_privacy_levelNoRequired for TikTok accounts. Who can view the video (e.g. 'PUBLIC_TO_EVERYONE', 'SELF_ONLY', 'MUTUAL_FOLLOW_FRIENDS') — use the exact value from the account's TikTok creator settings.
tiktok_disable_stitchNoDisable stitch on the TikTok video. Defaults to true.
tiktok_branded_contentNoMark as branded content (paid partnership) for TikTok commercial disclosure.
tiktok_disable_commentNoDisable comments on the TikTok video. Defaults to true.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changedv0.10.1
    • addedInput schema / properties / tiktok_branded_content
      Added value: +{
      +  "description": "Mark as branded content (paid partnership) for TikTok commercial disclosure.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / tiktok_disable_comment
      Added value: +{
      +  "description": "Disable comments on the TikTok video. Defaults to true.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / tiktok_disable_duet
      Added value: +{
      +  "description": "Disable duets on the TikTok video. Defaults to true.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / tiktok_disable_stitch
      Added value: +{
      +  "description": "Disable stitch on the TikTok video. Defaults to true.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / tiktok_privacy_level
      Added value: +{
      +  "description": "Required for TikTok accounts. Who can view the video (e.g. 'PUBLIC_TO_EVERYONE', 'SELF_ONLY', 'MUTUAL_FOLLOW_FRIENDS') — use the exact value from the account's TikTok creator settings.",
      +  "type": "string"
      +}
    • addedInput schema / properties / tiktok_title
      Added value: +{
      +  "description": "TikTok video title/caption. Defaults to content if omitted.",
      +  "type": "string"
      +}
    • addedInput schema / properties / tiktok_your_brand
      Added value: +{
      +  "description": "Mark as promoting your own brand for TikTok commercial disclosure.",
      +  "type": "boolean"
      +}
  2. Changed2 schema fields changedv0.10.0
    • addedInput schema / properties / repeat_ends_at
      Added value: +{
      +  "description": "ISO 8601 datetime after which no more repeat occurrences are created. Omit for indefinite repeating.",
      +  "type": "string"
      +}
    • addedInput schema / properties / repeat_interval
      Added value: +{
      +  "description": "Repeat this post automatically after each successful publish. Spawns the next occurrence at the same time.",
      +  "enum": [
      +    "daily",
      +    "weekly",
      +    "monthly"
      +  ],
      +  "type": "string"
      +}
  3. Addedv0.5.0
  4. Removedv0.1.1
  5. First observedv0.1.0

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description does the heavy lifting well: it discloses the draft-by-default/approval-queue behavior, the exact condition for auto-publishing, and the 400 rejection cases (character limits, missing TikTok video/privacy level). It omits permissions/auth requirements and any rate-limit or partial-failure behavior across multiple accounts.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and the critical draft-default behavior, then prerequisites, then rejection conditions. The character-limit roster is long and the 'check against the shortest limit' instruction restates the same point, but both are actionable rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 19-parameter, nested-schema creation tool with no annotations and no output schema, the description covers the highest-risk gaps: default draft state, scheduling semantics, per-platform validation failures, and TikTok hard requirements. It never indicates what a successful call returns (post IDs, draft status), which is the main remaining hole.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds real meaning the schema lacks: the dependency between schedule_directly and scheduled_time, which fields the per-platform limits apply to (content and first_comment), and the coupled TikTok requirements. It says nothing about per_account override precedence or repeat_interval semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Create a post in Posthive') and immediately qualifies the outcome (saved as draft, manual approval required). It does not explicitly contrast with create_from_template or duplicate_post, so sibling differentiation is left implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions and routing: call list_accounts for valid IDs, set schedule_directly + future scheduled_time only when direct publishing is wanted, and supply media_urls/tiktok_privacy_level for TikTok. It provides no guidance on when to prefer create_from_template or update_post instead, so the alternative-selection layer is incomplete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.