Skip to main content
Glama

BulkTranscripts YouTube

List a playlist's videos

get_playlist_videos
Read-onlyIdempotent

List every video in a YouTube playlist, in playlist order (courses and series keep their sequence). Accepts a playlist URL or bare playlist id (13, 18, 26 or 34 characters — all valid). Public and unlisted playlists only: YouTube reports a private playlist as nonexistent (error playlist_private) — ask the owner to set Visibility to Unlisted. Costs 1 credit. Chain into get_transcripts to bulk-extract.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMax videos to list, default 100.
playlistYesPlaylist URL or id (the list= value).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYes
titleNo
billingYes
resultsYes
has_moreNoTrue when the listing stopped at `limit`.
playlistYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "billing": {
      +      "properties": {
      +        "creditsCharged": {
      +          "description": "Credits this call cost (0 on cache hits).",
      +          "type": "integer"
      +        },
      +        "enabled": {
      +          "type": "boolean"
      +        },
      +        "freeLimit": {
      +          "type": "integer"
      +        },
      +        "granted": {
      +          "type": "integer"
      +        },
      +        "kind": {
      +          "description": "anon (free tier), license (paid) or admin.",
      +          "type": "string"
      +        },
      +        "remaining": {
      +          "description": "Credits left on this account.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "unlimited": {
      +          "type": "boolean"
      +        },
      +        "used": {
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "enabled"
      +      ],
      +      "type": "object"
      +    },
      +    "count": {
      +      "type": "integer"
      +    },
      +    "has_more": {
      +      "description": "True when the listing stopped at `limit`.",
      +      "type": "boolean"
      +    },
      +    "playlist": {
      +      "type": "string"
      +    },
      +    "results": {
      +      "items": {
      +        "properties": {
      +          "channel": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "channel_url": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "duration": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "published": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "title": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "type": {
      +            "enum": [
      +              "video",
      +              "channel",
      +              "playlist"
      +            ],
      +            "type": "string"
      +          },
      +          "url": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "view_count": {
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "url"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "title": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "required": [
      +    "playlist",
      +    "results",
      +    "count",
      +    "billing"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, and open-world behavior; the description adds value by disclosing the playlist-ordering guarantee, private-playlist error behavior (playlist_private), and the 1-credit cost. It does not discuss pagination or the limit behavior, but the schema documents the limit and the output schema covers the response.

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?

Every sentence earns its place: purpose/order, accepted input formats, privacy constraint and remediation, credit cost, and downstream workflow. It is front-loaded with the core behavior and has no redundant filler.

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 simple read-only list tool, the description covers input, ordering, privacy edge case, cost, and next-step chaining, and the output schema covers return structure. The only notable gap is that 'every video' is not reconciled with the schema's default/max limit, though the schema itself provides that information.

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 the baseline is a 3; the description adds value beyond the schema by specifying that a bare playlist id of 13, 18, 26, or 34 characters is accepted and that a URL or the list= value works. The limit parameter is left to the schema, which is acceptable at full coverage.

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?

Opens with a specific verb and resource: 'List every video in a YouTube playlist, in playlist order,' which makes the operation and its ordering behavior immediately clear. This distinguishes it from sibling tools like get_channel_videos or get_latest_videos by focusing on the playlist resource. The phrase 'every' is a little strong given the optional limit, but the core purpose is unambiguous.

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 practical use context: it accepts playlist URLs or bare IDs, requires public/unlisted visibility, explains what to do about private playlists, and recommends chaining into get_transcripts for bulk extraction. It does not explicitly list alternative sibling tools, but the playlist-specific scope plus sibling names makes selection clear.

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