yt-feed-mcp
Enables AI assistants to list YouTube subscriptions and unsubscribe from all or specific channels via browser automation and InnerTube API.
README
yt-feed
CLI tool for YouTube: fetch latest videos from channels, list subscriptions, and mass-unsubscribe from all channels using browser automation.
Features
- feed — get N latest videos from a list of YouTube channels (via yt-dlp, no API key)
- list-subs — list every channel your account is subscribed to
- unsub — unsubscribe from ALL channels at once via YouTube's InnerTube API
- MCP server — expose unsub tools via Model Context Protocol (for AI assistants like opencode)
Installation
python -m venv .venv
.venv\Scripts\pip install yt-dlp requests playwright mcp
.venv\Scripts\playwright install chromium
Or install in editable mode:
.venv\Scripts\pip install -e .
Usage
Fetch video feed
.venv\Scripts\python -m yt_feed.cli feed channels.txt -n 5 -o out.txt
# or after pip install -e .:
yt-feed feed channels.txt -n 5
channels.txt — one channel URL per line (# for comments).
List subscriptions
yt-feed list-subs --browser edge
Unsubscribe from all channels
# Preview only (no changes)
yt-feed unsub --browser edge --dry-run
# Real unsubscribe (prompts for confirmation)
yt-feed unsub --browser edge
# Skip confirmation
yt-feed unsub --browser edge --yes
# Custom profile directory
yt-feed unsub --browser chrome --profile-dir "D:\User Data" --yes
Note: Close the browser before running unsub — Playwright's launch_persistent_context cannot open a profile that's already in use.
MCP server
Run the MCP server via stdio:
yt-feed-mcp
Then configure in opencode.json:
{
"mcp": {
"yt-unsub": {
"type": "local",
"command": [".venv\\Scripts\\python", "-m", "yt_feed.mcp_server"],
"enabled": true
}
}
}
Available tools:
| Tool | Description |
|---|---|
list_subscriptions |
List all subscribed channels |
unsubscribe_all |
Unsubscribe from all channels (requires confirm=True) |
unsubscribe_channels |
Unsubscribe from specific channel IDs |
close_browser |
Close the managed browser (free resources) |
Browsers
| Flag | Browser |
|---|---|
--browser edge |
Microsoft Edge (default) |
--browser chrome |
Google Chrome |
Profile paths
The tool auto-detects the browser profile directory. Override with --profile-dir <path> (points to the User Data directory, not the Default subfolder).
| Browser | Windows | macOS | Linux |
|---|---|---|---|
| Edge | %LOCALAPPDATA%\Microsoft\Edge\User Data |
~/Library/Application Support/Microsoft Edge |
~/.config/microsoft-edge |
| Chrome | %LOCALAPPDATA%\Google\Chrome\User Data |
~/Library/Application Support/Google/Chrome |
~/.config/google-chrome |
How the unsubscribe works
- Playwright launches the browser with your profile (
launch_persistent_context) — this gives access to your YouTube session - The
/feed/channelspage is loaded and scrolled to the bottom; real UC channel IDs are extracted from the DOM (el.data.channelId) - For each channel, a
POSTrequest is sent to InnerTube API/subscription/unsubscribefrom within the browser context - Authorization: the
Authorization: SAPISIDHASH <ts>_<sha1>header is computed client-side from the SAPISID cookie viacrypto.subtle.digest('SHA-1', ...)
Key details
- Cookies are never exported — the browser sends them natively via
credentials: 'include' - yt-dlp cannot decrypt DPAPI-encrypted Edge cookies on Windows — Playwright is required
- Channel IDs must be
UCxxxxx(not@handle) - 300 ms delay between requests to avoid rate limiting
Requirements
- Python ≥ 3.10
- Edge or Chrome browser with a logged-in YouTube account
- Windows, macOS, or Linux
Project structure
yt-feed/
├── yt_feed/
│ ├── __init__.py
│ ├── cli.py # CLI entry point (argparse, commands: feed, list-subs, unsub)
│ ├── feed.py # Video feed via yt-dlp
│ ├── unsub.py # Mass unsubscribe via Playwright + InnerTube API
│ └── mcp_server.py # MCP server exposing tools via Model Context Protocol
├── channels.txt # Channel list for the feed command
├── pyproject.toml # Package config
├── AGENTS.md # Agent instructions (opencode)
└── README.md
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.