Skip to main content
Glama
Upload-Post

Upload-Post

Official

Upload text post

upload_text

Publish a text-only post to selected social platforms, optionally attach a link preview, and show a preview for approval before sending.

Instructions

Publish a text-only post. linkUrl (or platform-specific *LinkUrl) attaches a link preview where supported. Needs the user's approval: call it first without confirmed to get a preview (nothing is sent), show the user exactly what will go out, and repeat the call with confirmed: true only after they approve.

Input Schema

NameRequiredDescriptionDefault
userYes
titleYesPost text / caption.
linkUrlNoGeneric link preview URL (LinkedIn, Bluesky, Facebook).
timezoneNoIANA timezone for scheduled date, e.g. 'Europe/Madrid'.
confirmedNoSet to true only after the user has seen the preview this tool returns without it and approved it. Without it nothing is sent.
platformsYesRequired array of platform identifiers.
addToQueueNoInsert into the user's posting queue instead of publishing now.
asyncUploadNoReturn immediately with request_id (default true).
scheduledDateNoISO 8601 date for scheduled publishing, e.g. '2026-12-25T10:00:00Z'. Omit for immediate post.
maxPostsPerSlotNo
platformOptionsNoFlat platform-specific override object with camelCase keys. Per-platform text overrides (xTitle, linkedinTitle, …) are also accepted. Keys the upload-post SDK does not support are silently ignored upstream.

Output Schema

NameRequiredDescriptionDefault
resultNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv0.17.2
    • addedInput schema / properties / confirmed
      Added value: +{
      +  "description": "Set to true only after the user has seen the preview this tool returns without it and approved it. Without it nothing is sent.",
      +  "type": "boolean"
      +}
    • changedInput schema / properties / platformOptions / description
      Previous value: -"Flat platform-specific override object with camelCase keys. Per-platform text overrides (xTitle, linkedinTitle, …) are also accepted. Keys the upload-post SDK does not support are silently ignored upstream. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."New value: +"Flat platform-specific override object with camelCase keys. Per-platform text overrides (xTitle, linkedinTitle, …) are also accepted. Keys the upload-post SDK does not support are silently ignored upstream."
    • changedInput schema / properties / platformOptions / properties / redditFlairId / description
      Previous value: -"Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."New value: +"Reddit only."
    • changedInput schema / properties / platformOptions / properties / redditLinkUrl / description
      Previous value: -"Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."New value: +"Reddit only."
    • changedInput schema / properties / platformOptions / properties / redditSubreddit / description
      Previous value: -"Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."New value: +"Reddit only."
    • changedInput schema / properties / platforms / description
      Previous value: -"Required array of platform identifiers. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."New value: +"Required array of platform identifiers."
    • changedInput schema / properties / platforms / items / description
      Previous value: -"Target social platform. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."New value: +"Target social platform."
    • changedInput schema / properties / platforms / items / enum
      Previous value: -[
      -  "x",
      -  "linkedin",
      -  "facebook",
      -  "threads",
      -  "reddit",
      -  "bluesky",
      -  "google_business",
      -  "discord",
      -  "telegram",
      -  "slack",
      -  "mastodon",
      -  "nostr",
      -  "lemmy",
      -  "devto",
      -  "hashnode",
      -  "wordpress",
      -  "whop",
      -  "listmonk"
      -]New value: +[
      +  "x",
      +  "linkedin",
      +  "facebook",
      +  "threads",
      +  "bluesky",
      +  "google_business",
      +  "discord",
      +  "telegram",
      +  "slack",
      +  "mastodon",
      +  "nostr",
      +  "lemmy",
      +  "devto",
      +  "hashnode",
      +  "wordpress",
      +  "whop",
      +  "listmonk"
      +]
  2. Changed11 schema fields changedv0.11.1
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • changedInput schema / properties / platformOptions / description
      Previous value: -"Flat platform-specific override object with camelCase keys. Per-platform text overrides (xTitle, linkedinTitle, …) are also accepted. Keys the upload-post SDK does not support are silently ignored upstream."New value: +"Flat platform-specific override object with camelCase keys. Per-platform text overrides (xTitle, linkedinTitle, …) are also accepted. Keys the upload-post SDK does not support are silently ignored upstream. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."
    • changedInput schema / properties / platformOptions / properties / redditFlairId / description
      Previous value: -"Reddit flair template ID."New value: +"Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."
    • changedInput schema / properties / platformOptions / properties / redditLinkUrl / description
      Previous value: -"Link to attach on Reddit."New value: +"Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."
    • changedInput schema / properties / platformOptions / properties / redditSubreddit / description
      Previous value: -"Subreddit name, without r/. Title is required for Reddit."New value: +"Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."
    • addedInput schema / properties / platformOptions / properties / replyToId
      Added value: +{
      +  "description": "Publish as a reply to an existing post (X: tweet ID; Bluesky: post URL or AT-URI). On X's Pay-Per-Use tier a reply to an author the account has not engaged with is rejected with 403.",
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / tiktokFirstComment
      Added value: +{
      +  "description": "First comment posted under the TikTok post, overriding the shared `firstComment` for TikTok only. Requires the 'comments' capability on the profile's TikTok account (see the `capabilities` array in list_users).",
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / xReplyToId
      Added value: +{
      +  "description": "Alias of replyToId, scoped to X: the tweet ID to reply to.",
      +  "type": "string"
      +}
    • addedInput schema / properties / platforms / description
      Added value: +"Required array of platform identifiers. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."
    • addedInput schema / properties / platforms / items / description
      Added value: +"Target social platform. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target."
    • removedOutput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
  3. Changed6 schema fields changedv0.7.0
    • removedInput schema / properties / autogenerate
      Removed value: -{
      -  "description": "If true, AI generates native per-platform title/description from the media and fills any field left empty.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / autogenerateDescription
      Removed value: -{
      -  "description": "Generate only the description with AI.",
      -  "type": "boolean"
      -}
    • removedInput schema / properties / autogenerateLanguage
      Removed value: -{
      -  "description": "Force the AI output language (ISO code); omit to auto-detect from the media.",
      -  "type": "string"
      -}
    • removedInput schema / properties / autogenerateTitle
      Removed value: -{
      -  "description": "Generate only the title with AI.",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / platformOptions / properties / gbpMediaCategory
      Added value: +{
      +  "description": "Google Business gallery category for the uploaded photo. Only used with gbpPostType. Defaults to ADDITIONAL.",
      +  "enum": [
      +    "COVER",
      +    "PROFILE",
      +    "LOGO",
      +    "EXTERIOR",
      +    "INTERIOR",
      +    "PRODUCT",
      +    "AT_WORK",
      +    "FOOD_AND_DRINK",
      +    "MENU",
      +    "COMMON_AREA",
      +    "ROOMS",
      +    "TEAMS",
      +    "ADDITIONAL"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / gbpPostType
      Added value: +{
      +  "description": "Publish into the Google Business location's photo gallery instead of creating a Local Post. Omitting it keeps the Local Post behaviour.",
      +  "enum": [
      +    "MEDIA",
      +    "PHOTO",
      +    "GALLERY"
      +  ],
      +  "type": "string"
      +}
  4. Changed1 schema field changedv0.5.0
    • changedInput schema / properties / platforms / items / enum
      Previous value: -[
      -  "x",
      -  "linkedin",
      -  "facebook",
      -  "threads",
      -  "reddit",
      -  "bluesky",
      -  "google_business",
      -  "discord",
      -  "telegram"
      -]New value: +[
      +  "x",
      +  "linkedin",
      +  "facebook",
      +  "threads",
      +  "reddit",
      +  "bluesky",
      +  "google_business",
      +  "discord",
      +  "telegram",
      +  "slack",
      +  "mastodon",
      +  "nostr",
      +  "lemmy",
      +  "devto",
      +  "hashnode",
      +  "wordpress",
      +  "whop",
      +  "listmonk"
      +]
  5. First observedv0.4.0

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare it is a non-read-only, non-destructive, open-world write. Beyond that, the description discloses the critical behavioral trait that the first call sends nothing and returns a preview — this is exactly the kind of context annotations cannot convey. It does not cover deferred/scheduled execution behavior, but the safety-critical mutation semantics are well handled.

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?

Three sentences, front-loaded with the core action, then the link-preview note, then the approval workflow. No filler. Slightly compressed phrasing ('platform-specific *LinkUrl') is the only minor friction.

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?

With an output schema present and 82% schema coverage across 11 params plus a large nested platformOptions object, the description needn't re-document fields. It supplies the operationally essential approval loop, leaving only minor gaps around scheduling/queue interaction.

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 82%, so the schema already documents nearly every parameter, including `confirmed` and the platform-specific overrides. The description only restates the `linkUrl`/*LinkUrl behavior and the confirmation meaning, adding little beyond what is already structured — the baseline 3 applies.

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?

States a specific verb+resource ('Publish a text-only post') immediately, which cleanly separates it from siblings like upload_video, upload_photos, and upload_document. An agent can identify the correct tool without opening 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit operating instructions: call first without `confirmed` to get a preview, show the user exactly what will go out, then repeat with `confirmed: true`. That is a concrete when/how recipe. It stops short of naming alternatives (e.g., upload_photos for media posts) or exclusions, so it isn't a full 5.

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