youtube-kit
PYPI · YOUTUBE-KIT
YouTube CLI and MCP server: search and read public YouTube, and manage your own channels.
Available components
Last scanned (8 hours ago)
Scores higher than 67% of PyPI servers
Category Entertainment and Games
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs uv_build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 2 of 44 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to eukosh/youtube-kit). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 3 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability66
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 7179 tokens (~140/item across 51 items; 51 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management20
- Stability observed for 6 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 8 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 52 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 24 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.
- 22 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 10 to 13. That category is still filling its 30-day observation window: 3 days of observed history at the previous scan, 4 at this one. The score rises as the window fills, whether or not the server changes.
- 21 Oct 26 0
- Package version: 0.7.0 → 0.7.1 functional
- 20 Oct 26 0
- Schema quality: 5917 → 7165 ▼ functional
- Package version: 0.6.0 → 0.7.0 functional
- 19 Oct 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 0 to 3. That category is still filling its 30-day observation window: 0 days of observed history at the previous scan, 1 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Oct 26 65
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 24 Oct 2026 · Analysed pypi/youtube-kit@0.7.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | eukosh/youtube-kit |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/eukosh/youtube-kit/.github/workflows/release.yml@refs/heads/main |
| Rekor log index | 3355375929 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:fccef84f22cbfaa02bc7d2569cad639800d1c228c8982fe7d9733ee6600a32b7 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | uv_build |
Background: Why install scripts are a supply-chain risk →
Dependencies 44 packages
| Packages resolved | 44 |
|---|---|
| Stale | 2 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
add_section Add Section ~169
Add a section to your channel's home page. A channel has at most 10. Quota: 52 units.
| Name | Type | Req | Description |
|---|---|---|---|
| channels | – | – | Channels to show: UC… IDs, @handles, or channel URLs. |
| kind | string | yes | What the section shows. single-playlist needs one playlist, multiple-playlists several playlists and a title, multiple-channels channels and a title. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlists | – | – | Playlist IDs or URLs to show. |
| position | – | – | 0-based position on the home page. Added at the end when omitted. |
| title | – | – | Section title, for the multiple-playlists and multiple-channels kinds. |
| Name | Type | Req | Description |
|---|---|---|---|
| channel_ids | array | – | – |
| id | string | yes | – |
| playlist_ids | array | – | – |
| position | – | – | – |
| title | – | – | – |
| type | string | yes | – |
No examples provided.
add_video_to_playlist Add Video To Playlist ~102
Add a video to a playlist on the authorized user's channel. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlist | string | yes | Playlist ID or URL. |
| position | – | – | 0-based position in the playlist. Appends to the end when omitted. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | – |
| playlist_item_id | string | yes | – |
| position | integer | yes | – |
| video_id | string | yes | – |
No examples provided.
approve_comments Approve Comments ~82
Publish comments on your videos that are held for review or marked as likely spam. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| comments | array | yes | Comment IDs or links. 50 quota units per 50 comments. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| authors_banned | boolean | – | – |
| comment_ids | array | yes | – |
| status | string | yes | – |
No examples provided.
create_playlist Create Playlist ~118
Create a playlist on the authorized user's channel. Left out, the language is copied from your most recent public upload, as video uploads do. Quota: 57 units.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | – | Playlist description. |
| language | – | – | Language of the title and description, e.g. en-US. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| privacy | string | – | Privacy status. |
| title | string | yes | Playlist title. |
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | – | – | – |
| description | – | – | – |
| id | string | yes | – |
| item_count | – | – | – |
| language | – | – | Language of the title and description, e.g. en-US. |
| privacy | – | – | – |
| published_at | – | – | – |
| title | string | yes | – |
| url | string | yes | – |
No examples provided.
delete_caption Delete Caption ~139
Permanently delete a caption track from one of your videos. Without confirm, nothing is deleted and the error describes the track. Quota: 102 units.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | – | – | The track's ID, passed only after the user has approved deleting this track. |
| language | string | yes | Language of the track, e.g. en or en-US. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| name | – | – | Name of the track, when the video has several in that language. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| already_gone | boolean | – | Nothing to delete: it didn't exist or was already deleted. |
| id | string | yes | – |
| kind | string | yes | – |
No examples provided.
delete_comment Delete Comment ~128
Permanently delete one of your own comments or replies. Deleting a top-level comment deletes its replies. Others' comments on your videos can't be deleted, only rejected, which hides them. Without confirm, nothing is deleted and the error describes the comment. Quota: 52 units.
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | yes | Comment ID or link. |
| confirm | – | – | The comment ID again, passed only after the user has approved deleting this comment. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| already_gone | boolean | – | Nothing to delete: it didn't exist or was already deleted. |
| id | string | yes | – |
| kind | string | yes | – |
No examples provided.
delete_playlist Delete Playlist ~106
Permanently delete one of your playlists. The videos in it are not affected. Without confirm, nothing is deleted and the error describes the playlist. Quota: 52 units.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | – | – | The playlist ID again, passed only after the user has approved deleting this playlist. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlist | string | yes | Playlist ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| already_gone | boolean | – | Nothing to delete: it didn't exist or was already deleted. |
| id | string | yes | – |
| kind | string | yes | – |
No examples provided.
delete_section Delete Section ~79
Delete a section from your channel's home page. Its playlists and videos are not affected. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| section | string | yes | Section ID, as listed for your channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| already_gone | boolean | – | Nothing to delete: it didn't exist or was already deleted. |
| id | string | yes | – |
| kind | string | yes | – |
No examples provided.
delete_video Delete Video ~152
Permanently delete one of your videos. Only recent, little-watched videos can be deleted here: by default at most 100 views and, if public, uploaded within the last 7 days (the limits are set in the toolkit's config file). Anything else must be deleted in YouTube Studio. Without confirm, nothing is deleted and the error describes the video. Quota: 52 units.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | – | – | The video ID again, passed only after the user has approved deleting this video. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| already_gone | boolean | – | Nothing to delete: it didn't exist or was already deleted. |
| id | string | yes | – |
| kind | string | yes | – |
No examples provided.
edit_comment Edit Comment ~79
Replace the text of one of your own comments or replies. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | yes | Comment ID or link. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| text | string | yes | The new text. |
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | yes | – |
| author_channel_id | – | – | – |
| id | string | yes | – |
| likes | – | – | – |
| parent_id | – | – | Replies only: the comment replied to. |
| published_at | string | yes | – |
| reply_count | – | – | Top-level comments only. |
| status | – | – | Moderation status, where YouTube reports it. |
| text | string | yes | – |
| updated_at | – | – | – |
| video_id | – | – | – |
No examples provided.
get_analytics Get Analytics ~636
YouTube Analytics for your channel: totals, or rows broken down by one dimension. Data for the last two or three days is incomplete, so recent rows keep growing. Uses the separate YouTube Analytics API and its quota; enable it in the same Google Cloud project. Quota: no YouTube Data API units.
| Name | Type | Req | Description |
|---|---|---|---|
| by | – | – | Break the numbers down by this dimension; its column is named as given here. Omit for totals. By month, the range widens to whole months. By elapsed: the audience retention of exactly one video, a ro… |
| content_type | – | – | Only long-form videos (videoOnDemand), shorts, or live streams (liveStream), as the content-type breakdown names them. Not by elapsed. |
| country | – | – | Only viewers in this country, e.g. US. Not by elapsed. |
| limit | – | – | Maximum number of rows. Breaking down by video returns at most 200, 25 by default; by traffic-source-detail, at most 25. Other breakdowns return every row by default. |
| metrics | – | – | Metric names from https://developers.google.com/youtube/analytics/metrics, e.g. views, estimatedMinutesWatched, subscribersGained. Defaults to views, watch time, average view duration, likes, comment… |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| since | – | – | First day, inclusive: 2026-01-01, or 90d / 4w before until. Defaults to 28 days before until. |
| sort | – | – | Metric or dimension to sort by; prefix with - for descending, e.g. -views. Defaults to chronological by day, month or elapsed, and to the first metric, descending, by anything else. |
| traffic_source | – | – | The source to break down by traffic-source-detail, as the traffic-source breakdown names it, e.g. YT_SEARCH. Only with that breakdown. |
| until | – | – | Last day, inclusive: 2026-01-31, or 7d / 1w ago. Defaults to today. |
| videos | – | – | Only these videos (IDs or URLs). |
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | yes | Dimension first (if any), then the metrics, in request order. |
| rows | array | yes | – |
| since | string | yes | – |
| until | string | yes | – |
No examples provided.
get_channel Get Channel ~79
Channel metadata, statistics, and uploads playlist ID. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | – | – | UC… channel ID, @handle, or channel URL. Omit for your own channel. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| country | – | – | – |
| description | string | yes | – |
| handle | – | – | – |
| id | string | yes | – |
| published_at | string | yes | – |
| stats | – | – | – |
| title | string | yes | – |
| uploads_playlist_id | – | – | – |
| url | string | yes | – |
No examples provided.
get_impressions Get Impressions ~273
Thumbnail impressions and click-through rate for your channel, which YouTube Analytics doesn't offer. They come from YouTube's daily bulk reports. The first call asks YouTube to start making them: the first ones arrive within two days and cover the 30 days before. YouTube keeps daily reports for 60 days, those first 30 days for 30. ctr is clicks per impression: 0.05 is 5%. Uses the YouTube Reporting API; enable it in the same Google Cloud project. Quota: no YouTube Data API units.
| Name | Type | Req | Description |
|---|---|---|---|
| by | – | – | Break the numbers down by day or by video. Omit for totals. |
| limit | – | – | Maximum number of rows by video, most impressions first. 25 by default. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| since | – | – | First day, inclusive: 2026-01-01, or 90d / 4w before until. Defaults to 28 days before until. |
| until | – | – | Last day, inclusive: 2026-01-31, or 7d / 1w ago. Defaults to today. |
| videos | – | – | Only these videos (IDs or URLs). |
| Name | Type | Req | Description |
|---|---|---|---|
| columns | array | yes | Dimension first (if any), then the metrics, in request order. |
| missing_days | array | yes | Days YouTube has no report for: the last two, and any outside what it keeps. |
| note | – | – | – |
| rows | array | yes | – |
| since | string | yes | – |
| until | string | yes | – |
No examples provided.
get_my_ratings Get My Ratings ~84
Whether the authorized user liked or disliked each video. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| videos | array | yes | Video IDs or URLs. Fetched in batches of 50, 1 quota unit per batch. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_playlists Get Playlists ~95
Metadata of one or more playlists: title, description, privacy, and item count. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlists | array | yes | Playlist IDs or URLs with a list= parameter. Fetched in batches of 50, 1 quota unit per batch. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
get_processing_status Get Processing Status ~149
Whether YouTube has finished processing one of your uploads. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| timeout | integer | – | Seconds to wait at most. Callers that can't block for long should wait briefly and check again. |
| video | string | yes | Video ID or URL. |
| wait | boolean | – | Keep checking every 10 seconds (1 quota unit each) until processing ends, reporting progress when YouTube gives it. If it hasn't ended within timeout, that's a timeout error, so a script can chain th… |
| Name | Type | Req | Description |
|---|---|---|---|
| failure_reason | – | – | – |
| parts_processed | – | – | – |
| parts_total | – | – | – |
| status | string | yes | – |
| time_left_ms | – | – | – |
| video_id | string | yes | – |
No examples provided.
get_transcript Get Transcript ~204
What is said in one of your videos, from its captions, including the ones YouTube generates. YouTube lets only a video's owner download its captions. Of several tracks in a language, one YouTube is serving is preferred over one it failed to process, then a published one you wrote over YouTube's. Quota: 252 units.
| Name | Type | Req | Description |
|---|---|---|---|
| format | string | – | text: paragraphs of about 30 seconds, each starting with its [m:ss] time. srt or vtt: the caption file itself. |
| language | – | – | Caption language, e.g. en or en-US. Omit for the language spoken in the video. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| translate_to | – | – | Machine-translate the captions into this language, e.g. de. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| caption_id | string | yes | – |
| format | string | yes | – |
| kind | string | yes | – |
| language | string | yes | – |
| text | string | yes | – |
| translated_to | – | – | Language YouTube machine-translated the track into. |
| video_id | string | yes | – |
No examples provided.
get_videos Get Videos ~113
Full metadata, statistics, and status for one or more videos. Videos that don't exist or aren't visible to you are left out of the result; if none are found, that's a not-found error. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| videos | array | yes | Video IDs or URLs. Fetched in batches of 50, 1 quota unit per batch. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
hold_comments Hold Comments ~76
Hide comments on your videos until you review them. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| comments | array | yes | Comment IDs or links. 50 quota units per 50 comments. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| authors_banned | boolean | – | – |
| comment_ids | array | yes | – |
| status | string | yes | – |
No examples provided.
list_activities List Activities ~153
A channel's recent activity feed (uploads, playlist additions, and the like). Quota: 1 unit per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | – | – | UC… channel ID, @handle, or channel URL. Omit for your own channel. |
| limit | integer | – | Maximum number of activities. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| page_token | – | – | Continue from a previous result's next_page_token. |
| since | – | – | Only activity at or after this date or datetime (2026-01-01), or this long ago (90d, 4w). |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
list_captions List Captions ~93
A video's caption tracks: language, name, and whether YouTube generated them from the audio. Works on any public video, though only the owner can download a transcript. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_comments List Comments ~180
Top-level comments on a video, or on all of your channel's videos. Quota: 1 unit per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of comments. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| order | string | – | Newest first, or most relevant first. |
| page_token | – | – | Continue from a previous result's next_page_token. |
| search | – | – | Only comments containing these words. |
| status | string | – | Moderation status to list; spam is what YouTube flagged as likely spam. Anything but published is only visible on your own videos. YouTube can't list rejected comments. |
| video | – | – | Video ID or URL. Omit for every video on your channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
list_my_channels List My Channels ~60
Channels the user is logged in to, and which one is the default. Operations on the user's own channel work on the default unless told to use another. Reads stored logins only; makes no API calls. Quota: no YouTube Data API units.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_playlist_items List Playlist Items ~123
Videos in a playlist, in playlist order. To list everything a channel has uploaded, pass the channel's uploads_playlist_id. Quota: 1 unit per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of entries. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| page_token | – | – | Continue from a previous result's next_page_token. |
| playlist | string | yes | Playlist ID or a URL with a list= parameter. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
list_playlists List Playlists ~113
A channel's playlists. Quota: 1 unit per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | – | – | UC… channel ID, @handle, or channel URL. Omit for your own channel, including private playlists. |
| limit | integer | – | Maximum number of playlists. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| page_token | – | – | Continue from a previous result's next_page_token. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
list_replies List Replies ~110
Replies to a top-level comment. Quota: 1 unit per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | yes | Comment ID or link. A reply's ID or link lists its whole thread. |
| limit | integer | – | Maximum number of replies. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| page_token | – | – | Continue from a previous result's next_page_token. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
list_sections List Sections ~78
The sections on a channel's home page. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | – | – | UC… channel ID, @handle, or channel URL. Omit for your own channel. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_subscriptions List Subscriptions ~109
Channels the authorized user is subscribed to. Quota: 1 unit per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of subscriptions. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| order | string | – | Alphabetical, by relevance, or by activity (unread first). |
| page_token | – | – | Continue from a previous result's next_page_token. |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
list_video_categories List Video Categories ~86
Video categories that can be assigned to uploads in a region, with the IDs to pass as category_id. Quota: 1 unit.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| region | string | – | ISO 3166-1 alpha-2 country code. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
move_in_playlist Move In Playlist ~106
Move a video to another position in one of your playlists. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlist | string | yes | Playlist ID or URL. |
| position | integer | yes | New 0-based position. |
| video | string | yes | Video ID or URL. Refused if the video appears in the playlist more than once. |
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | – |
| playlist_item_id | string | yes | – |
| position | integer | yes | – |
| video_id | string | yes | – |
No examples provided.
post_comment Post Comment ~79
Post a top-level comment on a video as the authorized user. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| text | string | yes | The comment. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | yes | – |
| author_channel_id | – | – | – |
| id | string | yes | – |
| likes | – | – | – |
| parent_id | – | – | Replies only: the comment replied to. |
| published_at | string | yes | – |
| reply_count | – | – | Top-level comments only. |
| status | – | – | Moderation status, where YouTube reports it. |
| text | string | yes | – |
| updated_at | – | – | – |
| video_id | – | – | – |
No examples provided.
rate_video Rate Video ~87
Like or dislike a video as the authorized user, or clear the rating with none. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| rating | string | yes | like, dislike, or none. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| rating | string | yes | – |
| video_id | string | yes | – |
No examples provided.
reject_comments Reject Comments ~105
Reject comments on your videos, hiding them from viewers. They can still be approved later. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| ban_author | boolean | – | Also reject all future comments on your channel by each comment's author. |
| comments | array | yes | Comment IDs or links. 50 quota units per 50 comments. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| authors_banned | boolean | – | – |
| comment_ids | array | yes | – |
| status | string | yes | – |
No examples provided.
remove_from_playlist Remove From Playlist ~90
Remove a video from one of your playlists, every time it appears. The video itself is not affected. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlist | string | yes | Playlist ID or URL. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| playlist_id | string | yes | – |
| removed | integer | yes | How many occurrences were removed; 0 if the video wasn't in the playlist. |
| video_id | string | yes | – |
No examples provided.
remove_watermark Remove Watermark ~62
Remove the watermark from your videos. Succeeds when there is none. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | yes | – |
| channel_id | string | yes | – |
| corner | – | – | – |
| duration_seconds | – | – | – |
| from_end | – | – | – |
| start_seconds | – | – | – |
No examples provided.
reply_to_comment Reply To Comment ~89
Reply to a top-level comment as the authorized user. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | yes | Comment ID or link. Replying to a reply adds to the same thread. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| text | string | yes | The reply. |
| Name | Type | Req | Description |
|---|---|---|---|
| author | string | yes | – |
| author_channel_id | – | – | – |
| id | string | yes | – |
| likes | – | – | – |
| parent_id | – | – | Replies only: the comment replied to. |
| published_at | string | yes | – |
| reply_count | – | – | Top-level comments only. |
| status | – | – | Moderation status, where YouTube reports it. |
| text | string | yes | – |
| updated_at | – | – | – |
| video_id | – | – | – |
No examples provided.
search Search ~181
Search YouTube for videos, channels, or playlists. Quota: 1 of the project's 100 daily search calls per page of up to 50 results.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | – | – | Only results from this channel: UC… ID, @handle, or channel URL. |
| kind | string | – | What to search for. |
| limit | integer | – | Maximum number of results. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| order | string | – | Sort order. |
| page_token | – | – | Continue from a previous result's next_page_token. |
| query | string | yes | Search terms. |
| since | – | – | Only results published at or after this date or datetime (2026-01-01), or this long ago (90d, 4w). |
| Name | Type | Req | Description |
|---|---|---|---|
| items | array | yes | – |
| next_page_token | – | – | Pass as page_token to continue; null at the end. |
| total_results | – | – | Total reported by YouTube; only an estimate for search. |
No examples provided.
set_channel_banner Set Channel Banner ~91
Upload and set your channel's banner. Use a 16:9 image of at least 2048x1152, at most 6 MB. Quota: 101 units.
| Name | Type | Req | Description |
|---|---|---|---|
| image | string | yes | Path to a JPEG or PNG. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| banner_url | – | – | – |
| channel_id | string | yes | – |
| country | – | – | – |
| description | – | – | – |
| keywords | array | – | – |
| language | – | – | – |
| title | – | – | – |
| trailer_video_id | – | – | Shown to visitors who aren't subscribed. |
No examples provided.
set_playlist_thumbnail Set Playlist Thumbnail ~93
Set the custom thumbnail of one of your playlists, replacing any current one. Quota: 101 units.
| Name | Type | Req | Description |
|---|---|---|---|
| image | string | yes | Path to a square JPEG or PNG, at most 50 MB. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlist | string | yes | Playlist ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| height | – | – | – |
| image_id | string | yes | – |
| playlist_id | string | yes | – |
| width | – | – | – |
No examples provided.
set_thumbnail Set Thumbnail ~88
Set a video's custom thumbnail. The channel must be verified. Quota: 50 units.
| Name | Type | Req | Description |
|---|---|---|---|
| image | string | yes | Path to a JPEG or PNG, at most 50 MB. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| thumbnail_url | – | – | – |
| video_id | string | yes | – |
No examples provided.
set_watermark Set Watermark ~167
Set the watermark shown over all your videos, replacing any current one. Viewers click it to subscribe. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| corner | string | – | Where it appears. |
| duration | – | – | Seconds to show it. Until the end of the video when omitted. |
| from_end | boolean | – | Count start back from the end of the video. |
| image | string | yes | Path to a square JPEG or PNG, at least 150x150, at most 1 MB. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| start | integer | – | Seconds from the start of the video when it appears, or from its end when counting from the end. |
| Name | Type | Req | Description |
|---|---|---|---|
| active | boolean | yes | – |
| channel_id | string | yes | – |
| corner | – | – | – |
| duration_seconds | – | – | – |
| from_end | – | – | – |
| start_seconds | – | – | – |
No examples provided.
setup_guide Setup Guide ~94
What is left before the user's channel can be used: a one-time Google Cloud setup, then a Google sign-in. The steps happen in the user's browser, so walk them through one step at a time. Once ready, running the sign-in again connects another channel. Quota: no YouTube Data API units.
| Name | Type | Req | Description |
|---|---|---|---|
| project | – | – | Google Cloud project ID, once known. The links then open with that project selected. |
| Name | Type | Req | Description |
|---|---|---|---|
| channels | array | yes | – |
| ready | boolean | yes | At least one channel is logged in. |
| steps | array | yes | What is left to do, in order. Empty when ready. |
No examples provided.
subscribe Subscribe ~77
Subscribe the authorized user to a channel. Already being subscribed is fine. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | UC… channel ID, @handle, or channel URL. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | – |
| description | – | – | – |
| id | string | yes | – |
| subscribed_at | – | – | – |
| title | – | – | – |
| url | string | yes | – |
No examples provided.
unsubscribe Unsubscribe ~78
Unsubscribe the authorized user from a channel. Not being subscribed is fine. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| channel | string | yes | UC… channel ID, @handle, or channel URL. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | string | yes | – |
| was_subscribed | boolean | yes | – |
No examples provided.
update_caption Update Caption ~143
Replace the file of a caption track on one of your videos, or show or hide the track. Quota: 502 units.
| Name | Type | Req | Description |
|---|---|---|---|
| draft | – | – | Whether the track is hidden from viewers. |
| file | – | – | Path to the new caption file, at most 100 MB. |
| language | string | yes | Language of the track, e.g. en or en-US. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| name | – | – | Name of the track, when the video has several in that language. |
| video | string | yes | Video ID or URL. |
| Name | Type | Req | Description |
|---|---|---|---|
| draft | boolean | – | Not shown to viewers yet. |
| id | string | yes | – |
| kind | string | yes | asr: made by YouTube's speech recognition. forced: shown when no track is chosen. |
| language | string | yes | – |
| name | – | – | – |
| status | – | – | serving, syncing, or failed. |
| updated_at | – | – | – |
| video_id | string | yes | – |
No examples provided.
update_channel Update Channel ~168
Change your channel's about info. Only the fields you pass change. The name can only be changed in Studio. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| country | – | – | ISO 3166-1 alpha-2 country code. |
| description | – | – | Channel description. |
| keywords | – | – | Channel keywords, replacing the current ones. An empty list removes them all. |
| language | – | – | Language of the channel's title and description, e.g. en or de. If the channel has none, YouTube may pick one on any change; pass it to choose. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| trailer | – | – | Video (ID or URL) shown to visitors who aren't subscribed. |
| Name | Type | Req | Description |
|---|---|---|---|
| banner_url | – | – | – |
| channel_id | string | yes | – |
| country | – | – | – |
| description | – | – | – |
| keywords | array | – | – |
| language | – | – | – |
| title | – | – | – |
| trailer_video_id | – | – | Shown to visitors who aren't subscribed. |
No examples provided.
update_playlist Update Playlist ~109
Change one of your playlists. Only the fields you pass change. Quota: 51 units.
| Name | Type | Req | Description |
|---|---|---|---|
| description | – | – | New description. |
| language | – | – | Language of the title and description, e.g. en-US. |
| my_channel | – | – | Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel. |
| playlist | string | yes | Playlist ID or URL. |
| privacy | – | – | New privacy status. |
| title | – | – | New title. |
| Name | Type | Req | Description |
|---|---|---|---|
| channel_id | – | – | – |
| description | – | – | – |
| id | string | yes | – |
| item_count | – | – | – |
| language | – | – | Language of the title and description, e.g. en-US. |
| privacy | – | – | – |
| published_at | – | – | – |
| title | string | yes | – |
| url | string | yes | – |
No examples provided.
How do I install the youtube-kit MCP server?
youtube-kit runs locally as a PyPI package, launched with uvx youtube-kit. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · youtube-kit
claude mcp add eukosh-youtube-kit -- uvx youtube-kit
What is the youtube-kit MCP server?
youtube-kit is an MCP server listed in the public MCP registry as io.github.eukosh/youtube-kit. YouTube CLI and MCP server: search and read public YouTube, and manage your own channels. This page covers its PyPI package (youtube-kit).
Is the youtube-kit MCP server safe to use?
youtube-kit scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the youtube-kit MCP server expose?
youtube-kit exposes 51 tools: get_analytics, setup_guide, get_channel, list_my_channels, list_activities, and 46 more. Their descriptions and schemas cost roughly 6,873 tokens of context every time the server is loaded.
Is the youtube-kit MCP server still maintained?
youtube-kit is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the youtube-kit MCP server under?
youtube-kit declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.