MCPInstall

youtube

Agent-callable YouTube tools — search and read videos, update and delete videos, manage playlists and playlist items, read and post comments, rate videos, manage subscriptions, and read channel and caption metadata. Use when the user mentions YouTube or wants to find, comment on, or organize YouTube videos and playlists, even if they don't name YouTube explicitly.

Installs
116
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/zapier/connectors --skill youtube
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads youtube automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

YouTube

<!-- BEGIN:skill-intro -->

Scripts for working with YouTube against the YouTube Data API v3 (https://www.googleapis.com/youtube/v3/): search and read videos, update or delete videos, like or dislike videos, create and manage playlists and their items, read and post comments, manage subscriptions, and read channel, category, and caption metadata. 22 scripts across video discovery, video and playlist management, community engagement, and the read surfaces an agent needs to resolve ids.

<!-- legal:disclaimer -->

Independent, unofficial connector for YouTube. Not affiliated with, endorsed by, or sponsored by YouTube. "YouTube" is a trademark of its owner, used only to identify the service this connector works with.

<!-- /legal:disclaimer --> <!-- END:skill-intro -->

When to use this

<!-- BEGIN:skill-use-cases -->
  • An agent needs to find or read video data — search for videos, get a video's full statistics and details, list the videos in a playlist, or read a channel's profile and uploads.
  • An agent needs to manage videos — update an existing video's metadata without wiping the fields it didn't touch, like/dislike, or delete a video it owns.
  • An agent needs to organize playlists — create, update, or delete playlists, and add or remove videos.
  • An agent needs to engage with the community — read comment threads, post a comment, reply to a thread, or subscribe / unsubscribe to channels.
<!-- END:skill-use-cases -->

Setup

This is an agentskills.io skill.

If the connector has not been installed as a skill yet, install it first with npx skills add zapier/connectors --skill youtube (or your harness's own skill-install mechanism), then continue here. Installing the skill copies these files, not dependencies. Before running the CLI, a local MCP server, or zapier-sdk auth commands, run npm install --omit=dev here once. Importing the published package as a dependency in your own project instead? That npm install already resolves everything — see references/use-as-sdk.md.

Want the actual repo source instead — to browse references/, run this connector's tests, or hack on it? See README.md for a scoped git clone.

The connector runs on Node.js 22.18+. Pick the reference that matches how you're running it, and load it before doing anything else:

You have...Load
An MCP-aware client — tools may already be loaded (e.g. mcp__youtube__<tool>), or you can register a local server yourself (or guide the user to)references/use-as-mcp.md
Terminal / subprocess access (you can run node)references/use-as-cli.md
Only your own code, importing this package as a dependencyreferences/use-as-sdk.md
No tool access, no terminal, no ability to import this package — you write your own code that calls the YouTube API directly (e.g. a code-execution sandbox)references/use-as-recipe.md

Scripts

<!-- BEGIN:skill-connections-note? -->

All scripts use the single connection youtube.

<!-- END:skill-connections-note --> <!-- BEGIN:skill-scripts-table -->
ScriptScript nameConnectionsDescription
scripts/searchVideos.tssearchVideosSingle (youtube)Search videos by keyword, channel, date, or duration (id + snippet only; separate quota bucket).
scripts/getVideo.tsgetVideoSingle (youtube)Get full details of one or more videos by id — snippet, statistics, contentDetails, status.
scripts/updateVideo.tsupdateVideoSingle (youtube)Update a video's metadata (read-modify-write — only the fields you pass change).
scripts/deleteVideo.tsdeleteVideoSingle (youtube)Permanently delete a video you own.
scripts/rateVideo.tsrateVideoSingle (youtube)Like, dislike, or clear your rating on a video.
scripts/listPlaylists.tslistPlaylistsSingle (youtube)List playlists owned by the user or a channel, or fetch playlists by id.
scripts/createPlaylist.tscreatePlaylistSingle (youtube)Create a new playlist on the user's channel.
scripts/updatePlaylist.tsupdatePlaylistSingle (youtube)Update a playlist's title, description, or privacy (replaces, doesn't merge).
scripts/deletePlaylist.tsdeletePlaylistSingle (youtube)Permanently delete a playlist you own.
scripts/listPlaylistItems.tslistPlaylistItemsSingle (youtube)List the videos in a playlist, in order (each item carries its playlistItem id).
scripts/addVideoToPlaylist.tsaddVideoToPlaylistSingle (youtube)Add a video to a playlist you own.
scripts/removeVideoFromPlaylist.tsremoveVideoFromPlaylistSingle (youtube)Remove an item from a playlist (by playlistItem id, not video id).
scripts/listComments.tslistCommentsSingle (youtube)List top-level comment threads on a video, each with its first replies.
scripts/postComment.tspostCommentSingle (youtube)Post a new top-level comment on a video (needs the comment scope).
scripts/replyToComment.tsreplyToCommentSingle (youtube)Reply to an existing top-level comment thread (needs the comment scope).
scripts/getChannel.tsgetChannelSingle (youtube)Get a channel's profile, statistics, and uploads-playlist id (by mine / id / @handle).
scripts/listVideoCategories.tslistVideoCategoriesSingle (youtube)List the assignable video categories for a region.
scripts/listSubscriptions.tslistSubscriptionsSingle (youtube)List the user's subscriptions, or check a subscription to one channel.
scripts/subscribeToChannel.tssubscribeToChannelSingle (youtube)Subscribe the user to a channel.
scripts/unsubscribeFromChannel.tsunsubscribeFromChannelSingle (youtube)Unsubscribe the user from a channel (by subscription id, not channel id).
scripts/listCaptions.tslistCaptionsSingle (youtube)List the caption tracks available for a video (needs the comment/caption scope).
scripts/downloadCaption.tsdownloadCaptionSingle (youtube)Download a caption track's text in a chosen format (srt/vtt/sbv/scc/ttml).
<!-- END:skill-scripts-table --> <!-- BEGIN:disambiguation-and-refusals? -->

Disambiguation & refusals

Disambiguation before a write. Before writing against a video, playlist, or channel you looked up by name (e.g. a video from searchVideos, a playlist from listPlaylists, a channel from getChannel/searchVideos), count the exact case-insensitive title matches:

  • Exactly one match — act on it. Don't over-ask; a single unambiguous match is the answer.
  • Two or more that tie — stop. List the tied candidates with a distinguishing field (channel title, publish date, view count, or the id) and ask the user which one they mean. Titles are not unique on YouTube — many videos and channels share a name — so never pick arbitrarily and never write to all of them.

Mind the id traps. removeVideoFromPlaylist takes the playlistItem id from listPlaylistItems, not the video id. unsubscribeFromChannel takes the subscription id from listSubscriptions, not the channel id. Passing the wrong id is the most common failure; resolve via the listed script first.

Unsupported operations — say so and stop; don't fake it with another script. This catalog deliberately does not:

  • Report analytics (views-over-time, watch-time, revenue, demographics). There is no analytics script. Don't substitute a video's lifetime statistics counts and present them as an analytics report.
  • Moderate comments (edit, delete, hide, mark as spam, or set moderation status) — only reading, posting, and replying are supported. Replies are single-level: you cannot reply to a reply.
  • Live-stream (create or manage broadcasts/streams) or upload/replace captions — captions are read-only here (list + download).
  • Upload videos or set custom thumbnails — there is no uploadVideo or setVideoThumbnail script. These require binary media uploads, which the connection transport does not support.
  • Administer a channel (edit channel branding, sections, or settings).

If asked for any of these, tell the user it's unsupported and stop — don't reach for an unrelated script to approximate it.

<!-- END:disambiguation-and-refusals -->

Auth

Every shape passes auth as one connection selector, not the secret — a [<resolver>:]<value> string. Every connector accepts zapier:<connection-id> (Zapier-managed auth — routes through Zapier's auth, retries, and governance layer); some also accept one or more direct-token resolvers (naming and count vary per connector) — check this connector's own resolvers rather than assuming. The <resolver>: prefix is optional; a bare value goes to the first resolver that claims it — a UUID-shaped bare value always claims zapier:. Each script declares the connections it needs and the resolvers each accepts. The exact syntax for passing a connection (and how to see this connector's resolver list) differs by shape — see the reference you loaded above.

Checking what's already configured first? Don't dump environment values to do it — env or env | grep <name> prints the value along with the name, leaking a live credential into the transcript if one is set. Check names only (env | cut -d= -f1 | grep -i <name>) or test a known name directly ([ -n "$VAR_NAME" ]).

<!-- BEGIN:skill-auth-notes? operational behavior that differs by WHICH resolver is used — a safety gate only one path enforces, scopes/permissions that differ between resolvers, a billing/plan difference tied to the auth path, or a feature only available (or unavailable) on one resolver. Not for describing how to obtain or pass a credential — that's references/use-without-zapier.md's job. Leave this region empty (unfilled) if every resolver behaves identically. --> <!-- END:skill-auth-notes -->

No connection yet? Pick one — and follow the reference's own flow to obtain it; never just ask the user for a connection id or token as if they already have one memorized:

Load
Pass the credential directlyreferences/use-without-zapier.md
Route it through a Zapier connectionreferences/use-with-zapier.md

Output format

Every script returns a { data, meta } envelope:

  • data — the script's result (the shape its outputSchema declares; see the reference you loaded above for how to inspect a script's exact schema in your shape).
  • meta.outputDataValidation — what validating data did:
    • { skipped: false, droppedPaths: null } — validated, nothing removed.
    • { skipped: false, droppedPaths: [...], instruction } — validated, but those paths were stripped from data: fields the script returned from the API that the outputSchema doesn't declare. If you need them, re-run with output validation skipped.
    • { skipped: true } — validation was bypassed; data is the raw, unchecked script output.

Reading dropped fields / skipOutputDataValidation. To receive the raw, unvalidated result, opt out of output validation (the exact syntax differs by shape — see the reference you loaded above). Input validation is never skipped.

Trimming the result / filterOutputData. To shrink a large result down to the fields you need, pass a jq expression that post-processes data (again, exact syntax per shape). The jq runs against data only, NOT the { data, meta } envelope, so write it rooted at data (run the script's --help — or your shape's equivalent — to see its output schema). The transformed value replaces data, meta is preserved, and the result is NOT re-validated against the output schema.

<!-- BEGIN:skill-references-table -->

References

Load the matching reference file before working in that area:

ReferenceCoversLoad it when
references/youtube-api-gotchas.mdThe part model, per-bucket quota system, error envelope and reason→recovery mapping, OAuth scope requirements (youtube, youtube.force-ssl), counts-as-strings, and per-resource quirks for videos, search, playlists, comments, captions, channels, and subscriptions.Before relying on counts, quotas, scopes, pagination, IDs, or any non-obvious response field.
<!-- END:skill-references-table -->

FAQ

What does the youtube skill do?

Agent-callable YouTube tools — search and read videos, update and delete videos, manage playlists and playlist items, read and post comments, rate videos, manage subscriptions, and read channel and caption metadata. Use when the user mentions YouTube or wants to find, comment on, or organize YouTube videos and playlists, even if they don't name YouTube explicitly.

How do I install youtube?

Run npx skills add https://github.com/zapier/connectors --skill youtube in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/youtube/ (personal) or .claude/skills/youtube/ (project).

Which AI agents can use youtube?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is youtube safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains youtube?

It is published by zapier in zapier/connectors. It has 116 recorded installs.

More from zapier/connectors

View all →

google-contacts

zapier/connectors

Open the skill to read its SKILL.md instructions.

196 installs

notion

zapier/connectors

Open the skill to read its SKILL.md instructions.

google-calendar

zapier/connectors

Agent-callable Google Calendar tools — create, update, move, search, and delete events, manage calendars, check free/busy availability, resolve event colors, and manage calendar sharing. Use when the user mentions Google Calendar or wants to schedule, find, reschedule, or share events and calendars — including requests that do not name Google Calendar explicitly, e.g. "put a meeting on my calendar Tuesday 3pm" or "am I free Friday afternoon".

google-sheets

zapier/connectors

Open the skill to read its SKILL.md instructions.

126 installs

microsoft-outlook

zapier/connectors

Agent-callable Microsoft Outlook tools — read and search mail, send/reply/forward, organize messages and folders, manage calendar events, and manage contacts. Use when the user mentions Outlook, Microsoft 365 mail/calendar/contacts, or wants to send, read, search, or organize email, schedule events, or look up contacts — even if they don't name Outlook explicitly.

dropbox

zapier/connectors

Open the skill to read its SKILL.md instructions.

118 installs

Popular other skills

View category →

hyperframes-cli

heygen-com/hyperframes

The HyperFrames CLI by job - scaffold, check, look at frames, edit the timeline, preview, render locally or in the cloud, publish, project history - plus reading its JSON and recovering from build or render failures.

1.3M installs

triage

mattpocock/skills

Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.

1M installs

ask-matt

mattpocock/skills

Ask which skill or flow fits your situation. A router over the skills in this repo.

778.4K installs

to-questionnaire

mattpocock/skills

Turn a decision you can't fully answer into a questionnaire for someone else to fill in.

508.9K installs

wait-what

mattpocock/skills

Stop. That last message did not land: re-pitch it.

459.7K installs

loop-me

mattpocock/skills

Grill me about specs for the workflows I want to build, within this workspace.

447.9K installs