Skip to main content
Glama

Create or schedule a post

create_publication
Destructive

Publish or schedule a post on one connected social account. Validates text against network limits and handles network-specific requirements like Pinterest boards or TikTok visibility.

Instructions

Publish now or schedule a post on ONE connected account. Pass state 'ready' with a future publish_date to schedule, or 'draft' to leave it for a person to review. Media has to be uploaded first with upload_media; pass the returned ids in files. The text is validated against the network's limits before anything is sent. On Pinterest a pin needs things no other network asks for: a board (destination_id, from list_destinations), at least one image or video — a pin is never text alone — and, if it should lead somewhere, the URL in link. On TikTok the user has to choose who can see the post (visibility), whether people can comment, Duet or Stitch (interactions) and whether it is commercial content; nothing may be preselected. Call this without them and the answer lists what that account allows, so you can ask. On YouTube, ask whether the video is made for kids. An Instagram video can come back in state publishing while the network processes it: that is not a failure, PlanVortex finishes it by itself within minutes, and creating it again would publish it twice. Always show the user what you are about to publish and let them confirm it: this posts publicly under their brand.

Input Schema

NameRequiredDescriptionDefault
linkNoPinterest only: where the pin takes whoever clicks it. It goes here, not in the text: inside the text it is visible and cannot be clicked.
textNoThe post body.
filesNoUpload ids from upload_media.
stateNo'ready' publishes or schedules it; 'draft' just saves it. A post with problems is stored as 'withErrors' either way, and does not go out.ready
titleNoOnly on networks with a title field: YouTube, and the pin's title on Pinterest.
id_accountYesThe connected account to publish on. One post, one account.
visibilityNoWho can see the post, on YouTube (public, unlisted, private) and TikTok (public, friends, followers, private). REQUIRED on TikTok and always the user's choice: TikTok forbids a default, and which values an account allows depends on the account. Other networks have no such setting; leave it out.
interactionsNoTikTok only, REQUIRED there: whether people can comment, and on a video Duet and Stitch with it. Each is false unless the user says yes.
publish_dateNoISO 8601. Leave empty to publish immediately.
made_for_kidsNoYouTube only: whether the video is made for kids (COPPA). The law makes it the channel owner's call: ask if it is not obvious. Leave it out elsewhere.
destination_idNoREQUIRED on Pinterest: the board the pin goes to, an id from list_destinations (never the board's name). Other networks have no destinations; leave it out there.
social_networkYesThe account's network: instagram, facebook, linkedin, telegram…
id_organizationNoThe PlanVortex organization id. Optional.
publication_typeNoprofile
commercial_contentNoTikTok only: whether the post promotes the user's own brand (labeled Promotional content) and/or is a paid partnership with a third party (labeled Paid partnership; cannot be private). Leave it out if it is neither.
destination_section_idNoPinterest only, optional: a section of that board, from list_destinations.

Output Schema

NameRequiredDescriptionDefault
publicationYes
already_existedYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.12.0
    • addedInput schema / properties / commercial_content
      Added value: +{
      +  "description": "TikTok only: whether the post promotes the user's own brand (labeled Promotional content) and/or is a paid partnership with a third party (labeled Paid partnership; cannot be private). Leave it out if it is neither.",
      +  "properties": {
      +    "branded_content": {
      +      "type": "boolean"
      +    },
      +    "your_brand": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / interactions
      Added value: +{
      +  "description": "TikTok only, REQUIRED there: whether people can comment, and on a video Duet and Stitch with it. Each is false unless the user says yes.",
      +  "properties": {
      +    "comments": {
      +      "type": "boolean"
      +    },
      +    "duet": {
      +      "type": "boolean"
      +    },
      +    "stitch": {
      +      "type": "boolean"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / made_for_kids
      Added value: +{
      +  "description": "YouTube only: whether the video is made for kids (COPPA). The law makes it the channel owner's call: ask if it is not obvious. Leave it out elsewhere.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / visibility
      Added value: +{
      +  "description": "Who can see the post, on YouTube (public, unlisted, private) and TikTok (public, friends, followers, private). REQUIRED on TikTok and always the user's choice: TikTok forbids a default, and which values an account allows depends on the account. Other networks have no such setting; leave it out.",
      +  "enum": [
      +    "public",
      +    "unlisted",
      +    "friends",
      +    "followers",
      +    "private"
      +  ],
      +  "type": "string"
      +}
  2. Changed5 schema fields changedv0.7.0
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / destination_id
      Added value: +{
      +  "description": "REQUIRED on Pinterest: the board the pin goes to, an id from list_destinations (never the board's name). Other networks have no destinations; leave it out there.",
      +  "type": "string"
      +}
    • addedInput schema / properties / destination_section_id
      Added value: +{
      +  "description": "Pinterest only, optional: a section of that board, from list_destinations.",
      +  "type": "string"
      +}
    • addedInput schema / properties / link
      Added value: +{
      +  "description": "Pinterest only: where the pin takes whoever clicks it. It goes here, not in the text: inside the text it is visible and cannot be clicked.",
      +  "type": "string"
      +}
    • changedInput schema / properties / title / description
      Previous value: -"Only on networks with a title field, such as YouTube."New value: +"Only on networks with a title field: YouTube, and the pin's title on Pinterest."
  3. Changed1 schema field changedv0.1.1
    • changedInput schema / properties / state / description
      Previous value: -"'ready' publishes or schedules it; 'draft' just saves it."New value: +"'ready' publishes or schedules it; 'draft' just saves it. A post with problems is stored as 'withErrors' either way, and does not go out."
  4. First observedv0.1.0

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and openWorldHint=true, and the description goes well beyond them: it warns that this posts publicly under the user's brand and the agent must get confirmation, that text is validated against network limits before sending, that a problem post is stored as 'withErrors' and not sent, and that an Instagram 'publishing' state is not a failure and re-creating would double-publish. These are substantive operational traits the annotations cannot convey.

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?

Core action and mode selection are front-loaded, followed by network-specific branches, so the structure supports scanning. It is dense and long, with several clauses packed into single sentences, but almost every sentence carries requirements an agent would otherwise miss.

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 16-parameter, multi-network publishing tool with nested objects, the description covers the decision points (state, scheduling, per-network required fields, confirmation, duplicate-publish avoidance) that determine a correct call. An output schema exists, so it rightly omits explaining return values.

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 94%, so most parameter meaning is already documented; the description adds cross-parameter workflow semantics the schema cannot, such as linking files back to upload_media ids and the fact that Pinterest's link must go in the link field rather than the text. It does not, however, explain publication_type or destination_section_id beyond what the schema says.

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 a specific verb and resource — publish now or schedule a post on ONE connected account — and the title reinforces it. It is clearly distinguishable from siblings like update_publication, retry_publication and upload_media, which it explicitly routes media work to.

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 states exactly when to use each mode ('ready' with a future publish_date to schedule, 'draft' for human review), the prerequisite flow (upload media with upload_media first, get boards from list_destinations), and per-network conditions (Pinterest needs a board and media, TikTok needs visibility/interactions, YouTube needs made_for_kids). It even tells the agent what to do when required TikTok fields are missing: call without them and read the returned allowances.

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