Skip to main content
Glama

Post an Instagram reel

instagram_post_reel

Publish an Instagram Reel in one call: create the REELS container, wait for processing, then publish; resume an in-progress container to avoid duplicate posts.

Instructions

Publish a reel in one call: create the REELS container, wait for processing (reels can take a while), then publish. Preview performs nothing. If processing exceeds the poll budget the result is status=in_progress with a resume_container_id — re-run with apply:true and resumeContainerId to finish (never create a new post). Video duration, codec, and size are validated by Instagram on fetch, not here.

Input Schema

NameRequiredDescriptionDefault
applyNoSet true to actually perform this write. Omitted (or false) returns a non-mutating preview of exactly what would happen and calls nothing, unless IG_WRITE_MODE=apply is configured. An explicit false always forces preview.
accountNoName of the configured account profile to operate as (multi-account). Omit to use the default profile (IG_ACTIVE_PROFILE).
captionNoCaption text (≤ 2200 characters, ≤ 30 hashtags, ≤ 20 @mentions — counted as a client-side guard). Instagram renders @mentions and #hashtags.
coverUrlNoPublic HTTPS cover image URL for the reel.
videoUrlNoPublic HTTPS video URL for the reel (required unless resuming). Duration, codec, and size are unverifiable before Instagram fetches it.
locationIdNoInstagram location Page id to tag on the post.
shareToFeedNoAlso show the reel in the main feed.
thumbOffsetNoCover frame offset in milliseconds (used when no coverUrl is given).
resumeContainerIdNoResume a container from a previous apply that returned status=in_progress: pass its resume_container_id to finish publishing instead of creating a new post (avoids a duplicate). When set, the media inputs are ignored.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changedv0.8.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / properties / coverUrl / $ref
      Removed value: -"#/properties/videoUrl"
    • addedInput schema / properties / coverUrl / pattern
      Added value: +"^ *[Hh][Tt][Tt][Pp][Ss]:\\/\\/"
    • addedInput schema / properties / coverUrl / type
      Added value: +"string"
    • addedInput schema / properties / locationId / pattern
      Added value: +"^[A-Za-z0-9_-]{1,64}$"
    • addedInput schema / properties / resumeContainerId / pattern
      Added value: +"^[A-Za-z0-9_-]{1,64}$"
    • addedInput schema / properties / thumbOffset / maximum
      Added value: +9007199254740991
    • addedInput schema / properties / videoUrl / pattern
      Added value: +"^ *[Hh][Tt][Tt][Pp][Ss]:\\/\\/"
  2. First observedv0.7.0

TDQS

A4.4/5.0
Behavior5/5

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

Annotations declare the mutation profile (readOnlyHint=false, non-idempotent), and the description adds behavior annotations cannot express: the internal create/poll/publish sequence, that processing can take a while, the in_progress/resume recovery contract, the duplicate-prevention rule, and that media validation happens on Instagram's side, not here.

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?

Dense but front-loaded: the pipeline summary leads, recovery and preview caveats follow, and the trailing validation note is a legitimate boundary statement. Every clause carries information, though the run-on construction asks more parsing effort than ideal.

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 9-parameter, open-world, non-idempotent write with no output schema, the description covers everything an agent needs to call it correctly: the preview/apply gate, the async resume contract, and where validation responsibility lies. Nothing material is missing.

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 all nine parameters are already documented in the schema, including apply, resumeContainerId and videoUrl. The description only reiterates the resume flow, which the schema already covers; baseline 3 is appropriate.

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 reel') and enumerates the exact three-step pipeline (create container, wait for processing, publish) that the single call abstracts. This distinguishes it from the lower-level siblings instagram_create_media_container and instagram_publish_media, which an agent might otherwise reach for.

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 clear operational guidance for the async path: 'If processing exceeds the poll budget the result is status=in_progress with a resume_container_id — re-run with apply:true and resumeContainerId to finish (never create a new post)'. It also warns 'Preview performs nothing'. It does not, however, explicitly say when to prefer the granular siblings over this convenience tool.

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