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
} | — | WritesNon-destructiveOpen world | — |
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
} | — | WritesNon-destructiveOpen world | — |
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 onlyNon-destructiveOpen world | — |
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 onlyNon-destructiveOpen world | — |
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 onlyNon-destructiveOpen world | — |
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 onlyNon-destructiveOpen world | — |
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 onlyNon-destructiveOpen world | — |
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
} | — | WritesNon-destructiveOpen world | — |
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 onlyNon-destructiveOpen world | — |