{
  "schemaVersion": "1.0",
  "item": {
    "slug": "youtube",
    "name": "Youtube",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/grpaiva/youtube",
    "canonicalUrl": "https://clawhub.ai/grpaiva/youtube",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/youtube",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=youtube",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/youtube"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/youtube",
    "agentPageUrl": "https://openagent3.xyz/skills/youtube/agent",
    "manifestUrl": "https://openagent3.xyz/skills/youtube/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/youtube/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "YouTube Research & Transcription",
        "body": "Search YouTube, get video/channel info, and fetch transcripts using YouTube Data API v3."
      },
      {
        "title": "Features",
        "body": "📹 Video details (title, description, stats, publish date)\n📝 Transcripts with timestamps\n📺 Channel info and recent videos\n🔍 Search within YouTube\n🎬 Playlist info"
      },
      {
        "title": "1. Install dependencies",
        "body": "MCP Server (primary method):\n\nnpm install -g zubeid-youtube-mcp-server\n\nFallback tool (if MCP fails):\n\n# yt-dlp for transcript extraction\npip install yt-dlp"
      },
      {
        "title": "2. Get YouTube API Key",
        "body": "Go to Google Cloud Console\nCreate/select a project (e.g., \"YouTube Research\")\nEnable the API:\n\nMenu → \"APIs & Services\" → \"Library\"\nSearch: \"YouTube Data API v3\"\nClick \"Enable\"\n\n\nCreate credentials:\n\n\"APIs & Services\" → \"Credentials\"\n\"Create Credentials\" → \"API Key\"\nCopy the key\n\n\nOptional - Restrict:\n\nClick the created key\n\"API restrictions\" → Select only \"YouTube Data API v3\"\nSave"
      },
      {
        "title": "3. Configure API Key",
        "body": "Option A: Clawdbot config (recommended)\nAdd to ~/.clawdbot/clawdbot.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"youtube\": {\n        \"apiKey\": \"AIzaSy...\"\n      }\n    }\n  }\n}\n\nOption B: Environment variable\n\nexport YOUTUBE_API_KEY=\"AIzaSy...\""
      },
      {
        "title": "4. Setup MCP Server",
        "body": "The skill will use mcporter to call the YouTube MCP server:\n\n# Build from source (if installed package has issues)\ncd /tmp\ngit clone https://github.com/ZubeidHendricks/youtube-mcp-server\ncd youtube-mcp-server\nnpm install\nnpm run build"
      },
      {
        "title": "Search Videos",
        "body": "mcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  search_videos query=\"ClawdBot AI\" maxResults:5\n\nReturns video IDs, titles, descriptions, channel info."
      },
      {
        "title": "Get Channel Info",
        "body": "mcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_info channelId=\"UCSHZKyawb77ixDdsGog4iWA\""
      },
      {
        "title": "List Recent Videos from Channel",
        "body": "mcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_listVideos channelId=\"UCSHZKyawb77ixDdsGog4iWA\" maxResults:5"
      },
      {
        "title": "Get Video Details",
        "body": "mcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  videos_details videoId=\"Z-FRe5AKmCU\""
      },
      {
        "title": "Get Transcript (Primary)",
        "body": "mcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  transcripts_getTranscript videoId=\"Z-FRe5AKmCU\""
      },
      {
        "title": "Get Transcript (Fallback with yt-dlp)",
        "body": "If MCP transcript fails (empty or unavailable), use yt-dlp:\n\nyt-dlp --skip-download --write-auto-sub --sub-lang en --sub-format vtt \\\n  --output \"/tmp/%(id)s.%(ext)s\" \\\n  \"https://youtube.com/watch?v=Z-FRe5AKmCU\"\n\nThen read the .vtt file from /tmp/.\n\nOr get transcript directly:\n\nyt-dlp --skip-download --write-auto-sub --sub-lang en --print \"%(subtitles)s\" \\\n  \"https://youtube.com/watch?v=VIDEO_ID\" 2>&1 | grep -A1000 \"WEBVTT\""
      },
      {
        "title": "1. Find Latest Episode from a Podcast",
        "body": "Example: Lex Fridman Podcast\n\n# Get channel ID (Lex Fridman: UCSHZKyawb77ixDdsGog4iWA)\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_listVideos channelId=\"UCSHZKyawb77ixDdsGog4iWA\" maxResults:1\n\nReturns most recent video with title, ID, publish date."
      },
      {
        "title": "2. Get Transcript for Research",
        "body": "# Step 1: Get video ID from search or channel listing\n# Step 2: Try MCP transcript first\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  transcripts_getTranscript videoId=\"VIDEO_ID\"\n\n# Step 3: If empty, fallback to yt-dlp\nyt-dlp --skip-download --write-auto-sub --sub-lang en \\\n  --output \"/tmp/%(id)s.%(ext)s\" \\\n  \"https://youtube.com/watch?v=VIDEO_ID\"\n\ncat /tmp/VIDEO_ID.en.vtt"
      },
      {
        "title": "3. Search for Topics",
        "body": "mcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  search_videos query=\"Laravel AI productivity 2025\" maxResults:10\n\nFilter results for relevant channels or dates."
      },
      {
        "title": "Channel IDs Reference",
        "body": "Keep frequently used channels here for quick access:\n\nLex Fridman Podcast: UCSHZKyawb77ixDdsGog4iWA\nIndie Hackers: (add when needed)\nLaravel: (add when needed)\n\nTo find a channel ID:\n\nGo to channel page\nView page source\nSearch for \"channelId\": or \"externalId\"\n\nOr use search and extract from results."
      },
      {
        "title": "API Quota Limits",
        "body": "YouTube Data API v3 has daily quotas:\n\nDefault: 10,000 units/day\nSearch: 100 units per call\nVideo details: 1 unit per call\nTranscript: 0 units (uses separate mechanism)\n\nTip: Use transcript lookups liberally (no quota cost), be conservative with search."
      },
      {
        "title": "MCP Server Not Working",
        "body": "Symptom: Connection closed or YOUTUBE_API_KEY environment variable is required\n\nFix: Build from source:\n\ncd /tmp\ngit clone https://github.com/ZubeidHendricks/youtube-mcp-server\ncd youtube-mcp-server\nnpm install\nnpm run build\n\n# Test\nYOUTUBE_API_KEY=\"your_key\" node dist/cli.js"
      },
      {
        "title": "Empty Transcripts",
        "body": "Symptom: Transcript returned but content is empty\n\nCause: Video may not have captions, or MCP can't access them\n\nFix: Use yt-dlp fallback (see above)"
      },
      {
        "title": "yt-dlp Not Found",
        "body": "pip install --user yt-dlp\n# or\npipx install yt-dlp"
      },
      {
        "title": "Security Note",
        "body": "The YouTube API key is safe to use with this MCP server:\n\n✅ Key only used to authenticate with official YouTube Data API\n✅ No third-party servers involved\n✅ All network calls go to googleapis.com\n✅ Code reviewed (no data exfiltration)\n\nHowever:\n\n🔒 Keep the key in Clawdbot config (not in code/scripts)\n🔒 Restrict API key to YouTube Data API v3 only (in Google Cloud Console)\n🔒 Don't commit the key to git repositories"
      },
      {
        "title": "Research Podcast for LinkedIn Post Ideas",
        "body": "# 1. Find latest Lex Fridman episode\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_listVideos channelId=\"UCSHZKyawb77ixDdsGog4iWA\" maxResults:1\n\n# 2. Get video details\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  videos_details videoId=\"Z-FRe5AKmCU\"\n\n# 3. Get transcript\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  transcripts_getTranscript videoId=\"Z-FRe5AKmCU\"\n\n# If transcript empty, use yt-dlp\nyt-dlp --skip-download --write-auto-sub --sub-lang en \\\n  --output \"/tmp/%(id)s.%(ext)s\" \\\n  \"https://youtube.com/watch?v=Z-FRe5AKmCU\"\n\n# 4. Analyze transcript for interesting topics\n# (read /tmp/Z-FRe5AKmCU.en.vtt and extract key themes)"
      },
      {
        "title": "Find Videos About a Trending Topic",
        "body": "# Search for recent videos\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  search_videos query=\"ClawdBot security concerns\" maxResults:10\n\n# Pick relevant ones, get transcripts\n# Analyze sentiment and technical claims"
      },
      {
        "title": "Notes",
        "body": "MCP server path: /tmp/youtube-mcp-server/dist/cli.js\nAlways pass API key via environment: YOUTUBE_API_KEY=\"key\" node ...\nOr set globally in shell/Clawdbot config\nTranscripts may be auto-generated (check accuracy for quotes)\nyt-dlp can also download audio if you need it (--extract-audio --audio-format mp3)"
      }
    ],
    "body": "YouTube Research & Transcription\n\nSearch YouTube, get video/channel info, and fetch transcripts using YouTube Data API v3.\n\nFeatures\n📹 Video details (title, description, stats, publish date)\n📝 Transcripts with timestamps\n📺 Channel info and recent videos\n🔍 Search within YouTube\n🎬 Playlist info\nSetup\n1. Install dependencies\n\nMCP Server (primary method):\n\nnpm install -g zubeid-youtube-mcp-server\n\n\nFallback tool (if MCP fails):\n\n# yt-dlp for transcript extraction\npip install yt-dlp\n\n2. Get YouTube API Key\nGo to Google Cloud Console\nCreate/select a project (e.g., \"YouTube Research\")\nEnable the API:\nMenu → \"APIs & Services\" → \"Library\"\nSearch: \"YouTube Data API v3\"\nClick \"Enable\"\nCreate credentials:\n\"APIs & Services\" → \"Credentials\"\n\"Create Credentials\" → \"API Key\"\nCopy the key\nOptional - Restrict:\nClick the created key\n\"API restrictions\" → Select only \"YouTube Data API v3\"\nSave\n3. Configure API Key\n\nOption A: Clawdbot config (recommended) Add to ~/.clawdbot/clawdbot.json:\n\n{\n  \"skills\": {\n    \"entries\": {\n      \"youtube\": {\n        \"apiKey\": \"AIzaSy...\"\n      }\n    }\n  }\n}\n\n\nOption B: Environment variable\n\nexport YOUTUBE_API_KEY=\"AIzaSy...\"\n\n4. Setup MCP Server\n\nThe skill will use mcporter to call the YouTube MCP server:\n\n# Build from source (if installed package has issues)\ncd /tmp\ngit clone https://github.com/ZubeidHendricks/youtube-mcp-server\ncd youtube-mcp-server\nnpm install\nnpm run build\n\nUsage\nSearch Videos\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  search_videos query=\"ClawdBot AI\" maxResults:5\n\n\nReturns video IDs, titles, descriptions, channel info.\n\nGet Channel Info\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_info channelId=\"UCSHZKyawb77ixDdsGog4iWA\"\n\nList Recent Videos from Channel\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_listVideos channelId=\"UCSHZKyawb77ixDdsGog4iWA\" maxResults:5\n\nGet Video Details\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  videos_details videoId=\"Z-FRe5AKmCU\"\n\nGet Transcript (Primary)\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  transcripts_getTranscript videoId=\"Z-FRe5AKmCU\"\n\nGet Transcript (Fallback with yt-dlp)\n\nIf MCP transcript fails (empty or unavailable), use yt-dlp:\n\nyt-dlp --skip-download --write-auto-sub --sub-lang en --sub-format vtt \\\n  --output \"/tmp/%(id)s.%(ext)s\" \\\n  \"https://youtube.com/watch?v=Z-FRe5AKmCU\"\n\n\nThen read the .vtt file from /tmp/.\n\nOr get transcript directly:\n\nyt-dlp --skip-download --write-auto-sub --sub-lang en --print \"%(subtitles)s\" \\\n  \"https://youtube.com/watch?v=VIDEO_ID\" 2>&1 | grep -A1000 \"WEBVTT\"\n\nCommon Workflows\n1. Find Latest Episode from a Podcast\n\nExample: Lex Fridman Podcast\n\n# Get channel ID (Lex Fridman: UCSHZKyawb77ixDdsGog4iWA)\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_listVideos channelId=\"UCSHZKyawb77ixDdsGog4iWA\" maxResults:1\n\n\nReturns most recent video with title, ID, publish date.\n\n2. Get Transcript for Research\n# Step 1: Get video ID from search or channel listing\n# Step 2: Try MCP transcript first\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  transcripts_getTranscript videoId=\"VIDEO_ID\"\n\n# Step 3: If empty, fallback to yt-dlp\nyt-dlp --skip-download --write-auto-sub --sub-lang en \\\n  --output \"/tmp/%(id)s.%(ext)s\" \\\n  \"https://youtube.com/watch?v=VIDEO_ID\"\n\ncat /tmp/VIDEO_ID.en.vtt\n\n3. Search for Topics\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  search_videos query=\"Laravel AI productivity 2025\" maxResults:10\n\n\nFilter results for relevant channels or dates.\n\nChannel IDs Reference\n\nKeep frequently used channels here for quick access:\n\nLex Fridman Podcast: UCSHZKyawb77ixDdsGog4iWA\nIndie Hackers: (add when needed)\nLaravel: (add when needed)\n\nTo find a channel ID:\n\nGo to channel page\nView page source\nSearch for \"channelId\": or \"externalId\"\n\nOr use search and extract from results.\n\nAPI Quota Limits\n\nYouTube Data API v3 has daily quotas:\n\nDefault: 10,000 units/day\nSearch: 100 units per call\nVideo details: 1 unit per call\nTranscript: 0 units (uses separate mechanism)\n\nTip: Use transcript lookups liberally (no quota cost), be conservative with search.\n\nTroubleshooting\nMCP Server Not Working\n\nSymptom: Connection closed or YOUTUBE_API_KEY environment variable is required\n\nFix: Build from source:\n\ncd /tmp\ngit clone https://github.com/ZubeidHendricks/youtube-mcp-server\ncd youtube-mcp-server\nnpm install\nnpm run build\n\n# Test\nYOUTUBE_API_KEY=\"your_key\" node dist/cli.js\n\nEmpty Transcripts\n\nSymptom: Transcript returned but content is empty\n\nCause: Video may not have captions, or MCP can't access them\n\nFix: Use yt-dlp fallback (see above)\n\nyt-dlp Not Found\npip install --user yt-dlp\n# or\npipx install yt-dlp\n\nSecurity Note\n\nThe YouTube API key is safe to use with this MCP server:\n\n✅ Key only used to authenticate with official YouTube Data API\n✅ No third-party servers involved\n✅ All network calls go to googleapis.com\n✅ Code reviewed (no data exfiltration)\n\nHowever:\n\n🔒 Keep the key in Clawdbot config (not in code/scripts)\n🔒 Restrict API key to YouTube Data API v3 only (in Google Cloud Console)\n🔒 Don't commit the key to git repositories\nExamples\nResearch Podcast for LinkedIn Post Ideas\n# 1. Find latest Lex Fridman episode\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  channels_listVideos channelId=\"UCSHZKyawb77ixDdsGog4iWA\" maxResults:1\n\n# 2. Get video details\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  videos_details videoId=\"Z-FRe5AKmCU\"\n\n# 3. Get transcript\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  transcripts_getTranscript videoId=\"Z-FRe5AKmCU\"\n\n# If transcript empty, use yt-dlp\nyt-dlp --skip-download --write-auto-sub --sub-lang en \\\n  --output \"/tmp/%(id)s.%(ext)s\" \\\n  \"https://youtube.com/watch?v=Z-FRe5AKmCU\"\n\n# 4. Analyze transcript for interesting topics\n# (read /tmp/Z-FRe5AKmCU.en.vtt and extract key themes)\n\nFind Videos About a Trending Topic\n# Search for recent videos\nmcporter call --stdio \"node /tmp/youtube-mcp-server/dist/cli.js\" \\\n  search_videos query=\"ClawdBot security concerns\" maxResults:10\n\n# Pick relevant ones, get transcripts\n# Analyze sentiment and technical claims\n\nNotes\nMCP server path: /tmp/youtube-mcp-server/dist/cli.js\nAlways pass API key via environment: YOUTUBE_API_KEY=\"key\" node ...\nOr set globally in shell/Clawdbot config\nTranscripts may be auto-generated (check accuracy for quotes)\nyt-dlp can also download audio if you need it (--extract-audio --audio-format mp3)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/grpaiva/youtube",
    "publisherUrl": "https://clawhub.ai/grpaiva/youtube",
    "owner": "grpaiva",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/youtube",
    "downloadUrl": "https://openagent3.xyz/downloads/youtube",
    "agentUrl": "https://openagent3.xyz/skills/youtube/agent",
    "manifestUrl": "https://openagent3.xyz/skills/youtube/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/youtube/agent.md"
  }
}