tube-bridge
tube-bridge is a self-hosted MCP server providing 17 tools for AI agents to interact with YouTube content. 14 tools work without an API key; 3 require a YouTube Data API v3 key (channel search, channel info, and comments). Search, video info, and trending are enhanced when a key is set.
Search & Discovery:
youtube_search: Search videos with filters (date, channel, duration, order). Upgraded with API key.youtube_search_channels: Search channels by name/topic with subscriber filters. Requires API key.youtube_get_trending: Get trending videos. Upgraded with API key.youtube_get_channel_videos: List recent uploads from a channel (via @handle or URL).youtube_get_playlist: Retrieve all videos in a playlist.
Metadata & Content:
youtube_get_video_info: Full metadata (title, views, duration, channel, tags, description). Upgraded with API key.youtube_get_channel_info: Detailed channel stats (subscribers, views, country, keywords). Requires API key.youtube_get_transcript: Fetch transcript/subtitles (original/default language, manual preferred). Optional timestamps.youtube_get_available_languages: List subtitle languages with manual/auto flags.youtube_get_frame: Extract a JPEG frame at a millisecond timestamp (requires ffmpeg).
Engagement:
youtube_get_comments: Top-level comments with likes and reply counts. Requires API key.
Semantic Corpus:
corpus_create: Create a named corpus for semantic transcript search.corpus_add: Add a video transcript to a corpus; auto-fetches, chunks into 80s windows, and embeds locally using BGE-small-en-v1.5.corpus_search: Semantic search with overlap deduplication, source-aware ranking, titles, and timestamped URLs.corpus_list: List all corpora with chunk and video counts.corpus_delete: Delete a corpus and its chunks/vectors.
Server Utilities:
tube_bridge_help: Access full server documentation directly via MCP.
Transports & Auth:
Transports: stdio, HTTP (
/mcp), SSE (/sse), health check (/health).Optional Bearer token authentication via
TUBE_BRIDGE_AUTH_KEYfor HTTP/SSE.
Provides tools for searching YouTube videos, retrieving video metadata and transcripts, exploring channels, playlists, and comments, and building semantic search corpora over video transcripts.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tube-bridgewhat are the latest videos from Veritasium?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tube-bridge
Self-hosted YouTube research for AI agents.
Search videos and channels, read transcripts and comments, extract timestamped frames, and build private semantic-search corpora — through 17 MCP tools.
14 of 17 tools need no YouTube API key.
Local-first corpus: transcripts, vectors, and indexes stay on your machine.
Useful research output: titles, similarity scores, canonical video URLs, and timestamp links.
One tool for one frame: return visual evidence near a transcript finding without keeping media files.
Self-hosted and MIT: no account, hosted intermediary, managed storage, or vendor lock-in.
Thanks to everyone already using tube-bridge. If it saves you time, consider starring the repository — it helps others discover the project and signals that publishing more work like this is worthwhile.
Connect in a minute
The simplest setup uses uvx, which runs the published PyPI package in an isolated environment:
uvx tube-bridgeNormally your MCP client launches that command for you. Choose your client below.
tube-bridge requires Python 3.12 or newer. An API key is optional.ffmpeg is needed only for youtube_get_frame, and the first embedding operation may download the local model.
Claude Desktop
Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"tube-bridge": {
"command": "uvx",
"args": ["tube-bridge"]
}
}
}Restart Claude Desktop after saving the configuration.
Claude Code
claude mcp add --scope user tube-bridge -- uvx tube-bridgeCursor
Create .cursor/mcp.json in your project, or add the server to your user-level MCP configuration:
{
"mcpServers": {
"tube-bridge": {
"command": "uvx",
"args": ["tube-bridge"]
}
}
}VS Code
Create .vscode/mcp.json:
{
"servers": {
"tube-bridge": {
"type": "stdio",
"command": "uvx",
"args": ["tube-bridge"]
}
}
}Codex CLI
codex mcp add tube-bridge -- uvx tube-bridgeRelated MCP server: yt
Pi package
Pi can load the package-relative adapter and the canonical tube-bridge-research skill from the same Git source:
python3 -m pip install tube-bridge==1.1.6
pi install git:github.com/TheWhiteWater/tube-bridge@v1.1.6
pi listThis registers one status tool plus all 17 MCP tools with the tube_bridge_ prefix. The adapter reads the existing plugin.json and mcp.json, launches only the local stdio runtime, preserves bounded text and image content, and forwards only an allowlisted child-process environment.
The Pi package manager installs the Node adapter dependency but does not install Python or ffmpeg. Ensure the python3 visible to Pi is Python 3.12+ with the tube-bridge dependencies installed; install ffmpeg separately to use youtube_get_frame. By default, Pi-managed state lives under the platform data directory; set TUBE_BRIDGE_PI_DATA to move that root. An explicit TUBE_BRIDGE_CACHE still takes precedence for the runtime databases. The optional live frame gate is /tube-bridge-selftest frame.
Remove the package with:
pi remove git:github.com/TheWhiteWater/tube-bridge@v1.1.6If a desktop client cannot find uvx, replace "uvx" with the absolute path returned by which uvx on macOS/Linux or where.exe uvx on Windows.
Try the complete research workflow
Ask your agent:
Search YouTube for recent videos about local-first AI agents. Read the transcript of the strongest result, add it to a corpus named
local-agents, find the section discussing memory, return the timestamped source link, and extract a frame from that moment.
The agent can complete that request with this tool sequence:
youtube_search(query="local-first AI agents", order="date")
youtube_get_transcript(url="https://www.youtube.com/watch?v=VIDEO_ID", with_timestamps=true)
corpus_create(corpus_id="local-agents", label="Local-first AI Agents")
corpus_add(corpus_id="local-agents", url="https://www.youtube.com/watch?v=VIDEO_ID")
corpus_search(corpus_id="local-agents", query="memory architecture")
youtube_get_frame(url="https://www.youtube.com/watch?v=VIDEO_ID", timestamp_ms=FOUND_TIME_MS)Add more videos with corpus_add, then use corpus_search to search across all of their transcripts at once.
Tools
Tool | YouTube API key | What it does |
| Optional | Search videos with date, channel, duration, and ordering filters |
| Optional | Get title, duration, views, channel, description, and tags |
| Optional | Get currently trending videos |
| No | Get recent uploads from a channel URL or |
| No | Get videos from a playlist |
| No | Get a transcript, optionally with |
| No | Return one ephemeral JPEG near an integer-millisecond timestamp |
| No | List manual and auto-generated subtitle tracks |
| Required | Get top-level comments with likes and reply counts |
| Required | Search channels and filter by subscriber count |
| Required | Get channel statistics, country, and keywords |
| No | Create a named local corpus |
| No | Fetch, chunk, and locally embed a video transcript |
| No | Semantically search a corpus with timestamped results |
| No | List corpora with video and chunk counts |
| No | Permanently delete a corpus and its vectors |
| No | Read runtime documentation and known limitations |
No means no YouTube Data API key is needed; network access to YouTube may still be required. Search, video information, and trending work without a key through yt-dlp and upgrade to Data API v3 when a key is configured.
Optional YouTube Data API key
A YouTube Data API v3 key unlocks comments, channel search, and channel details. It also improves search, video information, and trending reliability.
Create a key in Google Cloud Console, enable YouTube Data API v3, and expose it to the process launching tube-bridge:
export YOUTUBE_API_KEY="your-key"Keep keys out of committed MCP configuration files. Use your client's secret/environment support where available.
Local semantic corpus
Corpus storage and embedding inference are local to the machine running tube-bridge.
Storage: SQLite plus sqlite-vec in
~/.tube_bridge/corpus.dbEmbeddings: BGE-small-en-v1.5 through fastembed
Chunking: 80-second windows with 20-second overlap
Ranking: overlap deduplication and source-aware per-video limits
Results: similarity score, time span, video title, canonical URL, and timestamp URL
Set TUBE_BRIDGE_CACHE to move both corpus and cache databases:
export TUBE_BRIDGE_CACHE="/path/to/tube-bridge-data"The embedding model may be downloaded on first use. After the assets are available, embedding inference does not require an external model API.
Frame extraction
youtube_get_frame requires ffmpeg on PATH; the Docker image already includes it.
Each call downloads a short temporary section around timestamp_ms, returns one bounded JPEG as MCP ImageContent, and removes the temporary media before returning. It does not create a frame or clip library.
Other ways to run
Persistent PyPI installation
pip install tube-bridge
tube-bridge # stdio
tube-bridge --http # Streamable HTTP on port 8080Docker
docker run --rm -p 8080:8080 ghcr.io/thewhitewater/tube-bridge:latestThe health endpoint is http://localhost:8080/health; the Streamable HTTP endpoint is http://localhost:8080/mcp.
Official MCP Registry
Registry name: io.github.TheWhiteWater/tube-bridge
Registry-aware clients can install the PyPI distribution with uvx and launch the stdio server without a hosted intermediary.
Remote HTTP configuration
For an HTTP instance you operate:
{
"mcpServers": {
"tube-bridge": {
"type": "http",
"url": "https://your-host.example/mcp"
}
}
}Protect remote MCP routes by setting a server-side Bearer key:
export TUBE_BRIDGE_AUTH_KEY="choose-a-long-random-value"
tube-bridge --httpThen configure a header-capable client:
{
"mcpServers": {
"tube-bridge": {
"type": "http",
"url": "https://your-host.example/mcp",
"headers": {
"Authorization": "Bearer <your-key>"
}
}
}
}/health remains public. /mcp, /sse, and /messages require the Bearer key when TUBE_BRIDGE_AUTH_KEY is set. Legacy SSE is available at /sse for clients that still need it.
Environment variables
Variable | Required | Purpose |
| No | Enables the 3 API-only tools and upgrades supported discovery calls |
| No | Routes yt-dlp and transcript requests through an HTTP(S) or SOCKS proxy |
| No | Changes the directory containing |
| No | Protects self-hosted HTTP MCP routes with a static Bearer token |
How it works
MCP client
│
├── discovery and metadata ── Data API v3 (when configured)
│ └─ yt-dlp fallback
├── transcripts ───────────── youtube-transcript-api
├── timestamped frames ────── yt-dlp + ffmpeg → ephemeral JPEG
└── semantic corpus ───────── SQLite + sqlite-vec + local fastembedstdio is recommended for local clients;
Streamable HTTP is available at
/mcpfor self-hosted remote use;successful fallback responses keep their normal schemas;
controlled failures use typed MCP errors with stable
code,source, andretryablefields;cache and corpus databases are separate and remain operator-owned.
Agent Plugin preview
GitHub Releases include tube-bridge-agent-plugin-<version>.zip, containing:
the local stdio MCP configuration;
the
tube-bridge-researchskill;research templates and source-evaluation guidance.
Agent Plugins v1 does not standardize dependency installation. Install Python 3.12+, ffmpeg, and the package dependencies in the environment used by the plugin host. The bundle contains no credentials.
Known limitations
YouTube can restrict anonymous yt-dlp and transcript requests, especially from cloud-hosting IP ranges.
A Data API key improves discovery and metadata reliability but does not replace transcript access.
Initial local embedding-model setup may require network access and additional disk space.
tube-bridge is self-hosted software; it does not provide accounts, public hosted access, managed storage, or an SLA.
If YouTube blocks requests from your network, set TUBE_BRIDGE_PROXY. Keep proxy credentials in environment variables rather than committed configuration.
Development
git clone https://github.com/TheWhiteWater/tube-bridge.git
cd tube-bridge
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements-release.txt
pip install --no-deps -e .
pip install pytest pytest-asyncio pytest-mock build twine
python -m pytest tests -qpython test_tools.py is an optional live YouTube smoke test. The deterministic test suite does not call YouTube.
See CONTRIBUTING.md to contribute. Security reports should follow SECURITY.md.
License
MIT — see LICENSE.
Maintenance
Related MCP Servers
- AlicenseBqualityCmaintenanceAn MCP server that provides AI assistants with powerful tools to interact with YouTube, including video searching, transcript extraction, comment retrieval, and more.819Apache 2.0
- AlicenseAqualityDmaintenanceMCP server that provides YouTube video data to AI agents, supporting search, metadata, comments, and transcripts without an API key.527MIT
- AlicenseAqualityDmaintenanceMCP server that lets AI agents search YouTube and fetch transcripts.23MIT
Related MCP Connectors
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
Driflyte MCP server which lets AI assistants query topic-specific knowledge from web and GitHub.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheWhiteWater/tube-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server