A Monday watchlist digest
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.
Verified MCP server: YouTube
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]
Verification
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
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.
| Tool | What 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
Copy the block for the app you use. Each one is the configuration this server was verified with.
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]
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]
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]
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
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.
01
Download the app from getroutines.ai/download, drag it to Applications, and sign in.
02
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.
03
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.
04
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.
05
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.
06
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
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.
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.
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.
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
Real errors captured during the verification run, printed exactly as the server returned them.
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.
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.
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.
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.
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
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]
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]
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]
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]
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.
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]
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
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]
Latest version 1.1.12, published 2026-07-27; author Kiryl Bahdanau, MIT licensed, Node 20.12 or newer.
[2]
1,128 downloads for the week ending 2026-08-01, and 3,120 for the month.
[3]
25 stars, 14 forks, MIT license, not archived, and a push dated 2026-08-01 at access time.
[4]
The Zero-Config Mode section, the env block for the key, the Google Cloud Console steps, and the per-tool quota costs.
[5]
registerTools checks YOUTUBE_API_KEY and registers eight tools when it is set, getTranscripts alone when it is not.
[6]
Transcripts come from the youtube-transcript-plus package, with no API key anywhere in that path.
[7]
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]
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]
Every YouTube server listed is a community package; none is published by Google.
[10]
The official Claude Desktop quickstart and the location of its config file.
[11]
The claude mcp add syntax for local stdio servers, including the --env flag.
[12]
[13]
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