# io.github.pratikgh0se/youtube-mcp (mcpb · youtube-mcp-0.3.1.mcpb)

Search YouTube, manage your channel and read analytics; every change needs your approval.

- Trust score: 62/100 (medium)
- Change this week: +11
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- mcpb · `youtube-mcp-0.3.1.mcpb`: 62/100 (this document), [markdown](https://verifymcp.io/servers/pratikgh0se-youtube-mcp/youtube-mcp.md), [page](https://verifymcp.io/servers/pratikgh0se-youtube-mcp/youtube-mcp)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/pratikgh0se/youtube-mcp/releases/download/v0.3.1/youtube-mcp-0.3.1.mcpb`
- Version: `0.3.1`
- Transport: `stdio`
- SHA-256: `16224d8d1eb4c04fc9e74002b99b592566ceb801e81e6b25016f999046cfb1e4`

## Trust breakdown

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. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Supply Chain Security**: 23/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs were checked across the 149 of 150 dependencies we could resolve, so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Dependency health was assessed across the 149 of 150 dependencies we could resolve, so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to pratikgh0se/youtube-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 5 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 75/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 8230 tokens (~104/item across 79 items; 79 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 11 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 79 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.pratikgh0se/youtube-mcp server?

io.github.pratikgh0se/youtube-mcp ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 16224d8d1eb4c04fc9e74002b99b592566ceb801e81e6b25016f999046cfb1e4; the commands to do that are on this page. If it does not match, do not open it.

- Download bundle: `https://github.com/pratikgh0se/youtube-mcp/releases/download/v0.3.1/youtube-mcp-0.3.1.mcpb`
- SHA-256: `16224d8d1eb4c04fc9e74002b99b592566ceb801e81e6b25016f999046cfb1e4`

### Verify on macOS / Linux

```bash
echo "16224d8d1eb4c04fc9e74002b99b592566ceb801e81e6b25016f999046cfb1e4  youtube-mcp-0.3.1.mcpb" | shasum -a 256 -c
```

### Verify on Windows (PowerShell)

```powershell
(Get-FileHash -Algorithm SHA256 .\youtube-mcp-0.3.1.mcpb).Hash -eq "16224d8d1eb4c04fc9e74002b99b592566ceb801e81e6b25016f999046cfb1e4"
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-05 (score 62, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 61, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 60, +11)

- [security improvement] Provenance: unverified → pass
- [security] The attested source repository moved: pratikgh0se/youtube-mcp

### 2026-10-31 (score 49, −3)

- [security regression] Provenance: pass → unverified
- [security] The attested source repository moved: pratikgh0se/youtube-mcp
- [functional regression] Schema quality: pass → fail
- [functional improvement] Tool coverage: 1% → 100%
- [functional] Schema quality: fair → good
- [functional] Package version: 0.3.0 → 0.3.1

### 2026-10-30 (score 52, +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.

### 2026-10-29 (score 51)

First indexed and scored.

## MCP tools (79)

### `youtube_search` (~282 tokens)

Search public YouTube videos (100 quota units per call). Optional filters: order, publishedAfter/publishedBefore (RFC 3339), videoDuration, channelId, regionCode, relevanceLanguage, safeSearch, pageToken.

Input parameters:

- `channelId` (string): Restrict results to this channel ID (UC...).
- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `order` (string): Sort order: relevance, date, viewCount, rating or title.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.
- `publishedAfter` (string): Only return results published at or after this RFC 3339 timestamp.
- `publishedBefore` (string): Only return results published before this RFC 3339 timestamp.
- `query` (string, required): Search text to look for on YouTube.
- `regionCode` (string): Two-letter ISO 3166-1 region code, e.g. US.
- `relevanceLanguage` (string): Prefer results in this language code, e.g. en or zh-Hans.
- `safeSearch` (string): Safe-search filtering level: none, moderate or strict.
- `videoDuration` (string): Filter by video length: any, short, medium or long.

### `youtube_trending` (~124 tokens)

List the most popular videos for a region (default US), optionally in one video category. 1 quota unit.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.
- `regionCode` (string): Two-letter ISO 3166-1 region code, e.g. US.
- `videoCategoryId` (string): Numeric video category ID from youtube_list_video_categories.

### `youtube_list_channel_videos` (~105 tokens)

List recent uploads with statistics for ANY public channel, by channel ID or @handle (about 3 quota units per page).

Input parameters:

- `channelId` (string, required): A channel ID (UC...) or an @handle.
- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.

### `youtube_get_video` (~48 tokens)

Get a public YouTube video by ID.

Input parameters:

- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_get_channel` (~37 tokens)

Get a public YouTube channel by ID.

Input parameters:

- `channelId` (string, required): Channel ID (UC...) of the channel to look up.

### `youtube_get_comments` (~74 tokens)

List public comment threads for a specific video.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_get_transcript` (~51 tokens)

Get a best-effort public transcript for a video.

Input parameters:

- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_my_account` (~16 tokens)

Get the authenticated YouTube channel.

### `youtube_list_subscriptions` (~135 tokens)

List subscriptions for the authenticated account, with pagination. details: true adds subscriberCount, videoCount and lastUploadAt per channel and costs about 1 extra quota unit per returned channel.

Input parameters:

- `details` (boolean): Add subscriberCount, videoCount and lastUploadAt per channel. Costs roughly 1 extra quota unit per returned channel plus 1 per 50 channels.
- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.

### `youtube_list_channel_comment_threads` (~51 tokens)

List comment threads associated with the authenticated channel; authors may be anyone.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.

### `youtube_subscribe` (~57 tokens)

Subscribe the authenticated account to a channel.

Input parameters:

- `channelId` (string, required): Channel ID (UC...) to subscribe to.
- `confirm` (boolean): Must be true to perform this write; set it only after the user approved the action.

### `youtube_unsubscribe` (~60 tokens)

Remove an authenticated-account subscription.

Input parameters:

- `confirm` (boolean): Must be true to perform this write; set it only after the user approved the action.
- `subscriptionId` (string, required): Subscription ID (not the channel ID), from youtube_list_subscriptions.

### `youtube_rate_video` (~90 tokens)

Rate a video for the authenticated account.

Input parameters:

- `confirm` (boolean): Must be true to perform this write; set it only after the user approved the action.
- `rating` (string, required): Rating to set: like, dislike or none to clear it.
- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_create_comment` (~99 tokens)

Create a top-level comment as the selected channel, only on a video that channel owns (replies on your own videos); other videos are refused with ownership_required.

Input parameters:

- `confirm` (boolean): Must be true to perform this write; set it only after the user approved the action.
- `text` (string, required): Text of the new top-level comment.
- `videoId` (string, required): ID of a video on the selected channel to comment on.

### `youtube_creator_overview` (~54 tokens)

Get owned-channel creator analytics for a date range.

Input parameters:

- `endDate` (string, required): End date of the range, YYYY-MM-DD.
- `startDate` (string, required): Start date of the range, YYYY-MM-DD.

### `youtube_creator_top_videos` (~81 tokens)

Get top owned-channel videos for a date range.

Input parameters:

- `endDate` (string, required): End date of the range, YYYY-MM-DD.
- `limit` (integer): Maximum number of top videos to return, 1-50; omit to use the tool default.
- `startDate` (string, required): Start date of the range, YYYY-MM-DD.

### `youtube_creator_retention` (~38 tokens)

Get audience-retention data for an owned video.

Input parameters:

- `videoId` (string, required): ID of an owned video to report audience retention for.

### `youtube_creator_report` (~291 tokens)

Run an allowlisted YouTube Analytics report for the owned channel (default: last 28 days). Metrics: views, estimatedMinutesWatched, averageViewDuration, averageViewPercentage, subscribersGained, subscribersLost, likes, comments, shares (viewerPercentage only with ageGroup/gender). Dimensions: day, month, video, country, deviceType, operatingSystem, insightTrafficSourceType, insightTrafficSourceDetail (needs one video plus an insightTrafficSourceType filter), ageGroup, gender, subscribedStatus, sharingService (shares only). Invalid combinations are rejected with invalid_input before any API call. Rows come back as objects keyed by column name.

Input parameters:

- `dimensions` (array): YouTube Analytics dimension names to group by, up to 3.
- `endDate` (string): End date, YYYY-MM-DD; defaults to today.
- `filters` (object): Optional filters to narrow the report.
- `maxResults` (integer): Maximum rows to return, 1-200; traffic-source-detail reports allow at most 25.
- `metrics` (array, required): YouTube Analytics metric names such as views, 1-12 items.
- `sort` (array): Sort keys, up to 4; prefix a key with - for descending, e.g. -views.
- `startDate` (string): Start date, YYYY-MM-DD; defaults to 28 days before endDate.

### `youtube_list_owned_videos` (~71 tokens)

List videos owned by the selected creator profile.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.

### `youtube_get_owned_video` (~36 tokens)

Get a video owned by the selected creator profile.

Input parameters:

- `videoId` (string, required): ID of a video on the selected channel.

### `youtube_list_video_categories` (~66 tokens)

List available YouTube video categories with freshness metadata.

Input parameters:

- `id` (string): Category ID to look up. Provide this or regionCode, not both.
- `regionCode` (string): Two-letter region code, e.g. US. Provide this or id, not both.

### `youtube_list_playlists` (~70 tokens)

List playlists owned by the selected creator profile.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.

### `youtube_get_playlist` (~38 tokens)

Get one playlist owned by the selected creator profile.

Input parameters:

- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.

### `youtube_list_playlist_items` (~88 tokens)

List items from an owned creator playlist.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.

### `youtube_list_moderation_comments` (~87 tokens)

List selected-channel moderation threads with available replies.

Input parameters:

- `maxResults` (integer): Maximum number of items to return, 1-50; omit to use the tool default.
- `moderationStatus` (string): Only list comments with this moderation status.
- `pageToken` (string): Page token from the nextPageToken of a previous response, to fetch the next page.

### `youtube_get_moderation_comment` (~41 tokens)

Read one immutable comment by ID for exact moderation reconciliation.

Input parameters:

- `commentId` (string, required): YouTube comment ID, from the comment listing tools.

### `youtube_find_comment_reply` (~60 tokens)

Exhaustively find an exact selected-channel reply under one immutable parent comment.

Input parameters:

- `parentId` (string, required): ID of the top-level comment whose replies are searched.
- `text` (string, required): Reply text to match, up to 10000 characters.

### `youtube_list_caption_tracks` (~49 tokens)

List caption tracks for an owned creator video.

Input parameters:

- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_approve` (~146 tokens)

Approve ANY pending preflight preview (upload, metadata, archive, thumbnail, caption, playlist, comment reply/moderation/delete, channel profile edit, bulk unsubscribe) by approvalId, with confirm: true. The result echoes the operation kind, target and exact desired change so the human can see precisely what is approved. Approval is single-use, expires, and is bound to the active profile and channel; then call the matching execute tool with confirm: true.

Input parameters:

- `approvalId` (string, required): Approval ID returned by any youtube_preflight_* tool for the exact change.
- `confirm` (boolean): Must be true to approve; set it only after the user reviewed the preview.

### `youtube_preflight_upload` (~128 tokens)

Validate and preview a private resumable video upload.

Input parameters:

- `description` (string): Video description, up to 5000 characters.
- `filePath` (string, required): Absolute path to the local video file to upload.
- `privacyStatus` (string): Visibility: private, unlisted or public.
- `publish` (boolean): Must be true when privacyStatus is public, as a separate confirmation.
- `publishAt` (string): Future ISO 8601 time to publish; only valid with privacyStatus private.
- `title` (string, required): Video title; leading and trailing whitespace is trimmed.

### `youtube_upload_video` (~182 tokens)

Start an approved resumable video upload. Public visibility also needs publish: true.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_upload preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `description` (string): Video description, up to 5000 characters.
- `filePath` (string, required): Absolute path to the local video file to upload.
- `privacyStatus` (string): Visibility: private, unlisted or public.
- `publish` (boolean): Must be true when privacyStatus is public, as a separate confirmation.
- `publishAt` (string): Future ISO 8601 time to publish; only valid with privacyStatus private.
- `title` (string, required): Video title; leading and trailing whitespace is trimmed.

### `youtube_preflight_resume_upload` (~151 tokens)

Validate and preview an explicit resumable-upload continuation.

Input parameters:

- `description` (string): Video description, up to 5000 characters.
- `filePath` (string, required): Absolute path to the local video file to upload.
- `privacyStatus` (string): Visibility: private, unlisted or public.
- `publish` (boolean): Must be true when privacyStatus is public, as a separate confirmation.
- `publishAt` (string): Future ISO 8601 time to publish; only valid with privacyStatus private.
- `title` (string, required): Video title; leading and trailing whitespace is trimmed.
- `uploadId` (string, required): Upload session ID returned by the upload preflight or youtube_get_upload_status.

### `youtube_resume_upload` (~200 tokens)

Resume an approved upload only after probing its existing session.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_resume_upload preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `description` (string): Video description, up to 5000 characters.
- `filePath` (string, required): Absolute path to the local video file to upload.
- `privacyStatus` (string): Visibility: private, unlisted or public.
- `publish` (boolean): Must be true when privacyStatus is public, as a separate confirmation.
- `publishAt` (string): Future ISO 8601 time to publish; only valid with privacyStatus private.
- `title` (string, required): Video title; leading and trailing whitespace is trimmed.
- `uploadId` (string, required): Upload session ID returned by the upload preflight or youtube_get_upload_status.

### `youtube_get_upload_status` (~43 tokens)

Probe a resumable upload session without sending media bytes.

Input parameters:

- `uploadId` (string, required): Upload session ID returned by the upload preflight or youtube_get_upload_status.

### `youtube_preflight_cancel_upload` (~42 tokens)

Preview cancellation of a resumable upload session.

Input parameters:

- `uploadId` (string, required): Upload session ID returned by the upload preflight or youtube_get_upload_status.

### `youtube_cancel_upload` (~89 tokens)

Cancel an approved resumable upload session.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_cancel_upload preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `uploadId` (string, required): Upload session ID returned by the upload preflight or youtube_get_upload_status.

### `youtube_preflight_update_metadata` (~291 tokens)

Read, merge, and preview an owned-video metadata update. publishAt only works on a private video that has never been public, with a future ISO 8601 time.

Input parameters:

- `categoryId` (string): Numeric video category ID from youtube_list_video_categories.
- `containsSyntheticMedia` (boolean): Whether the video contains realistic altered or synthetic media; needs elevated: true.
- `defaultLanguage` (string): Default language code of the video, e.g. en.
- `description` (string): New video description, up to 5000 characters.
- `elevated` (boolean): Must be true for public, scheduled, synthetic-media or made-for-kids changes, after the user reviewed them.
- `privacyStatus` (string): Visibility: private, unlisted or public.
- `publish` (boolean): Must be true when privacyStatus is public, as a separate confirmation.
- `publishAt` (string): Future ISO 8601 time. YouTube only schedules a private video that has never been public.
- `selfDeclaredMadeForKids` (boolean): Whether the video is made for kids; needs elevated: true.
- `tags` (array): Replacement tag list, up to 500 tags of up to 500 characters each.
- `title` (string): New video title, up to 100 characters.
- `videoId` (string, required): ID of an owned video to update.

### `youtube_update_metadata` (~346 tokens)

Write approved merged owned-video metadata. Public, scheduled, and synthetic-media changes need elevated intent. publishAt only works on a private video that has never been public, with a future ISO 8601 time.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_update_metadata preview, after approving it with youtube_approve.
- `categoryId` (string): Numeric video category ID from youtube_list_video_categories.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `containsSyntheticMedia` (boolean): Whether the video contains realistic altered or synthetic media; needs elevated: true.
- `defaultLanguage` (string): Default language code of the video, e.g. en.
- `description` (string): New video description, up to 5000 characters.
- `elevated` (boolean): Must be true for public, scheduled, synthetic-media or made-for-kids changes, after the user reviewed them.
- `privacyStatus` (string): Visibility: private, unlisted or public.
- `publish` (boolean): Must be true when privacyStatus is public, as a separate confirmation.
- `publishAt` (string): Future ISO 8601 time. YouTube only schedules a private video that has never been public.
- `selfDeclaredMadeForKids` (boolean): Whether the video is made for kids; needs elevated: true.
- `tags` (array): Replacement tag list, up to 500 tags of up to 500 characters each.
- `title` (string): New video title, up to 100 characters.
- `videoId` (string, required): ID of an owned video to update.

### `youtube_preflight_archive_video` (~83 tokens)

Preview archiving an owned video: sets it to private and clears any scheduled publish time; title, description and everything else stay untouched. Reversible: make it public or unlisted again with youtube_update_metadata. Refuses with already_archived if it is already private and unscheduled.

Input parameters:

- `videoId` (string, required): ID of an owned video to archive.

### `youtube_archive_video` (~107 tokens)

Archive an approved owned video (private, not scheduled; reversible via youtube_update_metadata). Approve the preview with youtube_approve, then call with confirm: true.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_archive_video preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `videoId` (string, required): ID of an owned video to archive.

### `youtube_preflight_set_thumbnail` (~69 tokens)

Validate and preview an owned-video thumbnail.

Input parameters:

- `filePath` (string, required): Absolute path to the local thumbnail image.
- `mimeType` (string, required): Thumbnail MIME type: image/jpeg or image/png.
- `videoId` (string, required): ID of an owned video to set the thumbnail on.

### `youtube_set_thumbnail` (~118 tokens)

Set an approved thumbnail on an owned video.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_set_thumbnail preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `filePath` (string, required): Absolute path to the local thumbnail image.
- `mimeType` (string, required): Thumbnail MIME type: image/jpeg or image/png.
- `videoId` (string, required): ID of an owned video to set the thumbnail on.

### `youtube_preflight_caption_upload` (~138 tokens)

Validate and preview a caption upload for an owned video.

Input parameters:

- `filePath` (string, required): Absolute path to the local caption file.
- `isDraft` (boolean): Whether the caption track is a draft that is not shown to viewers.
- `language` (string, required): Caption language code, e.g. en.
- `mimeType` (string, required): Caption file MIME type: application/octet-stream, application/ttml+xml, text/plain or text/vtt.
- `name` (string, required): Caption track name shown to viewers, up to 150 characters.
- `videoId` (string, required): ID of an owned video the caption belongs to.

### `youtube_upload_caption` (~185 tokens)

Upload an approved caption file without returning media bytes.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_caption_upload preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `filePath` (string, required): Absolute path to the local caption file.
- `isDraft` (boolean): Whether the caption track is a draft that is not shown to viewers.
- `language` (string, required): Caption language code, e.g. en.
- `mimeType` (string, required): Caption file MIME type: application/octet-stream, application/ttml+xml, text/plain or text/vtt.
- `name` (string, required): Caption track name shown to viewers, up to 150 characters.
- `videoId` (string, required): ID of an owned video the caption belongs to.

### `youtube_preflight_caption_update` (~152 tokens)

Validate and preview an owned caption update.

Input parameters:

- `captionId` (string, required): Caption track ID, from youtube_list_caption_tracks.
- `filePath` (string, required): Absolute path to the local caption file.
- `isDraft` (boolean): Whether the caption track is a draft that is not shown to viewers.
- `language` (string, required): Caption language code, e.g. en.
- `mimeType` (string, required): Caption file MIME type: application/octet-stream, application/ttml+xml, text/plain or text/vtt.
- `name` (string, required): Caption track name shown to viewers, up to 150 characters.
- `videoId` (string, required): ID of an owned video the caption belongs to.

### `youtube_update_caption` (~199 tokens)

Update an approved owned caption track.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_caption_update preview, after approving it with youtube_approve.
- `captionId` (string, required): Caption track ID, from youtube_list_caption_tracks.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `filePath` (string, required): Absolute path to the local caption file.
- `isDraft` (boolean): Whether the caption track is a draft that is not shown to viewers.
- `language` (string, required): Caption language code, e.g. en.
- `mimeType` (string, required): Caption file MIME type: application/octet-stream, application/ttml+xml, text/plain or text/vtt.
- `name` (string, required): Caption track name shown to viewers, up to 150 characters.
- `videoId` (string, required): ID of an owned video the caption belongs to.

### `youtube_download_caption` (~242 tokens)

Download an owned caption track into <state dir>/downloads/ as a new file you name with fileName (a plain name, no paths). Formats: srt, ttml, vtt, sbv. With format, the extension must match (.srt, .ttml, .vtt, .sbv). Without format you get the track original; use any of those four extensions. Never overwrites; bytes are not returned, the absolute path written is. Read-only on YouTube: no approval needed; ownership of the video and caption is verified first.

Input parameters:

- `captionId` (string, required): Caption track ID, from youtube_list_caption_tracks.
- `fileName` (string, required): Plain new file name (no path) to write under <state dir>/downloads/; existing files are never overwritten.
- `format` (string): Caption format to convert to: srt, ttml, vtt, sbv. The fileName extension must match it. Omit for the track original.
- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_preflight_caption_delete` (~66 tokens)

Preview deletion of an owned caption track.

Input parameters:

- `captionId` (string, required): Caption track ID, from youtube_list_caption_tracks.
- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_delete_caption` (~113 tokens)

Delete an approved owned caption track.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_caption_delete preview, after approving it with youtube_approve.
- `captionId` (string, required): Caption track ID, from youtube_list_caption_tracks.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_preflight_create_playlist` (~75 tokens)

Preview creation of a creator playlist; private is the default visibility.

Input parameters:

- `description` (string): Playlist description, up to 5000 characters.
- `privacyStatus` (string): Playlist visibility: private, unlisted or public.
- `title` (string, required): Title of the new playlist, up to 150 characters.

### `youtube_create_playlist` (~116 tokens)

Create an approved creator playlist.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_create_playlist preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `description` (string): Playlist description, up to 5000 characters.
- `privacyStatus` (string): Playlist visibility: private, unlisted or public.
- `title` (string, required): Title of the new playlist, up to 150 characters.

### `youtube_preflight_update_playlist` (~88 tokens)

Read and preview an update to an owned playlist.

Input parameters:

- `description` (string): Playlist description, up to 5000 characters.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `privacyStatus` (string): Playlist visibility: private, unlisted or public.
- `title` (string): Playlist title, up to 150 characters.

### `youtube_update_playlist` (~132 tokens)

Update an approved owned playlist.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_update_playlist preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `description` (string): Playlist description, up to 5000 characters.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `privacyStatus` (string): Playlist visibility: private, unlisted or public.
- `title` (string): Playlist title, up to 150 characters.

### `youtube_preflight_delete_playlist` (~39 tokens)

Read and preview deletion of an owned playlist.

Input parameters:

- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.

### `youtube_delete_playlist` (~84 tokens)

Delete an approved owned playlist.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_delete_playlist preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.

### `youtube_preflight_add_playlist_item` (~59 tokens)

Read and preview adding a video to an owned playlist.

Input parameters:

- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `videoId` (string, required): ID of the video to add to the playlist.

### `youtube_add_playlist_item` (~106 tokens)

Add a video to an approved owned playlist.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_add_playlist_item preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `videoId` (string, required): ID of the video to add to the playlist.

### `youtube_preflight_remove_playlist_item` (~64 tokens)

Read and preview removal of an immutable playlist item.

Input parameters:

- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `playlistItemId` (string, required): Playlist item ID (not the video ID), from youtube_list_playlist_items.

### `youtube_remove_playlist_item` (~110 tokens)

Remove an approved immutable playlist item.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_remove_playlist_item preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `playlistItemId` (string, required): Playlist item ID (not the video ID), from youtube_list_playlist_items.

### `youtube_preflight_reorder_playlist_item` (~82 tokens)

Read and preview reordering an immutable playlist item.

Input parameters:

- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `playlistItemId` (string, required): Playlist item ID (not the video ID), from youtube_list_playlist_items.
- `position` (integer, required): New zero-based position of the item in the playlist.

### `youtube_reorder_playlist_item` (~131 tokens)

Reorder an item after an approved preview.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_reorder_playlist_item preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `playlistId` (string, required): YouTube playlist ID, e.g. PLxxxxxxxxxxxxxxxx.
- `playlistItemId` (string, required): Playlist item ID (not the video ID), from youtube_list_playlist_items.
- `position` (integer, required): New zero-based position of the item in the playlist.

### `youtube_preflight_reply_to_comment` (~70 tokens)

Read and preview a reply to an immutable creator-channel comment.

Input parameters:

- `commentId` (string, required): ID of a comment on the selected channel, from youtube_list_channel_comment_threads or youtube_list_moderation_comments.
- `text` (string, required): Reply text, up to 10000 characters.

### `youtube_reply_to_comment` (~116 tokens)

Reply to an approved immutable creator-channel comment.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_reply_to_comment preview, after approving it with youtube_approve.
- `commentId` (string, required): ID of a comment on the selected channel, from youtube_list_channel_comment_threads or youtube_list_moderation_comments.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `text` (string, required): Reply text, up to 10000 characters.

### `youtube_preflight_set_comment_moderation_status` (~122 tokens)

Read and preview a comment moderation action; banning requires elevated intent.

Input parameters:

- `banAuthor` (boolean): Also ban the comment author; allowed only with rejected and needs elevated: true.
- `commentId` (string, required): ID of a comment on the selected channel, from youtube_list_channel_comment_threads or youtube_list_moderation_comments.
- `elevated` (boolean): Must be true when banAuthor is true, after the user reviewed the ban.
- `moderationStatus` (string, required): New moderation status: heldForReview, published or rejected.

### `youtube_set_comment_moderation_status` (~174 tokens)

Set an approved comment moderation status; banAuthor requires elevated intent.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_set_comment_moderation_status preview, after approving it with youtube_approve.
- `banAuthor` (boolean): Also ban the comment author; allowed only with rejected and needs elevated: true.
- `commentId` (string, required): ID of a comment on the selected channel, from youtube_list_channel_comment_threads or youtube_list_moderation_comments.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `elevated` (boolean): Must be true when banAuthor is true, after the user reviewed the ban.
- `moderationStatus` (string, required): New moderation status: heldForReview, published or rejected.

### `youtube_preflight_delete_comment` (~52 tokens)

Read and preview deletion of an immutable creator-channel comment.

Input parameters:

- `commentId` (string, required): ID of a comment on the selected channel, from youtube_list_channel_comment_threads or youtube_list_moderation_comments.

### `youtube_delete_comment` (~97 tokens)

Delete an approved immutable creator-channel comment.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_delete_comment preview, after approving it with youtube_approve.
- `commentId` (string, required): ID of a comment on the selected channel, from youtube_list_channel_comment_threads or youtube_list_moderation_comments.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.

### `youtube_preflight_update_channel` (~123 tokens)

Preview an edit to the selected creator channel profile (description, keywords, country, defaultLanguage), showing current vs desired. Other branding settings are preserved on execute.

Input parameters:

- `country` (string): Two-letter ISO 3166-1 country code of the channel, e.g. US.
- `defaultLanguage` (string): Default language code of the channel, e.g. en.
- `description` (string): New channel description, up to 1000 characters.
- `keywords` (string): New channel keywords as one string, up to 500 characters.

### `youtube_update_channel` (~196 tokens)

Apply an approved channel profile edit (read-modify-write of brandingSettings so untouched fields are kept). Approve with youtube_approve, then call with confirm: true and the same fields. youtube_my_account shows the snippet description, which can lag the stored branding description for a while.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_update_channel preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `country` (string): Two-letter ISO 3166-1 country code of the channel, e.g. US.
- `defaultLanguage` (string): Default language code of the channel, e.g. en.
- `description` (string): New channel description, up to 1000 characters.
- `keywords` (string): New channel keywords as one string, up to 500 characters.

### `youtube_preflight_unsubscribe_many` (~71 tokens)

Preview removing up to 100 subscriptions of the authenticated account: verifies each belongs to the account and lists every channel title to be removed, with approximate quota (50 units per removal).

Input parameters:

- `subscriptionIds` (array, required): Subscription IDs to remove, 1-100, from youtube_list_subscriptions.

### `youtube_unsubscribe_many` (~161 tokens)

Remove the approved subscriptions one by one and report each as removed, already_gone, failed (definitively rejected) or unknown (outcome uncertain after a server or network error: reconcile with youtube_list_subscriptions before retrying). Stops early (with a partial report) if YouTube quota runs out. Approve with youtube_approve first, then call with confirm: true.

Input parameters:

- `approvalId` (string, required): Approval ID from the youtube_preflight_unsubscribe_many preview, after approving it with youtube_approve.
- `confirm` (boolean): Must be true to execute; set it only after youtube_approve approved this exact preview.
- `subscriptionIds` (array, required): Subscription IDs to remove, 1-100, from youtube_list_subscriptions.

### `youtube_import_takeout` (~63 tokens)

Import a local Google Takeout YouTube-history JSON or HTML file into local derived analytics.

Input parameters:

- `inputPath` (string, required): Local path to a Google Takeout watch-history file ending in .json, .html or .htm (max 25 MiB).

### `youtube_consumption_profile` (~55 tokens)

Summarize local consumption analytics for a date range.

Input parameters:

- `endDate` (string, required): End date of the range, YYYY-MM-DD.
- `startDate` (string, required): Start date of the range, YYYY-MM-DD.

### `youtube_consumption_trends` (~96 tokens)

Compare local consumption topics across two date ranges.

Input parameters:

- `baselineEndDate` (string, required): End date of the baseline period, YYYY-MM-DD.
- `baselineStartDate` (string, required): Start date of the baseline period, YYYY-MM-DD.
- `comparisonEndDate` (string, required): End date of the comparison period, YYYY-MM-DD.
- `comparisonStartDate` (string, required): Start date of the comparison period, YYYY-MM-DD.

### `youtube_save_curation_policy` (~75 tokens)

Save selected-profile local curation allowlists and API-data retention.

Input parameters:

- `allowedSources` (array, required): Source IDs (channel or playlist IDs) whose candidates may be queued, up to 500.
- `retentionDays` (integer): Days to keep curation data, 1-3650; defaults to 30.

### `youtube_save_curation_candidate` (~176 tokens)

Save a selected-profile local curation candidate with source provenance.

Input parameters:

- `apiFetchedAt` (string): ISO 8601 time the video data was fetched from the YouTube API.
- `estimatedMinutes` (integer): Estimated watch time in whole minutes; candidates without it are never queued.
- `reason` (string): Why this video was picked, up to 2000 characters.
- `source` (string, required): How the candidate was found: allowlist, playlist or search.
- `sourceId` (string, required): ID of the source it came from; it must be in allowedSources to be queued.
- `title` (string, required): Video title, up to 500 characters.
- `videoId` (string, required): YouTube video ID (11 characters), e.g. dQw4w9WgXcQ.

### `youtube_propose_consumption_queue` (~43 tokens)

Create a finite selected-profile local consumption queue.

Input parameters:

- `minutes` (number, required): Time budget in minutes, greater than 0 and at most 1440.

### `youtube_reset_consumption_data` (~48 tokens)

Delete selected-profile local curation policy, candidates, and queues.

Input parameters:

- `confirm` (boolean): Must be true to delete the local consumption data; set it only after the user approved.

### `youtube_auth_status` (~17 tokens)

Report safe local YouTube authorization readiness.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/pratikgh0se-youtube-mcp/youtube-mcp#diagnostics

## Score history

- 2026-11-05: 62
- 2026-11-04: 61
- 2026-11-03: 61
- 2026-11-02: 60
- 2026-11-01: 60
- 2026-10-31: 49
- 2026-10-30: 52
- 2026-10-29: 51

## Common questions

### What is the io.github.pratikgh0se/youtube-mcp server?

io.github.pratikgh0se/youtube-mcp is listed in the public MCP registry as io.github.pratikgh0se/youtube-mcp. Search YouTube, manage your channel and read analytics; every change needs your approval. This page covers its MCPB bundle (https://github.com/pratikgh0se/youtube-mcp/releases/download/v0.3.1/youtube-mcp-0.3.1.mcpb).

### Is the io.github.pratikgh0se/youtube-mcp server safe to use?

io.github.pratikgh0se/youtube-mcp scores 62 out of 100 on VerifyMCP. It declares no install or post-install scripts. 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 io.github.pratikgh0se/youtube-mcp server expose?

io.github.pratikgh0se/youtube-mcp exposes 79 tools: youtube_search, youtube_trending, youtube_list_channel_videos, youtube_get_video, youtube_get_channel, and 74 more. Their descriptions and schemas cost roughly 8,230 tokens of context every time the server is loaded.

### What licence is the io.github.pratikgh0se/youtube-mcp server under?

io.github.pratikgh0se/youtube-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- Repository: https://github.com/pratikgh0se/youtube-mcp
- Changelog RSS feed: https://verifymcp.io/servers/pratikgh0se-youtube-mcp/youtube-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/pratikgh0se-youtube-mcp/youtube-mcp.json
- HTML version of this page: https://verifymcp.io/servers/pratikgh0se-youtube-mcp/youtube-mcp
