home / skills / composiohq / awesome-claude-skills / youtube-automation

youtube-automation skill

/youtube-automation

This skill automates YouTube tasks via Rube MCP, enabling upload, playlist management, search, analytics, and comments handling with current tool schemas.

npx playbooks add skill composiohq/awesome-claude-skills --skill youtube-automation

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
8.8 KB
---
name: youtube-automation
description: "Automate YouTube tasks via Rube MCP (Composio): upload videos, manage playlists, search content, get analytics, and handle comments. Always search tools first for current schemas."
requires:
  mcp: [rube]
---

# YouTube Automation via Rube MCP

Automate YouTube operations through Composio's YouTube toolkit via Rube MCP.

**Toolkit docs**: [composio.dev/toolkits/youtube](https://composio.dev/toolkits/youtube)

## Prerequisites

- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active YouTube connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `youtube`
- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas

## Setup

**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.


1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds
2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `youtube`
3. If connection is not ACTIVE, follow the returned auth link to complete Google OAuth
4. Confirm connection status shows ACTIVE before running any workflows

## Core Workflows

### 1. Upload and Manage Videos

**When to use**: User wants to upload a video or update video metadata

**Tool sequence**:
1. `YOUTUBE_UPLOAD_VIDEO` - Upload a new video [Required]
2. `YOUTUBE_UPDATE_VIDEO` - Update title, description, tags, privacy [Optional]
3. `YOUTUBE_UPDATE_THUMBNAIL` - Set a custom thumbnail [Optional]

**Key parameters**:
- `title`: Video title (max 100 characters)
- `description`: Video description (max 5000 bytes)
- `tags`: Array of keyword tags
- `categoryId`: YouTube category ID (e.g., '22' for People & Blogs)
- `privacyStatus`: 'public', 'private', or 'unlisted'
- `videoFilePath`: Object with `{name, mimetype, s3key}` for the video file

**Pitfalls**:
- UPLOAD_VIDEO consumes high quota; prefer UPDATE_VIDEO for metadata-only changes
- videoFilePath must be an object with s3key, not a raw file path or URL
- Tags total must not exceed 500 characters including separators
- Angle brackets `< >` in tags are automatically stripped
- Description limit is 5000 bytes, not characters (multibyte chars count more)

### 2. Search YouTube Content

**When to use**: User wants to find videos, channels, or playlists

**Tool sequence**:
1. `YOUTUBE_SEARCH_YOU_TUBE` - Search for content [Required]
2. `YOUTUBE_VIDEO_DETAILS` - Get full details for a specific video [Optional]
3. `YOUTUBE_GET_VIDEO_DETAILS_BATCH` - Get details for multiple videos [Optional]

**Key parameters**:
- `q`: Search query (supports exact phrases, exclusions, channel handles)
- `type`: 'video', 'channel', or 'playlist'
- `maxResults`: Results per page (1-50)
- `pageToken`: For pagination

**Pitfalls**:
- Search endpoint only returns 'snippet' part; use VIDEO_DETAILS for statistics
- Search results are capped at 500 total items
- Search has higher quota cost (100 units) vs list endpoints (1 unit)
- BATCH video details practical limit is ~50 IDs per call; chunk larger sets

### 3. Manage Playlists

**When to use**: User wants to create playlists or manage playlist contents

**Tool sequence**:
1. `YOUTUBE_LIST_USER_PLAYLISTS` - List user's existing playlists [Optional]
2. `YOUTUBE_CREATE_PLAYLIST` - Create a new playlist [Optional]
3. `YOUTUBE_ADD_VIDEO_TO_PLAYLIST` - Add a video to a playlist [Optional]
4. `YOUTUBE_LIST_PLAYLIST_ITEMS` - List videos in a playlist [Optional]

**Key parameters**:
- `playlistId`: Playlist ID ('PL...' for user-created, 'UU...' for uploads)
- `part`: Resource parts to include (e.g., 'snippet,contentDetails')
- `maxResults`: Items per page (1-50)
- `pageToken`: Pagination token from previous response

**Pitfalls**:
- Do NOT pass channel IDs ('UC...') as playlist IDs; convert 'UC' to 'UU' for uploads
- Large playlists require pagination via pageToken; follow nextPageToken until absent
- items[].id is not the videoId; use items[].snippet.resourceId.videoId
- Creating duplicate playlist names is allowed; check existing playlists first

### 4. Get Channel and Video Analytics

**When to use**: User wants to analyze channel performance or video metrics

**Tool sequence**:
1. `YOUTUBE_GET_CHANNEL_ID_BY_HANDLE` - Resolve a handle to channel ID [Prerequisite]
2. `YOUTUBE_GET_CHANNEL_STATISTICS` - Get channel subscriber/view/video counts [Required]
3. `YOUTUBE_LIST_CHANNEL_VIDEOS` - List all videos from a channel [Optional]
4. `YOUTUBE_GET_VIDEO_DETAILS_BATCH` - Get per-video statistics [Optional]
5. `YOUTUBE_GET_CHANNEL_ACTIVITIES` - Get recent channel activities [Optional]

**Key parameters**:
- `channelId`: Channel ID ('UC...'), handle ('@handle'), or 'me'
- `forHandle`: Channel handle (e.g., '@Google')
- `id`: Comma-separated video IDs for batch details
- `parts`: Resource parts to include (e.g., 'snippet,statistics')

**Pitfalls**:
- Channel statistics are lifetime totals, not per-period
- BATCH video details may return fewer items than requested for private/deleted videos
- Response data may be nested under `data` or `data_preview`; parse defensively
- contentDetails.duration uses ISO 8601 format (e.g., 'PT4M13S')

### 5. Manage Subscriptions and Comments

**When to use**: User wants to subscribe to channels or view video comments

**Tool sequence**:
1. `YOUTUBE_SUBSCRIBE_CHANNEL` - Subscribe to a channel [Optional]
2. `YOUTUBE_UNSUBSCRIBE_CHANNEL` - Unsubscribe from a channel [Optional]
3. `YOUTUBE_LIST_USER_SUBSCRIPTIONS` - List subscriptions [Optional]
4. `YOUTUBE_LIST_COMMENT_THREADS` - List comments on a video [Optional]

**Key parameters**:
- `channelId`: Channel to subscribe/unsubscribe
- `videoId`: Video ID for comment threads
- `maxResults`: Results per page
- `pageToken`: Pagination token

**Pitfalls**:
- Subscribing to an already-subscribed channel may return an error
- Comment threads return top-level comments with up to 5 replies each
- Comments may be disabled on some videos
- Unsubscribe requires the subscription ID, not the channel ID

## Common Patterns

### Channel ID Resolution

**Handle to Channel ID**:
```
1. Call YOUTUBE_GET_CHANNEL_ID_BY_HANDLE with '@handle'
2. Extract channelId from response
3. Use in subsequent channel operations
```

**Uploads Playlist**:
```
1. Get channel ID (starts with 'UC')
2. Replace 'UC' prefix with 'UU' to get uploads playlist ID
3. Use with LIST_PLAYLIST_ITEMS to enumerate all videos
```

### Pagination

- Set `maxResults` (max 50 per page)
- Check response for `nextPageToken`
- Pass token as `pageToken` in next request
- Continue until `nextPageToken` is absent

### Batch Video Details

- Collect video IDs from search or playlist listings
- Chunk into groups of ~50 IDs
- Call GET_VIDEO_DETAILS_BATCH per chunk
- Merge results across chunks

## Known Pitfalls

**Quota Management**:
- YouTube API has a daily quota limit (default 10,000 units)
- Upload = 1600 units; search = 100 units; list = 1 unit
- Prefer list endpoints over search when possible
- Monitor quota usage to avoid hitting daily limits

**ID Formats**:
- Video IDs: 11-character alphanumeric strings
- Channel IDs: Start with 'UC' followed by 22 characters
- Playlist IDs: Start with 'PL' (user) or 'UU' (uploads)
- Do not confuse channel IDs with playlist IDs

**Thumbnails**:
- Custom thumbnails require channel phone verification
- Must be JPG, PNG, or GIF; under 2MB
- Recommended: 1280x720 resolution (16:9 aspect ratio)

**Response Parsing**:
- Statistics values are returned as strings, not integers; cast before math
- Duration uses ISO 8601 format (PT#H#M#S)
- Batch responses may wrap data under different keys

## Quick Reference

| Task | Tool Slug | Key Params |
|------|-----------|------------|
| Upload video | YOUTUBE_UPLOAD_VIDEO | title, description, tags, categoryId, privacyStatus, videoFilePath |
| Update video | YOUTUBE_UPDATE_VIDEO | video_id, title, description, tags |
| Set thumbnail | YOUTUBE_UPDATE_THUMBNAIL | videoId, thumbnailUrl |
| Search YouTube | YOUTUBE_SEARCH_YOU_TUBE | q, type, maxResults |
| Video details | YOUTUBE_VIDEO_DETAILS | id, part |
| Batch video details | YOUTUBE_GET_VIDEO_DETAILS_BATCH | id, parts |
| List playlists | YOUTUBE_LIST_USER_PLAYLISTS | maxResults, pageToken |
| Create playlist | YOUTUBE_CREATE_PLAYLIST | (check schema) |
| Add to playlist | YOUTUBE_ADD_VIDEO_TO_PLAYLIST | (check schema) |
| List playlist items | YOUTUBE_LIST_PLAYLIST_ITEMS | playlistId, maxResults |
| Channel statistics | YOUTUBE_GET_CHANNEL_STATISTICS | id/forHandle/mine |
| List channel videos | YOUTUBE_LIST_CHANNEL_VIDEOS | channelId, maxResults |
| Channel ID by handle | YOUTUBE_GET_CHANNEL_ID_BY_HANDLE | channel_handle |
| Subscribe | YOUTUBE_SUBSCRIBE_CHANNEL | channelId |
| List subscriptions | YOUTUBE_LIST_USER_SUBSCRIPTIONS | (check schema) |
| List comments | YOUTUBE_LIST_COMMENT_THREADS | videoId |
| Channel activities | YOUTUBE_GET_CHANNEL_ACTIVITIES | (check schema) |

---
*Powered by [Composio](https://composio.dev)*

Overview

This skill automates YouTube tasks through Composio's YouTube toolkit via a Rube MCP connector. It handles uploads, metadata updates, thumbnails, playlist and subscription management, searches, analytics, and comment threads with built-in patterns for pagination, batching, and ID resolution. Always search the MCP tools first to get current schemas before calling operations.

How this skill works

The skill uses Rube MCP tool calls (e.g., YOUTUBE_UPLOAD_VIDEO, YOUTUBE_SEARCH_YOU_TUBE) after confirming RUBE_SEARCH_TOOLS and an ACTIVE YouTube connection via RUBE_MANAGE_CONNECTIONS. Workflows follow prescribed tool sequences: upload → update → thumbnail for video publishing, search → details for discovery, and list → batch details for analytics. Parameters and responses must be parsed defensively (string stats, ISO 8601 durations, nested data keys).

When to use it

  • Upload or update videos and thumbnails programmatically
  • Search YouTube for videos, channels, or playlists and fetch details
  • Create, list, and manage playlists and playlist contents
  • Pull channel-level and per-video analytics for reporting
  • Manage subscriptions and view or moderate comment threads

Best practices

  • Always call RUBE_SEARCH_TOOLS first to fetch current tool schemas
  • Confirm RUBE_MANAGE_CONNECTIONS shows ACTIVE before running workflows
  • Prefer list endpoints over search to save quota; chunk batch calls (~50 IDs) to avoid limits
  • Supply videoFilePath as an object with s3key; do not pass raw file paths or URLs
  • Handle pagination via nextPageToken and cast numeric strings to numbers before arithmetic

Example use cases

  • Automate daily uploads with metadata and custom thumbnails for a content pipeline
  • Bulk update titles/descriptions/tags across many videos using UPDATE_VIDEO and batching
  • Build a discovery agent that searches queries, fetches details, and ranks videos by stats
  • Generate a channel performance report by listing channel videos and calling GET_VIDEO_DETAILS_BATCH
  • Create and populate themed playlists by resolving channel uploads and adding videos programmatically

FAQ

Do I need API keys to use Rube MCP with this toolkit?

No API keys are required; add the MCP endpoint (https://rube.app/mcp) to your client configuration and complete Google OAuth via RUBE_MANAGE_CONNECTIONS if prompted.

How do I avoid hitting YouTube quota limits?

Prefer list endpoints (1 unit) over search (100 units) when possible, avoid frequent full uploads, and batch operations into chunks (~50 IDs) to reduce per-call overhead.