Skip to main content
Glama

Publish a post to social accounts

queue_post_for_publishing
Idempotent

PUBLISHES a planned post PUBLICLY to the named social accounts at its scheduled time (or scheduled_at). Name every account by its connection_id from list_social_accounts — there is no default and it never goes to all connected accounts. A YouTube account also needs youtube (title, visibility, made for kids, AI-content disclosure) — ask the user for any you do not know. Moving a date or marking a post ready does not publish; this does. Free (no Creative Credits). Queueing the same post again re-arms it and never posts twice; cancel_queued_post stops it before it goes out.

Input Schema

NameRequiredDescriptionDefault
googleNoUsed when connection_ids names a Google Business Profile location; ignored otherwise.
post_idYesThe post id from get_calendar
youtubeNoRequired when connection_ids names a YouTube account; ignored otherwise.
brand_idYesBrand workspace id from list_brands
timezoneNoThe owner's IANA timezone, e.g. Asia/Kolkata, when they named one.
user_goalNoOptional: the user's goal behind this call, in one short sentence of plain words (e.g. "add a page so customers can book tables"). No names, emails or other personal details.
scheduled_atNoThe exact moment, as an ISO instant with offset (2026-09-20T09:00:00+05:30). Omit to keep the post's own day and time.
connection_idsYesThe accounts to publish to: each account's connection_id from list_social_accounts, as the user chose them. Required — there is no default.
fallback_timezoneNoThe owner's device time zone, used only when the brand has none on record.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / google
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Used when connection_ids names a Google Business Profile location; ignored otherwise.",
      +  "properties": {
      +    "button": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "action_type": {
      +          "enum": [
      +            "BOOK",
      +            "ORDER",
      +            "SHOP",
      +            "LEARN_MORE",
      +            "SIGN_UP",
      +            "CALL"
      +          ],
      +          "type": "string"
      +        },
      +        "url": {
      +          "description": "https link; not used for CALL (the listing phone).",
      +          "format": "uri",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "action_type"
      +      ],
      +      "type": "object"
      +    },
      +    "event": {
      +      "additionalProperties": false,
      +      "description": "Required for EVENT and OFFER: the title and dates.",
      +      "properties": {
      +        "end_date": {
      +          "description": "YYYY-MM-DD",
      +          "type": "string"
      +        },
      +        "end_time": {
      +          "description": "HH:MM",
      +          "type": "string"
      +        },
      +        "start_date": {
      +          "description": "YYYY-MM-DD",
      +          "type": "string"
      +        },
      +        "start_time": {
      +          "description": "HH:MM",
      +          "type": "string"
      +        },
      +        "title": {
      +          "maxLength": 58,
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "title",
      +        "start_date",
      +        "end_date"
      +      ],
      +      "type": "object"
      +    },
      +    "offer": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "coupon_code": {
      +          "maxLength": 58,
      +          "type": "string"
      +        },
      +        "redeem_url": {
      +          "format": "uri",
      +          "type": "string"
      +        },
      +        "terms": {
      +          "maxLength": 5000,
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "topic_type": {
      +      "description": "STANDARD (an update), EVENT, or OFFER.",
      +      "enum": [
      +        "STANDARD",
      +        "EVENT",
      +        "OFFER"
      +      ],
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "topic_type"
      +  ],
      +  "type": "object"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / user_goal
      Added value: +{
      +  "description": "Optional: the user's goal behind this call, in one short sentence of plain words (e.g. \"add a page so customers can book tables\"). No names, emails or other personal details.",
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • addedInput schema / properties / youtube
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Required when connection_ids names a YouTube account; ignored otherwise.",
      +  "properties": {
      +    "contains_synthetic_media": {
      +      "description": "Whether the video contains realistic AI-generated or altered content (YouTube's disclosure).",
      +      "type": "boolean"
      +    },
      +    "made_for_kids": {
      +      "description": "Made for kids. Defaults to false; true turns off comments.",
      +      "type": "boolean"
      +    },
      +    "privacy_status": {
      +      "description": "Who can see it: public, unlisted or private.",
      +      "enum": [
      +        "private",
      +        "unlisted",
      +        "public"
      +      ],
      +      "type": "string"
      +    },
      +    "title": {
      +      "description": "The video title (1-100 characters, no < or >).",
      +      "maxLength": 100,
      +      "minLength": 1,
      +      "pattern": "^[^<>]*$",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "title",
      +    "privacy_status",
      +    "contains_synthetic_media"
      +  ],
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnly=false, idempotent=true and destructive=false; the description goes further by explaining the idempotency in operational terms (queueing again re-arms, never posts twice), disclosing cost (free, no Creative Credits) and a data-collection obligation (ask the user for missing YouTube fields). It stops short of covering permissions or what happens to a post that fails to publish, so it is strong but not exhaustive.

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 critical facts (publishes publicly, name every account, YouTube extras, not a reschedule, free, idempotent, cancel path) are front-loaded in dense, imperative sentences with no filler. Length is justified by the number of distinct constraints conveyed.

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

Completeness4/5

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

For a 9-parameter nested mutation tool with no output schema, the description covers the consequential unknowns: cost, idempotency, targeting, and required YouTube metadata. It omits any mention of the Google Business Profile branch or how to recover publish status afterwards (get_post_publish_status exists), which keeps it just under fully complete.

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?

With 100% schema description coverage the baseline is 3, and the description earns an extra point by explaining that connection_ids must be enumerated per account with no default and by flagging the platform-specific `youtube` payload as conditionally required. It adds little about google, timezone, fallback_timezone or user_goal, leaving those to 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?

The description leads with a specific verb and resource plus scope: "PUBLISHES a planned post PUBLICLY to the named social accounts at its scheduled time." The emphasis on PUBLICLY and on publication versus scheduling distinguishes it from siblings like schedule_social_post, reschedule_social_post and cancel_queued_post without the agent needing to open any schema.

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 explicit exclusions: "Moving a date or marking a post ready does not publish; this does," and names the escape hatch (cancel_queued_post stops it). It also gives a hard targeting rule with no fallback ("there is no default and it never goes to all connected accounts"), so an agent knows exactly when and how to call it.

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