The split is by artefact rather than by step, so you take only the piece you need and subtitles can be embedded into the video instead of landing next to it as a stray file. get_metadata fetches nothing at all — it returns the JSON, which is the call worth making before committing to a playlist range.
A download server for YouTube URLs that returns the paths it saved to, alongside get_metadata, which reads a video's details instead of fetching it.
- A single video downloaded with format, quality and resolution options
- A range of a playlist downloaded by start and end position, returning the list of saved paths
- Audio extracted from a video and written in a chosen codec and quality
- Subtitles downloaded in a chosen language, and optionally embedded into the video rather than left beside it
- The thumbnail at the highest quality available, and video metadata returned as JSON with nothing downloaded
A YouTube URL and somewhere to put the files — every tool except get_metadata writes to local disk. It runs under uv, so a Python that uv can use has to be on the machine. No account and no API key.
One command — uvx mcp-youtube
