MCP YouTube Transcript
An MCP server retrieving transcripts of YouTube videos
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Independent, unofficial project for YouTube metadata, transcripts, comments, and search.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
YT_PROVIDER, YOUTUBE_API_KEYค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": [
"-y",
"@granitebps/youtube-mcp"
],
"env": {
"YT_PROVIDER": "ใส่ค่าของคุณ",
"YOUTUBE_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add youtube --env YT_PROVIDER='ใส่ค่าของคุณ' --env YOUTUBE_API_KEY='ใส่ค่าของคุณ' -- npx -y @granitebps/youtube-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": [
"-y",
"@granitebps/youtube-mcp"
],
"env": {
"YT_PROVIDER": "ใส่ค่าของคุณ",
"YOUTUBE_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"youtube": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@granitebps/youtube-mcp"
],
"env": {
"YT_PROVIDER": "ใส่ค่าของคุณ",
"YOUTUBE_API_KEY": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
YT_PROVIDER envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub granitebps ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: YOUTUBE_API_KEY
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.1.1) เข้า registry 18 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
An MCP server retrieving transcripts of YouTube videos
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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.
This is an independent, unofficial open-source project. It is not affiliated with, endorsed by, or sponsored by YouTube or Google.
innertube provider serves metadata, comments, and search through youtubei.js, using an unofficial/internal YouTube interface without a YouTube Data API key. Unofficial access may change, break, be restricted, or be blocked.YT_PROVIDER=api and supply your own YOUTUBE_API_KEY to use the official YouTube Data API v3 for those three tools.youtube-transcript-plus, regardless of YT_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.
| Tool | Description |
|---|---|
search_youtube | Search videos with filters for upload date and popularity |
get_video_info | Video metadata: title, channel, description, duration, views, likes, upload date, tags |
get_video_comments | Comment threads with author info, likes, and the replies YouTube includes |
get_video_transcript | Transcripts (manual + auto-generated captions) with timestamps |
get_transcript_languages | Lists available manual and auto-generated caption languages |
get_server_info | Server version, active provider, and the backend serving each tool |
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.
Your MCP client can run the published package without a clone:
npx -y @granitebps/youtube-mcp
The server uses stdio. Keep stdout reserved for MCP traffic.
To develop the server or use a clone directly:
git clone https://github.com/granitebps/youtube-mcp.git
cd youtube-mcp npm ci npm run build
Point your MCP client at the compiled entry point:
node /absolute/path/to/youtube-mcp/dist/index.js
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.
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.
Add the npm package to Claude Code:
claude mcp add youtube -- npx -y @granitebps/youtube-mcp
For a local build:
claude mcp add youtube -- node /absolute/path/to/youtube-mcp/dist/index.js
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.
{
"mcpServers": { "youtube": { "command": "npx", "args": ["-y", "@granitebps/youtube-mcp"] } } }
For a local build, replace command and args with:
{
"command": "node", "args": ["/absolute/path/to/youtube-mcp/dist/index.js"] }
Add the npm package to ~/.codex/config.toml, or to .codex/config.toml in a trusted project:
[mcp_servers.youtube]
command = "npx" args = ["-y", "@granitebps/youtube-mcp"]
For a local build:
[mcp_servers.youtube]
command = "node" args = ["/absolute/path/to/youtube-mcp/dist/index.js"]
Restart Codex after editing the file.
Add the npm package to opencode.json or opencode.jsonc:
{
"$schema": "https://opencode.ai/config.json", "mcp": { "youtube": { "type": "local", "command": ["npx", "-y", "@granitebps/youtube-mcp"], "enabled": true } } }
For a local build, replace the command array with:
{
"command": ["node", "/absolute/path/to/youtube-mcp/dist/index.js"] }
Add the npm package to .cursor/mcp.json in a project, or to ~/.cursor/mcp.json for global use:
{
"mcpServers": { "youtube": { "command": "npx", "args": ["-y", "@granitebps/youtube-mcp"] } } }
For a local build, replace command and args with:
{
"command": "node", "args": ["/absolute/path/to/youtube-mcp/dist/index.js"] }
Add to your VS Code settings.json:
{
"mcp": { "servers": { "youtube": { "command": "npx", "args": ["-y", "@granitebps/youtube-mcp"] } } } }
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).
# On your VPS
git clone https://github.com/granitebps/youtube-mcp.git cd youtube-mcp npm ci npm run build
cp .env.example .env
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.
# Using --http flag
node dist/index.js --http
TRANSPORT=http PORT=3000 node dist/index.js
npm run start:http
The server will listen on http://0.0.0.0:3000/mcp.
server {
listen 443 ssl; server_name mcp.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/mcp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mcp.yourdomain.com/privkey.pem;
location /mcp { proxy_pass http://127.0.0.1:3000/mcp; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Connection ''; proxy_buffering off; proxy_cache off; chunked_transfer_encoding on; } }
Get a free TLS certificate:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d mcp.yourdomain.com
Create /etc/systemd/system/youtube-mcp.service:
[Unit]
Description=YouTube MCP Server After=network.target
[Service] Type=simple User=your_user WorkingDirectory=/path/to/youtube-mcp ExecStart=/usr/bin/node dist/index.js --http Restart=always RestartSec=5 Environment=TRANSPORT=http Environment=PORT=3000 Environment=HOST=127.0.0.1
[Install] WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable youtube-mcp sudo systemctl start youtube-mcp sudo systemctl status youtube-mcp
{
"mcp": { "servers": { "youtube": { "type": "http", "url": "https://mcp.yourdomain.com/mcp" } } } }
{
"mcpServers": { "youtube": { "type": "streamable-http", "url": "https://mcp.yourdomain.com/mcp" } } }
Once connected, you can ask your AI agent things like:
All tools return:
content: short human-readable text for chat-style MCP clientsstructuredContent: JSON-shaped data for agents that need reliable fieldsThe 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:
{
"content": [ { "type": "text", "text": "📹 Example title\n\nChannel: Example channel\n..." } ], "structuredContent": { "videoId": "dQw4w9WgXcQ", "title": "Example title", "description": "Example description", "channelName": "Example channel", "channelId": "UC123", "uploadedAt": "Sep 14, 2017", "duration": "3m 33s", "durationSeconds": 213, "viewCount": "123456", "likeCount": "7890", "commentCount": null, "tags": ["music", "pop"], "thumbnailUrl": "https://..." } }
Values YouTube did not provide are null, never placeholders such as "0", "N/A" or "Unknown".
Failures return isError: true. The text starts with a code (❌ [ACCESS_BLOCKED] ...) and _meta["youtube-mcp/error"] carries the details:
{
"isError": true, "content": [{ "type": "text", "text": "❌ [ACCESS_BLOCKED] YouTube requires sign-in to access video C7OQHIpDlvA: Sign in to confirm you’re not a bot" }], "_meta": { "youtube-mcp/error": { "code": "ACCESS_BLOCKED", "message": "...", "retryable": false, "upstream": { "playabilityStatus": "LOGIN_REQUIRED", "reason": "Sign in to confirm you’re not a bot", "accessKind": "login_required" } } } }
The error is in _meta, not structuredContent, because MCP SDK clients validate any structuredContent against the tool's output schema, even on error results.
| Code | Meaning |
|---|---|
INVALID_INPUT | Not a YouTube URL or 11-character video ID, or an invalid language code |
ACCESS_BLOCKED | YouTube refused this client: HTTP 429/403, CAPTCHA, consent page, sign-in or bot check. upstream.accessKind is rate_limited, forbidden, login_required, consent_required, or quota_exceeded (official API quota used up). Says nothing about whether the video exists or has captions |
| VIDEO_UNAVAILABLE | YouTube reports the video as ERROR, UNPLAYABLE, private or offline. upstream.reason is
ตัดมาแค่ช่วงต้น อ่านต่อใน repo