Skip to main content
Glama

Schedule a post

schedule_post

Add a post to a content plan. Set status to 'scheduled' to publish automatically at the given date and time, or 'draft' to leave it in the calendar for review. Media: up to 9 images publish as a multi-image carousel, one MP4/MOV as a video post, one PDF as a swipeable LinkedIn document carousel; a PDF cannot be mixed with other media. To tag someone, write @Full Name or @Company inline in the copy — member ids come from list_profiles and organization ids from list_company_pages. Never invent an id: if you don't have one, write the name as plain text. Pass channel_ids (from list_channels) to also send the post to Facebook Pages / Instagram accounts at the same time. Status 'draft' saves without publishing and needs no confirmation. SAFETY: this never publishes or schedules by itself. It returns status 'awaiting_confirmation' and a confirmation link; nothing goes live until the user opens the link and ticks each account (all unticked by default). Always tell the user to open the link and tick the accounts. Never treat 'all accounts' as a blanket instruction — list every account you requested by name so the user can check them. You cannot confirm on the user's behalf.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
linkNoOptional link for Facebook text posts.
textYesThe LinkedIn post copy. Supports inline @[Name](urn:li:person:ID) mentions.
statusNoDefaults to 'scheduled'.
timezoneNoIANA timezone, e.g. Europe/London. Defaults to UTC.
media_urlsNoPublic https URLs from upload_media or create_upload_link. Up to 9 images become a multi-image carousel post; one MP4/MOV becomes a video post; one PDF becomes a swipeable LinkedIn document carousel. A PDF cannot be mixed with images or video.
channel_idsNoFacebook/Instagram channel ids from list_channels to also publish to.
document_titleNoCustom title LinkedIn displays above an attached PDF document.
scheduled_dateYesPublish date, YYYY-MM-DD.
scheduled_timeNoPublish time, HH:MM (24h). Defaults to 09:00.
text_overridesNoOptional per-channel copy: { channel_id: text }. Useful for shorter Instagram captions.
content_plan_idYesPlan id from list_content_plans.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / channel_ids
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Facebook/Instagram channel ids from list_channels to also publish to."
      +}
    • addedInput schema / properties / link
      Added value: +{
      +  "anyOf": [
      +    {
      +      "format": "uri",
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Optional link for Facebook text posts."
      +}
    • addedInput schema / properties / text_overrides
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "type": "string"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Optional per-channel copy: { channel_id: text }. Useful for shorter Instagram captions."
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / document_title
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 100,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Custom title LinkedIn displays above an attached PDF document."
      +}
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

The description carries the full burden since annotations only say readOnlyHint=false and destructiveHint=false. It goes far beyond: 'this never publishes or schedules by itself', returns 'awaiting_confirmation' with a link, all accounts default unticked, and the agent cannot confirm on the user's behalf. This is exactly the kind of non-obvious behavior an agent must know, and it does not contradict the annotations.

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?

Long (~250 words) but every block earns its place for an 11-parameter tool with a non-obvious confirmation flow: media rules, mention syntax, and safety instructions are all essential. It is front-loaded with purpose and ends with the critical safety workflow. Slightly dense, but not padded.

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 complex tool with 11 parameters and no output schema, the description covers everything needed to call it correctly: id sourcing, media constraints, cross-posting, timezone/default time handling, return status ('awaiting_confirmation' + link), and mandatory user-facing instructions. Nothing an agent needs to invoke it safely 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 coverage is 100%, setting baseline at 3, but the description adds real value beyond the schema: the @[Full Name](urn:li:person:ID) mention syntax, which sibling tools provide which ids, the 'never invent an id' rule, the PDF-cannot-mix-with-other-media constraint, and the default-unticked confirmation behavior. It supplements rather than merely restates the schema.

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 ('Add a post to a content plan'), and the status explanation (scheduled vs draft) immediately separates it from siblings like publish_post_now, update_post, and delete_post. The safety disclosure also clarifies that despite the name it only creates a pending confirmation, not an actual schedule.

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 rich, explicit usage context: when to use 'draft' vs 'scheduled', the exact mention syntax with id sources (list_profiles, list_company_pages), when to pass channel_ids (from list_channels), and a mandatory safety workflow ('always tell the user to open the link'). It stops short of explicitly naming alternatives like publish_post_now for immediate publishing, so exclusion guidance is implied rather than stated.

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