Skip to main content
Glama

tiktok.download_video

Download a TikTok video so the user or agent can save and reuse it.

Provide either video_id or video_url, not both. The file is saved to account file storage. The response includes file_url for API users and download_code for agents to run vee3-get-file.

Cost = 10 tokens.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
qualityNoVideo quality to download. 'standard' is default quality; 'hd' is high definition. Only one selected quality is downloaded.standard
video_idNoTikTok video id.
file_nameNoOptional account-relative storage path for the video. If omitted, the file is stored under downloads/ with a generated name.
video_urlNoTikTok video URL.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
commandNoSuggested terminal command for downloading to a local path.
qualityNoEcho of the requested video quality (standard or hd).
file_urlNoSigned download URL from account file storage.
file_nameNoAccount-relative path where the file was stored.
expires_atNoISO 8601 timestamp when the download code can no longer be resolved (60 minutes after reserve).
download_idNoStable identifier for the reserved agent download session.
content_typeNoMIME type of the downloaded file.
download_codeNoShort code to pass to the @vee3/cli `vee3-get-file` command.
retained_untilNoISO 8601 timestamp when account storage retention expires.
file_size_bytesNoDownloaded file size in bytes.
install_commandNoOne-time command to install the Vee3 CLI (`npm install -g @vee3/cli`). On networks that inspect HTTPS, install may require Node 22.15+ with NODE_OPTIONS=--use-system-ca.
troubleshootingNoWhat to do if installation or downloading fails: re-read this tool's description via meta-tools.describe for setup and troubleshooting steps.
tiktok_download_idNoUnique TikTok download operation identifier, prefix td_.

Schema Changelog

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

  1. Changed20 schema fields changed
    • addedInput schema / properties / file_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "maxLength": 255,
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Optional account-relative storage path for the video. If omitted, the file is stored under downloads/ with a generated name.",
      +  "title": "File Name"
      +}
    • removedInput schema / properties / include_hdplay
      Removed value: -{
      -  "default": false,
      -  "description": "When true, also download the high-definition hdplay variant. Defaults to false.",
      -  "title": "Include Hdplay",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / quality
      Added value: +{
      +  "default": "standard",
      +  "description": "Video quality to download. 'standard' is default quality; 'hd' is high definition. Only one selected quality is downloaded.",
      +  "enum": [
      +    "standard",
      +    "hd"
      +  ],
      +  "title": "Quality",
      +  "type": "string"
      +}
    • removedInput schema / properties / return_mode
      Removed value: -{
      -  "default": "both",
      -  "description": "How to deliver the result. 'url' returns signed download URLs only. 'file' returns inline base64 when the file is under 10 MB. 'both' returns signed URLs plus inline base64 when small enough.",
      -  "title": "Return Mode",
      -  "type": "string"
      -}
    • addedOutput schema / properties / command
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Suggested terminal command for downloading to a local path.",
      +  "title": "Command"
      +}
    • addedOutput schema / properties / content_type
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "MIME type of the downloaded file.",
      +  "title": "Content Type"
      +}
    • addedOutput schema / properties / download_code
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Short code to pass to the @vee3/cli `vee3-get-file` command.",
      +  "title": "Download Code"
      +}
    • changedOutput schema / properties / download_id / description
      Previous value: -"Unique download identifier, prefix td_."New value: +"Stable identifier for the reserved agent download session."
    • addedOutput schema / properties / expires_at
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO 8601 timestamp when the download code can no longer be resolved (60 minutes after reserve).",
      +  "title": "Expires At"
      +}
    • addedOutput schema / properties / file_name
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Account-relative path where the file was stored.",
      +  "title": "File Name"
      +}
    • addedOutput schema / properties / file_size_bytes
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "integer"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Downloaded file size in bytes.",
      +  "title": "File Size Bytes"
      +}
    • addedOutput schema / properties / file_url
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Signed download URL from account file storage.",
      +  "title": "File Url"
      +}
    • removedOutput schema / properties / hdplay
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Signed download URL for the high-definition video when include_hdplay is true.",
      -  "title": "Hdplay"
      -}
    • addedOutput schema / properties / install_command
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "One-time command to install the Vee3 CLI (`npm install -g @vee3/cli`). On networks that inspect HTTPS, install may require Node 22.15+ with NODE_OPTIONS=--use-system-ca.",
      +  "title": "Install Command"
      +}
    • removedOutput schema / properties / play
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Signed download URL for the standard-quality video.",
      -  "title": "Play"
      -}
    • addedOutput schema / properties / quality
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Echo of the requested video quality (standard or hd).",
      +  "title": "Quality"
      +}
    • addedOutput schema / properties / retained_until
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "ISO 8601 timestamp when account storage retention expires.",
      +  "title": "Retained Until"
      +}
    • removedOutput schema / properties / return_mode
      Removed value: -{
      -  "anyOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ],
      -  "default": null,
      -  "description": "Echo of the requested delivery mode.",
      -  "title": "Return Mode"
      -}
    • addedOutput schema / properties / tiktok_download_id
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "Unique TikTok download operation identifier, prefix td_.",
      +  "title": "Tiktok Download Id"
      +}
    • addedOutput schema / properties / troubleshooting
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null,
      +  "description": "What to do if installation or downloading fails: re-read this tool's description via meta-tools.describe for setup and troubleshooting steps.",
      +  "title": "Troubleshooting"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description discloses key behaviors: the file is saved to account file storage, the response includes file_url and download_code, and the cost is 10 tokens. It also notes the either/or constraint. This provides meaningful behavioral transparency beyond the tool name, though it omits details like error handling or permissions.

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?

The description is compact, with four sentences covering purpose, parameter usage, storage, and cost. Every sentence adds useful information with no filler or repetition of schema details.

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 download tool with an existing output schema, the description provides sufficient context: it explains storage behavior, response fields, and the either-or requirement. It does not detail error cases or prerequisites, but these are minor given the schema and output schema richness. Sibling tiktok tools help disambiguate scope.

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% with descriptions for all four parameters. The description adds the important mutual-exclusivity rule for video_id and video_url, which is not in the schema. It also explains the purpose of the output (file_url/download_code) relative to how the downloaded file is used.

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 clearly states 'Download a TikTok video so the user or agent can save and reuse it' with a specific verb and resource, and the purpose of saving/reuse. It distinguishes itself from sibling tools like tiktok.download_music by focusing on video downloads.

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?

The description gives clear usage context: download for saving/reuse, and explicitly instructs 'Provide either video_id or video_url, not both,' which is a strong usage guideline. However, it does not mention alternatives or when not to use it, such as for music downloads.

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.