Skip to main content
Glama
gridivit

mcp-youtube-transcript

by gridivit

mcp-youtube-transcript

An MCP server that takes a YouTube video URL and returns the transcript text to your agent.

Tools

  • list_transcript_languages(url) — which subtitle tracks the video has

  • get_transcript(url, language) — the transcript text in the given language

language is required. If the requested language is unavailable, English is used as a fallback; if neither exists, the tool returns the list of languages the video does have so the agent can retry.

URLs are accepted in every common form: watch?v=, youtu.be/, /shorts/, /embed/, /live/, or a bare 11-character video ID.

Related MCP server: YouTube Insights MCP Server

Installation

No Python needed. The only requirement is uv — a single binary that installs without administrator rights and downloads a suitable Python for you.

Windows (PowerShell):

powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS / Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Then add the server to Claude Code with a single command:

claude mcp add youtube-transcript -- uvx --from git+https://github.com/gridivit/mcp-youtube-transcript mcp-youtube-transcript

For Claude Desktop, add this to claude_desktop_config.json (%APPDATA%\Claude\ on Windows, ~/Library/Application Support/Claude/ on macOS):

{
  "mcpServers": {
    "youtube-transcript": {
      "command": "uvx",
      "args": [
        "--from",
        "git+https://github.com/gridivit/mcp-youtube-transcript",
        "mcp-youtube-transcript"
      ]
    }
  }
}

For Antigravity, use the same JSON in ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (per project).

The first launch takes about a minute while uv downloads Python and the dependencies. Every launch after that is instant.

Windows notes

  • Escape backslashes in JSON paths: C:\\Users\\..., or just use forward slashes. A single backslash silently breaks config parsing.

  • If the client cannot find uv, restart the application completely so it picks up the updated PATH. If that does not help, use the full path to the binary: C:\\Users\\<name>\\.local\\bin\\uvx.exe.

Updating

uvx caches the cloned repository and will not pick up new commits on its own. To pull the latest version:

uvx --refresh --from git+https://github.com/gridivit/mcp-youtube-transcript mcp-youtube-transcript

Development

Do not install your own checkout through uvx — it pulls the code from git, so you would not see local changes. Point the client at the working copy instead:

claude mcp add youtube-transcript-dev -- uv --directory <path-to-clone> run mcp-youtube-transcript

Run the test client to inspect the protocol directly:

npx @modelcontextprotocol/inspector uv run mcp-youtube-transcript

Available Tools

2 tools
get_transcriptA

Get the full transcript text of a YouTube video.

Returns the whole transcript as plain text without timestamps. Long videos produce long text: a two-hour video is roughly 20-30 thousand words.

If the requested language is unavailable, English is used as a fallback. If neither exists, this fails and lists the languages the video does have - pick one of them and call again.

Args: url: YouTube video URL (watch, youtu.be, shorts or embed form), or the bare 11-character video id. language: Language code of the wanted transcript, e.g. "en", "ru", "de".

Returns: The transcript as a single plain-text string.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
languageYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals important traits: returns only plain text without timestamps, long videos produce very long text, fallback language behavior, and failure mode (lists available languages). It does not mention authentication, rate limits, or whether transcripts must be manually uploaded, but the disclosed details go well beyond the schema and give the agent realistic expectations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but every sentence earns its place. It is well-structured with a clear purpose statement, a practical note on output length, fallback behavior, error handling, and labeled Args/Returns sections. No redundancy or fluff, and the format is easily parsable by an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (two required parameters, an output schema exists, sibling tool present), the description covers all critical aspects: what it does, what inputs it accepts, what output to expect, fallback logic, and what happens on error with actionable next steps. The output schema can handle return-type detail, so the description need not repeat it. The only minor omission is a direct pointer to list_transcript_languages, but the failure-path guidance compensates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must fully explain both parameters. It does this thoroughly: url accepts multiple URL forms (watch, youtu.be, shorts, embed) or a bare 11-character ID, and language takes a language code such as 'en', 'ru', 'de'. This directly compensates for the missing schema descriptions and leaves no ambiguity about input formats.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get the full transcript text of a YouTube video.' This clearly distinguishes the tool from the sibling list_transcript_languages by focusing on retrieving transcript text rather than enumerating available languages. It also notes the output is plain text without timestamps, adding precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when to use the tool and how to handle failures: if the requested language is unavailable, English is used as a fallback; if neither exists, the tool lists available languages and advises calling again with one of them. It does not explicitly name the sibling tool or state when to prefer list_transcript_languages, so it stops short of a 5, but the fallback and retry guidance is valuable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_transcript_languagesA

List the subtitle tracks available for a YouTube video.

Call this when you do not know which languages a video has, or after get_transcript reported that the requested language is unavailable.

Args: url: YouTube video URL (watch, youtu.be, shorts or embed form), or the bare 11-character video id.

Returns: One line per track: " - (manual|auto-generated)".

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the return format ('<code> - <name> (manual|auto-generated)') and accepted URL forms, which is substantial behavioral context. However, it doesn't mention potential side effects or errors, though as a listing operation these are likely negligible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose, a usage note, an Args section, and a Returns line. Every sentence adds value, and the purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, no annotations), the description covers all necessary aspects: what it does, when to use it, parameter semantics, and return format. It is fully complete within its scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has no descriptions for the 'url' parameter, but the description fully compensates by explaining accepted URL forms (watch, youtu.be, shorts, embed) and the bare 11-character video ID. This goes well beyond the schema's bare parameter name.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'List the subtitle tracks available for a YouTube video.' This clearly distinguishes it from the sibling tool get_transcript, which fetches the transcript itself, while list_transcript_languages focuses on language availability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides two scenarios for when to use this tool: when you don't know which languages are available, or after get_transcript reports a language is unavailable. This directly references the sibling tool and gives actionable context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.7/5.0
Disambiguation5/5

The two tools have distinct purposes: one lists available subtitle tracks, the other retrieves a transcript in a specified language. There is no overlap in functionality, and the descriptions clarify when to use each.

Naming Consistency5/5

Both tool names follow a consistent verb_noun pattern: 'list_transcript_languages' and 'get_transcript'. This creates a predictable and readable convention.

Tool Count4/5

Two tools is slightly below the typical 3-15 range, but it is well-scoped for a focused YouTube transcript server. The count feels appropriate rather than thin, covering the core use cases.

Completeness5/5

The tool surface covers the essential lifecycle: discovering available languages and fetching the transcript. The fallback to English and error messaging that suggests other languages complement the workflow, leaving no obvious gaps.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gridivit/mcp-youtube-transcript'

If you have feedback or need assistance with the MCP directory API, please join our Discord server