Skip to main content
Glama

transcode_video

Submit a transcoding job.

Args:
    source: URL of the input video (https://, s3://, or `tus:<uuid>`).
    outputs: list of format-spec dicts. Each MUST have an `output` field
        whose value is one of: mp4, webm, advanced_hls, advanced_dash,
        webm_dash, repack, mp3, m4a, hls_audio, flac, gif, thumbnail,
        thumbnails, smart_thumbnail, metadata, speech_to_text, vmaf,
        video_intelligence, ai_detection, waveform.
        The OUTER array is named `format` in the Qencode schema (this
        tool wraps it for you). The INNER STRING field naming the type
        is `output` — NOT `format`. This is the most common composition
        mistake. Example of a valid entry:
            {
                "output": "mp4",
                "video_codec": "libx264",
                "audio_codec": "libfdk_aac",
                "resolution": 720,
                "optimize_bitrate": 1,
                "audio_bitrate": 128,
                "destination": {"url": "s3://..."}
            }
        For HLS/DASH ABR, put per-rendition params on each entry of an
        inner `stream[]` array (not on the format object directly).
        Output-specific required fields (see matching recipe):
            advanced_hls / advanced_dash / webm_dash / hls_audio —
                non-empty `stream[]` of objects. A bare
                `{"output": "advanced_hls"}` is rejected. Fetch
                `qencode://recipe/hls_abr` (or `audio_outputs` for
                `hls_audio`) before composing.
            vmaf — `distorted` URL of the encoded video; `source` is the
                reference original (encoder v1 is auto-selected).
            video_intelligence — `mode` one of description, categorization,
                moderation, search, custom (NOT `features`). Source must be
                https:// and meet duration minimums (description etc. ≥10s,
                search ≥4s) — check via metadata or tell user if too short.
        Example vmaf entry:
            {
                "output": "vmaf",
                "distorted": "https://example.com/encoded.mp4",
                "destination": {"url": "s3://.../vmaf.json"}
            }
        Example HLS entry (params on `stream[]`, not on the format object):
            {
                "output": "advanced_hls",
                "segment_duration": 6,
                "stream": [{
                    "video_codec": "libx264",
                    "audio_codec": "libfdk_aac",
                    "resolution": 720,
                    "framerate": "30",
                    "keyframe": "60",
                    "optimize_bitrate": 1,
                    "audio_bitrate": 128
                }]
            }
        Example video_intelligence entry:
            {
                "output": "video_intelligence",
                "mode": "description",
                "destination": {"url": "s3://.../vi/"}
            }
    payload: optional opaque string echoed back in callbacks.

`encoder_version` is injected automatically when omitted: `2` by default,
`1` when any output is `vmaf`. Stitch jobs (multi-source `stitch` array)
are not supported here — use `start_encode2_raw` with `encoder_version: 2`
per `qencode://recipe/stitching`.

Other composition defaults in this server's instructions (libfdk_aac,
optimize_bitrate, per-stream ABR params, etc.) still belong in each
`outputs[]` entry — consult the matching recipe via
`search_qencode_docs` + `fetch_qencode_doc` before submitting.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sourceYes
outputsYes
payloadNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
status_urlNo
task_tokenYes
upload_urlNo

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.8/5.0
Behavior4/5

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

Beyond the annotations, it discloses automatic encoder_version injection (2 default, 1 for vmaf), callback payload echo, Qencode schema wrapper behavior, and rejection of bare HLS/DASH output objects. It does not contradict any annotation; it could add a little more on async/job lifecycle, but the annotations already signal mutation and non-idempotence.

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

Conciseness5/5

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

Although long, the description is tightly organized with a clear opening, Args sections, warnings, and examples. Every block addresses a real composition pitfall (e.g., stream[] placement, vmaf distorted semantics, video_intelligence mode names), so the length is justified by tool complexity.

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 3-param tool with no schema descriptions and only sparse annotations, this description is unusually complete: it covers all parameters, conditional requirements, unsupported alternatives, and where to fetch remaining recipe-specific details. The output schema can carry return-value concerns, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries full responsibility and succeeds: it defines source URL schemes, the outputs array shape, the required inner `output` field and its allowed values, per-output required fields, and multiple valid JSON examples. It even clarifies the common `format` vs `output` naming confusion and explains payload as an opaque callback echo string.

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 opening sentence 'Submit a transcoding job' gives a specific verb and resource, and the rest of the description confirms it accepts a source URL and output formats. It also distances itself from start_encode2_raw for stitch jobs, so an agent can tell which transcode entry point to use.

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?

It explicitly states when NOT to use this tool: 'Stitch jobs ... are not supported here — use start_encode2_raw with encoder_version: 2 per qencode://recipe/stitching.' It also tells the agent to consult search_qencode_docs and fetch_qencode_doc for the matching recipe before composing outputs, giving clear procedural guidance.

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.

TDQS

A3.9/5.0
Disambiguation4/5

Most tools are clearly distinct (list_buckets vs list_objects, search vs fetch docs). Minor overlap exists between transcode_video and start_encode2_raw (both submit jobs) and between get_job_status and get_job_status_detailed, but the descriptions explicitly state when to use which, making misselection unlikely.

Naming Consistency4/5

Names overwhelmingly follow verb_noun (create_bucket, list_buckets, get_download_url, transcode_video). A few deviations like start_encode2_raw, wait_for_job, and download_url_to_bucket break the pure pattern, but the convention is still easily predictable.

Tool Count5/5

13 tools is well-scoped for a video encoding platform: bucket management, transcoding submission/status/wait, result retrieval, and docs search/read. Each tool serves a clear purpose without redundancy or bloat.

Completeness4/5

The set covers the main lifecycle: create bucket, ingest via copy, transcode (two entry points), poll status, fetch result, and generate download URLs. Missing cancel/delete operations for jobs and buckets are notable but not critical for core workflows, and the docs tools help fill knowledge gaps.