Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

youtube-kit

PYPI · YOUTUBE-KIT

YouTube CLI and MCP server: search and read public YouTube, and manage your own channels.

Available components

68 Trust /100

Last scanned (8 hours ago)

Scores higher than 67% of PyPI servers

Category Entertainment and Games

Trust breakdown (7 categories)

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
Changelog

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.

Diagnostics

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 →

MCP tools · 51 exposed · ~6,873 tokens

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 →

Tool Tokens
add_section ~169

Add a section to your channel's home page. A channel has at most 10. Quota: 52 units.

NameTypeReqDescription
channels––Channels to show: UC… IDs, @handles, or channel URLs.
kindstringyesWhat 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.
NameTypeReqDescription
channel_idsarray––
idstringyes–
playlist_idsarray––
position–––
title–––
typestringyes–

No examples provided.

add_video_to_playlist ~102

Add a video to a playlist on the authorized user's channel. Quota: 50 units.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
playliststringyesPlaylist ID or URL.
position––0-based position in the playlist. Appends to the end when omitted.
videostringyesVideo ID or URL.
NameTypeReqDescription
playlist_idstringyes–
playlist_item_idstringyes–
positionintegeryes–
video_idstringyes–

No examples provided.

approve_comments ~82

Publish comments on your videos that are held for review or marked as likely spam. Quota: 50 units.

NameTypeReqDescription
commentsarrayyesComment 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.
NameTypeReqDescription
authors_bannedboolean––
comment_idsarrayyes–
statusstringyes–

No examples provided.

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.

NameTypeReqDescription
descriptionstring–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.
privacystring–Privacy status.
titlestringyesPlaylist title.
NameTypeReqDescription
channel_id–––
description–––
idstringyes–
item_count–––
language––Language of the title and description, e.g. en-US.
privacy–––
published_at–––
titlestringyes–
urlstringyes–

No examples provided.

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.

NameTypeReqDescription
confirm––The track's ID, passed only after the user has approved deleting this track.
languagestringyesLanguage 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.
videostringyesVideo ID or URL.
NameTypeReqDescription
already_goneboolean–Nothing to delete: it didn't exist or was already deleted.
idstringyes–
kindstringyes–

No examples provided.

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.

NameTypeReqDescription
commentstringyesComment 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.
NameTypeReqDescription
already_goneboolean–Nothing to delete: it didn't exist or was already deleted.
idstringyes–
kindstringyes–

No examples provided.

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.

NameTypeReqDescription
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.
playliststringyesPlaylist ID or URL.
NameTypeReqDescription
already_goneboolean–Nothing to delete: it didn't exist or was already deleted.
idstringyes–
kindstringyes–

No examples provided.

delete_section ~79

Delete a section from your channel's home page. Its playlists and videos are not affected. Quota: 50 units.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
sectionstringyesSection ID, as listed for your channel.
NameTypeReqDescription
already_goneboolean–Nothing to delete: it didn't exist or was already deleted.
idstringyes–
kindstringyes–

No examples provided.

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.

NameTypeReqDescription
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.
videostringyesVideo ID or URL.
NameTypeReqDescription
already_goneboolean–Nothing to delete: it didn't exist or was already deleted.
idstringyes–
kindstringyes–

No examples provided.

edit_comment ~79

Replace the text of one of your own comments or replies. Quota: 50 units.

NameTypeReqDescription
commentstringyesComment 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.
textstringyesThe new text.
NameTypeReqDescription
authorstringyes–
author_channel_id–––
idstringyes–
likes–––
parent_id––Replies only: the comment replied to.
published_atstringyes–
reply_count––Top-level comments only.
status––Moderation status, where YouTube reports it.
textstringyes–
updated_at–––
video_id–––

No examples provided.

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.

NameTypeReqDescription
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).
NameTypeReqDescription
columnsarrayyesDimension first (if any), then the metrics, in request order.
rowsarrayyes–
sincestringyes–
untilstringyes–

No examples provided.

get_channel ~79

Channel metadata, statistics, and uploads playlist ID. Quota: 1 unit.

NameTypeReqDescription
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.
NameTypeReqDescription
country–––
descriptionstringyes–
handle–––
idstringyes–
published_atstringyes–
stats–––
titlestringyes–
uploads_playlist_id–––
urlstringyes–

No examples provided.

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.

NameTypeReqDescription
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).
NameTypeReqDescription
columnsarrayyesDimension first (if any), then the metrics, in request order.
missing_daysarrayyesDays YouTube has no report for: the last two, and any outside what it keeps.
note–––
rowsarrayyes–
sincestringyes–
untilstringyes–

No examples provided.

get_my_ratings ~84

Whether the authorized user liked or disliked each video. Quota: 1 unit.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
videosarrayyesVideo IDs or URLs. Fetched in batches of 50, 1 quota unit per batch.
NameTypeReqDescription
resultarrayyes–

No examples provided.

get_playlists ~95

Metadata of one or more playlists: title, description, privacy, and item count. Quota: 1 unit.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
playlistsarrayyesPlaylist IDs or URLs with a list= parameter. Fetched in batches of 50, 1 quota unit per batch.
NameTypeReqDescription
resultarrayyes–

No examples provided.

get_processing_status ~149

Whether YouTube has finished processing one of your uploads. Quota: 1 unit.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
timeoutinteger–Seconds to wait at most. Callers that can't block for long should wait briefly and check again.
videostringyesVideo ID or URL.
waitboolean–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…
NameTypeReqDescription
failure_reason–––
parts_processed–––
parts_total–––
statusstringyes–
time_left_ms–––
video_idstringyes–

No examples provided.

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.

NameTypeReqDescription
formatstring–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.
videostringyesVideo ID or URL.
NameTypeReqDescription
caption_idstringyes–
formatstringyes–
kindstringyes–
languagestringyes–
textstringyes–
translated_to––Language YouTube machine-translated the track into.
video_idstringyes–

No examples provided.

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.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
videosarrayyesVideo IDs or URLs. Fetched in batches of 50, 1 quota unit per batch.
NameTypeReqDescription
resultarrayyes–

No examples provided.

hold_comments ~76

Hide comments on your videos until you review them. Quota: 50 units.

NameTypeReqDescription
commentsarrayyesComment 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.
NameTypeReqDescription
authors_bannedboolean––
comment_idsarrayyes–
statusstringyes–

No examples provided.

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.

NameTypeReqDescription
channel––UC… channel ID, @handle, or channel URL. Omit for your own channel.
limitinteger–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).
NameTypeReqDescription
itemsarrayyes–
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 ~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.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
videostringyesVideo ID or URL.
NameTypeReqDescription
resultarrayyes–

No examples provided.

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.

NameTypeReqDescription
limitinteger–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.
orderstring–Newest first, or most relevant first.
page_token––Continue from a previous result's next_page_token.
search––Only comments containing these words.
statusstring–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.
NameTypeReqDescription
itemsarrayyes–
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 ~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.

NameTypeReqDescription
resultarrayyes–

No examples provided.

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.

NameTypeReqDescription
limitinteger–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.
playliststringyesPlaylist ID or a URL with a list= parameter.
NameTypeReqDescription
itemsarrayyes–
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 ~113

A channel's playlists. Quota: 1 unit per page of up to 50 results.

NameTypeReqDescription
channel––UC… channel ID, @handle, or channel URL. Omit for your own channel, including private playlists.
limitinteger–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.
NameTypeReqDescription
itemsarrayyes–
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 ~110

Replies to a top-level comment. Quota: 1 unit per page of up to 50 results.

NameTypeReqDescription
commentstringyesComment ID or link. A reply's ID or link lists its whole thread.
limitinteger–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.
NameTypeReqDescription
itemsarrayyes–
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 ~78

The sections on a channel's home page. Quota: 1 unit.

NameTypeReqDescription
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.
NameTypeReqDescription
resultarrayyes–

No examples provided.

list_subscriptions ~109

Channels the authorized user is subscribed to. Quota: 1 unit per page of up to 50 results.

NameTypeReqDescription
limitinteger–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.
orderstring–Alphabetical, by relevance, or by activity (unread first).
page_token––Continue from a previous result's next_page_token.
NameTypeReqDescription
itemsarrayyes–
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 ~86

Video categories that can be assigned to uploads in a region, with the IDs to pass as category_id. Quota: 1 unit.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
regionstring–ISO 3166-1 alpha-2 country code.
NameTypeReqDescription
resultarrayyes–

No examples provided.

move_in_playlist ~106

Move a video to another position in one of your playlists. Quota: 51 units.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
playliststringyesPlaylist ID or URL.
positionintegeryesNew 0-based position.
videostringyesVideo ID or URL. Refused if the video appears in the playlist more than once.
NameTypeReqDescription
playlist_idstringyes–
playlist_item_idstringyes–
positionintegeryes–
video_idstringyes–

No examples provided.

post_comment ~79

Post a top-level comment on a video as the authorized user. Quota: 50 units.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
textstringyesThe comment.
videostringyesVideo ID or URL.
NameTypeReqDescription
authorstringyes–
author_channel_id–––
idstringyes–
likes–––
parent_id––Replies only: the comment replied to.
published_atstringyes–
reply_count––Top-level comments only.
status––Moderation status, where YouTube reports it.
textstringyes–
updated_at–––
video_id–––

No examples provided.

rate_video ~87

Like or dislike a video as the authorized user, or clear the rating with none. Quota: 50 units.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
ratingstringyeslike, dislike, or none.
videostringyesVideo ID or URL.
NameTypeReqDescription
ratingstringyes–
video_idstringyes–

No examples provided.

reject_comments ~105

Reject comments on your videos, hiding them from viewers. They can still be approved later. Quota: 50 units.

NameTypeReqDescription
ban_authorboolean–Also reject all future comments on your channel by each comment's author.
commentsarrayyesComment 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.
NameTypeReqDescription
authors_bannedboolean––
comment_idsarrayyes–
statusstringyes–

No examples provided.

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.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
playliststringyesPlaylist ID or URL.
videostringyesVideo ID or URL.
NameTypeReqDescription
playlist_idstringyes–
removedintegeryesHow many occurrences were removed; 0 if the video wasn't in the playlist.
video_idstringyes–

No examples provided.

remove_watermark ~62

Remove the watermark from your videos. Succeeds when there is none. Quota: 51 units.

NameTypeReqDescription
my_channel––Which of your logged-in channels to work on: UC… ID, @handle or exact title. Omit for the default channel.
NameTypeReqDescription
activebooleanyes–
channel_idstringyes–
corner–––
duration_seconds–––
from_end–––
start_seconds–––

No examples provided.

reply_to_comment ~89

Reply to a top-level comment as the authorized user. Quota: 50 units.

NameTypeReqDescription
commentstringyesComment 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.
textstringyesThe reply.
NameTypeReqDescription
authorstringyes–
author_channel_id–––
idstringyes–
likes–––
parent_id––Replies only: the comment replied to.
published_atstringyes–
reply_count––Top-level comments only.
status––Moderation status, where YouTube reports it.
textstringyes–
updated_at–––
video_id–––

No examples provided.

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.

NameTypeReqDescription
channel––Only results from this channel: UC… ID, @handle, or channel URL.
kindstring–What to search for.
limitinteger–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.
orderstring–Sort order.
page_token––Continue from a previous result's next_page_token.
querystringyesSearch terms.
since––Only results published at or after this date or datetime (2026-01-01), or this long ago (90d, 4w).
NameTypeReqDescription
itemsarrayyes–
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 ~91

Upload and set your channel's banner. Use a 16:9 image of at least 2048x1152, at most 6 MB. Quota: 101 units.

NameTypeReqDescription
imagestringyesPath 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.
NameTypeReqDescription
banner_url–––
channel_idstringyes–
country–––
description–––
keywordsarray––
language–––
title–––
trailer_video_id––Shown to visitors who aren't subscribed.

No examples provided.

set_playlist_thumbnail ~93

Set the custom thumbnail of one of your playlists, replacing any current one. Quota: 101 units.

NameTypeReqDescription
imagestringyesPath 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.
playliststringyesPlaylist ID or URL.
NameTypeReqDescription
height–––
image_idstringyes–
playlist_idstringyes–
width–––

No examples provided.

set_thumbnail ~88

Set a video's custom thumbnail. The channel must be verified. Quota: 50 units.

NameTypeReqDescription
imagestringyesPath 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.
videostringyesVideo ID or URL.
NameTypeReqDescription
thumbnail_url–––
video_idstringyes–

No examples provided.

set_watermark ~167

Set the watermark shown over all your videos, replacing any current one. Viewers click it to subscribe. Quota: 51 units.

NameTypeReqDescription
cornerstring–Where it appears.
duration––Seconds to show it. Until the end of the video when omitted.
from_endboolean–Count start back from the end of the video.
imagestringyesPath 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.
startinteger–Seconds from the start of the video when it appears, or from its end when counting from the end.
NameTypeReqDescription
activebooleanyes–
channel_idstringyes–
corner–––
duration_seconds–––
from_end–––
start_seconds–––

No examples provided.

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.

NameTypeReqDescription
project––Google Cloud project ID, once known. The links then open with that project selected.
NameTypeReqDescription
channelsarrayyes–
readybooleanyesAt least one channel is logged in.
stepsarrayyesWhat is left to do, in order. Empty when ready.

No examples provided.

subscribe ~77

Subscribe the authorized user to a channel. Already being subscribed is fine. Quota: 51 units.

NameTypeReqDescription
channelstringyesUC… 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.
NameTypeReqDescription
channel_idstringyes–
description–––
idstringyes–
subscribed_at–––
title–––
urlstringyes–

No examples provided.

unsubscribe ~78

Unsubscribe the authorized user from a channel. Not being subscribed is fine. Quota: 51 units.

NameTypeReqDescription
channelstringyesUC… 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.
NameTypeReqDescription
channel_idstringyes–
was_subscribedbooleanyes–

No examples provided.

update_caption ~143

Replace the file of a caption track on one of your videos, or show or hide the track. Quota: 502 units.

NameTypeReqDescription
draft––Whether the track is hidden from viewers.
file––Path to the new caption file, at most 100 MB.
languagestringyesLanguage 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.
videostringyesVideo ID or URL.
NameTypeReqDescription
draftboolean–Not shown to viewers yet.
idstringyes–
kindstringyesasr: made by YouTube's speech recognition. forced: shown when no track is chosen.
languagestringyes–
name–––
status––serving, syncing, or failed.
updated_at–––
video_idstringyes–

No examples provided.

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.

NameTypeReqDescription
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.
NameTypeReqDescription
banner_url–––
channel_idstringyes–
country–––
description–––
keywordsarray––
language–––
title–––
trailer_video_id––Shown to visitors who aren't subscribed.

No examples provided.

update_playlist ~109

Change one of your playlists. Only the fields you pass change. Quota: 51 units.

NameTypeReqDescription
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.
playliststringyesPlaylist ID or URL.
privacy––New privacy status.
title––New title.
NameTypeReqDescription
channel_id–––
description–––
idstringyes–
item_count–––
language––Language of the title and description, e.g. en-US.
privacy–––
published_at–––
titlestringyes–
urlstringyes–

No examples provided.

Install

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

# add to Claude Code
claude mcp add eukosh-youtube-kit -- uvx youtube-kit
Common questions

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.