YouTube video search · channels · playlists · comments
Scrape YouTube in your MCP clients — no official API key required
Quick Start · Tools · Client Setup · Examples · FAQ · Report Bug
📑 Table of contents (Click to show)
Important
This project does not use the official YouTube Data API v3. It parses public web pages (ytInitialData). If YouTube changes its page structure, some features may break. Personal, non-commercial use is recommended.
Warning
Excessive requests may get blocked by YouTube. If that happens often, enable the Zyte proxy with the ZYTE_API_KEY environment variable.
| 🔍 Video search | Keyword search with sort, date, and duration filters |
| 📺 Video details | Views, likes, duration, and more by ID or URL |
| 📡 Channels | Look up channels by ID, @handle, or URL |
| 📋 Playlists | Playlist metadata and video lists |
| 💬 Comments | Top and recent comments on a video |
| 🔌 stdio MCP | Works with Cursor, Claude, Codex, and other local clients |
| 🔑 No API key | No Google Cloud API key required |
git clone https://github.com/iamkw0n/youtube-mcp.git
cd youtube-mcp
npm install
npm run build
npm startOr run directly with tsx:
npx tsx src/index.ts
| Tool | Description |
|---|---|
search_videos |
Search videos by keyword |
get_video |
Get video details by ID or URL |
get_videos |
Batch-fetch multiple videos |
search_channels |
Search channels by keyword |
get_channel |
Get channel info by ID, @handle, or URL |
get_channel_videos |
List recent videos from a channel |
get_playlist |
Get playlist metadata |
get_playlist_items |
List videos in a playlist |
get_video_comments |
Fetch video comments |
api_status |
Check scraping and proxy status |
Paste this into Cursor, Claude Code, or Codex to ask the agent to install the MCP server:
Clone iamkw0n/youtube-mcp from GitHub and set up the MCP server for me.
| Client | Config file | stdio |
|---|---|---|
| Cursor | .cursor/mcp.json |
✅ |
| Claude Code | .mcp.json |
✅ |
| Claude Desktop | claude_desktop_config.json |
✅ |
| Codex | .codex/config.toml |
✅ |
| ChatGPT | Connector URL | ❌ |
Add to .cursor/mcp.json in your project root:
{
"mcpServers": {
"youtube-mcp": {
"command": "node",
"args": ["/absolute/path/to/youtube-mcp/dist/index.js"],
"cwd": "/absolute/path/to/youtube-mcp"
}
}
}With Zyte proxy (optional):
{
"mcpServers": {
"youtube-mcp": {
"command": "node",
"args": ["/absolute/path/to/youtube-mcp/dist/index.js"],
"cwd": "/absolute/path/to/youtube-mcp",
"env": {
"ZYTE_API_KEY": "${env:ZYTE_API_KEY}"
}
}
}
}Add to .mcp.json in your project root:
{
"mcpServers": {
"youtube-mcp": {
"type": "stdio",
"command": "node",
"args": ["/absolute/path/to/youtube-mcp/dist/index.js"]
}
}
}CLI:
claude mcp add youtube-mcp -s project -- node /absolute/path/to/youtube-mcp/dist/index.js
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"youtube-mcp": {
"command": "node",
"args": ["/absolute/path/to/youtube-mcp/dist/index.js"],
"cwd": "/absolute/path/to/youtube-mcp"
}
}
}Warning
Claude Desktop does not support ${workspaceFolder}. Use absolute paths.
In .codex/config.toml or ~/.codex/config.toml:
[mcp_servers.youtube-mcp] command = "node" args = ["/absolute/path/to/youtube-mcp/dist/index.js"] cwd = "/absolute/path/to/youtube-mcp" enabled = true
CLI:
codex mcp add youtube-mcp -- node /absolute/path/to/youtube-mcp/dist/index.js
Verify in a Codex session with /mcp.
Important
ChatGPT connectors only support HTTPS MCP endpoints. This repo is a local stdio server and cannot be connected to ChatGPT directly.
Search YouTube for TypeScript tutorial videos
Get details for this video: https://www.youtube.com/watch?v=dQw4w9WgXcQ
Show me the 5 most recent videos from @GoogleDevelopers
What videos are in this playlist? https://www.youtube.com/playlist?list=PL...
flowchart LR
A[MCP Client] -->|stdio| B[youtube-mcp]
B -->|fetch HTML| C[www.youtube.com]
B -->|parse| D[ytInitialData]
B -->|pagination| E[InnerTube continuation]
| Step | Description |
|---|---|
| Page fetch | Download public YouTube HTML pages |
| Data extraction | Parse ytInitialData and ytInitialPlayerResponse JSON |
| Pagination | Load more results via InnerTube continuation tokens |
MIT © iamkw0n
Built with ❤️ by iamkw0n · Unofficial project, not affiliated with YouTube or Google