Awesome-openclaw-skills youtube
Search YouTube videos, get channel info, fetch video details and transcripts using YouTube Data API v3 via MCP server or yt-dlp fallback.
git clone https://github.com/sundial-org/awesome-openclaw-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/youtube" ~/.claude/skills/sundial-org-awesome-openclaw-skills-youtube && rm -rf "$T"
T=$(mktemp -d) && git clone --depth=1 https://github.com/sundial-org/awesome-openclaw-skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/youtube" ~/.openclaw/skills/sundial-org-awesome-openclaw-skills-youtube && rm -rf "$T"
skills/youtube/SKILL.mdYouTube Research & Transcription
Search YouTube, get video/channel info, and fetch transcripts using YouTube Data API v3.
Features
- 📹 Video details (title, description, stats, publish date)
- 📝 Transcripts with timestamps
- 📺 Channel info and recent videos
- 🔍 Search within YouTube
- 🎬 Playlist info
Setup
1. Install dependencies
MCP Server (primary method):
npm install -g zubeid-youtube-mcp-server
Fallback tool (if MCP fails):
# yt-dlp for transcript extraction pip install yt-dlp
2. Get YouTube API Key
- Go to Google Cloud Console
- Create/select a project (e.g., "YouTube Research")
- Enable the API:
- Menu → "APIs & Services" → "Library"
- Search: "YouTube Data API v3"
- Click "Enable"
- Create credentials:
- "APIs & Services" → "Credentials"
- "Create Credentials" → "API Key"
- Copy the key
- Optional - Restrict:
- Click the created key
- "API restrictions" → Select only "YouTube Data API v3"
- Save
3. Configure API Key
Option A: Clawdbot config (recommended) Add to
~/.clawdbot/clawdbot.json:
{ "skills": { "entries": { "youtube": { "apiKey": "AIzaSy..." } } } }
Option B: Environment variable
export YOUTUBE_API_KEY="AIzaSy..."
4. Setup MCP Server
The skill will use
mcporter to call the YouTube MCP server:
# Build from source (if installed package has issues) cd /tmp git clone https://github.com/ZubeidHendricks/youtube-mcp-server cd youtube-mcp-server npm install npm run build
Usage
Search Videos
mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ search_videos query="ClawdBot AI" maxResults:5
Returns video IDs, titles, descriptions, channel info.
Get Channel Info
mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ channels_info channelId="UCSHZKyawb77ixDdsGog4iWA"
List Recent Videos from Channel
mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ channels_listVideos channelId="UCSHZKyawb77ixDdsGog4iWA" maxResults:5
Get Video Details
mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ videos_details videoId="Z-FRe5AKmCU"
Get Transcript (Primary)
mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ transcripts_getTranscript videoId="Z-FRe5AKmCU"
Get Transcript (Fallback with yt-dlp)
If MCP transcript fails (empty or unavailable), use
yt-dlp:
yt-dlp --skip-download --write-auto-sub --sub-lang en --sub-format vtt \ --output "/tmp/%(id)s.%(ext)s" \ "https://youtube.com/watch?v=Z-FRe5AKmCU"
Then read the
.vtt file from /tmp/.
Or get transcript directly:
yt-dlp --skip-download --write-auto-sub --sub-lang en --print "%(subtitles)s" \ "https://youtube.com/watch?v=VIDEO_ID" 2>&1 | grep -A1000 "WEBVTT"
Common Workflows
1. Find Latest Episode from a Podcast
Example: Lex Fridman Podcast
# Get channel ID (Lex Fridman: UCSHZKyawb77ixDdsGog4iWA) mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ channels_listVideos channelId="UCSHZKyawb77ixDdsGog4iWA" maxResults:1
Returns most recent video with title, ID, publish date.
2. Get Transcript for Research
# Step 1: Get video ID from search or channel listing # Step 2: Try MCP transcript first mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ transcripts_getTranscript videoId="VIDEO_ID" # Step 3: If empty, fallback to yt-dlp yt-dlp --skip-download --write-auto-sub --sub-lang en \ --output "/tmp/%(id)s.%(ext)s" \ "https://youtube.com/watch?v=VIDEO_ID" cat /tmp/VIDEO_ID.en.vtt
3. Search for Topics
mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ search_videos query="Laravel AI productivity 2025" maxResults:10
Filter results for relevant channels or dates.
Channel IDs Reference
Keep frequently used channels here for quick access:
- Lex Fridman Podcast:
UCSHZKyawb77ixDdsGog4iWA - Indie Hackers: (add when needed)
- Laravel: (add when needed)
To find a channel ID:
- Go to channel page
- View page source
- Search for
or"channelId":"externalId"
Or use search and extract from results.
API Quota Limits
YouTube Data API v3 has daily quotas:
- Default: 10,000 units/day
- Search: 100 units per call
- Video details: 1 unit per call
- Transcript: 0 units (uses separate mechanism)
Tip: Use transcript lookups liberally (no quota cost), be conservative with search.
Troubleshooting
MCP Server Not Working
Symptom:
Connection closed or YOUTUBE_API_KEY environment variable is required
Fix: Build from source:
cd /tmp git clone https://github.com/ZubeidHendricks/youtube-mcp-server cd youtube-mcp-server npm install npm run build # Test YOUTUBE_API_KEY="your_key" node dist/cli.js
Empty Transcripts
Symptom: Transcript returned but content is empty
Cause: Video may not have captions, or MCP can't access them
Fix: Use yt-dlp fallback (see above)
yt-dlp Not Found
pip install --user yt-dlp # or pipx install yt-dlp
Security Note
The YouTube API key is safe to use with this MCP server:
- ✅ Key only used to authenticate with official YouTube Data API
- ✅ No third-party servers involved
- ✅ All network calls go to
googleapis.com - ✅ Code reviewed (no data exfiltration)
However:
- 🔒 Keep the key in Clawdbot config (not in code/scripts)
- 🔒 Restrict API key to YouTube Data API v3 only (in Google Cloud Console)
- 🔒 Don't commit the key to git repositories
Examples
Research Podcast for LinkedIn Post Ideas
# 1. Find latest Lex Fridman episode mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ channels_listVideos channelId="UCSHZKyawb77ixDdsGog4iWA" maxResults:1 # 2. Get video details mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ videos_details videoId="Z-FRe5AKmCU" # 3. Get transcript mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ transcripts_getTranscript videoId="Z-FRe5AKmCU" # If transcript empty, use yt-dlp yt-dlp --skip-download --write-auto-sub --sub-lang en \ --output "/tmp/%(id)s.%(ext)s" \ "https://youtube.com/watch?v=Z-FRe5AKmCU" # 4. Analyze transcript for interesting topics # (read /tmp/Z-FRe5AKmCU.en.vtt and extract key themes)
Find Videos About a Trending Topic
# Search for recent videos mcporter call --stdio "node /tmp/youtube-mcp-server/dist/cli.js" \ search_videos query="ClawdBot security concerns" maxResults:10 # Pick relevant ones, get transcripts # Analyze sentiment and technical claims
Notes
- MCP server path:
/tmp/youtube-mcp-server/dist/cli.js - Always pass API key via environment:
YOUTUBE_API_KEY="key" node ... - Or set globally in shell/Clawdbot config
- Transcripts may be auto-generated (check accuracy for quotes)
- yt-dlp can also download audio if you need it (
)--extract-audio --audio-format mp3