Skip to main content
Glama

Publish a post

publish
Destructive

Post to social channels. Channels open today: threads, youtube. Get accountIds from select_channels — do not guess which channel the person meant. Text limits differ per channel: Threads 500 characters, YouTube 5000 UTF-8 bytes. Over the limit nothing goes out to any channel, so shorten it before calling. Images and video both work on the channels that take them, and a carousel can mix them. YouTube is different: it takes exactly one video, no images, and it needs options.youtube.title. Its description is measured in UTF-8 bytes, so Korean and Japanese cost three per character. There are three ways to get a media id, pick by where the file is: media_from_url when it already has a public https address, media_upload_link when it is on the person's own device, media_presign plus media_complete when you can PUT the bytes yourself. Then pass the media ids here. This publishes immediately on every channel except YouTube, which can be scheduled with options.youtube.publishAt while privacyStatus is private. If the user asks to schedule anywhere else, tell them uplika cannot do that yet. A YouTube video published before Google finishes reviewing this app is locked to private viewing, so say that when you report a YouTube post as done. Returns while the post is still publishing. The permalink is null at that moment. Call get_post with the returned id to see the final status and link. Pass wait: true to hold the response until it is really out — then you can tell the person it is posted instead of guessing. For a long post use threadItems instead of publish-then-reply: we keep the order and wait for each piece to land before sending the next one.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
waitNoHold the response until the post is really out. Text waits up to 10 seconds, posts with media up to 90 seconds. If it is still going after that you get the usual publishing response and should poll get_post. Defaults to false.
contentNoPost text
optionsNoPer-channel settings. Only the channels you are posting to need an entry.
mediaIdsNoMedia ids from media_presign, each already confirmed with media_complete
topicTagNoOne topic to tag the post with, like a category. Only some channels take one, and those reject periods and ampersands in it. If any channel in accountIds does not take topics the whole call is refused, so publish to it separately. On a thread it goes on the first piece only. Leave it out unless the person asked for a topic.
accountIdsYesAccount ids from select_channels
threadItemsNoSplit a long post into a chain instead of calling publish and then reply. The first item is the root and the rest become replies under it, in order. We handle the ordering and the waiting. Each item obeys the character limit on its own. Pass either content or threadItems, not both. If a later item fails, the ones already up stay up and the response tells you where to resume.
workspaceIdNoWhich workspace this is for. Only needed when the account has more than one — the error tells you the ids when it matters. Leave it out if it is already decided; do not ask the person again.

TDQS

A5/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description discloses key behavior: publishing is asynchronous (returns before complete, permalink is null), posts fail entirely if over character limit, YouTube uploads are forced private before app review, and scheduling only works on YouTube with publishAt. This gives the agent a clear mental model of side effects and caveats.

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

Conciseness5/5

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

The description is long but appropriately sized for a tool with eight parameters, nested options, and many channel-specific exceptions. It is front-loaded with the core purpose and prerequisite steps, and every sentence earns its place by conveying operational constraints, alternatives, or behavioral caveats without filler.

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?

With no output schema, the description compensates by explaining exactly what to expect on return (still publishing, null permalink), how to obtain final status via get_post, and how wait works. It also covers edge cases like threadItems failure behavior, YouTube scheduling, and unsupported scheduling elsewhere, making it complete for this complex tool.

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

Parameters5/5

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

Even though schema description coverage is 100%, the description adds crucial meaning not fully captured in the schema: per-channel character limits (Threads 500, YouTube 5000 UTF-8 bytes), YouTube requiring exactly one video and a title, mediaIds provenance and the three ways to get one, and the exclusivity of content vs threadItems. This goes well beyond the schema's terse field descriptions.

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?

The description opens with the specific verb 'Post' and resource 'social channels', immediately establishing the tool's function. It clearly distinguishes itself from siblings like reply and media tools by explicitly mentioning 'instead of publish-then-reply' and describing the media acquisition pipeline.

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?

It gives explicit when-to-use and how-to-use guidance: get accountIds from select_channels, never guess the channel, choose media ids based on file location via media_from_url/media_upload_link/media_presign+media_complete, and use threadItems for long posts instead of publish-then-reply. It also explains when to pass wait:true and how to check final status with get_post.

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.

TDQS

A4.1/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, and descriptions actively steer usage (e.g., get_post vs open_post, list_posts vs list_channel_posts). A few pairs like list_accounts vs select_channels or get_post vs open_post still require careful reading to pick the right one, but the overlap is manageable.

Naming Consistency4/5

The dominant pattern is verb_noun (delete_post, get_insights, list_accounts, select_channels), which is consistent and predictable. A few bare-verb names like publish and reply, plus the media_* prefixed tools, break the strict pattern but still feel coherent within their subdomains.

Tool Count4/5

20 tools is on the heavier side, but the breadth is justified by the server's scope: publishing, media upload workflows, reply threads, insights, quotas, and account selection. Each tool has a real job, though the four post-retrieval variants and five media tools could feel redundant at a glance.

Completeness4/5

The core lifecycle is well covered: publish, reply, delete, retry, retrieve, list, and get insights, plus multi-step media handling. Minor gaps exist, such as no general post editing, no delete-reply action beyond hiding, and limited scheduling outside YouTube, but these are not critical for the stated purpose.

Resources