Skip to main content
Glama

Schedule post

schedule_post

Schedules a saved draft, including any media already stored on it by save_draft, for every network in its destinations. scheduled_for is an ISO-8601 timestamp in the future and must include a timezone. Refused while a network cannot take the post as it is; the error lists each problem. destination optionally changes the LinkedIn profile or company page from list_destinations (not for a post that skips LinkedIn). Media is not accepted here; the images are published with the alt text stored on them, and media_alt_text optionally changes that alt text (one entry per image, in the order of media_urls). youtube_format optionally switches the post’s YouTube video between a normal video and a Short before it is scheduled. Once scheduled, a post with several destinations becomes one post per network: post keeps LinkedIn (or its first network), and split_posts lists the others, each with its own id to reschedule, unschedule or delete on its own. The result includes post.preview_url, a link that opens the scheduled post in PostPen; it is meant to be shown to the user.

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": {
      "id": "<id>",
      "scheduled_for": "<scheduled_for>"
    },
    "name": "schedule_post"
  }
}

Input Schema

NameRequiredDescriptionDefault
idYesPost id returned by save_draft.
destinationNoWhere the post goes on LinkedIn: a LinkedIn id from list_destinations. "personal" (the default on a new draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and "personal" switches to the profile. To post to X, Facebook, Instagram, Threads or YouTube, use destinations on save_draft.
scheduled_forYesFuture ISO-8601 time with a timezone, for example 2026-09-28T15:00:00Z.
media_alt_textNoOptional alt text for the images already on the post, one entry per image in the order of media_urls from list_posts. A string (up to 4,086 characters; about 120 recommended) sets that image’s alt text, null or "" removes it, and images past the end of a shorter array keep theirs. Refused when the post has no images or the array is longer than its images.
youtube_formatNoOptional, for a post that goes to a YouTube channel: "video" (the default) posts a normal video; "short" posts a YouTube Short, which has to be vertical or square (9:16 looks best) and up to 3 minutes. For a Short PostPen adds #Shorts to the title (or the description when the title has no room) and links to youtube.com/shorts/. A clip that is landscape or longer than 3 minutes is refused when it is published, with an error saying so, instead of going out as a normal video. Leaving it out keeps what is saved; posts saved before this option are videos.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / youtube_format
      Added value: +{
      +  "description": "Optional, for a post that goes to a YouTube channel: \"video\" (the default) posts a normal video; \"short\" posts a YouTube Short, which has to be vertical or square (9:16 looks best) and up to 3 minutes. For a Short PostPen adds #Shorts to the title (or the description when the title has no room) and links to youtube.com/shorts/. A clip that is landscape or longer than 3 minutes is refused when it is published, with an error saying so, instead of going out as a normal video. Leaving it out keeps what is saved; posts saved before this option are videos.",
      +  "enum": [
      +    "video",
      +    "short"
      +  ],
      +  "type": "string"
      +}
  2. Changed1 schema field changed
    • changedInput schema / properties / destination / description
      Previous value: -"Where to post: an id from list_destinations. Each destination has a network (linkedin today). \"personal\" (the default on a personal draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and \"personal\" switches to the profile."New value: +"Where the post goes on LinkedIn: a LinkedIn id from list_destinations. \"personal\" (the default on a new draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and \"personal\" switches to the profile. To post to X, Facebook, Instagram, Threads or YouTube, use destinations on save_draft."
  3. Changed1 schema field changed
    • changedInput schema / properties / destination / description
      Previous value: -"Where the post goes on LinkedIn: a LinkedIn id from list_destinations. \"personal\" (the default on a new draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and \"personal\" switches to the profile. To post to X, Facebook, Instagram or Threads, use destinations on save_draft."New value: +"Where to post: an id from list_destinations. Each destination has a network (linkedin today). \"personal\" (the default on a personal draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and \"personal\" switches to the profile."
  4. Changed1 schema field changed
    • changedInput schema / properties / destination / description
      Previous value: -"Where to post: an id from list_destinations. Each destination has a network (linkedin today). \"personal\" (the default on a personal draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and \"personal\" switches to the profile."New value: +"Where the post goes on LinkedIn: a LinkedIn id from list_destinations. \"personal\" (the default on a new draft) is the personal LinkedIn profile; a company page is identified by its id from list_destinations (usually the organization URN). On schedule_post and publish_now, leaving it out keeps a company destination already saved on the draft, and \"personal\" switches to the profile. To post to X, Facebook, Instagram or Threads, use destinations on save_draft."
  5. Changed1 schema field changed
    • addedInput schema / properties / media_alt_text
      Added value: +{
      +  "description": "Optional alt text for the images already on the post, one entry per image in the order of media_urls from list_posts. A string (up to 4,086 characters; about 120 recommended) sets that image’s alt text, null or \"\" removes it, and images past the end of a shorter array keep theirs. Refused when the post has no images or the array is longer than its images.",
      +  "items": {
      +    "maxLength": 4086,
      +    "type": [
      +      "string",
      +      "null"
      +    ]
      +  },
      +  "maxItems": 9,
      +  "type": "array"
      +}
  6. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, the description explains refusal behavior and error detail, destination splitting into one post per network, split_posts identifiers, preview_url intended for user display, media alt-text handling, and YouTube Short conversion rules. This gives the agent substantial behavioral context for a scheduling mutation.

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 description is front-loaded with the core action and every sentence contributes relevant scheduling, refusal, splitting, or preview information. It is dense as a single paragraph, but the length is justified by the tool's complexity.

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?

There is no output schema, yet the description explains the important return structure: post, split_posts, and post.preview_url. Combined with the scheduling constraints, split-post behavior, and refusal details, it is complete enough for an agent to call and interpret the tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already carries detailed meanings for id, destination, scheduled_for, media_alt_text, and youtube_format. The description reinforces some parameter behavior, but mostly restates what is already in the schema rather than adding significant new parameter semantics.

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 states a specific verb and resource: schedules a saved draft for every network in its destinations. It clearly distinguishes the operation from draft creation and immediate publishing by naming save_draft as the source object and describing the scheduled outcome.

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?

It gives clear usage context: the post must already exist as a saved draft, scheduled_for must be a future timezone-aware timestamp, media cannot be supplied here, and posts are refused when a network cannot accept them. It does not explicitly route agents to publish_now for immediate publication, which keeps it short of fully explicit alternative guidance.

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.

Resources