Skip to content

Commit b2a1471

Browse files
therohitdascrhq
andcommitted
docs: channel/videos sort + members_only across the plugin's API surface
All four places this repo enumerates the endpoint now carry it: README tool 8, the SKILL.md routing table plus credit-hygiene notes, references/mcp-tools.md and references/rest-api.md. Each leads with the same framing: existing calls are untouched, and sort=latest is a different view (the Videos tab, Shorts excluded) rather than a re-ordering of the uploads feed. Verified empirically on three channels: 0 of the Shorts a channel publishes appear in any sorted feed, while 43/48 (@ted), 12/40 (@nasa) and 30/48 (@natgeo) appear in the unsorted uploads feed. Per-tab field presence recorded honestly: tab=streams carries lengthText and publishedTimeText, tab=shorts returns null for both, and the channel-tab feeds null out channelId/channelTitle/channelHandle/index. Docs only, no version bump. Co-Authored-By: CRHQ <noreply@crhq.ai>
1 parent 3d6b055 commit b2a1471

4 files changed

Lines changed: 68 additions & 4 deletions

File tree

‎README.md‎

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,14 +382,33 @@ 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+
Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
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+
Sort reads ~3.3x more pages (~30/page vs ~100), so it costs ~3.3x credits. Use it when you need ordering; most integrations don't.
405+
406+
`tab: "shorts"` and `tab: "streams"` read the same feed either way, so there `sort` only reorders.
407+
408+
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.
409+
410+
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, because YouTube's Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.
411+
393412
**Cost:** 1 credit per page.
394413

395414
### 9. `list_channel_playlists`

‎skills/youtube/SKILL.md‎

Lines changed: 5 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,10 @@ 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`). Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
99+
Omitted reads the uploads playlist (~100/page, Shorts mixed in, members-only videos excluded);
100+
any value reads the channel Videos tab (~30/page, long-form only, members-only videos included
101+
and flagged `members_only`). They are different sets, not one list in two orders. A sorted page holds ~30 items instead of ~100, so paging 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.
97102
- **Search, then transcribe selectively.** Transcribing a whole page of search results is the
98103
single most common way to waste credits. Pick the best 2-3 hits and pull those.
99104
- **Search inside a channel** with `search_channel_videos` rather than listing every video and

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

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,33 @@ 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+
Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
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 paging 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.
182+
183+
`tab: "shorts"` and `tab: "streams"` read the same feed either way, so there `sort` only reorders.
184+
185+
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.
186+
187+
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, because YouTube's Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`, `channelHandle` and `index` are `null`.
188+
170189
Only when the user genuinely wants the whole catalogue. For recent uploads use
171190
`get_channel_latest_videos` (free); to find something specific use `search_channel_videos`.
172191

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

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,20 +179,40 @@ 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+
Existing calls are untouched: omitting sort returns the uploads feed exactly as before. sort=latest is a different view (YouTube's Videos tab, Shorts excluded), not a re-ordering of it.
199+
200+
| | `tab=videos`, no `sort` | `tab=videos` + any `sort` |
201+
| --- | --- | --- |
202+
| Source | uploads playlist | channel Videos tab |
203+
| Page size | ~100 | ~30 |
204+
| `playlist_info` | populated | `null` |
205+
| Shorts | mixed in | excluded (use `tab=shorts`) |
206+
| Members-only videos | excluded | included, flagged `members_only: true` |
207+
208+
They are different sets, not one list in two orders. A sorted page holds ~30 items instead of ~100, so paging 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` / `tab=streams` read the same feed either way; there `sort` only reorders.
209+
210+
Every item carries `members_only`, `true` only when YouTube badges it "Members only", and those
211+
items have no `viewCountText`. `tab=streams` items carry `lengthText` and `publishedTimeText`
212+
(for example `Streamed 2 years ago`); `tab=shorts` returns `null` for both, because YouTube's
213+
Shorts grid publishes neither. On the channel-tab feeds, `channelId`, `channelTitle`,
214+
`channelHandle` and `index` are `null`.
215+
196216
### Search within a channel: 1 credit per page
197217

198218
```http
@@ -283,6 +303,7 @@ Free endpoints still require an active plan with at least one credit available.
283303
| `q` | 1-200 characters |
284304
| `type` (search) | `video`, `channel`, `playlist`, `movie` |
285305
| `tab` (channel/videos) | `videos`, `shorts`, `streams` |
306+
| `sort` (channel/videos) | `latest`, `popular`, `oldest` (omit for the uploads feed) |
286307
| `tab` (channel/sections) | `featured`, `podcasts`, `releases` |
287308

288309
## Worked example: research workflow

0 commit comments

Comments
 (0)