Skip to main content
Glama
Upload-Post

Upload-Post

Official

Upload photos / carousel

upload_photos

Publish single photos or carousels to multiple social platforms. Provide photo paths or URLs, select target platforms like TikTok or Instagram, and optionally schedule or queue the post.

Instructions

Publish one or more photos (single image or carousel). Each item in photosPathsOrUrls may be a public URL or a local path. Reddit posting is currently unavailable (error_code=reddit_unavailable) until the Reddit app is restored. Do not use reddit as a publish target.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
userYes
titleNo
altTextNo
timezoneNoIANA timezone for scheduled date, e.g. 'Europe/Madrid'.
platformsYesRequired 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.
addToQueueNoInsert into the user's posting queue instead of publishing now.
asyncUploadNoReturn immediately with request_id (default true).
descriptionNo
firstCommentNoComment auto-posted under the post right after publishing. Supported on every platform that has comments, TikTok included. Use `platformOptions.<platform>FirstComment` to override it for one platform.
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 (instagramTitle, xFirstComment, …) 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.
photosPathsOrUrlsYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 schema fields changedv0.11.1
    • removedInput schema / $schema
      Removed value: -"http://json-schema.org/draft-07/schema#"
    • addedInput schema / properties / firstComment / description
      Added value: +"Comment auto-posted under the post right after publishing. Supported on every platform that has comments, TikTok included. Use `platformOptions.<platform>FirstComment` to override it for one platform."
    • changedInput schema / properties / platformOptions / description
      Previous value: -"Flat platform-specific override object with camelCase keys. Per-platform text overrides (instagramTitle, xFirstComment, …) 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 (instagramTitle, xFirstComment, …) 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 / redditSubreddit / description
      Previous value: -"Subreddit name, without r/."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 / tiktokIsAiGenerated
      Added value: +{
      +  "description": "Disclose the photo post as AI-generated content.",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / platformOptions / properties / tiktokLocationId
      Added value: +{
      +  "description": "Location to tag — pass a `location_id` from tiktok_location_search. Must be sent together with tiktokLocationName. Needs the `location` capability (see tiktokMusicId).",
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / tiktokLocationName
      Added value: +{
      +  "description": "Name of the tagged location, from tiktok_location_search. TikTok requires it whenever tiktokLocationId is set.",
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / tiktokMusicId
      Added value: +{
      +  "description": "Commercial Music Library track to add to the photo post — pass a track `id` from tiktok_music_trending or tiktok_music_search (the `id` field, not `commercial_music_id`). TikTok's photo posts take the id alone: there is no volume or trim. Available on connections that declare the `music` capability (see `capabilities` on the TikTok account in list_users); otherwise the field is ignored, the post still publishes and the response includes a per-field warning.",
      +  "type": "string"
      +}
    • changedInput schema / properties / platformOptions / properties / tiktokPhotoCoverIndex / description
      Previous value: -"Index of the cover photo, 0-based."New value: +"Index of the cover photo, 0-based. Sent as `photo_cover_index`; picks the cover of a TikTok photo post."
    • addedInput schema / properties / platformOptions / properties / tiktokPhotoCoverIndex / minimum
      Added value: +0
    • addedInput schema / properties / platformOptions / properties / tiktokPostMode
      Added value: +{
      +  "description": "Send to TikTok drafts/inbox. Same flag for every TikTok account; do not pick a different field for Business. MEDIA_UPLOAD (or tiktokUploadToDraft=true) sends the post to drafts/inbox. DIRECT_POST publishes now.",
      +  "enum": [
      +    "DIRECT_POST",
      +    "MEDIA_UPLOAD"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / tiktokPrivacyLevel
      Added value: +{
      +  "description": "TikTok privacy value: PUBLIC_TO_EVERYONE, MUTUAL_FOLLOW_FRIENDS, FOLLOWER_OF_CREATOR, SELF_ONLY. TikTok requires one on photo posts (defaults to PUBLIC_TO_EVERYONE) and decides per account which values are available.",
      +  "type": "string"
      +}
    • addedInput schema / properties / platformOptions / properties / tiktokUploadToDraft
      Added value: +{
      +  "description": "Send to TikTok drafts/inbox. Same flag for every TikTok account; do not pick a different field for Business. Set true, or tiktokPostMode=MEDIA_UPLOAD.",
      +  "type": "boolean"
      +}
    • 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#"
  2. 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"
      +}
  3. Changed1 schema field changedv0.5.0
    • changedInput schema / properties / platforms / items / enum
      Previous value: -[
      -  "tiktok",
      -  "instagram",
      -  "linkedin",
      -  "facebook",
      -  "pinterest",
      -  "threads",
      -  "reddit",
      -  "bluesky",
      -  "x",
      -  "google_business",
      -  "discord",
      -  "telegram"
      -]New value: +[
      +  "tiktok",
      +  "instagram",
      +  "linkedin",
      +  "facebook",
      +  "pinterest",
      +  "threads",
      +  "reddit",
      +  "bluesky",
      +  "x",
      +  "google_business",
      +  "discord",
      +  "telegram",
      +  "mastodon",
      +  "lemmy",
      +  "wordpress"
      +]
  4. First observedv0.4.0

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already establish the operation is a write (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds a useful operative constraint about Reddit unavailability, but it does not disclose async behavior, queueing side effects, or whether request_id is returned. These are left to the schema.

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 purpose, followed by the key parameter nuance, and ends with the critical availability warning. The Reddit warning is slightly wordy and repeated in the schema, but the description remains compact and well-ordered.

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?

Given the tool's high parameter count, the description covers the essential calling information: what is published, what input form is accepted, and which platform must be avoided. Since an output schema exists, return-value detail is not required from the description. It still omits explicit routing among sibling publish tools, but the schema and title cover most invocation needs.

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?

The description adds real value beyond the schema by explaining that each item in `photosPathsOrUrls` may be a public URL or a local path, and that multiple items form a carousel. This directly clarifies the primary input beyond the schema's bare array-of-strings definition. Remaining parameters rely on their own schema descriptions.

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 one or more photos (single image or carousel)'. It clearly distinguishes this tool from siblings such as upload_video, upload_text, and upload_document by content type, and the 'single image or carousel' detail adds precise scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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

The description implies appropriate use through 'Publish one or more photos' and the sibling tool names, but it never explicitly says 'use upload_video for videos' or names alternative tools. The only explicit guidance is the reddit exclusion, which is a platform constraint rather than tool-selection guidance.

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