youtube_batch_ get_ video_ statsRetrieves a batch of VideoStat resources, possibly filtered.
Find comments held for review and publish or reject them, reply as the channel, fix a video's title and tags, build a playlist, add an SRT caption track, and look up any channel by its @handle.
PopMCPYouTube
Every YouTube Data API v3 tool on the connection, from videos and captions to live broadcasts, each with its quota cost, plus the triggers PopMCP can watch.
88 tools in the full catalog: 32 read and 56 write. 38 load by default, and the rest are found with tool search.
youtube_batch_ get_ video_ statsRetrieves a batch of VideoStat resources, possibly filtered.
youtube_get_ my_ video_ ratingRetrieves the ratings that the authorized user gave to a list of specified videos.
youtube_get_ video_ detailsRetrieves a list of resources, possibly filtered.
youtube_rate_ videoAdds a like or dislike rating to a video or removes a rating from a video.
youtube_update_ videoUpdates an existing resource.
youtube_delete_ caption_ trackDeletes a resource.
youtube_download_ caption_ trackDownloads a caption track.
youtube_list_ captionsRetrieves a list of resources, possibly filtered.
youtube_list_ live_ broadcastsRetrieve the list of broadcasts associated with the given channel.
youtube_replace_ caption_ trackReplace the FILE behind an existing caption track, keeping its id, language and place in the subtitles menu.
youtube_upload_ caption_ trackAdd a subtitle/caption track to one of YOUR videos, sending the caption file as text in a single call.
youtube_delete_ commentDeletes a resource.
youtube_list_ comment_ repliesRetrieves a list of resources, possibly filtered.
youtube_moderate_ commentSets the moderation status of one or more comments.
youtube_reply_ to_ commentInserts a new resource into this collection.
youtube_update_ commentUpdates an existing resource.
youtube_add_ video_ to_ playlistInserts a new resource into this collection.
youtube_list_ my_ videosList the videos on the connected channel, newest first, with NO arguments — the connector fills in the channel's uploads playlist for you.
youtube_list_ playlist_ itemsRetrieves a list of resources, possibly filtered.
youtube_remove_ video_ from_ playlistDeletes a resource.
youtube_update_ playlist_ itemUpdates an existing resource.
youtube_create_ playlistInserts a new resource into this collection.
youtube_delete_ playlistDeletes a resource.
youtube_get_ channel_ by_ handleLook up ANY public channel by its @handle — the normal way to turn something a person says ("check @MKBHD") into the channelId every other tool needs.
youtube_get_ channel_ detailsRetrieves a list of resources, possibly filtered.
youtube_get_ my_ channelGet the channel this connection is authorized as — id, handle, title, subscriber/view/video counts, and the uploads playlist id.
youtube_list_ live_ chat_ messagesRetrieves a list of resources, possibly filtered.
youtube_list_ playlistsRetrieves a list of resources, possibly filtered.
youtube_send_ live_ chat_ messageInserts a new resource into this collection.
youtube_update_ playlistUpdates an existing resource.
youtube_list_ subscriptionsRetrieves a list of resources, possibly filtered.
youtube_subscribe_ to_ channelInserts a new resource into this collection.
youtube_unsubscribe_ from_ channelDeletes a resource.
youtube_list_ comment_ threadsRetrieves a list of resources, possibly filtered.
youtube_post_ commentInserts a new resource into this collection.
youtube_list_ channel_ activitiesRetrieves a list of resources, possibly filtered.
youtube_list_ video_ categoriesRetrieves a list of resources, possibly filtered.
youtube_searchRetrieves a list of search resources Quota: 1 unit, but from a SEPARATE bucket capped at 100 search calls per day (changed 1 June 2026 — it is no longer 100 units from the shared pool).
youtube_delete_ videoDeletes a resource.
youtube_report_ video_ abuseReport abuse for a video.
youtube_upload_ videoInserts a new resource into this collection.
youtube_captions_ insertInserts a new resource into this collection.
youtube_captions_ updateUpdates an existing resource.
youtube_live_ broadcasts_ bindBind a broadcast to a stream.
youtube_live_ broadcasts_ deleteDelete a given broadcast.
youtube_live_ broadcasts_ insertInserts a new stream for the authenticated user.
youtube_live_ broadcasts_ insert_ cuepointInsert cuepoints in a broadcast Quota: 50 units.
youtube_live_ broadcasts_ transitionTransition a broadcast to a given status.
youtube_live_ broadcasts_ updateUpdates an existing broadcast for the authenticated user.
youtube_mark_ comment_ as_ spamExpresses the caller's opinion that one or more comments should be flagged as spam.
youtube_channel_ sections_ deleteDeletes a resource.
youtube_channel_ sections_ insertInserts a new resource into this collection.
youtube_channel_ sections_ updateUpdates an existing resource.
youtube_list_ channel_ sectionsRetrieves a list of resources, possibly filtered.
youtube_live_ chat_ messages_ deleteDeletes a chat message.
youtube_live_ chat_ messages_ transitionTransition a durable chat event.
youtube_live_ streams_ deleteDeletes an existing stream for the authenticated user.
youtube_live_ streams_ insertInserts a new stream for the authenticated user.
youtube_live_ streams_ listRetrieve the list of streams associated with the given channel.
youtube_live_ streams_ updateUpdates an existing stream for the authenticated user.
youtube_playlist_ images_ deleteDeletes a resource.
youtube_playlist_ images_ insertInserts a new resource into this collection.
youtube_playlist_ images_ listRetrieves a list of resources, possibly filtered.
youtube_playlist_ images_ updateUpdates an existing resource.
youtube_third_ party_ links_ deleteDeletes a resource.
youtube_third_ party_ links_ insertInserts a new resource into this collection.
youtube_third_ party_ links_ listRetrieves a list of resources, possibly filtered.
youtube_third_ party_ links_ updateUpdates an existing resource.
youtube_update_ channelUpdates an existing resource.
youtube_live_ chat_ moderators_ deleteDeletes a chat moderator.
youtube_live_ chat_ moderators_ insertInserts a new resource into this collection.
youtube_live_ chat_ moderators_ listRetrieves a list of resources, possibly filtered.
youtube_live_ chat_ bans_ deleteDeletes a chat ban.
youtube_live_ chat_ bans_ insertInserts a new resource into this collection.
youtube_watermarks_ setAllows upload of watermark image and setting it for a channel.
youtube_watermarks_ unsetAllows removal of channel watermark.
youtube_abuse_ reports_ insertInserts a new resource into this collection.
youtube_channel_ banners_ insertInserts a new resource into this collection.
youtube_i18n_ languages_ listRetrieves a list of resources, possibly filtered.
youtube_i18n_ regions_ listRetrieves a list of resources, possibly filtered.
youtube_members_ listRetrieves a list of members that match the request criteria for a channel.
youtube_memberships_ levels_ listRetrieves a list of all pricing levels offered by a creator to the fans.
youtube_set_ video_ thumbnailAs this is not an insert in a strict sense (it supports uploading/setting of a thumbnail for multiple videos, which doesn't result in creation of a single resource), I use a custom verb here.
youtube_super_ chat_ events_ listRetrieves a list of resources, possibly filtered.
youtube_tests_ insertPOST method.
youtube_video_ abuse_ report_ reasons_ listRetrieves a list of resources, possibly filtered.
youtube_video_ trainability_ getReturns the trainability status of a video.
youtube_youtube_ v3_ live_ chat_ messages_ streamAllows an user to load live chat through a server-streamed RPC.
Authorize once, then an endpoint your client signs into. Nothing to deploy, and nothing to install on the YouTube side.
Enable the YouTube Data API v3 in your Google Cloud project, create a Web application OAuth client with PopMCP's callback URL, publish the app, paste the OAuth Client ID and Client Secret, then pick your channel on Google's second screen.
1234567890-abc.apps.googleusercontent.com••••••••••••3f7aupdate_video, delete_comment, post_comment and send_live_chat_message act as your channel the moment the AI calls them. New connections are read-only until an owner allows writes, and only clients you tick for YouTube on the PopMCP consent screen reach it.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your YouTube credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Show me the comments held for review on my channel and publish the ones that aren't spam
youtube_list_comment_threadsok
Then just ask for the work
“Show me the comments held for review on my channel and publish the ones that aren't spam”
“Fix the typo in my latest video's title without touching its description or tags”
“Make a playlist called Beginner Guides from my five most viewed tutorials”
“Add these English subtitles to my newest video and check they processed”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting YouTube behind an AI client.
No. YouTube's upload endpoint needs the video file itself as raw bytes in the request, and an MCP tool call cannot carry that. The same applies to custom thumbnails, channel banners and watermarks. Upload in YouTube Studio, then let the AI finish the job: update_video sets the title, description, tags, category and privacy. Caption tracks are the exception, because they are text: upload_caption_track sends an SRT or WebVTT file in a single call.
The quota belongs to your own Google Cloud project: 10,000 units a day by default, resetting at midnight Pacific, and failed calls still count. Reads cost 1 unit and most writes 50. Search sits in its own bucket of 100 calls a day, so list_my_videos is the cheap way to walk your uploads. Caption uploads cost 400 units and replacements 450. Every tool description states its cost, so the AI can plan around the budget.
The channel you pick on Google's consent screens. Google asks twice: first for the Google account, then for the channel, so for a Brand Account choose that channel on the second screen rather than your personal one. There is no channel id to type. get_my_channel answers which channel the connection belongs to; if it is the wrong one, reconnect. The connection asks for a single permission, youtube.force-ssl, which covers almost the whole Data API.
Your Google Cloud project's app is still in Testing. Google expires refresh tokens from Testing apps after exactly 7 days, so the connection works for a week and then every call fails. Open Google Auth Platform, then Audience, and click Publish app before you connect, or reconnect after publishing. Publishing needs no review from Google; it only adds a one-time "Google hasn't verified this app" screen, where you click Advanced and continue.
Yes, while a broadcast is live. list_live_broadcasts finds the stream and its live chat id, list_live_chat_messages reads chat at the polling interval YouTube returns, and send_live_chat_message posts as the channel. Banning a user and adding a moderator are reachable through tool search. Each chat message costs 50 units, so around 200 messages spend the day's quota, and an account not enabled for live streaming returns a permissions error that reconnecting will not fix.
Fifteen. Polling catches a newly published video and new channel activity. Change detection covers a new comment, a comment held for review, a new subscriber, a new channel member, a Super Chat, a live stream starting or ending, a stream health change, a new playlist, a video added to or removed from a playlist, and a video removed or hidden. Two thresholds fire when a video passes a view count or the channel passes a subscriber count you set.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect YouTube in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking YouTube on the consent screen. The YouTube tools are then available in that session, and no YouTube credential is stored on your machine.
Loading 88 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 38-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 88 here. A trigger is something PopMCP watches for you: 15 YouTube events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into YouTube.
Launch a hosted MCP endpoint for YouTube, keep tool access under control, and start testing real workflow prompts right away.