Skip to main content
Glama

Nuntior — Social, Messaging, Blog & Telecom MCP

Media Upload, Auto-Fit Video & Clip Pipeline

media_pipeline
Idempotent

Execute media ingestion, zero-egress storage uploads, automatic multi-aspect-ratio video reframing (9:16, 16:9, 1:1, 4:5), viral short clip extraction with burned-in captions, and AI visual asset generation (media_generate). For files around 100 MB or larger (including a 579048031-byte original MP4), use multipart_create → PUT each part to the returned URLs (direct to R2) → multipart_complete. Do not send the whole file through presign_upload PUT or Cloudflare returns HTTP 413. check_status is ready only when the object bytes exist in storage. Use this tool before posts_publish whenever a campaign requires uploading video/image files or converting a single landscape video into vertical Reels, TikToks, and YouTube Shorts.

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": {
      "action": "<action>"
    },
    "name": "media_pipeline"
  }
}

Input Schema

NameRequiredDescriptionDefault
partsNoUploaded parts with ETags from each part PUT, required for 'multipart_complete'.
actionYesMedia pipeline operation: 'presign_upload' creates a signed Worker PUT URL (files ≲90 MB; larger hit Cloudflare 413), 'upload_base64' uploads inline (max 20 MB), 'multipart_create' starts R2 multipart for large originals (e.g. 579048031 bytes → 64 MiB × 9 parts), 'multipart_sign_part' returns per-part PUT URLs (direct to R2 when S3 tokens are set), 'multipart_complete' verifies size/checksum and marks ready only when the object exists, 'multipart_abort' cancels, 'auto_fit_video' reframes, 'extract_clips' cuts highlights, 'media_generate' renders from a prompt, 'check_status' reports ready only when stored bytes exist.
promptNoCreative prompt or visual template instructions when running `action: 'media_generate'` (e.g. 'Minimalist B2B architecture diagram for MCP server launch').
sha256NoAlias of checksum.
checksumNoOptional SHA-256 hex of the original file. Verified on complete when R2 exposes a checksum.
fileNameNoOriginal file name with extension (e.g. 'keynote-demo.mp4' or 'launch-carousel.png') when requesting a presigned upload URL.
mimeTypeNoMIME type of the media asset being uploaded or generated (e.g. 'video/mp4', 'image/png', 'image/jpeg', 'image/svg+xml').video/mp4
uploadIdNoR2 multipart upload id returned by 'multipart_create'.
clipCountNoNumber of short highlight clips (1 to 10) to extract from a long-form source video when `action` is 'extract_clips'.
profileIdNoBrand profile identifier (`prof_...`) that owns the media asset.prof_allometrik
sizeBytesNoFile size in bytes used to validate upload quotas and allocate storage buffers.
dataBase64NoBase64-encoded file bytes for 'upload_base64' (max 20 MB decoded).
partNumberNoSingle part number alternative to partNumbers.
contentTypeNoMIME type for 'upload_base64' (alias of mimeType), e.g. 'image/jpeg'.
partNumbersNoPart numbers to sign (1-based). For a 579048031-byte file at 64 MiB parts use [1,2,3,4,5,6,7,8,9]. Omit to sign every planned part.
mediaAssetIdNoExisting media asset identifier (`med_...`) to reframe, extract clips from, or inspect status.
partSizeBytesNoOptional part size in bytes (default 67108864 / 64 MiB). Must be ≥ 5242880 for multi-part objects.
targetAspectRatiosNoTarget aspect ratios for automatic video/image reframing: '9:16' (Reels/TikTok/Shorts), '16:9' (X/LinkedIn/YouTube), '1:1' (Square), '4:5' (Portrait Feed).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed9 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"Media pipeline operation: 'presign_upload' creates a signed direct PUT upload URL (no Authorization header needed, single use, 15 min), 'upload_base64' uploads a file inline (fileName, mimeType/contentType, dataBase64; max 20 MB), 'auto_fit_video' reframes video into target aspect ratios with -14 LUFS audio normalization, 'extract_clips' cuts viral vertical highlights, 'media_generate' renders social visuals from a prompt, and 'check_status' polls transcode progress."New value: +"Media pipeline operation: 'presign_upload' creates a signed Worker PUT URL (files ≲90 MB; larger hit Cloudflare 413), 'upload_base64' uploads inline (max 20 MB), 'multipart_create' starts R2 multipart for large originals (e.g. 579048031 bytes → 64 MiB × 9 parts), 'multipart_sign_part' returns per-part PUT URLs (direct to R2 when S3 tokens are set), 'multipart_complete' verifies size/checksum and marks ready only when the object exists, 'multipart_abort' cancels, 'auto_fit_video' reframes, 'extract_clips' cuts highlights, 'media_generate' renders from a prompt, 'check_status' reports ready only when stored bytes exist."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "presign_upload",
      -  "upload_base64",
      -  "auto_fit_video",
      -  "extract_clips",
      -  "media_generate",
      -  "check_status"
      -]New value: +[
      +  "presign_upload",
      +  "upload_base64",
      +  "multipart_create",
      +  "multipart_sign_part",
      +  "multipart_complete",
      +  "multipart_abort",
      +  "auto_fit_video",
      +  "extract_clips",
      +  "media_generate",
      +  "check_status"
      +]
    • addedInput schema / properties / checksum
      Added value: +{
      +  "description": "Optional SHA-256 hex of the original file. Verified on complete when R2 exposes a checksum.",
      +  "type": "string"
      +}
    • addedInput schema / properties / partNumber
      Added value: +{
      +  "description": "Single part number alternative to partNumbers.",
      +  "type": "number"
      +}
    • addedInput schema / properties / partNumbers
      Added value: +{
      +  "description": "Part numbers to sign (1-based). For a 579048031-byte file at 64 MiB parts use [1,2,3,4,5,6,7,8,9]. Omit to sign every planned part.",
      +  "items": {
      +    "type": "number"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / partSizeBytes
      Added value: +{
      +  "description": "Optional part size in bytes (default 67108864 / 64 MiB). Must be ≥ 5242880 for multi-part objects.",
      +  "type": "number"
      +}
    • addedInput schema / properties / parts
      Added value: +{
      +  "description": "Uploaded parts with ETags from each part PUT, required for 'multipart_complete'.",
      +  "items": {
      +    "properties": {
      +      "etag": {
      +        "type": "string"
      +      },
      +      "partNumber": {
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "partNumber",
      +      "etag"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / sha256
      Added value: +{
      +  "description": "Alias of checksum.",
      +  "type": "string"
      +}
    • addedInput schema / properties / uploadId
      Added value: +{
      +  "description": "R2 multipart upload id returned by 'multipart_create'.",
      +  "type": "string"
      +}
  2. Changed4 schema fields changed
    • changedInput schema / properties / action / description
      Previous value: -"Media pipeline operation: 'presign_upload' creates a direct PUT upload URL, 'auto_fit_video' reframes video into target aspect ratios with -14 LUFS audio normalization, 'extract_clips' cuts viral vertical highlights, 'media_generate' renders social visuals from a prompt, and 'check_status' polls transcode progress."New value: +"Media pipeline operation: 'presign_upload' creates a signed direct PUT upload URL (no Authorization header needed, single use, 15 min), 'upload_base64' uploads a file inline (fileName, mimeType/contentType, dataBase64; max 20 MB), 'auto_fit_video' reframes video into target aspect ratios with -14 LUFS audio normalization, 'extract_clips' cuts viral vertical highlights, 'media_generate' renders social visuals from a prompt, and 'check_status' polls transcode progress."
    • changedInput schema / properties / action / enum
      Previous value: -[
      -  "presign_upload",
      -  "auto_fit_video",
      -  "extract_clips",
      -  "media_generate",
      -  "check_status"
      -]New value: +[
      +  "presign_upload",
      +  "upload_base64",
      +  "auto_fit_video",
      +  "extract_clips",
      +  "media_generate",
      +  "check_status"
      +]
    • addedInput schema / properties / contentType
      Added value: +{
      +  "description": "MIME type for 'upload_base64' (alias of mimeType), e.g. 'image/jpeg'.",
      +  "type": "string"
      +}
    • addedInput schema / properties / dataBase64
      Added value: +{
      +  "description": "Base64-encoded file bytes for 'upload_base64' (max 20 MB decoded).",
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=true, and openWorld=true. The description adds useful operational behavior beyond annotations: multipart workflow, direct-to-R2 part uploads, the HTTP 413 failure mode, and readiness only when stored bytes exist; it still omits auth, cost, and return-shape details for generated assets.

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 front-loads capabilities and the main size constraint, with no wasted preamble. It is one dense paragraph and some of its action details duplicate the schema, but it remains appropriately sized for a 10-action, 18-parameter tool.

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 complex multi-action media pipeline with rich parameter documentation but no output schema, the description covers the key integration point with posts_publish, the large-file upload path, and readiness semantics. It leaves return values and some action-specific output details to the schema or inference.

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 schema already documents all 18 parameters and action enum values. The description reinforces the large-file multipart path and readiness condition, but most parameter-level meaning is already present in the schema, so it adds limited new semantic value.

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?

Description opens with specific verbs and resources: media ingestion, zero-egress storage uploads, automatic multi-aspect-ratio video reframing, clip extraction with captions, and AI visual asset generation. It also distinguishes the tool from posts_publish by saying to use it before publishing when media upload or conversion is needed.

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?

Explicitly states when to use it before posts_publish and gives a clear threshold-based alternative: files around 100 MB or larger must use multipart_create -> part PUTs -> multipart_complete, and must not go through presign_upload PUT because Cloudflare returns HTTP 413. This covers both when-to-use and a critical when-not path.

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