Skip to main content
Glama

youtube_download_caption

Download an owned YouTube caption track as SRT, TTML, VTT, or SBV to the downloads folder, with ownership verification and no overwrites.

Instructions

Download an owned caption track into /downloads/ as a new file you name with fileName (a plain name, no paths). Formats: srt, ttml, vtt, sbv. With format, the extension must match (.srt, .ttml, .vtt, .sbv). Without format you get the track original; use any of those four extensions. Never overwrites; bytes are not returned, the absolute path written is. Read-only on YouTube: no approval needed; ownership of the video and caption is verified first.

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": {
      "videoId": "<videoId>",
      "captionId": "<captionId>",
      "fileName": "<fileName>"
    },
    "name": "youtube_download_caption"
  }
}

Input Schema

NameRequiredDescriptionDefault
formatNoCaption format to convert to: srt, ttml, vtt, sbv. The fileName extension must match it. Omit for the track original.
videoIdYesYouTube video ID (11 characters), e.g. dQw4w9WgXcQ.
fileNameYesPlain new file name (no path) to write under <state dir>/downloads/; existing files are never overwritten.
captionIdYesCaption track ID, from youtube_list_caption_tracks.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.3.1
    • addedInput schema / properties / captionId / description
      Added value: +"Caption track ID, from youtube_list_caption_tracks."
    • addedInput schema / properties / fileName / description
      Added value: +"Plain new file name (no path) to write under <state dir>/downloads/; existing files are never overwritten."
    • addedInput schema / properties / format / description
      Added value: +"Caption format to convert to: srt, ttml, vtt, sbv. The fileName extension must match it. Omit for the track original."
    • changedInput schema / properties / format / enum
      Previous value: -[
      -  "srt",
      -  "ttml",
      -  "vtt"
      -]New value: +[
      +  "srt",
      +  "ttml",
      +  "vtt",
      +  "sbv"
      +]
    • addedInput schema / properties / videoId / description
      Added value: +"YouTube video ID (11 characters), e.g. dQw4w9WgXcQ."
  2. Changed5 schema fields changedv0.3.0
    • removedInput schema / properties / approvalId
      Removed value: -{
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / confirm
      Removed value: -{
      -  "type": "boolean"
      -}
    • addedInput schema / properties / fileName
      Added value: +{
      +  "maxLength": 120,
      +  "minLength": 1,
      +  "type": "string"
      +}
    • removedInput schema / properties / outputPath
      Removed value: -{
      -  "minLength": 1,
      -  "type": "string"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "videoId",
      -  "captionId",
      -  "outputPath",
      -  "approvalId"
      -]New value: +[
      +  "videoId",
      +  "captionId",
      +  "fileName"
      +]
  3. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

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

Despite annotations only carrying destructiveHint=false, the description adds substantial behavior: never overwrites, bytes are not returned, the absolute written path IS returned, ownership verification happens first, and no approval is required. This is exactly the extra context annotations don't provide.

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 with the core action and destination before the format and overwrite rules. Slightly packed into run-on clauses, but nearly every sentence carries operative information.

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?

No output schema exists, yet the description explains the return value (absolute path, not bytes), the write location, the no-overwrite guarantee, and the auth/ownership behavior — everything an agent needs to call it correctly.

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?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: fileName must be a plain name with no paths, the extension must match format (.srt/.ttml/.vtt/.sbv), and omitting format yields the track original. It reinforces rather than merely repeats the schema.

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 (download) and resource (owned caption track) plus the destination file semantics. Clearly separable from siblings like youtube_list_caption_tracks, youtube_upload_caption and youtube_update_caption.

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?

Tells the agent it operates only on owned video/caption, is read-only on YouTube, and needs no approval, which sets context. It does not explicitly compare against alternatives such as youtube_get_transcript, so there is a minor gap in routing guidance.

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

Deploy Server

Other Tools