Skip to main content
Glama

Update a template

update_template
DestructiveIdempotent

Update a template's name, description, shared content or media, targeted networks, per-network overrides (platformContent), network options (metadata), or Instagram contentType. Only the fields you pass change. Pass platformContent as null to clear every per-network override, or metadata as null to clear the network options.

Platform rules (enforced by the API — validate_post checks all of them):

  • Facebook: ≤63206 chars, ≤10 images, ≤1 videos, video 1–14400s, supports first comment

  • Instagram: ≤2200 chars, media REQUIRED, ≤10 images, ≤1 videos, video 3–900s, supports first comment

  • Threads: ≤500 chars, ≤10 images, ≤1 videos, video 0–300s, supports first comment

  • X (Twitter): ≤280 chars (25000 with a long-post subscription), ≤4 images, ≤1 videos, supports first comment

  • LinkedIn: ≤3000 chars, ≤9 images, ≤1 videos, video 3–1800s

  • TikTok: ≤2200 chars, media REQUIRED, ≤35 images, ≤1 videos, video 3–600s, supports first comment (TikTok Business connections only)

  • YouTube: ≤5000 chars, VIDEO REQUIRED, ≤1 images, ≤1 videos

  • Telegram: ≤4096 chars (≤1024 with media), ≤10 images, ≤1 videos

  • WhatsApp: ≤4096 chars (≤1024 with media), ≤1 images, ≤1 videos

  • Pinterest: ≤500 chars, media REQUIRED, ≤5 images, ≤1 videos, video 4–900s

  • Google Business: ≤1500 chars, ≤10 images, ≤1 videos

  • Discord: ≤2000 chars, ≤10 images, ≤1 videos

  • Bluesky: ≤300 chars, ≤4 images, ≤1 videos, video 0–180s

  • Mastodon: ≤500 chars, ≤4 images, ≤1 videos

  • Images and a video in the same post are refused on Facebook, LinkedIn, Pinterest, X (Twitter), Bluesky, Mastodon, TikTok — attach one kind per post (or per platform override)

  • X counts weighted length, not characters: every URL counts 23, CJK characters count 2, each emoji counts 2; the ≤280 limit applies to that count

  • X long posts: an X connection whose metadata.subscriptionType (list_platform_connections) is Basic, Premium, PremiumPlus may post up to 25000; every X connection the post targets must have one, or the whole post is held to 280. The first comment stays ≤280. A subscription bought after connecting counts once an owner or admin presses Refresh on the X connection in PostRite

  • Bluesky counts graphemes (what a reader sees as one character, so an emoji is 1), not UTF-16 units; the ≤300 limit applies to that count

  • Pinterest: requires metadata.pinterest.boardId (from list_pinterest_boards) unless the account has a default board

  • Discord bot connections: require metadata.discord.channels (map of platformConnectionId -> channelId, from list_discord_channels)

  • WhatsApp: requires metadata.whatsappRecipient (phone number)

  • TikTok: requires metadata.tiktokOptions.privacyLevel, one of the account's privacy_level_options from get_tiktok_creator_info

  • TikTok connection method (metadata.authMethod on list_platform_connections: "business_api" is TikTok Business, absent or "login_kit" is Login Kit): a TikTok Business VIDEO publishes public only — metadata.tiktokOptions.privacyLevel must be PUBLIC_TO_EVERYONE — and is capped at 1 GB (Login Kit: 4 GB); photo posts keep the privacy_level_options from get_tiktok_creator_info on both

  • TikTok Business only (Login Kit refuses both): metadata.tiktokOptions.uploadAsDraft: true sends the video to the creator's TikTok drafts instead of publishing it — TikTok then ignores everything but the caption, though privacyLevel must still be set — and metadata.tiktokOptions.coverMediaId (a library image) sets a separate video cover, which makes TikTok ignore videoCoverTimestampMs

  • TikTok first comment: metadata.tiktokOptions.firstComment (≤1200 chars) is posted only on a TikTok Business connection and never on an uploadAsDraft post; on Login Kit the post still publishes but the comment is not posted (validate_post warns with validation.tiktokFirstCommentBusinessOnly)

  • TikTok photo carousels: metadata.tiktokOptions.photoTitle is an optional headline of ≤90 chars (derived from the caption's first line when omitted); the caption itself is sent as the description (≤4000)

  • Instagram contentType REEL: exactly 1 video, 3–900s

  • Instagram contentType STORY: exactly 1 media, video 3–60s and ≤100 MB, no caption

  • Facebook metadata.facebookOptions.postType REEL: exactly 1 vertical (9:16) video, 3–90s, at least 540×960; Meta allows 30 API-published Reels per Page per 24h

  • Facebook metadata.facebookOptions.postType STORY: exactly 1 image or video (3–60s), no caption, no first comment

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": {
      "templateId": "<templateId>"
    },
    "name": "update_template"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoNew template name
tagsNoTags for organizing templates; applied, they become the post's hashtags, appended to the text on most networks (not Threads or YouTube) and counted against each network's character limit
contentNoShared template body; may contain {{variables}}. Max 2000 characters — this is the template cap, well below what the networks themselves allow.
mediaIdsNoMedia library IDs (from list_media or import_media_from_url) attached to every network — the preferred way to attach media. Images and videos only: a template, like a post, refuses an audio file or PDF document. On update_template, an empty array leaves the media untouched (passing [] does not remove media — removing all media is done in the app)
metadataNoPortable network options; pass null to clear them. Account-bound keys are stripped server-side.
mediaUrlsNoEscape hatch for media proxy URLs — prefer mediaIds
platformsNoNetworks this template targets. A suggestion for the editor, not a restriction — the template still applies to any account.
templateIdYesThe template ID (from list_templates)
contentTypeNoInstagram post type (POST | REEL | STORY); pass null to clear it
descriptionNoInternal note about when to use this template; never published
organizationIdNoOrganization to act in — an id from list_organizations. Required when this connection was authorized for more than one organization; omit it when there is only one.
platformContentNoPer-network overrides keyed by Platform; pass null to clear every override

Output Schema

NameRequiredDescriptionDefault
templateNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / tags / description
      Previous value: -"Tags for organizing templates; also become the post's hashtags when applied"New value: +"Tags for organizing templates; applied, they become the post's hashtags, appended to the text on most networks (not Threads or YouTube) and counted against each network's character limit"
  2. First observed

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare destructive=true, idempotent=true and openWorld=true, so the safety profile is known. The description adds genuinely non-obvious behavior: account-bound keys (pinterest.boardId, discord.channels, whatsappRecipient, tiktokOptions.privacyLevel/uploadAsDraft, threadsOptions.quotePostId) are stripped server-side and never persist on a template, and instagramOptions.userTags are always stripped. It does not contradict destructive=true — null-clearing of platformContent or metadata is precisely the destructive path it discloses.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first paragraph is well front-loaded and correctly leads with the partial-update rule and the null semantics. After that it becomes a multi-screen platform-rules dump (character limits, video durations, per-network quirks) that substantially duplicates the already-exhaustive metadata parameter description and the checks validate_post performs. Much of it does not earn its place in a tool description.

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 and rich annotations present, the description does not need to explain return values, and it covers update scope, clearing semantics, and server-side stripping thoroughly. The only real gap is the lack of a clear workflow statement — validate before writing, and when to use update_post instead — which would round out an otherwise complete definition.

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 baseline is 3 and the enormous metadata parameter description already documents nearly every option block. The description does add some meaning beyond the schema — notably which keys are account-bound and stripped, and that userTags never survive — but most of its length restates limits the schema already carries, so the marginal semantic gain is modest.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource and enumerates exactly which fields can be changed (name, description, content, media, networks, platformContent, metadata, contentType). It is clearly distinguishable from create_template and update_post by naming template-scoped fields. It stops short of explicitly contrasting itself with the nearest siblings, so it lands just below a 5.

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?

It states the partial-update contract ("Only the fields you pass change") and the two null-clearing escape hatches, which is real usage guidance. However, it never says when to reach for update_template versus update_post or create_template, and the pointer to validate_post is buried in a parenthetical rather than framed as a recommended pre-flight step. Usage is inferable from the content but not spelled out.

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