Skip to main content
Glama

Create post

create_post

Create a draft, schedule a post, or publish now with publishNow=true using server time. Read account_context before batches to check plan, quota and maxScheduledDate. Publish Now consumes monthly publication quota but no deferred queue slot, so a full scheduled queue does not block it when monthly quota remains. FASTEST for media posts: pass mediaUrls (public https URLs — Publora downloads them server-side) together with scheduledTime or publishNow=true in one call; platforms like Instagram, TikTok, YouTube require media before scheduling. For a ChatGPT file, omit scheduledTime to create a draft (without publishNow=true), then use attach_media. Manual alternative for local files: omit scheduledTime to create a draft, upload media with get_upload_url + HTTP PUT + complete_media (once per file), verify ready with get_post, then call update_post with status 'scheduled' and scheduledTime, or publishNow=true.

Input Schema

NameRequiredDescriptionDefault
contentYesPost text content. On X and Threads, long content auto-splits into a chain; a standalone --- line between paragraphs sets a break, and media attach only to the first part. Threads parts are limited to 500 characters; the connection needs threads_manage_replies, and THREADS_PERMISSION_REQUIRED means reconnect in Publora Channels. Thread part and numbering settings are not API/MCP inputs. After partial publication, inspect get_post and never recreate or resubmit the whole chain. For an unknown outcome, check the live account before further action.
mediaUrlsNoOptional array (max 10) of public https URLs of images/videos to attach. Downloaded and validated server-side (jpeg, png, gif, webp, tiff, avif, mp4, mov, webm; images ≤25MB, videos ≤150MB). Must be DIRECT file URLs — share-page links (Google Drive, Dropbox pages) will fail.
platformsYesArray of platform identifiers in the exact format returned by list_connections. Each value must be the 'platformId' field copied verbatim from a connection object, e.g. ['twitter-1985855679454986200', 'linkedin-abc123']. IMPORTANT: Do NOT invent or guess IDs — always call list_connections first and use the exact platformId values. Exception: 'publora-playground' is a connection-test target that requires no real connection — the post is acknowledged and discarded, nothing is published; when used it must be the ONLY entry.
publishNowNoSet true to publish immediately using server time and trigger publication processing. Reserves monthly publication quota but does not occupy the deferred scheduled queue. Omit scheduledTime; a future time is rejected. False or omitted retains the existing draft/scheduling behavior. Publication remains asynchronous; inspect get_post for progress.
firstCommentNoLegacy single first comment under your own post. Supported: linkedin (profiles and Pages), twitter, threads, bluesky, mastodon; other targets are skipped. Best effort: read firstCommentResult via get_post. Cannot be combined with firstComments or added after publishing.
firstCommentsNoUp to 3 ordered first comments under your own post, each { text, platforms?, delaySeconds? }. delaySeconds is an integer 0–86400; omitted means 0. The next comment runs only after the previous one posts, on a scheduler tick; a failed comment stops later ones. Platform types (not connection keys) and text limits follow firstComment. Best effort, no blind retries. Read per-target firstCommentResults via get_post. Cannot be combined with firstComment or added after publishing.
scheduledTimeNoOptional ISO 8601 date-time with UTC Z or offset. Choose a future time within the schedule horizon returned by account_context; inspect returned warnings and effective scheduledTime. Omit to create a draft unless publishNow=true. With publishNow=true, omit this field; a future scheduledTime is rejected. Media-requiring platforms need mediaUrls in the same call or uploaded ready media before scheduling.
idempotencyKeyNoOptional retry key. Reusing it with the identical request replays the original response without creating another post.
platformSettingsNoPer-platform options keyed by platform. Example: { instagram: { coverUrl: 'https://.../cover.jpg' }, youtube: { title: 'My video', tags: ['topic'] }, tiktok: { viewerSetting: 'SELF_ONLY' }, twitter: { replyTo: 'https://x.com/user/status/123' } }. Also supports telegram.disableNotification/disableWebPagePreview/protectContent, threads.replyControl, linkedin.repostParentUrn/repostVisibility. For TikTok photos, tiktok.autoAddMusic lets TikTok choose music; no track selection or preview. Unknown platforms or fields are rejected.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / platformSettings / description
      Previous value: -"Per-platform options keyed by platform. Example: { instagram: { coverUrl: 'https://.../cover.jpg' }, youtube: { title: 'My video', tags: ['topic'] }, tiktok: { viewerSetting: 'SELF_ONLY' }, twitter: { replyTo: 'https://x.com/user/status/123' } }. Also supports telegram.disableNotification/disableWebPagePreview/protectContent, threads.replyControl, linkedin.repostParentUrn/repostVisibility. Unknown platforms or fields are rejected."New value: +"Per-platform options keyed by platform. Example: { instagram: { coverUrl: 'https://.../cover.jpg' }, youtube: { title: 'My video', tags: ['topic'] }, tiktok: { viewerSetting: 'SELF_ONLY' }, twitter: { replyTo: 'https://x.com/user/status/123' } }. Also supports telegram.disableNotification/disableWebPagePreview/protectContent, threads.replyControl, linkedin.repostParentUrn/repostVisibility. For TikTok photos, tiktok.autoAddMusic lets TikTok choose music; no track selection or preview. Unknown platforms or fields are rejected."
    • addedInput schema / properties / platformSettings / properties / tiktok / properties / autoAddMusic
      Added value: +{
      +  "description": "Photo Direct Post only. Opt in with true to let TikTok automatically choose music; Publora cannot select or preview a specific track. False disables music and is allowed when switching to video. Omission preserves existing behavior. Videos never send this parameter.",
      +  "type": "boolean"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description still adds real behavioral context the annotations cannot: publishNow consumes monthly publication quota but no deferred queue slot, scheduling is asynchronous and must be inspected via get_post, and media is downloaded and validated server-side. It does not, however, disclose approval/workspace-permission requirements or rate limits, so it sits above baseline but not at the top.

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?

The core capability and mode selection are front-loaded in the first sentence, and the subsequent sentences are dense with actionable rules rather than filler. It is nonetheless a long single block that re-explains media handling details already present in the schema, so a little trimming would improve it.

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

Completeness5/5

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

For a 9-parameter, nested-object, mutation tool with no output schema, the description covers mode selection, quota implications, media prerequisites per platform, idempotency-adjacent retry behavior (via schema), and where to verify results (get_post). Nothing an agent needs in order to call it correctly is missing.

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 description coverage is 100%, so the baseline is 3, but the description adds cross-parameter semantics the schema states only per-field: omit scheduledTime to draft, publishNow plus a future scheduledTime is rejected, and media-requiring platforms need mediaUrls in the same call. Some of this restates schema text (server-side media download, direct-URL requirement), which keeps it below 5.

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

Purpose5/5

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

Opens with a specific verb+resource and enumerates the three modes (draft, schedule, publish now) with the exact parameter that selects the third. It also names the sibling tools involved in adjacent workflows (account_context, attach_media, get_upload_url, complete_media, get_post, update_post), so an agent can place it among its siblings without another lookup.

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

Usage Guidelines5/5

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

Explicit when-to-use rules are given for each mode: omit scheduledTime for a draft, set publishNow=true to publish, call account_context before batches to check plan/quota/maxScheduledDate. It also names the preferred path (mediaUrls in one call) versus the manual path (get_upload_url + PUT + complete_media + update_post) and the ChatGPT-file case, which is exactly the alternative-routing guidance this dimension rewards.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.