Skip to content

Commit 1c3a696

Browse files
therohitdascrhq
andcommitted
docs: document channel/videos sort + members_only across the plugin's API surface
The live /channel/videos (and the list_channel_videos MCP tool) gained an opt-in sort=latest|popular|oldest and an additive members_only on every item. All four places this plugin enumerates that surface now carry it: README tool 8, the SKILL.md routing table + credit-hygiene notes, references/mcp-tools.md and references/rest-api.md. Each one leads with the sharp edge: omitting sort is NOT the same as sort=latest, because the two read different YouTube feeds (uploads playlist ~100/page with Shorts mixed in and members-only excluded, vs the Videos tab ~30/page long-form only with members-only included). Different sets, and ~3.3x the credits to crawl. Per-tab field presence is stated honestly, verified live on @ted / @nasa / @natgeo: tab=streams carries lengthText + publishedTimeText, tab=shorts returns null for both, and the channel-tab feeds null out channelId/channelTitle/channelHandle/index. Docs only — no version bump applied. Co-Authored-By: CRHQ <noreply@crhq.ai>
1 parent 3d6b055 commit 1c3a696

4 files changed

Lines changed: 69 additions & 4 deletions

File tree

‎README.md‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,14 +382,31 @@ Search inside one specific channel for videos matching a query.
382382

383383
### 8. `list_channel_videos`
384384

385-
List a channel's feed, paginated. Use `tab` to choose the uploads feed (default, ~100/page), Shorts, or live streams (~48/page). Ideal for building databases or bulk transcript extraction.
385+
List a channel's feed, paginated. Use `tab` to choose the uploads feed (default, ~100/page), Shorts, or live streams (~48/page), and the optional `sort` to order the Videos tab by latest, popular, or oldest. Ideal for building databases or bulk transcript extraction.
386386

387387
| Parameter | Type | Default | Description |
388388
| -------------- | ------ | ------------ | ------------------------------------ |
389389
| `channel` | string | **required** (first call) | `@handle`, channel URL, or `UC…` ID |
390390
| `tab` | string | `"videos"` | `videos` (uploads), `shorts`, or `streams`. Repeat the same `tab` when paginating. |
391+
| `sort` | string | `null` | `latest`, `popular`, or `oldest`. Omit for the uploads feed. Repeat the same value when paginating. |
391392
| `continuation` | string | `null` | Pagination token |
392393

394+
**Sorting is opt-in, and omitting `sort` is not the same as `sort: "latest"`** — the two read different YouTube feeds:
395+
396+
| | `tab: "videos"`, no `sort` | `tab: "videos"` + any `sort` |
397+
| --- | --- | --- |
398+
| Source | uploads playlist | channel Videos tab |
399+
| Page size | ~100 | ~30 |
400+
| `playlist_info` | populated | `null` |
401+
| Shorts | mixed in | excluded (use `tab: "shorts"`) |
402+
| Members-only videos | excluded | included, flagged `members_only: true` |
403+
404+
They are different *sets*, not one list in two orders. A sorted page holds ~30 items instead of ~100, so crawling a whole catalogue with `sort` set costs roughly 3.3x the pages and 3.3x the credits — omit `sort` when you just want newest-first. `tab: "shorts"` and `tab: "streams"` read the same feed either way, so there `sort` only reorders.
405+
406+
Every item carries **`members_only`**: `true` only when YouTube badges the video "Members only", and those items have no `viewCountText`. It is always `false` on the uploads feed, on `tab: "shorts"`, and on playlists.
407+
408+
Items from `tab: "streams"` carry `lengthText` and `publishedTimeText` (for example `Streamed 2 years ago`, or `LIVE` and a watching count while live). `tab: "shorts"` returns `null` for both — YouTube's Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.
409+
393410
**Cost:** 1 credit per page.
394411

395412
### 9. `list_channel_playlists`

‎skills/youtube/SKILL.md‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ credits, no card.
5959
| What a creator posted recently | `get_channel_latest_videos` | `GET /youtube/channel/latest` | **free** |
6060
| Find something inside one channel | `search_channel_videos` | `GET /youtube/channel/search` | 1 / page |
6161
| A channel's entire upload history, Shorts, or live streams | `list_channel_videos` | `GET /youtube/channel/videos` | 1 / page |
62+
| A channel's back catalogue ranked by views, or walked oldest-first | `list_channel_videos` + `sort` | `GET /youtube/channel/videos?sort=` | 1 / page |
6263
| The playlists on a channel | `list_channel_playlists` | `GET /youtube/channel/playlists` | 1 / page |
6364
| A channel's community posts | `list_channel_posts` | `GET /youtube/channel/posts` | 1 / page |
6465
| A channel's curated Home/podcasts/releases shelves | `get_channel_sections` | `GET /youtube/channel/sections` | 1 |
@@ -94,6 +95,12 @@ Successful calls cost 1 credit unless a tool states otherwise below. Failed and
9495

9596
- **`get_channel_latest_videos` is free.** Reach for it first for anything about recent
9697
uploads. Use `list_channel_videos` only when the user genuinely wants the whole catalogue.
98+
- `list_channel_videos` takes an optional `sort` (`latest` / `popular` / `oldest`). It is opt-in,
99+
and omitting it is **not** the same as `sort: "latest"`: omitted reads the uploads playlist
100+
(~100/page, Shorts mixed in, members-only videos excluded), any value reads the channel Videos
101+
tab (~30/page, long-form only, members-only videos included and flagged `members_only`).
102+
Different sets, not one list in two orders, and ~3.3x the credits to crawl — so omit `sort` for
103+
newest-first, and reach for it only when the user wants most-viewed or oldest-first.
97104
- **Search, then transcribe selectively.** Transcribing a whole page of search results is the
98105
single most common way to waste credits. Pick the best 2-3 hits and pull those.
99106
- **Search inside a channel** with `search_channel_videos` rather than listing every video and

‎skills/youtube/references/mcp-tools.md‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,31 @@ Always better than listing a whole channel and filtering client-side.
159159
## `list_channel_videos`: 1 credit per page
160160

161161
A channel's feed, paginated. Use `tab` to choose the uploads feed (default, ~100/page), Shorts,
162-
or live streams (~48/page).
162+
or live streams (~48/page), and the optional `sort` to order the Videos tab.
163163

164164
| Parameter | Type | Default | Notes |
165165
| --- | --- | --- | --- |
166166
| `channel` | string | **required** (first call) | `@handle`, channel URL, or `UC…` ID |
167167
| `tab` | string | `"videos"` | `videos` (uploads), `shorts`, or `streams`. Repeat the same `tab` when paginating. |
168+
| `sort` | string | `null` | `latest`, `popular`, or `oldest`. Omit for the uploads feed. Repeat the same value when paginating. |
168169
| `continuation` | string | `null` | Pagination token |
169170

171+
**Sorting is opt-in, and omitting `sort` is not the same as `sort: "latest"`** — the two read different YouTube feeds:
172+
173+
| | `tab: "videos"`, no `sort` | `tab: "videos"` + any `sort` |
174+
| --- | --- | --- |
175+
| Source | uploads playlist | channel Videos tab |
176+
| Page size | ~100 | ~30 |
177+
| `playlist_info` | populated | `null` |
178+
| Shorts | mixed in | excluded (use `tab: "shorts"`) |
179+
| Members-only videos | excluded | included, flagged `members_only: true` |
180+
181+
They are different *sets*, not one list in two orders. A sorted page holds ~30 items instead of ~100, so crawling a whole catalogue with `sort` set costs roughly 3.3x the pages and 3.3x the credits — omit `sort` when you just want newest-first. `tab: "shorts"` and `tab: "streams"` read the same feed either way, so there `sort` only reorders.
182+
183+
Every item carries **`members_only`**: `true` only when YouTube badges the video "Members only", and those items have no `viewCountText`. It is always `false` on the uploads feed, on `tab: "shorts"`, and on playlists.
184+
185+
Items from `tab: "streams"` carry `lengthText` and `publishedTimeText` (for example `Streamed 2 years ago`, or `LIVE` and a watching count while live). `tab: "shorts"` returns `null` for both — YouTube's Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.
186+
170187
Only when the user genuinely wants the whole catalogue. For recent uploads use
171188
`get_channel_latest_videos` (free); to find something specific use `search_channel_videos`.
172189

‎skills/youtube/references/rest-api.md‎

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,20 +179,43 @@ Returns exact `viewCount` and ISO `published` timestamps.
179179
### Channel videos (paginated): 1 credit per page
180180

181181
```http
182-
GET /youtube/channel/videos?channel=@NASA # first page, ~100 videos
182+
GET /youtube/channel/videos?channel=@NASA # first page, ~100 videos
183183
GET /youtube/channel/videos?channel=@NASA&tab=shorts
184-
GET /youtube/channel/videos?continuation=TOKEN # subsequent pages
184+
GET /youtube/channel/videos?channel=@NASA&sort=popular # Videos tab, most-viewed first, ~30
185+
GET /youtube/channel/videos?continuation=TOKEN&sort=popular # repeat tab AND sort
185186
```
186187

187188
| Param | Required | Default | Values |
188189
| --- | --- | --- | --- |
189190
| `channel` | conditional | - | first page only |
190191
| `tab` | no | `videos` | `videos` (uploads), `shorts`, `streams`. Repeat the same `tab` when paginating. |
192+
| `sort` | no | - | `latest`, `popular`, `oldest`. Omit for the uploads feed. Repeat the same value when paginating. |
191193
| `continuation` | conditional | - | subsequent pages |
192194

193195
Provide **exactly one** of `channel` or `continuation`. The response carries
194196
`continuation_token` and `has_more`.
195197

198+
**`sort` is opt-in, and omitting it is not the same as `sort=latest`** — the two read different
199+
YouTube feeds:
200+
201+
| | `tab=videos`, no `sort` | `tab=videos` + any `sort` |
202+
| --- | --- | --- |
203+
| Source | uploads playlist | channel Videos tab |
204+
| Page size | ~100 | ~30 |
205+
| `playlist_info` | populated | `null` |
206+
| Shorts | mixed in | excluded (use `tab=shorts`) |
207+
| Members-only videos | excluded | included, flagged `members_only: true` |
208+
209+
Different *sets*, not one list in two orders — and a sorted crawl costs ~3.3x the pages and
210+
credits, so omit `sort` for the cheapest newest-first crawl. `tab=shorts` / `tab=streams` read
211+
the same feed either way; there `sort` only reorders.
212+
213+
Every item carries `members_only` (`true` only on YouTube's "Members only" badge; those items
214+
have no `viewCountText`). `tab=streams` items carry `lengthText` and `publishedTimeText` (for
215+
example `Streamed 2 years ago`); `tab=shorts` returns `null` for both, because YouTube's Shorts
216+
grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle`
217+
and `index` are `null`.
218+
196219
### Search within a channel: 1 credit per page
197220

198221
```http
@@ -283,6 +306,7 @@ Free endpoints still require an active plan with at least one credit available.
283306
| `q` | 1-200 characters |
284307
| `type` (search) | `video`, `channel`, `playlist`, `movie` |
285308
| `tab` (channel/videos) | `videos`, `shorts`, `streams` |
309+
| `sort` (channel/videos) | `latest`, `popular`, `oldest` (omit for the uploads feed) |
286310
| `tab` (channel/sections) | `featured`, `podcasts`, `releases` |
287311

288312
## Worked example: research workflow

0 commit comments

Comments
 (0)