Verified MCP server: YouTube

The YouTube MCP server, verified live on a real Mac.

  • Verified2026-08-03macOS 26.3.1
  • Package@kirbah/mcp-youtube 1.1.12
  • Self-reportedYouTube 1.1.12
  • MCP protocol2025-06-18
  • RuntimeNode v24.18.0

The short answer

Last verified 2026-08-03

The YouTube MCP server on this page is @kirbah/mcp-youtube, a community package that hands an AI assistant the spoken text of a YouTube video and, once you add a free Google key, its numbers as well. We ran it twice. With no YouTube key anywhere in its environment it started, exposed exactly one tool, and a real call for a public video came back with that video's opening and closing lines. With a placeholder key in the environment the same command exposed eight tools instead of one, which is worth knowing before you judge this server by its tool count. Google publishes no YouTube MCP server of its own, so a community package is the only kind there is. Everything below, including the exact text it returns for a video with no captions, is from those two runs. [1][3][4][9]

  • Tools

    1 with no key, 8 with one [5]

  • Credentials

    None for transcripts

  • Transport

    stdio, runs on your Mac [4]

  • Maintainer

    Kiryl Bahdanau, community [1][3]

  • Downloads

    1,128 last week [2]

  • License

    MIT [3]

Verification

How this MCP server was verified.

Method

We spawned the server with npx over stdio with no YOUTUBE_API_KEY and no environment variables of our own, completed the MCP initialize handshake, and called tools/list, which answered with one tool. Then we made one real tool call, getTranscripts for a public video, and it returned that video's opening and closing lines with no key set anywhere and nothing signed up for. The tool table below is that capture, word for word. A second run of the same command, with a placeholder value in YOUTUBE_API_KEY, listed eight tools instead of one; a call to one of the seven extra tools failed because that key was not a real one, and its error text is in the troubleshooting section. We hold no YouTube Data API key, so those seven tools are listed on this page but were never seen to succeed.

Startup banner

YouTube MCP server (v1.1.12) running in stdio mode.

One real tool call

tools/call getTranscripts {"videoIds": ["dQw4w9WgXcQ"]}
{
  "dQw4w9WgXcQ": {
    "hook": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules\nand so do I ♪ ♪ A full commitment's\nwhat I'm thinking of ♪

Real lines from the captured result: enough to prove the call answered.

Tools

Every tool, enumerated from the running server.

The server answered tools/list with 1 tools on 2026-08-03. The names, descriptions and parameters below are its own words, copied from that response and never edited.

ToolWhat it does
getTranscriptsvideoIds*langformat

Retrieves specific, meaningful segments of a video's transcript. By default, it returns the intro 'hook' and the final 'outro' or call to action. It can also return the full transcript text. Use this to efficiently analyze a video's key messaging.

Parameters marked with * are required.

Setup

Working configs, one per app.

Copy the block for the app you use. Each one is the configuration this server was verified with.

Claude Desktop

Open the file ~/Library/Application Support/Claude/claude_desktop_config.json (in Claude Desktop: Settings, then Developer, then Edit Config) and add:

{
  "mcpServers": {
    "youtube": {
      "command": "npx",
      "args": [
        "-y",
        "@kirbah/mcp-youtube"
      ]
    }
  }
}

This is the exact configuration we verified, with no key of any kind, and it gives you the transcript tool. To unlock the other seven, add an "env" block next to "args" holding YOUTUBE_API_KEY with your own key. Quit and reopen Claude Desktop after saving. [10][4]

Claude Code

One command in your terminal:

claude mcp add youtube -- npx -y @kirbah/mcp-youtube

Everything after the double dash is the exact command Claude Code will run, and it is the command we ran. To pass a key later, put the flag after the server name: claude mcp add youtube --env YOUTUBE_API_KEY=your-key -- npx -y @kirbah/mcp-youtube. The CLI rejects the flag when the server name comes straight after it. [11][4]

Cursor

Add to ~/.cursor/mcp.json for every project, or to .cursor/mcp.json inside one project:

{
  "mcpServers": {
    "youtube": {
      "command": "npx",
      "args": [
        "-y",
        "@kirbah/mcp-youtube"
      ]
    }
  }
}

Cursor picks the file up on restart. The same "env" block holding YOUTUBE_API_KEY works here when you want the other seven tools. [12]

Routines

No JSON file and no terminal. In Routines: Settings, then Assistant, then Connections, then Add MCP Server. Switch the form to Command (stdio) and enter:

Name        YouTube
Command     npx
Arguments   -y @kirbah/mcp-youtube

Leave Environment Variables empty for the setup we verified. Click Test Connection first: it reports one tool while that field is empty, and eight once YOUTUBE_API_KEY holds a key. [13]

No terminal needed

Set the YouTube MCP server up without the terminal.

If you have never opened Terminal and never want to, this is your path. Routines is a Mac app that runs MCP servers for you: fill in three fields once, and this server's tools are available to your AI in chat and in scheduled routines.

  1. 01

    Install Routines

    Download the app from getroutines.ai/download, drag it to Applications, and sign in.

  2. 02

    Open the MCP settings

    Click your account at the bottom of the sidebar and choose Settings. Open the Assistant section, then the Connections tab, scroll to MCP Servers, and click Add MCP Server.

  3. 03

    Choose Command (stdio)

    Switch the form to Command (stdio). This server is a command your Mac runs, not a web address, so the other option will not work for it.

  4. 04

    Fill in three fields

    Name: YouTube. Command: npx. Arguments: -y @kirbah/mcp-youtube. That is the whole configuration, and it is the one we verified. Nothing to sign up for, nothing to paste.

  5. 05

    Test, then add

    Leave Environment Variables empty and click Test Connection: Routines starts the server and reports how many tools it found, one for this configuration. If you want the other seven, add YOUTUBE_API_KEY with a key from the Google Cloud Console and test again, and the count becomes eight. Then click Add Server.

  6. 06

    Use it

    The tools work in chat right away: paste a YouTube link and ask what the video says. To let a scheduled routine use them, open the routine, find the Tools & connections card, and tick the server under Apps.

Routine ideas

Routines worth scheduling.

Once the server is connected, a scheduled routine can use its tools while you are away. Copy a prompt, paste it into Routines, and pick a time.

A Monday watchlist digest

Prompt

Every Monday at 8:00, read the YouTube links listed in youtube-watchlist.md in my Documents folder, pull the transcript of each one, and save a two-paragraph summary of each video as watchlist-digest.md in that same folder.

A competitor messaging log

Prompt

Every Friday at 15:00, take the YouTube links I added to competitors.md this week, fetch the opening hook and the closing call to action of each video, and append them to competitor-messaging.md with the date and the video title.

A talk-to-notes routine

Prompt

Every evening at 19:00, check watch-later.md for any YouTube link I added today, pull the full transcript, and write me one page of plain-English notes with the main argument, the three best points, and anything I should follow up on.

Troubleshooting

The errors we hit, and what fixed them.

Real errors captured during the verification run, printed exactly as the server returned them.

A video comes back empty and nothing looks broken

What you see

[TranscriptService] Failed to fetch transcript for xxxxxxxxxxx (lang: en): No transcripts are available for the video with ID "xxxxxxxxxxx". This may be because the video does not have captions or the captions are not accessible.

The fix

We asked for a video ID that does not exist. The tool call did not fail: it answered with the video ID mapped to null and a success flag, and the real reason above was printed to standard error, where your AI app usually cannot see it. So an empty answer means one of three things: a wrong ID, a video with captions switched off, or a private video. Check the ID against the link, and try another video before assuming the server is broken.

Asking for a language returns nothing

What you see

[TranscriptService] Failed to fetch transcript for dQw4w9WgXcQ (lang: zz): No transcripts are available in "zz" for the video with ID "dQw4w9WgXcQ". Available languages: en, en, de-DE, ja, pt-BR, es-419. Please try a different language.

The fix

The lang parameter is not a translation request: it picks one of the caption tracks the video already has. We asked for a language code that does not exist and got the line above, which helpfully lists what that video does have. Leave lang out to take the default of en, or name one of the codes the server reports.

Your assistant says a tool does not exist

What you see

MCP error -32602: Tool getVideoDetails not found

The fix

This is the credential-free run answering a call for one of the seven tools it never registered. The server decides its tool list at startup: with no YOUTUBE_API_KEY in the environment it registers getTranscripts and nothing else. Add the key, restart the server, and the missing tool appears.

The key is set but every video lookup fails

What you see

Error: YouTube API call for getVideo failed for videoId: dQw4w9WgXcQ

The fix

We triggered this on purpose with a placeholder key. Note what the message does not say: the server does not pass Google's own reason through, so an invalid key, a Google Cloud project where YouTube Data API v3 was never enabled, and a daily quota you have already spent all look identical from here. Re-check all three in the Google Cloud Console, in that order.

Your MCP client cannot start the server at all

The fix

The npx command belongs to Node.js, and this package asks for Node 20.12 or newer. If Node is missing or too old, every client on this page fails at the spawn step before the server can say anything. Install Node from nodejs.org, restart your MCP client, and try again.

FAQ

Questions people ask.

What is the YouTube MCP server?

It is a local server that lets an AI assistant read YouTube. The one we verified, @kirbah/mcp-youtube, is a community package rather than anything Google publishes. Connected to Claude, Cursor or Routines, it turns a video link into text the assistant can actually reason about, and with a free Google key it also reads video, channel and trending data. It runs as a process on your Mac and talks to your AI app over stdio. [1][4]

What tools does the YouTube MCP server include?

That depends on one environment variable, which is the single most confusing thing about this server. With YOUTUBE_API_KEY unset, tools/list answers with one tool, getTranscripts, and that is the table above. With any value in YOUTUBE_API_KEY, the same command answers with eight: getVideoDetails, searchVideos, getTranscripts, getVideoComments, getChannelStatistics, getChannelTopVideos, getTrendingVideos and getVideoCategories. We captured both lists. A ninth tool for channel analytics appears only when a MongoDB connection string is set as well. [5][4]

Does the YouTube MCP server need an API key or an account?

Not for transcripts. Our verified run had no key set anywhere and still returned a real transcript, because that tool reads the caption track YouTube already serves publicly rather than going through the API. The other seven tools need a YouTube Data API v3 key, which is free: enable that API on a project in the Google Cloud Console, create an API key under Credentials, and paste it in. Google's default daily allowance is 100 search calls plus 10,000 units for everything else, which is generous for personal use but worth knowing before you point a routine at searchVideos. The transcript tool spends none of it. [4][8][6]

Is the YouTube MCP server safe?

None of its tools touch your Mac: no files, no folders, no shell. All eight tools carry a read-only marker in their own definitions, which we captured, and what leaves your machine is a video ID or a search phrase. The server itself does read a .env file at startup, from whatever folder it was started in, if one is there, so give a thought to which folder your MCP client launches it from. The judgement to make is a different one: this is a community package with a small install base, not a Google product, and its transcript tool does not go through the YouTube Data API at all. It pulls the caption track straight from YouTube through a separate library, which is exactly why it works without a key, and also why a change on YouTube's side could stop it without warning. Read the license and the source if that matters to you; both are public. [3][6][7]

Why is the transcript full of ' and other odd codes?

Because the server passes YouTube's caption text through untouched, and YouTube stores apostrophes and quotation marks as HTML character codes. Our captured sample above literally reads We're rather than We are. It does not confuse an assistant reading the text, but if you have a routine writing those transcripts into a file, ask it to convert the codes back to plain characters before saving.

Do I need the terminal to set it up?

No. In Routines you fill three fields in Settings and click Test Connection; the walkthrough above shows every click. Claude Desktop needs a small JSON file edited once. Only Claude Code is terminal-first by nature. [13][10]

Which apps can use the YouTube MCP server?

Any MCP client that can launch a local stdio server: Claude Desktop, Claude Code, Cursor, and Routines all can, and the exact config for each is above. The server itself is the same in every client; only the place you paste the config differs. [10][11][12][13]

Sources

Every external claim, receipted.

Anything on this page we did not observe in the run is linked here, with the date we read it. The run itself is the receipt for the rest.

  1. [1]

    npm registry: @kirbah/mcp-youtubeaccessed 2026-08-03

    Latest version 1.1.12, published 2026-07-27; author Kiryl Bahdanau, MIT licensed, Node 20.12 or newer.

  2. [2]

    npm downloads API: last weekaccessed 2026-08-03

    1,128 downloads for the week ending 2026-08-01, and 3,120 for the month.

  3. [3]

    GitHub API: kirbah/mcp-youtubeaccessed 2026-08-03

    25 stars, 14 forks, MIT license, not archived, and a push dated 2026-08-01 at access time.

  4. [4]

    kirbah/mcp-youtube READMEaccessed 2026-08-03

    The Zero-Config Mode section, the env block for the key, the Google Cloud Console steps, and the per-tool quota costs.

  5. [5]

    kirbah/mcp-youtube source: src/tools/index.tsaccessed 2026-08-03

    registerTools checks YOUTUBE_API_KEY and registers eight tools when it is set, getTranscripts alone when it is not.

  6. [6]

    kirbah/mcp-youtube source: src/services/transcript.service.tsaccessed 2026-08-03

    Transcripts come from the youtube-transcript-plus package, with no API key anywhere in that path.

  7. [7]

    kirbah/mcp-youtube source: src/utils/env.tsaccessed 2026-08-03

    loadEnv() resolves .env against the working directory and calls process.loadEnvFile when that file exists; index.ts and container.ts both call it at startup, which is also why the package asks for Node 20.12 or newer.

  8. [8]

    Google: YouTube Data API v3, getting startedaccessed 2026-08-03

    How to obtain an API key, and the default daily quota of 100 search.list calls plus 10,000 units for all other endpoints.

  9. [9]

    Model Context Protocol registry: YouTube serversaccessed 2026-08-03

    Every YouTube server listed is a community package; none is published by Google.

  10. [10]

    modelcontextprotocol.io: Connect to local MCP serversaccessed 2026-08-03

    The official Claude Desktop quickstart and the location of its config file.

  11. [11]

    Claude Code docs: MCPaccessed 2026-08-03

    The claude mcp add syntax for local stdio servers, including the --env flag.

  12. [12]

    Cursor docs: Model Context Protocolaccessed 2026-08-03

    The mcp.json shape and file locations.

  13. [13]

    Routines: Connectorsaccessed 2026-08-03

    How Routines runs one-click OAuth connectors and any MCP server.

This page describes YouTube as it behaved in one dated run on one Mac. Versions move: if something here no longer matches what you see, the capture date at the top says how old the reading is.

Behind this directory

Routines, the app behind this directory, runs MCP servers like this one without a terminal: see how connectors work. Your notes stay markdown files on your Mac, there is no cloud bill, and it works offline. Download Routines