
YouTube MCP
io.github.granitebps由 GitHub 帳號 granitebps 發布v1.1.1更新於 Oct 24, 2026
用於YouTube後設資料、文字記錄、留言和搜尋的獨立非官方專案。
AI 翻譯由 AI 模型根據下方的原文描述翻譯,可能有誤。
原文描述
Independent, unofficial project for YouTube metadata, transcripts, comments, and search.
概覽
YouTube 的本機 MCP 服務;無需登入;STDIO。
暫無 AI 概覽:以下資訊來自註冊中心條目和服務本身。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 YouTube MCP,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
YouTube MCP
[CI] [npm version] [npm downloads] [MCP Registry] [License: ISC]
YouTube MCP lets an MCP client read YouTube video metadata, caption transcripts, comments, and search results. By default it needs no YouTube API key or account; an optional official YouTube Data API provider serves metadata, comments, and search with an API key.
Supports both stdio (local) and Streamable HTTP (VPS/remote) transports.
Access model
This is an independent, unofficial open-source project. It is not affiliated with, endorsed by, or sponsored by YouTube or Google.
- The default
innertubeprovider serves metadata, comments, and search throughyoutubei.js, using an unofficial/internal YouTube interface without a YouTube Data API key. Unofficial access may change, break, be restricted, or be blocked. - Select
YT_PROVIDER=apiand supply your ownYOUTUBE_API_KEYto use the official YouTube Data API v3 for those three tools. - Transcript tools always use
youtube-transcript-plus, regardless ofYT_PROVIDER. Transcript retrieval remains unofficial and does not use the official Data API path or your API key.
Users are responsible for deciding whether an access method suits their use and for complying with applicable service terms and law. See access methods and service terms for the tool/backend mapping, BYOK setup, limitations, and software licenses.
Features
Requirements
- Node.js 22 or newer. CI checks Node 22.21.0 and Node 24.
No YouTube API key required by default. The default
innertubeprovider usesyoutubei.js(an unofficial/internal YouTube interface) for video info, comments, and search. Transcripts always useyoutube-transcript-plus. Neither needs an API key or authentication. See Providers for the optional official API.
Quick start
Your MCP client can run the published package without a clone:
The server uses stdio. Keep stdout reserved for MCP traffic.
Run from a cloned repository
To develop the server or use a clone directly:
Point your MCP client at the compiled entry point:
Run npm run build after each source change. Do not use src or npm run dev as the client's stdio command; build output on stdout can corrupt MCP messages.
Client configuration
Each example starts with the npm package, followed by the local equivalent. Replace /absolute/path/to/youtube-mcp with your clone's path. Settings from Configuration can be added as environment variables.
Claude
Add the npm package to Claude Code:
For a local build:
Claude Code uses local scope by default. Add --scope user before youtube to make the server available across projects.
Claude Desktop reads the same server from claude_desktop_config.json (on macOS, ~/Library/Application Support/Claude/claude_desktop_config.json). Restart the app after editing the file.
For a local build, replace command and args with:
Codex
Add the npm package to ~/.codex/config.toml, or to .codex/config.toml in a trusted project:
For a local build:
Restart Codex after editing the file.
OpenCode
Add the npm package to opencode.json or opencode.jsonc:
For a local build, replace the command array with:
Cursor
Add the npm package to .cursor/mcp.json in a project, or to ~/.cursor/mcp.json for global use:
For a local build, replace command and args with:
GitHub Copilot (VS Code)
Add to your VS Code settings.json:
VPS deployment (Streamable HTTP)
For remote deployment, the server runs as a persistent HTTP service using the Streamable HTTP transport (the current MCP standard, replacing the deprecated SSE transport).
1. Deploy to your VPS
YouTube often blocks datacenter IPs. If get_video_info returns ACCESS_BLOCKED with "Sign in to confirm you're not a bot", set YT_PROVIDER=api and YOUTUBE_API_KEY to serve metadata, comments, and search through the official API. See Providers.
2. Run with HTTP transport
The server will listen on http://0.0.0.0:3000/mcp.
3. Set up Nginx reverse proxy with TLS
Get a free TLS certificate:
4. Keep it running with systemd
Create /etc/systemd/system/youtube-mcp.service:
5. Connect MCP clients to your VPS
GitHub Copilot (VS Code) — Remote
Claude Desktop — Remote
Usage Examples
Once connected, you can ask your AI agent things like:
- "Get info about this YouTube video: https://www.youtube.com/watch?v=dQw4w9WgXcQ"
- "Show me the top comments on video ID abc123"
- "Get the transcript of this video in English"
- "Summarize the transcript of https://youtu.be/xyz789"
- "Search for Node.js tutorials uploaded this week, sorted by views"
- "Find the most popular React videos from the last month"
Tool Response Format
All tools return:
content: short human-readable text for chat-style MCP clientsstructuredContent: JSON-shaped data for agents that need reliable fields
The server is intentionally JSON-first, text-second. Agents should prefer structuredContent when they need to filter, transform, or chain tool results.
Example shape from get_video_info:
Values YouTube did not provide are null, never placeholders such as "0", "N/A" or "Unknown".
Errors
Failures return isError: true. The text starts with a code (❌ [ACCESS_BLOCKED] ...) and _meta["youtube-mcp/error"] carries the details:
The error is in _meta, not structuredContent, because MCP SDK clients validate any structuredContent against the tool's output schema, even on error results.
The server never retries on its own.
Providers
YT_PROVIDER selects the backend for get_video_info, get_video_comments, and search_youtube. get_video_transcript and get_transcript_languages always use youtube-transcript-plus, whichever provider is active. get_server_info reports the active provider.
This server does not use the Data API for captions. Google's caption-download endpoint requires OAuth authorization and permission to edit the video; an API key alone is insufficient. Transcript tools use the unofficial youtube-transcript-plus path and can return ACCESS_BLOCKED with either provider.
Using the official API
Bring your own key (BYOK). The key belongs to you; the project does not distribute or host a shared YouTube API key. Supply these settings through the process or MCP client environment; the server does not automatically load .env files.
- In the Google Cloud console, create a project, enable YouTube Data API v3, and create an API key. Restricting the key to that API is recommended.
- Start the server with:
Quota (costs): the default allocation is 10,000 units per day, plus a separate allowance of 100 search.list calls per day.
Results are cached as with the default provider (video info 30 min, comments 10 min, search 15 min), so repeated calls cost nothing. A used-up quota returns ACCESS_BLOCKED with upstream.accessKind: "quota_exceeded"; an invalid key or disabled API returns ACCESS_BLOCKED with accessKind: "forbidden".
Differences from the default provider:
uploadedAt(get_video_info) andpublishedAt(comments, search) are ISO 8601 timestamps instead of display text such as "Sep 14, 2017" or "2 days ago"- Search
viewCountis a plain number such as"1234"instead of "1.2K views", anddurationuses the same format asget_video_info("3m 5s") search_youtubeapplies allsortByanduploadDatevalues exactly and never returnswarnings.videoDuration: "short"means under 4 minutes andmedium4 to 20 minutes (YouTube's API definitions)get_video_commentsreturns only the replies the API includes with each thread (a subset);replyCountis the full count
Configuration
All settings are optional environment variables, except YOUTUBE_API_KEY when YT_PROVIDER=api. Invalid values stop the server at startup with a message on stderr.
When a deadline expires or the client cancels, the in-flight HTTP requests are aborted, not just abandoned.
Tool Details
search_youtube
- Input:
query(search text),maxResults(1-50, default 10),sortBy(relevance|date|viewCount|rating),uploadDate(any|hour|today|week|month|year),videoDuration(any|short|medium|long) - Returns: Human-readable summary in
contentplus structured JSON results instructuredContent - Note: With the default
innertubeprovider, YouTube search only orders by relevance or popularity and only filters uploads fromtodayup.sortBy: "date"keeps relevance order,sortBy: "rating"sorts by popularity, anduploadDate: "hour"is applied astoday. Each case adds an entry to the optionalwarningsarray (code,message). Theapiprovider applies every option exactly
get_video_info
- Input:
video(YouTube URL or video ID) - Returns: Human-readable summary in
contentplus structured JSON metadata instructuredContent, includingdurationSeconds. Metadata is returned even when YouTube refuses playback, as long as it provides the video details
get_video_comments
- Input:
video(URL or ID),maxResults(1-20, default 20),sortBy(relevanceortime),page(default 1) - Returns: Human-readable summary in
contentplus structured JSON comment threads, pagination fields, andhasMoreinstructuredContent - Note:
repliescontains only replies YouTube includes with the thread;replyCountis the full count. Fetching the rest would cost one request per thread
get_video_transcript
- Input:
video(URL or ID),lang(optional language code; omitted means the first manual track, or the first auto-generated one if there is none),maxSegments(default0: as many asYT_TRANSCRIPT_PAGE_MAX_SEGMENTSallows),startSegment(default0) - Returns: Human-readable transcript in
contentplus structured JSON segments, plain text, and pagination metadata instructuredContent. Continue withstartSegment = nextStartSegmentand the returnedlanguageCodeaslangwhilehasMoreis true.isAutoGeneratedtells whether the track is YouTube's automatic captions - No captions:
available: falsewithreason: "NO_CAPTIONS", orreason: "LANGUAGE_UNAVAILABLE"plusavailableLanguages. Access problems are errors, neveravailable: false - Note: When a language has both manual and automatic tracks, the manual track is returned
- Note: Does NOT require an API key — works via YouTube's internal caption system. A transcript is caption text only; it is not an analysis of the video's picture
get_transcript_languages
- Input:
video(YouTube URL or video ID) - Returns: Human-readable language list in
contentplus structured JSON language metadata instructuredContent.available: falsemeans the video is playable and has no caption tracks; access problems are errors
get_server_info
- Input: none
- Returns:
name,version,provider(innertubeorapi),authenticated,exactSearchFilters, andtools, a map from each tool to the backend serving it
Development
See CONTRIBUTING.md.
Release verification
The automated suite covers input parsing, configuration, error classification, cancellation, the compiled stdio entry point, release metadata, and installation from an npm tarball. It never calls YouTube. Live YouTube checks are manual and separate from CI.
Maintainers follow the release guide for the approved-tag npm, MCP Registry, and GitHub release process.
Rate Limits
The default innertube provider and transcript tools use unofficial YouTube interfaces. They do not use the Data API quota system, but this does not imply unrestricted access:
- Heavy automated usage may trigger CAPTCHAs or temporary blocks
- Requests from datacenter IPs (VPS, cloud) are often blocked outright
- Request pacing does not guarantee access or establish permission under service terms
The api provider is limited by your Google Cloud project's YouTube Data API quota instead. See Providers.
License
ISC. The software license is separate from YouTube/Google service terms and rights in retrieved content. See the access guide.
來源:README.md,提交 ba4dbf7
工具
0版本歷史
3- v1.1.1最新Oct 20, 2026
- v1.1.0Oct 14, 2026
- v1.0.1Oct 13, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分