Skip to content
Agentmart
Submit a tool

YouTube MCP

MCP server for YouTube creator-ops with a ComfyUI bridge for AI thumbnail generation.

Connector by miller-joe · GitHub account verified by the MCP Registry

IndexedMITRemote (HTTP)★ 2
Write a review

Install

Pick your client. Read the repository before you give any tool access to your data.

No install instructions from the source yet. Check the repository for setup steps.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

MCP server for YouTube creator-ops with a ComfyUI bridge for AI thumbnail generation.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
7 read · 7 write · 2 delete
Secrets
None asked for
Install scripts
Not scanned yet
Runs as
Node.js package

Tools by what they do 16

Read from the source code; the running server may list different tools.

Read 7 · Look things up without changing anything.

  • get_shorts_analytics
  • get_video
  • list_captions
  • list_comments
  • list_my_shorts
  • list_my_videos
  • query_channel_analytics

Write 7 · Create, change, send or run things.

  • add_to_playlist
  • create_playlist
  • generate_and_set_thumbnail
  • moderate_comment
  • reply_to_comment
  • update_video_metadata
  • upload_caption

Delete 2 · Delete, drop, revoke or wipe things.

  • delete_caption
  • delete_video

Tools (16)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_to_playlist

    Appends a video to an existing playlist via the YouTube Data API. Write operation: it inserts a playlistItem (not idempotent — calling it twice adds the same video twice). Requires OAuth with the youtube.force-ssl scope and consumes write quota (~50 Data API units). Returns a confirmation line with the video and playlist IDs. Use create_playlist first (or an existing playlist ID) to get playlist_id, and list_my_videos/get_video to get video_id; both arguments are YouTube IDs, not URLs.

  • create_playlist

    Creates a new (empty) playlist on the authenticated channel via the YouTube Data API. Write operation: it inserts a new playlist resource owned by the authenticated channel (not idempotent — each call creates a separate playlist, even with identical titles; there is no delete-playlist tool here, so cleanup must be done manually in YouTube Studio). Defaults to 'private' visibility. Requires OAuth with the youtube.force-ssl scope and consumes write quota (~50 Data API units). Returns a confirmation line with the new playlist's title and ID — capture that ID to pass to add_to_playlist. Use this t…

  • delete_caption

    DESTRUCTIVE and IRREVERSIBLE: permanently deletes a caption track by ID via the YouTube Data API (captions.delete). The track is removed from the video for viewers with no undo; re-adding requires uploading it again. Requires OAuth with the youtube.force-ssl scope and consumes write quota (~50 Data API units). Returns a confirmation line with the deleted track ID. Use list_captions first to find the correct caption_id; note caption_id is a caption track ID, not a video ID.

  • delete_video

    DESTRUCTIVE and IRREVERSIBLE: permanently deletes a video from the channel via the YouTube Data API. Side effects: as a safety guard it first fetches the video and aborts unless confirm_video_title matches the current title exactly; on match it issues videos.delete and the video (and its comments, analytics history, and URL) are gone for good with no undo. Requires OAuth with the youtube.force-ssl scope and consumes write quota (~50 Data API units). Returns a confirmation line with the deleted ID and title. Use only on explicit user request; never as cleanup. To change visibility without delet…

  • generate_and_set_thumbnail

    Generates a thumbnail image from a text prompt on the configured ComfyUI server, then uploads it as the video's custom thumbnail via the YouTube Data API. Two side effects: (1) it runs a text-to-image generation job on ComfyUI (this tool is only registered when a ComfyUI URL is configured; the call can take many seconds to minutes and may time out after ~10 minutes), and (2) it overwrites the video's current custom thumbnail — a write operation that replaces any existing thumbnail immediately and publicly (the prior thumbnail is not preserved). Requires OAuth with the youtube.upload scope and …

  • get_shorts_analytics

    Queries the YouTube Analytics API for the authenticated channel restricted to Shorts, by forcing filters=creatorContentType==SHORTS on top of the supplied start_date/end_date/metrics/dimensions. Read-only; no mutations. Requires OAuth with the yt-analytics.readonly scope and uses YouTube Analytics API quota (separate from the Data API). Returns the raw Analytics response as pretty-printed JSON (column headers plus rows). Use this for Shorts-only performance reporting; use query_channel_analytics for whole-channel or custom-filtered reports, and list_my_shorts to enumerate the Shorts themselves…

  • get_video

    Fetches full details for a single video by ID — snippet (title, description, tags, category), status (privacy), statistics (views/likes/comments), and contentDetails (duration). Read-only; no mutations. Requires OAuth and costs ~1 YouTube Data API read unit. Returns the raw video resource as pretty-printed JSON, or a 'Video not found' message if the ID doesn't resolve. Use this when you already know the video ID and need its current metadata (e.g. before update_video_metadata); use list_my_videos to discover IDs across the channel.

  • list_captions

    Lists the caption tracks on a video with their language, name, track kind, status, and draft flag. Read-only; no mutations. Requires OAuth and costs ~50 YouTube Data API units (captions.list). Returns a text list, one line per track: caption track ID, language, name, kind, status, and a [draft] marker, or a message that the video has no caption tracks. Use this to get a caption track ID before delete_caption, or to check existing tracks before upload_caption.

  • list_comments

    Lists top-level comment threads on a video, newest first. Read-only; no mutations. Requires OAuth and costs ~1 YouTube Data API read unit. Returns a text list, one line per thread: comment ID, author display name, like count, reply count, and a truncated (~160 char) preview of the comment text. Use the returned comment IDs as parent_id for reply_to_comment or comment_id for moderate_comment. Note: this returns only the top-level comment of each thread, not nested replies, and does not paginate beyond max_results.

  • list_my_shorts

    Lists the authenticated channel's recent Shorts by scanning the most recent uploads (up to max_candidates) and keeping videos with a duration ≤ 60s. Read-only; no mutations. Requires OAuth and costs YouTube Data API read units proportional to how many uploads are scanned (it pages through uploads in batches of 50). Returns a text list, one line per Short: video ID, title, duration in seconds, and view count, or a message that no Shorts were found. This is a heuristic (the Data API exposes no direct Shorts filter), so very recent or edge-case Shorts may be missed; use list_my_videos for all vid…

  • list_my_videos

    Lists videos on the authenticated channel, newest first (read from the channel's uploads playlist). Read-only; no mutations. Requires OAuth (uses the stored channel-owner token) and costs a few YouTube Data API read units per call (channels.list + playlistItems.list + videos.list). Returns a text list of one line per video: video ID, title, view count, and privacy status, plus a next page_token line for pagination. Use this to discover your own video IDs to feed into get_video, update_video_metadata, delete_video, or playlist/comment tools; use get_video for full details on a single known vide…

  • moderate_comment

    Sets the moderation status of a comment on the authenticated channel's videos via the Data API. Write/moderation operation that changes the comment's public visibility: 'heldForReview' hides it pending approval, 'published' approves/restores it, 'rejected' removes it from public view (effectively a soft delete — reversibility via the API is not guaranteed). Requires OAuth with the youtube.force-ssl scope and consumes write quota (~50 Data API units). Returns a confirmation line with the comment ID and new status. Use list_comments to find comment IDs; use this to approve/hide/reject viewer com…

  • query_channel_analytics

    Queries the YouTube Analytics API (reports endpoint, ids=channel==MINE) for the authenticated channel over a date range. Read-only; no mutations. Requires OAuth with the yt-analytics.readonly scope; uses YouTube Analytics API quota (separate from the Data API). Returns a plain-text table: a header row of column names followed by one row per result, '|'-separated, scoped by the supplied metrics/dimensions/filters. Use this for views/watch-time/retention/subscriber/traffic-source reporting across the channel; pass filters='video==VIDEO_ID' to scope to one video, or use get_shorts_analytics to re…

  • reply_to_comment

    Posts a public reply to an existing top-level YouTube comment via the Data API. Side effects: creates a publicly visible comment under the authenticated channel's identity (not idempotent — calling twice posts two replies and there is no built-in undo). Requires OAuth with the youtube.force-ssl scope and consumes write quota (~50 Data API units). Returns a confirmation line referencing the parent comment ID. Use list_comments first to get a valid parent_id; this tool replies within an existing thread only (it cannot start a new top-level comment, and parent_id must be a top-level comment, not …

  • update_video_metadata

    Updates a video's metadata — title, description, tags, category, and/or privacy — via the YouTube Data API. Write operation (not read-only): it overwrites the supplied fields on the live video (tags are replaced wholesale, not merged); changes are visible publicly and take effect immediately, though they can be edited again. Only pass the fields you want changed; omitted fields are left as-is. Because the API requires title+category on any snippet update, it transparently fetches and reuses the current title/category when you omit them. Requires OAuth with the youtube.force-ssl scope and consu…

Show 1 more tools
  • upload_caption

    Uploads a new caption/subtitle track (SubRip SRT or WebVTT) to a video via the YouTube Data API. Write operation: it always inserts a new track (not idempotent — it does not replace an existing same-language track, so repeated calls create duplicates; use a distinct name per track or is_draft=true while iterating, and delete_caption to remove extras). Newly uploaded non-draft tracks become visible to viewers. Requires OAuth with the youtube.force-ssl scope and consumes heavy write quota (~400 YouTube Data API units). Returns confirmation lines with the new caption track ID, video ID, language,…

Signals

Stars
2
Forks
1
Open issues
0
Weekly downloads
35
Last commit
Jun 8, 2026 (4 months ago)
Last release
Apr 25, 2026 (6 months ago)
Last package publish
Apr 25, 2026 (6 months ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.miller-joe/youtube-mcp
Version
0.1.2
Auth
API key
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from miller-joe

Cite this page

YouTube MCP. Agent Mart. https://agentmart.dev/connectors/miller-joe-youtube-mcp (last updated 2026-10-24)