← YouTube for AI Agents

YouTube for AI Agents 0.2.0

npm · @jcodesmore/youtube-for-ai-agents · current release

9
Tools
0
Resources
0
Templates
0
Prompts

Observation

Observed 2026-08-14T08:03:35.269Z using mcpSecurity-inventory. Status: succeeded. Negotiated protocol: 2025-06-18.

Server capabilities
{
  "tools": {
    "listChanged": true
  }
}

Tools 9

ToolCategoryAnnotationsRisk
youtube_clipExtract one or more clips from a YouTube video by timestamp. Downloads the source video once at 720p, then cuts each clip. Each clip needs startTime and endTime (seconds, MM:SS, or HH:MM:SS) and an optional label for the filename. Uses fast keyframe-aligned cuts by default — do NOT set accurate: true unless the user explicitly asks for frame-perfect precision (it re-encodes and is much slower). Keep clips tight — 5-10 seconds each, capturing one key moment per clip. When 2+ clips are provided, automatically produces a per-video highlight reel alongside individual clips.
Input schema
{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "description": "YouTube video ID"
    },
    "clips": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "startTime": {
            "type": "string",
            "description": "Start timestamp — seconds (\"90\"), MM:SS (\"1:30\"), or HH:MM:SS (\"1:30:00\")"
          },
          "endTime": {
            "type": "string",
            "description": "End timestamp — seconds (\"225\"), MM:SS (\"3:45\"), or HH:MM:SS (\"1:30:00\")"
          },
          "label": {
            "type": "string",
            "description": "Label for output filename (e.g. \"intro\" produces \"Title - intro.mp4\")"
          }
        },
        "required": [
          "startTime",
          "endTime"
        ],
        "additionalProperties": false
      },
      "minItems": 1,
      "description": "One or more clip definitions with start/end timestamps"
    },
    "outputDir": {
      "type": "string",
      "description": "Output directory for clip files (defaults to current directory)"
    },
    "quality": {
      "type": "string",
      "enum": [
        "best",
        "bestefficiency",
        "144p",
        "240p",
        "360p",
        "480p",
        "720p",
        "1080p",
        "1440p",
        "2160p"
      ],
      "description": "Video quality for the source download (default: best)"
    },
    "accurate": {
      "type": "boolean",
      "description": "Frame-accurate cuts via re-encoding — MUCH slower. Only use when the user explicitly needs frame-perfect precision. Default fast keyframe cuts are fine for nearly all use cases (default: false)"
    },
    "force": {
      "type": "boolean",
      "description": "Bypass the duration guard for long videos"
    },
    "highlightReel": {
      "type": "boolean",
      "description": "Combine all clips into a single highlight-reel video (default: true). Set to false for individual clips only."
    }
  },
  "required": [
    "videoId",
    "clips"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "openWorldHint": true
}
Writes · Non-destructive
youtube_downloadDownload a YouTube video or audio track to a local file. Defaults to 720p quality. Supports quality selection (720p/1080p/best/etc.), download type (video+audio/audio/video), and format. Videos over 30 minutes trigger a confirmation prompt — use force: true to bypass. For video+audio, automatically downloads and muxes separate streams.
Input schema
{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "description": "YouTube video ID"
    },
    "outputPath": {
      "type": "string",
      "description": "Output file path (defaults to <title>.<format> in current directory)"
    },
    "quality": {
      "type": "string",
      "enum": [
        "best",
        "bestefficiency",
        "144p",
        "240p",
        "360p",
        "480p",
        "720p",
        "1080p",
        "1440p",
        "2160p"
      ],
      "description": "Video quality (default: best)"
    },
    "type": {
      "type": "string",
      "enum": [
        "video+audio",
        "audio",
        "video"
      ],
      "description": "Download type — \"video+audio\" (default), \"audio\" (audio only), or \"video\" (no audio)"
    },
    "format": {
      "type": "string",
      "description": "Container format (default: mp4)"
    },
    "force": {
      "type": "boolean",
      "description": "Bypass the duration guard for long videos"
    }
  },
  "required": [
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "openWorldHint": true
}
Writes · Non-destructive
youtube_get_channel_infoGet metadata for a YouTube channel — name, handle, description, subscriber count, country, and more. Accepts @handle, full URL, or channel ID.
Input schema
{
  "type": "object",
  "properties": {
    "channelId": {
      "type": "string",
      "description": "@handle, full YouTube URL, or channel ID"
    }
  },
  "required": [
    "channelId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read only · Non-destructive
youtube_get_channel_videosList videos from a YouTube channel. Accepts @handle, full URL, or channel ID. Returns videos sorted by newest, popular, or oldest.
Input schema
{
  "type": "object",
  "properties": {
    "channelUrl": {
      "type": "string",
      "description": "@handle, full YouTube URL, or channel ID"
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 500,
      "description": "Max videos to return (default: 30, max: 500)"
    },
    "sort": {
      "type": "string",
      "enum": [
        "newest",
        "popular",
        "oldest"
      ],
      "description": "Sort order (default: newest)"
    }
  },
  "required": [
    "channelUrl"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read only · Non-destructive
youtube_get_playlistGet a YouTube playlist's metadata and its videos. Returns title, description, channel, video count, and the list of videos with their positions.
Input schema
{
  "type": "object",
  "properties": {
    "playlistId": {
      "type": "string",
      "description": "YouTube playlist ID (e.g. PLrAXtmErZgOeiKm4sgNOknGvNjby9efdf)"
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 200,
      "description": "Max videos to return (default: 30, max: 200)"
    }
  },
  "required": [
    "playlistId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read only · Non-destructive
youtube_get_transcriptGet the transcript of a YouTube video. Control output size with: "format" — "text" (fullText only, smallest), "segments" (timestamps only), or "both" (default). Use "startTime"/"endTime" (seconds) to grab a specific section (pairs well with chapter timestamps from youtube_get_video_info). Use "maxSegments" to cap output for previewing long videos.
Input schema
{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "description": "YouTube video ID"
    },
    "language": {
      "type": "string",
      "description": "Language code (default: \"en\")"
    },
    "format": {
      "type": "string",
      "enum": [
        "text",
        "segments",
        "both"
      ],
      "description": "Response format — \"text\" (fullText only, smallest response), \"segments\" (timestamped array only), or \"both\" (default). Use \"text\" to cut response size roughly in half."
    },
    "startTime": {
      "type": "number",
      "description": "Only return segments at or after this time (seconds). Pairs well with chapter timestamps from youtube_get_video_info."
    },
    "endTime": {
      "type": "number",
      "description": "Only return segments before this time (seconds)."
    },
    "maxSegments": {
      "type": "number",
      "description": "Max segments to return (capped at 5000). Good for previewing long videos without blowing up context."
    }
  },
  "required": [
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read only · Non-destructive
youtube_get_video_infoGet metadata for a YouTube video. Use "detail" to control response size: "brief" (key stats only — title, channel, views, likes, duration), "standard" (default — most fields, truncated description, chapter count), or "full" (everything including full description, chapters, tags, thumbnail).
Input schema
{
  "type": "object",
  "properties": {
    "videoId": {
      "type": "string",
      "description": "YouTube video ID"
    },
    "detail": {
      "type": "string",
      "enum": [
        "brief",
        "standard",
        "full"
      ],
      "description": "Detail level — \"brief\" (key metadata only), \"standard\" (most fields, truncated description, no chapters), or \"full\" (everything). Default: standard"
    }
  },
  "required": [
    "videoId"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read only · Non-destructive
youtube_highlight_reelCombine existing clip files into a single highlight reel. Pass file paths from previous youtube_clip results in your desired playback order. Use this after clipping multiple videos to create one combined reel across all sources. The order of the clips array determines playback order — arrange clips for narrative flow before calling.
Input schema
{
  "type": "object",
  "properties": {
    "clips": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "description": "File paths to existing clip/video files, in your desired playback order"
    },
    "outputDir": {
      "type": "string",
      "description": "Output directory for the highlight reel (defaults to current directory)"
    },
    "label": {
      "type": "string",
      "description": "Name for the reel file — produces \"{label}.mp4\" (default: \"highlight-reel\")"
    }
  },
  "required": [
    "clips"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": false,
  "destructiveHint": false,
  "openWorldHint": true
}
Writes · Non-destructive
youtube_searchSearch YouTube for videos, channels, or playlists. Supports filtering by upload date (today/week/month/year), duration (short/medium/long), and sorting (relevance/date/views/rating). Returns results with metadata including title, channel, views, duration, and whether results are personalized.
Input schema
{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query"
    },
    "limit": {
      "type": "number",
      "minimum": 1,
      "maximum": 50,
      "description": "Number of results (default: 20, max: 50)"
    },
    "type": {
      "type": "string",
      "enum": [
        "video",
        "channel",
        "playlist"
      ],
      "description": "Filter by type (default: video)"
    },
    "uploadDate": {
      "type": "string",
      "enum": [
        "all",
        "today",
        "week",
        "month",
        "year"
      ],
      "description": "Filter by upload date — \"today\", \"week\", \"month\", \"year\", or \"all\" (default: all)"
    },
    "duration": {
      "type": "string",
      "enum": [
        "all",
        "short",
        "medium",
        "long"
      ],
      "description": "Filter by duration — \"short\" (<4 min), \"medium\" (4-20 min), \"long\" (>20 min), or \"all\" (default: all)"
    },
    "sortBy": {
      "type": "string",
      "enum": [
        "relevance",
        "rating",
        "date",
        "views"
      ],
      "description": "Sort results — \"relevance\", \"date\" (newest first), \"views\" (most viewed), \"rating\", or default relevance"
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false,
  "$schema": "http://json-schema.org/draft-07/schema#"
}
Annotations
{
  "readOnlyHint": true,
  "destructiveHint": false,
  "openWorldHint": true
}
Read only · Non-destructive

Resources 0

Resource templates 0

Prompts 0

Let’s talk about MCP security.

Share your details and our security team will contact you.