YouTube MCP Server
Provides tools for searching YouTube videos, channels, and live streams; retrieving video details, transcripts, and comments; monitoring live streams and chat; and analyzing channel statistics.
Click on "Deploy 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., "@YouTube MCP Serversearch for recent tech reviews"
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.
YouTube MCP Server
A production-ready MCP (Model Context Protocol) server for YouTube integration with intelligent caching via mcp-refcache. Search videos, retrieve transcripts, analyze channels, monitor live streams, and more - all optimized for AI agents with smart caching to minimize API quota usage.
Version: 0.0.0 (Experimental First Release)
Features
🔍 Search & Discovery
Video Search - Find videos by keywords with metadata (title, description, views, etc.)
Channel Search - Discover channels by query
Live Stream Search - Find currently broadcasting live videos
📊 Metadata & Analytics
Video Details - Complete metadata including statistics (views, likes, comments)
Channel Info - Detailed channel statistics and subscriber counts
Live Status - Check if a video is currently streaming with viewer counts
📝 Transcript Management
Full Transcripts - Download complete video transcripts with timestamps
Transcript Previews - Get summarized transcript snippets for quick context
Chunked Access - Navigate large transcripts in manageable pieces
Multi-Language Support - List and retrieve transcripts in available languages
💬 Engagement & Live Chat
Video Comments - Fetch top comments with engagement metrics
Live Chat Monitoring - Real-time access to live stream chat messages
Live Chat Pagination - Efficient polling for new chat messages
⚡ Performance & Caching
Intelligent Multi-Tier Caching - Optimized for different data volatility:
youtube.content- Permanent caching for immutable content (transcripts)youtube.api- 24h cache for general API data (video/channel metadata)youtube.comments- 5m cache for rapidly changing comment datayoutube.search- 6h cache for search resultsLive streaming - 30s-5m cache for real-time data
Reference-Based Results - Large datasets returned as references to minimize context usage
Preview Generation - Automatic previews for transcript and large data
Smart Quota Management - Caching reduces API quota usage by ~75%
Related MCP server: yt
Prerequisites
Python 3.12+
uv (recommended) or pip
YouTube Data API v3 Key - Get one here
Getting Your YouTube API Key
Go to Google Cloud Console
Create a new project or select an existing one
Enable the YouTube Data API v3:
Navigate to "APIs & Services" > "Library"
Search for "YouTube Data API v3"
Click "Enable"
Create credentials:
Go to "APIs & Services" > "Credentials"
Click "Create Credentials" > "API Key"
Copy your API key
(Optional) Restrict your API key:
Click on the key to edit
Under "API restrictions", select "Restrict key"
Choose "YouTube Data API v3"
Save
Default Quota: 10,000 units/day (~100 searches or ~10,000 metadata requests)
Quick Start
Installation (Local)
# Clone the repository
git clone https://github.com/l4b4r4b4b4/yt-mcp
cd yt-mcp
# Install dependencies
uv sync
# Set your API key
export YOUTUBE_API_KEY="your-api-key-here"
# Run the server (stdio mode for Claude Desktop)
uv run yt-mcp stdioInstallation (Docker)
# Clone the repository
git clone https://github.com/l4b4r4b4b4/yt-mcp
cd yt-mcp
# Set your API key in .env file
echo "YOUTUBE_API_KEY=your-api-key-here" > .env
# Build and run with docker-compose
docker compose upThe server will be available at http://localhost:8000 in HTTP mode.
Configuration
Environment Variables
Set your YouTube API key via environment variable:
export YOUTUBE_API_KEY="your-youtube-api-key"Or add to your shell profile (~/.zshrc, ~/.bashrc):
echo 'export YOUTUBE_API_KEY="your-key"' >> ~/.zshrcOptional Langfuse Tracing:
export LANGFUSE_PUBLIC_KEY="pk-lf-..."
export LANGFUSE_SECRET_KEY="sk-lf-..."
export LANGFUSE_HOST="https://cloud.langfuse.com"Using with Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"youtube": {
"command": "uv",
"args": ["--directory", "/path/to/yt-mcp", "run", "yt-mcp", "stdio"],
"env": {
"YOUTUBE_API_KEY": "your-api-key-here"
}
}
}
}Using with Zed
Add to your Zed settings (.zed/settings.json or global settings):
{
"context_servers": {
"youtube-mcp": {
"command": {
"path": "uv",
"args": ["--directory", "/path/to/yt-mcp", "run", "yt-mcp", "stdio"],
"env": {
"YOUTUBE_API_KEY": "your-api-key-here"
}
}
}
}
}Using with Docker
Production (docker-compose)
# Create .env file with your API key
echo "YOUTUBE_API_KEY=your-api-key" > .env
# Run production server
docker compose up
# Run in background
docker compose up -d
# View logs
docker compose logs -f
# Stop server
docker compose downDevelopment (with hot reload)
# Run development server with code volume mount
docker compose --profile dev upDirect Docker Run
# Build the image
docker build -f docker/Dockerfile -t yt-mcp:latest .
# Run the container
docker run -p 8000:8000 \
-e YOUTUBE_API_KEY="your-api-key" \
yt-mcp:latest
# With Langfuse tracing
docker run -p 8000:8000 \
-e YOUTUBE_API_KEY="your-api-key" \
-e LANGFUSE_PUBLIC_KEY="pk-lf-..." \
-e LANGFUSE_SECRET_KEY="sk-lf-..." \
yt-mcp:latestAvailable Tools
🔍 Search Tools
search_videos(query: str, max_results: int = 5)
Search for YouTube videos matching a query.
Parameters:
query(string, required) - Search term (e.g., "NixOS tutorials", "vimjoyer nix")max_results(integer, optional) - Number of results, 1-50, default: 5
Returns:
[
{
"video_id": "abc123",
"title": "Video Title",
"description": "Video description...",
"url": "https://www.youtube.com/watch?v=abc123",
"thumbnail": "https://i.ytimg.com/vi/abc123/default.jpg",
"channel_title": "Channel Name",
"published_at": "2024-01-15T10:30:00Z"
}
]Caching: 6 hours (youtube.search namespace) Quota Cost: 100 units per request
Example:
Search for videos about "Nix flakes tutorial"search_channels(query: str, max_results: int = 5)
Search for YouTube channels matching a query.
Parameters:
query(string, required) - Channel search termmax_results(integer, optional) - Number of results, 1-50, default: 5
Returns:
[
{
"channel_id": "UCxyz123",
"title": "Channel Name",
"description": "Channel description...",
"url": "https://www.youtube.com/channel/UCxyz123",
"thumbnail": "https://yt3.ggpht.com/...",
"published_at": "2020-05-10T08:00:00Z"
}
]Caching: 6 hours (youtube.search namespace) Quota Cost: 100 units per request
search_live_videos(query: str, max_results: int = 5)
Search for currently live YouTube videos.
Parameters:
query(string, required) - Search query (e.g., "gaming live", "news live")max_results(integer, optional) - Number of results, 1-50, default: 5
Returns:
[
{
"video_id": "live123",
"title": "Live Stream Title",
"description": "Stream description...",
"url": "https://www.youtube.com/watch?v=live123",
"thumbnail": "https://i.ytimg.com/vi/live123/default.jpg",
"channel_title": "Streamer Name",
"published_at": "2024-01-20T15:00:00Z"
}
]Caching: 6 hours (youtube.search namespace) Quota Cost: 100 units per request
📊 Metadata & Status Tools
get_video_details(video_id: str)
Get detailed information about a specific video.
Parameters:
video_id(string, required) - YouTube video ID (e.g., "dQw4w9WgXcQ")
Returns:
{
"video_id": "abc123",
"title": "Video Title",
"description": "Full description...",
"url": "https://www.youtube.com/watch?v=abc123",
"thumbnail": "https://i.ytimg.com/vi/abc123/maxresdefault.jpg",
"channel_title": "Channel Name",
"published_at": "2024-01-15T10:30:00Z",
"view_count": "150000",
"like_count": "5000",
"comment_count": "300",
"duration": "PT15M30S",
"tags": ["nix", "linux", "tutorial"]
}Caching: 24 hours (youtube.api namespace) Quota Cost: 1 unit per request
get_channel_info(channel_id: str)
Get detailed information about a YouTube channel.
Parameters:
channel_id(string, required) - YouTube channel ID (e.g., "UCuAXFkgsw1L7xaCfnd5JJOw")
Returns:
{
"channel_id": "UCxyz123",
"title": "Channel Name",
"description": "Channel description...",
"url": "https://www.youtube.com/channel/UCxyz123",
"thumbnail": "https://yt3.ggpht.com/...",
"subscriber_count": "50000",
"video_count": "200",
"view_count": "5000000",
"published_at": "2020-05-10T08:00:00Z"
}Caching: 24 hours (youtube.api namespace) Quota Cost: 1 unit per request
is_live(video_id: str)
Check if a YouTube video is currently live streaming.
Parameters:
video_id(string, required) - YouTube video ID to check
Returns:
{
"video_id": "live123",
"is_live": true,
"viewer_count": 1234,
"scheduled_start_time": "2024-01-20T15:00:00Z",
"actual_start_time": "2024-01-20T15:02:00Z",
"active_live_chat_id": "Cg0KC2xpdmUxMjM..."
}Caching: 30 seconds (youtube.api namespace) Quota Cost: 1 unit per request
Note: Use this to check status before accessing live chat.
📝 Transcript Tools
list_available_transcripts(video_id: str)
List all available transcript languages for a video.
Parameters:
video_id(string, required) - YouTube video ID
Returns:
{
"video_id": "abc123",
"available_languages": ["en", "es", "fr", "de"],
"transcript_info": [
{
"language": "en",
"language_code": "en",
"is_generated": false,
"is_translatable": true
},
{
"language": "es",
"language_code": "es",
"is_generated": true,
"is_translatable": false
}
]
}Caching: Permanent (youtube.content namespace) Quota Cost: 0 (uses youtube-transcript-api, not YouTube Data API)
Note: Always check this first before requesting transcripts.
get_video_transcript_preview(video_id: str, language: str = "en", max_chars: int = 2000)
Get a preview of the video transcript (first N characters).
Parameters:
video_id(string, required) - YouTube video IDlanguage(string, optional) - Language code (default: "en")max_chars(integer, optional) - Maximum characters to return (default: 2000)
Returns:
{
"video_id": "abc123",
"language": "en",
"preview": "First 2000 characters of transcript...",
"total_length": 50000,
"is_truncated": true
}Caching: Permanent (youtube.content namespace) Quota Cost: 0
Note: Use this for quick context before fetching full transcript.
get_full_transcript(video_id: str, language: str = "en")
Get the complete transcript of a video with timestamps.
Parameters:
video_id(string, required) - YouTube video IDlanguage(string, optional) - Language code (default: "en")
Returns:
{
"video_id": "abc123",
"language": "en",
"transcript": [
{
"text": "Hello everyone, welcome to this tutorial...",
"start": 0.0,
"duration": 3.5
},
{
"text": "Today we're going to learn about...",
"start": 3.5,
"duration": 4.2
}
],
"full_text": "Hello everyone, welcome to this tutorial. Today we're going to learn about..."
}Caching: Permanent (youtube.content namespace) Quota Cost: 0
Note: Large transcripts return a RefCache reference. Use get_cached_result to paginate or retrieve full data.
get_transcript_chunk(video_id: str, start_index: int = 0, chunk_size: int = 50, language: str = "en")
Get a specific chunk of transcript entries (for pagination).
Parameters:
video_id(string, required) - YouTube video IDstart_index(integer, optional) - Starting entry index, 0-based (default: 0)chunk_size(integer, optional) - Number of entries to return (default: 50)language(string, optional) - Language code (default: "en")
Returns:
{
"video_id": "abc123",
"language": "en",
"start_index": 0,
"chunk_size": 50,
"entries": [
{"text": "...", "start": 0.0, "duration": 3.5}
],
"total_entries": 250,
"has_more": true
}Caching: Permanent (youtube.content namespace) Quota Cost: 0
💬 Engagement & Live Chat Tools
get_video_comments(video_id: str, max_results: int = 20)
Get top comments from a video with engagement metrics.
Parameters:
video_id(string, required) - YouTube video IDmax_results(integer, optional) - Number of comments, 1-100 (default: 20)
Returns:
{
"video_id": "abc123",
"comments": [
{
"author": "Username",
"text": "Great video! This really helped me understand...",
"like_count": 42,
"published_at": "2024-01-20T15:30:00Z",
"reply_count": 3
}
],
"total_returned": 20
}Caching: 5 minutes (youtube.comments namespace) Quota Cost: 1 unit per request
Note: Returns empty list if comments are disabled (not an error). Only top-level comments, no replies.
get_live_chat_id(video_id: str)
Get the live chat ID for a currently streaming video.
Parameters:
video_id(string, required) - YouTube video ID of the live stream
Returns:
{
"video_id": "live123",
"live_chat_id": "Cg0KC2xpdmUxMjM...",
"is_live": true
}Caching: 5 minutes (youtube.api namespace) Quota Cost: 1 unit per request
Note: Use is_live first to verify video is streaming. Chat ID remains constant during stream.
get_live_chat_messages(video_id: str, max_results: int = 200, page_token: str | None = None)
Get recent live chat messages from a streaming video with pagination.
Parameters:
video_id(string, required) - YouTube video ID of the live streammax_results(integer, optional) - Maximum messages to return, 1-2000 (default: 200)page_token(string, optional) - Pagination token from previous call (None for first call)
Returns:
{
"video_id": "live123",
"messages": [
{
"author": "ViewerName",
"text": "Great stream!",
"published_at": "2024-01-20T16:45:30Z",
"author_channel_id": "UCxyz..."
}
],
"total_returned": 50,
"next_page_token": "GgkKBxIFMTIzNDU",
"polling_interval_millis": 30000
}Caching: 30 seconds (youtube.comments namespace) Quota Cost: 1 unit per request
Polling Pattern:
First call: No
page_token→ Get latest messages +next_page_tokenStore
next_page_tokenWait 30-60 seconds (respect
polling_interval_millis)Subsequent calls: Pass
page_token→ Get only NEW messagesRepeat steps 2-4 for continuous monitoring
Note: MCP is request/response (not true streaming). Agent must manually poll this tool repeatedly to see new messages.
🗂️ Cache Management Tools
get_cached_result(ref_id: str, page: int | None = None, page_size: int | None = None, max_size: int | None = None)
Retrieve and paginate through cached results.
Parameters:
ref_id(string, required) - Reference ID from cached tool (e.g., from large transcript)page(integer, optional) - Page number, 1-indexedpage_size(integer, optional) - Items per page, 1-100max_size(integer, optional) - Maximum preview size in tokens
Returns:
{
"ref_id": "youtube.content:transcript_abc123_en",
"preview": [...],
"total_items": 250,
"page": 2,
"total_pages": 5
}Note: Use this when a tool returns a ref_id instead of full data (for large results).
Example Use Cases
Finding a Specific Video
Goal: Find Vimjoyer's video about Nix garbage collection that keeps only the last N generations
Workflow:
1. Search: "Search for videos by Vimjoyer about Nix garbage collection generations"
→ Returns list of videos with IDs
2. Preview: "Get transcript preview for video abc123"
→ Returns first 2000 characters to check relevance
3. Analyze: "Get full transcript for video abc123 and find the section about keeping last N generations"
→ Returns complete transcript with timestamps
4. Extract: AI analyzes transcript and returns relevant section with timestampChannel Analysis
Goal: Analyze a channel's recent content and engagement
Workflow:
1. Search: "Find the NixOS channel"
→ Returns channel ID
2. Info: "Get channel info for UC[channel-id]"
→ Returns subscriber count, video count, total views
3. Videos: "Search for recent videos from NixOS channel"
→ Returns latest video list
4. Engagement: "Get comments for video abc123"
→ Returns top comments with like countsLive Stream Monitoring
Goal: Monitor a live stream and track chat activity
Workflow:
1. Find: "Search for live videos about Python programming"
→ Returns currently live streams
2. Check: "Is video live123 currently streaming?"
→ Confirms live status and viewer count
3. Connect: "Get live chat ID for video live123"
→ Returns chat ID needed for messages
4. Monitor: "Get live chat messages for video live123"
→ Returns recent messages + next_page_token
5. Poll: "Get live chat messages for video live123 with page_token=XYZ"
→ Returns only new messages since last call
6. Repeat: Wait 30-60 seconds, then repeat step 5Transcript Analysis Across Languages
Goal: Find and compare transcripts in multiple languages
Workflow:
1. Search: "Search for videos about 'machine learning basics'"
→ Returns video IDs
2. Check: "List available transcripts for video abc123"
→ Returns ["en", "es", "fr", "de", "auto-generated"]
3. Compare: "Get transcript preview for abc123 in English"
→ Preview English version
4. Compare: "Get transcript preview for abc123 in Spanish"
→ Preview Spanish version
5. Analyze: AI compares content across languagesCaching Strategy
The server uses a 4-tier caching architecture optimized for different data volatility levels:
Tier 1: Search Results (6 hours)
Namespace:
youtube.searchTTL: 6 hours (21,600 seconds)
Size: 300 entries
Use: Video search, channel search, live video search
Rationale: Search rankings change throughout the day; 6h balances freshness with quota savings
Tier 2: API Metadata (24 hours)
Namespace:
youtube.apiTTL: 24 hours (86,400 seconds)
Size: 1000 entries
Use: Video details, channel info
Rationale: Video stats change daily but not hourly; 24h cache reduces quota by 24x
Tier 3: Comments & Engagement (5 minutes)
Namespace:
youtube.commentsTTL: 5 minutes (300 seconds)
Size: 500 entries
Use: Video comments
Rationale: Comments can change rapidly on viral videos; 5m balances real-time with quota
Tier 4: Immutable Content (Permanent)
Namespace:
youtube.contentTTL: Permanent (no expiration)
Size: 5000 entries
Use: Video transcripts (all transcript tools)
Rationale: Transcripts never change once published; permanent cache eliminates redundant fetches
Tier 5: Live Streaming (30 seconds - 5 minutes)
Namespaces:
youtube.api(live status),youtube.comments(chat messages)TTL: 30 seconds (live status/chat), 5 minutes (chat ID)
Use: Live stream status, chat messages, chat IDs
Rationale: Real-time data needs frequent updates but excessive polling wastes quota
RefCache Integration
Large results (transcripts, long comment lists) are automatically handled by RefCache:
Small Results (≤2048 tokens): Returned inline directly to agent
Large Results (>2048 tokens): Cached with
ref_id+ preview returnedPagination: Use
get_cached_result(ref_id, page=N)to access specific pagesSample Previews: Large lists show representative samples in preview
Benefits:
Minimizes context window pollution for agents
Enables efficient pagination without re-fetching
Preserves full data for detailed analysis when needed
API Quota Management
Understanding Quotas
YouTube Data API v3 has daily quotas measured in "units":
Default Quota: 10,000 units/day (free tier)
Search Operation: 100 units each
Metadata Operation: 1 unit each (video details, channel info, comments)
Live Chat Messages: 1 unit per request
Transcript Operations: 0 units (uses youtube-transcript-api, not YouTube Data API)
Quota Calculation Examples
Without Caching:
100 video searches = 10,000 units = entire daily quota
10,000 video detail requests = 10,000 units = entire daily quota
With Caching (6h TTL for search, 24h for metadata):
Same 100 searches (6h cache) = 400 units/day (~75% savings)
Same 10,000 metadata requests (24h cache) = ~420 units/day (~96% savings)
Best Practices
Use transcript tools first - They cost 0 quota
Search broadly, then get details - Search costs 100x more than metadata
Cache effectively - Let the built-in caching do its job
Batch operations - Group related requests in single session
Monitor usage - Server returns quota errors with clear messages
Increasing Quota
If you need higher quota:
Go to Google Cloud Console
Navigate to your project → APIs & Services → YouTube Data API v3
Click "Quotas" tab
Request quota increase (requires billing account, but API is still free)
Typical increases: 50,000 to 1,000,000 units/day
Docker Details
Image Sizes
Base Image: 290MB (
ghcr.io/l4b4r4b4b4/fastmcp-base:latest)Python 3.12-slim + uv + dependencies
Shared across all FastMCP projects
Production Image: 229MB (
ghcr.io/l4b4r4b4b4/yt-mcp:latest)Base + application code
Optimized for size and startup speed
Container Features
Non-root user: Runs as
appuserfor securityHealth checks: Built-in health endpoint at
/healthEnvironment config: All settings via environment variables
Multi-arch: Supports amd64 and arm64 (M1/M2 Macs)
Streamable HTTP: Uses HTTP transport (recommended for Docker/remote)
Docker Compose Configuration
The docker-compose.yml includes three profiles:
Production (default):
docker compose upPort 8000 exposed
Optimized production image
Auto-restart on failure
Development:
docker compose --profile dev upPort 8000 exposed
Volume mount for hot reload
Development dependencies included
Build:
docker compose --profile build up baseBuilds base image for publishing
Only used for releases
Troubleshooting
"Invalid API Key" Error
Symptoms:
Error: API key not valid. Please pass a valid API key.Solutions:
Verify key is set:
echo $YOUTUBE_API_KEYCheck for typos or extra spaces in key
Verify key has YouTube Data API v3 enabled in Google Cloud Console
Make sure key restrictions (if any) allow YouTube Data API v3
"Quota Exceeded" Error
Symptoms:
Error: The request cannot be completed because you have exceeded your quota.Solutions:
Wait until quota resets (midnight Pacific Time)
Enable billing in Google Cloud Console for higher quota
Use caching effectively (it's automatic, but check
get_cached_resultfor large operations)Use transcript tools (0 quota cost) instead of search when possible
Request quota increase from Google Cloud Console
"No Transcript Available" Error
Symptoms:
Error: No transcript found for this videoSolutions:
Use
list_available_transcriptsfirst to check availabilityTry auto-generated transcripts: often available even without manual captions
Some videos genuinely don't have transcripts (creator didn't enable)
Check if video is age-restricted or private
"Comments Disabled" (Empty Result)
Symptoms:
{"video_id": "abc123", "comments": [], "total_returned": 0}This is NOT an error - the video has comments disabled by the creator. The tool returns an empty list as expected behavior.
Docker: "Cannot connect to server"
Symptoms:
Error: Failed to connect to localhost:8000Solutions:
Verify container is running:
docker compose psCheck container logs:
docker compose logs -fEnsure port 8000 is not in use:
lsof -i :8000(macOS/Linux)Verify API key is set in
.envfile or docker-compose environmentCheck health:
curl http://localhost:8000/health
Docker: "Rate limiting" or slow responses
Symptoms:
Slow API responses
Timeout errors
Solutions:
YouTube API has rate limits - this is normal behavior
Caching will improve performance after first requests
For local development, use stdio mode instead of HTTP:
uv run yt-mcp stdioCheck your network connection
Verify Docker has sufficient resources (memory, CPU)
Development
Setup Development Environment
# Using Nix (recommended)
nix develop
# Or install dependencies manually with uv
uv syncRunning Tests
# Run all tests
uv run pytest
# With coverage report
uv run pytest --cov
# Run specific test file
uv run pytest tests/test_server.py
# Watch mode (requires pytest-watch)
uv run ptwCurrent Test Status: 178 tests passing, 76% code coverage
Linting and Formatting
# Check and fix linting issues
uv run ruff check . --fix
# Format code
uv run ruff format .
# Type checking
uv run mypy appProject Structure
yt-mcp/
├── app/
│ ├── __init__.py
│ ├── __main__.py # CLI entry point
│ ├── server.py # Main MCP server with all tools
│ ├── tools/
│ │ ├── __init__.py
│ │ ├── youtube.py # YouTube API integration
│ │ └── ... # Other tool modules
│ ├── tracing.py # Langfuse tracing integration
│ └── prompts.py # MCP prompts
├── tests/
│ ├── conftest.py # Pytest configuration
│ ├── test_server.py # Server tests
│ └── test_youtube.py # YouTube tool tests
├── docker/
│ ├── Dockerfile # Production image
│ ├── Dockerfile.base # Base image with dependencies
│ └── Dockerfile.dev # Development image
├── .agent/ # Development notes and planning
├── pyproject.toml # Dependencies and configuration
├── docker-compose.yml # Container orchestration
├── flake.nix # Nix development environment
└── README.md # This fileVersion 0.0.0 Release Notes
This is the first experimental release of the YouTube MCP server. It's published to test both the implementation and the release workflow.
What Works
✅ All 16 YouTube tools implemented and tested
✅ Comprehensive test suite (178 tests, 76% coverage)
✅ Multi-tier caching with RefCache integration
✅ Docker support (production + development)
✅ Langfuse tracing for observability
✅ Claude Desktop and Zed integration
Known Limitations
This is version 0.0.0 - expect issues
Limited real-world validation (this tests the release process)
Documentation may have gaps or inaccuracies
Docker images published but not battle-tested
Next Steps
0.0.1: Bug fixes and improvements from 0.0.0 feedback
0.0.x: Continued iteration and refinement
0.1.0: After 5-10 patch releases and proven stability
1.0.0: Production-ready after 6+ months of 0.x usage
We encourage feedback! Open issues on GitHub with any problems or suggestions.
Environment Variables Reference
Variable | Description | Required | Default |
| YouTube Data API v3 key | Yes | None |
| Langfuse tracing public key | No | None |
| Langfuse tracing secret key | No | None |
| Langfuse host URL | No | |
| Server port (HTTP mode) | No | 8000 |
| Server host (HTTP mode) | No | 0.0.0.0 |
Contributing
See CONTRIBUTING.md for development guidelines and how to submit pull requests.
License
MIT License - see LICENSE for details.
Related Projects
mcp-refcache - Reference-based caching for MCP servers
FastMCP - High-performance MCP server framework
Model Context Protocol - Official MCP specification
YouTube Data API v3 - YouTube API documentation
youtube-transcript-api - Transcript library
Acknowledgments
Built on FastMCP and mcp-refcache libraries
Uses Google's YouTube Data API v3
Uses youtube-transcript-api for quota-free transcript access
Langfuse for observability and tracing
Docker for containerization
Questions or Issues? Open an issue on GitHub
Available Tools
31 toolsadmin_clear_namespaceA
Clear all references in a namespace.
⚠️ ADMIN ONLY - Requires elevated permissions. ⚠️ DESTRUCTIVE - This action cannot be undone.
Args: namespace: The namespace to clear (e.g., 'user:alice'). include_children: Also clear child namespaces (default: True).
Returns: Confirmation with count of deleted references.
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | Yes | ||
| include_children | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It warns about destructiveness, admin-only, and irreversibility, and describes the return value. This is adequate, though additional details (e.g., behavior on missing namespace) could improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with a clear header, warning symbols, and structured Args/Returns sections. No unnecessary content, though the formatting could be slightly more compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter admin tool with no annotations, the description covers purpose, parameters, return value, and critical warnings. It lacks some details like error handling or concurrency, but is largely complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description includes an 'Args:' section that explains both parameters: namespace with an example ('user:alice'), and include_children with its default. This adds meaning beyond the schema's type and default values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Clear all references in a namespace.' The verb 'clear' and resource 'references in a namespace' are specific. It distinguishes from sibling tools like admin_delete_reference (delete single) and admin_list_references (list).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes warnings about admin-only and destructive nature but provides no explicit guidance on when to use this tool versus alternatives like admin_delete_reference. Usage context is implied but not clearly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_delete_referenceA
Delete a specific cached reference.
⚠️ ADMIN ONLY - Requires elevated permissions. ⚠️ DESTRUCTIVE - This action cannot be undone.
Args: ref_id: The reference ID to delete.
Returns: Confirmation of deletion or error.
| Name | Required | Description | Default |
|---|---|---|---|
| ref_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It states the tool is destructive and irreversible, but lacks details on side effects, error conditions (e.g., if ref_id does not exist), or confirmation behavior. The mention of 'Returns: Confirmation of deletion or error' adds some transparency, but overall depth is moderate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a one-line purpose followed by prominent warnings. The args/returns section is structured but slightly verbose for a single parameter. Overall, it is front-loaded and efficient, though the args section could be condensed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter deletion tool, the description covers core aspects: purpose, admin requirement, destructiveness, and expected return. However, it does not address edge cases (e.g., invalid ref_id, permission failures) or verify consistency with an output schema (known to exist but not provided). This leaves gaps for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides minimal additional meaning for the 'ref_id' parameter beyond the schema, merely stating 'The reference ID to delete.' With 0% schema coverage, the description does not explain how to obtain a reference ID or any constraints (e.g., format, allowed characters).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool deletes a specific cached reference. The verb 'delete' and resource 'cached reference' are specific, distinguishing it from sibling tools like admin_clear_namespace or admin_get_reference_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes explicit warnings 'ADMIN ONLY' and 'DESTRUCTIVE - This action cannot be undone', which guide usage context. However, it does not explicitly mention when to use this tool over alternatives like admin_clear_namespace, though the specificity of 'specific cached reference' implies its intended scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_get_cache_statsA
Get detailed cache statistics.
⚠️ ADMIN ONLY - Requires elevated permissions.
Returns: Dictionary with cache statistics including: - Total references and counts by namespace - Active vs expired reference counts - Value type breakdown - Cache configuration
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses elevated permissions and lists return fields. As a read-only operation, no side effects are expected, and the description is transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is appropriately sized with front-loaded purpose. Contains no fluff, though the bullet list could be condensed. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of output schema, the description covers purpose, access requirements, and return content. Minor gaps (e.g., frequency restrictions) are acceptable for a simple stats tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist; baseline 4 per rubric. Description adds no param info, but schema coverage is trivially 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed cache statistics', using a specific verb and resource that differentiates it from sibling tools like admin_clear_namespace and admin_delete_reference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'ADMIN ONLY - Requires elevated permissions', indicating when to use. Does not explicitly mention alternatives, but the context of other admin tools makes usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_get_reference_infoA
Get detailed information about a cached reference.
⚠️ ADMIN ONLY - Requires elevated permissions.
Args: ref_id: The reference ID to look up.
Returns: Dictionary with detailed reference information (value not included).
| Name | Required | Description | Default |
|---|---|---|---|
| ref_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates the tool reads a 'cached reference' and returns a dictionary excluding the value, implying a read-only operation. With no annotations provided, this covers basic behavioral expectations but omits details on error handling, performance, or whether the cache is local or distributed. The description is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences plus an Args/Returns block. Every sentence adds value: the first states the purpose, the second warns of admin restriction, and the parameter/return descriptions are precise. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 0% schema coverage and no annotations, the description covers the purpose, parameter meaning, admin restriction, and return structure (dictionary, value not included). It does not mention possible exceptions or state whether the reference must exist, but for a simple retrieval tool, it is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only a parameter name and type (string) with 0% description coverage. The description compensates by explaining the parameter: 'ref_id: The reference ID to look up.' This adds meaningful context beyond the schema, though it could elaborate on the format or expected length.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get detailed information about a cached reference,' which is a specific verb+resource pair. Among sibling admin tools like admin_list_references (lists many) and admin_delete_reference (deletes), this tool uniquely retrieves details for a single reference, distinguishing it effectively.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes 'ADMIN ONLY - Requires elevated permissions,' providing a critical usage constraint. It also outlines the return as a dictionary without the value. However, it does not explicitly compare to alternatives or state when not to use, but the admin flag provides sufficient guidance for intended audience.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
admin_list_referencesA
List cached references with optional filtering.
⚠️ ADMIN ONLY - Requires elevated permissions.
Args: namespace: Filter by namespace (e.g., 'public', 'user:alice'). include_expired: Include expired references in results. include_preview: Include value previews in results. limit: Maximum number of results (default: 50, max: 100). offset: Offset for pagination.
Returns: Dictionary with references list and pagination info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| namespace | No | ||
| include_expired | No | ||
| include_preview | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It lists parameters and return type but does not disclose behavioral traits like idempotency, caching behavior, or rate limits. The admin-only note adds some safety context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Concise, front-loaded purpose, followed by clear parameter list and return info. Every sentence adds value without unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists, the return info is adequate. However, the concept of 'references' is not explained, and pagination details are minimal. Still, for a list tool with optional filters, it covers the core needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description adds meaning for each parameter: e.g., 'namespace: Filter by namespace (e.g., 'public', 'user:alice')'. This clarifies usage beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists cached references with optional filtering. The 'ADMIN ONLY' tag distinguishes it from non-admin list tools, and the verb 'list' and resource 'cached references' are specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly notes 'ADMIN ONLY - Requires elevated permissions', guiding when to use. Does not compare to sibling admin tools, but the permission warning effectively excludes non-admin usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_indexed_videoA
Delete a video's content from the semantic search index.
Removes indexed content (transcripts, comments, or both) for a specific video. Useful for re-indexing or cleaning up the index.
Args: video_id: YouTube video ID to remove from the index. content_type: Optional content type to delete ("transcript" or "comment"). If None, deletes all content types for the video.
Returns: Dictionary with: - video_id: The deleted video ID - transcripts_deleted: Number of transcript chunks removed - comments_deleted: Number of comment chunks removed - total_deleted: Total chunks removed - success: Whether the deletion was successful
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| content_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full transparency burden. It discloses the destructive nature of the operation and details what is removed (transcripts, comments, both). The return values are documented. Missing: error handling (e.g., video not found) and authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear first sentence, but the Args/Returns section adds verbosity. Every part is useful, but could be slightly trimmed for efficiency. Still effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, deletion action) and presence of output schema in description, it covers purpose, parameters, and return values. Lacks error scenarios and prerequisites, but is mostly complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must fully explain parameters. It does: video_id is the YouTube video ID, content_type is optional (transcript or comment), and explains behavior when None. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it deletes a video's indexed content, specifying the resource (semantic search index) and the verb (delete). It details what gets removed (transcripts, comments, or both), distinguishing it from siblings like get_indexed_videos or semantic_search tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions the tool is useful for re-indexing or cleaning up the index, providing clear context. However, it does not specify when not to use it or list alternative tools for related tasks, which would improve guidance further.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_test_contextA
Enable or disable test context mode for Langfuse attribution demos.
When enabled, all traces will include user_id, session_id, and metadata from the MockContext. This allows testing Langfuse filtering and aggregation without a real FastMCP authentication setup.
Args: enabled: Whether to enable test context mode (default: True).
Returns: Status dict with current test mode state and context values.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains that enabling the mode affects traces by adding user_id, session_id, and metadata from MockContext, and describes the return as a status dict. This provides moderate transparency, though side effects or reversibility are not detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, uses a clear title, explanatory paragraph, and structured Args/Returns sections. Every sentence adds value with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers the tool's purpose and behavior. Given its simplicity and the presence of an output schema (though not shown), it is sufficiently complete for an agent to use correctly, though it does not address potential conflicts with sibling tools like set_test_context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the single boolean parameter 'enabled' by stating its purpose and default value. With 0% schema description coverage, this is necessary but minimal, as the parameter is simple.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool enables/disables test context mode for Langfuse attribution demos, specifying the verb and resource. It does not explicitly distinguish from sibling tools like set_test_context or reset_test_context, but the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context for use (testing without real authentication) but does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cached_resultA
Retrieve a cached result, optionally with pagination.
Use this to:
Get a preview of a cached value
Paginate through large lists
Access the full value of a cached result
All cache operations are traced to Langfuse with hit/miss status.
Args: ref_id: Reference ID to look up. page: Page number (1-indexed). page_size: Items per page. max_size: Maximum preview size (overrides defaults). full: If True, return the complete cached value without preview truncation. Bypasses all preview generation. Use when you need the entire value (e.g. full transcripts).
Returns: The cached value or a preview with pagination info.
Caching: Large results are returned as references with previews.
Pagination: Use page and page_size to navigate results.
Full retrieval: Use full=True to get the complete value.
References: This tool accepts ref_id from previous tool calls.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | ||
| page | No | ||
| ref_id | Yes | ||
| max_size | No | ||
| page_size | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that cache operations are traced to Langfuse with hit/miss status, explains that large results are returned as references with previews, and covers pagination and full retrieval behaviors. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points and clear sections. It is mostly concise, though there is slight redundancy between the usage list and later details. Overall efficient and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, no annotations, output schema present), the description covers usage, parameters, caching behavior, and tracing. It mentions cross-tool reference with ref_id. It is sufficiently complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains each parameter in the Args section, adding meaning beyond the schema's types and defaults (e.g., ref_id is 'Reference ID to look up', full 'bypasses all preview generation'). This compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve a cached result' with a specific verb and resource, and lists concrete use cases (preview, pagination, full value). It distinguishes itself from sibling cache management tools by focusing on retrieval and referencing ref_id from previous calls.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use the tool: for previews, pagination through large lists, and full retrieval. However, it does not explicitly mention when not to use it or name alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_infoA
Get detailed information about a YouTube channel.
Retrieves channel metadata including title, description, statistics
(subscribers, videos, total views), and branding information.
Cached for 24 hours to minimize API quota usage.
Args:
channel_id: YouTube channel ID (from search results, e.g., "UCuAXFkgsw1L7xaCfnd5JJOw")
Returns:
Channel info dictionary with:
- title, description, channel_id, url, thumbnail
- subscriber_count, video_count, view_count
- published_at
Example:
>>> info = _get_channel_info("UCuAXFkgsw1L7xaCfnd5JJOw")
>>> print(info["title"])
"Vimjoyer"
Note:
- Costs 1 quota unit per request (100x cheaper than search)
- Cached for 24h in youtube.api namespace
- Use after channel search to get full detailsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses caching behavior (24 hours), quota cost (1 unit per request), and return structure. Without annotations, this adds important behavioral context. Could mention error handling for missing channels.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is well-structured with Args, Returns, Example, and Note. However, a large boilerplate section about general caching behavior is appended, which is not tool-specific and reduces conciseness, potentially confusing LLM agents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description covers purpose, usage timing, parameter details, caching, quota, and includes an example. It is complete and actionable for an LLM agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description fully compensates by explaining the parameter's source (from search results), giving a concrete example, and specifying its role. This exceeds baseline expectations.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it gets detailed information about a YouTube channel, listing metadata fields and providing an example. It also suggests using after search, distinguishing it from sibling tools like search_channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use after channel search to get full details' and notes cost savings, providing clear context for when to use. Does not list when-not or alternatives explicitly, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_full_transcriptA
Get the complete transcript for a YouTube video.
Retrieves the full transcript with all entries and timestamps.
For large transcripts (>2KB), RefCache automatically returns a preview
with a reference that can be paginated using get_cached_result.
Cached permanently as transcript content doesn't change.
Args:
video_id: YouTube video ID (e.g., "dQw4w9WgXcQ")
language: Language code (e.g., "en"). If empty, uses first available
Returns:
FullTranscript dictionary with:
- video_id, language
- transcript: List of entries with text, start time, duration
- full_text: Complete transcript as plain text
Example:
>>> full = get_full_transcript("nLwbNhSxLd4", language="en")
>>> print(len(full["transcript"]))
150
>>> print(full["full_text"][:100])
Note:
- Uses no YouTube API quota
- Cached permanently in youtube.content namespace
- RefCache may return preview + reference for large transcripts
- Use get_transcript_chunk for entry-by-entry paginationCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | ||
| video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behaviors: no YouTube API quota usage, permanent caching in youtube.content namespace, RefCache preview for large transcripts, and the return format. It does not contradict any annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably concise and well-structured, starting with a clear purpose, then args, returns, example, and notes. The generic caching behavior at the end slightly reduces conciseness but is still valuable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description properly explains return values and caching behavior. It covers all major aspects: purpose, parameters, returns, caching, and alternatives, making it complete for a tool of moderate complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description thoroughly explains both parameters: video_id with an example, and language with default behavior. This adds significant value beyond the parameter names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get the complete transcript for a YouTube video' with a specific verb and resource. It distinguishes from siblings like get_transcript_chunk and get_cached_result, which handle pagination or partial retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use the tool (retrieve full transcript) and mentions an alternative (get_transcript_chunk for entry-by-entry pagination). It also covers caching behavior and RefCache preview, but does not explicitly list when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indexed_videosA
Get list of videos that have been indexed for semantic search.
Retrieves all indexed video IDs with optional filtering by channel and/or content type. Useful for understanding what content is available.
Args: channel_id: Optional filter by YouTube channel ID. content_type: Optional filter by content type ("transcript" or "comment").
Returns: Dictionary with: - video_ids: List of indexed video IDs - total_count: Total number of indexed videos - channel_filter: Channel ID filter if applied - content_type_filter: Content type filter if applied
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | No | ||
| content_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full burden. It discloses that the tool retrieves indexed video IDs with optional filtering and details the return dictionary structure. However, it does not mention potential performance implications or that it only returns indexed videos, not all videos.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with a brief intro followed by clearly labeled Args and Returns sections. Every sentence adds value, and the information is front-loaded. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the two optional parameters and details the return dictionary fields. An output schema exists, reducing burden on the description for return values. Minor gap: it could clarify that only indexed videos are returned and that content_type filter values are examples, not an enum.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explicitly explains both parameters: channel_id as an optional filter by YouTube channel ID, and content_type as an optional filter with example values 'transcript' or 'comment'. This adds significant meaning beyond the schema's property definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get list of videos that have been indexed for semantic search,' specifying verb (get), resource (indexed videos), and scope (for semantic search). It effectively distinguishes from sibling tools like semantic_search_* which perform searches rather than listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Useful for understanding what content is available,' implying when to use, but lacks explicit guidance on when not to use or comparisons with alternative tools. No exclusions or context about prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_chat_idA
Get the live chat ID for a currently streaming video.
Retrieves the active live chat ID required for fetching chat messages.
This ID remains constant throughout the stream's duration.
Cached for 5 minutes since chat ID doesn't change during stream.
Args:
video_id: YouTube video ID of the live stream.
Returns:
Dictionary with:
- video_id: YouTube video ID
- live_chat_id: Active live chat ID
- is_live: Boolean confirming video is live
Example:
>>> result = get_live_chat_id("dQw4w9WgXcQ")
>>> chat_id = result["live_chat_id"]
Note:
- Costs 1 quota unit per request
- Cached for 5 minutes in youtube.api namespace
- Raises error if video is not live or chat disabled
- Use is_live() first to check if video is broadcastingCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the caching behavior (5-minute cache), quota cost (1 unit), and error conditions (if not live or chat disabled). It also details the return schema. However, the generic caching boilerplate appended at the end is not specific to this tool and may add confusion, but does not contradict the explicit statements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core description for the tool is concise, but the appended generic 'Caching Behavior' and 'Ref input compatibility' sections are largely irrelevant and repetitive, bloating the text. These boilerplate additions obscure the tool-specific information and reduce conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the tool-specific parts are complete (purpose, param, output, caching, quota, error handling), the inclusion of generic caching boilerplate that mentions ref_id compatibility and pagination is misleading for this tool, which does not document such behavior. This undermines completeness for the specific tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only specifies video_id as a string with no description. The description compensates by explaining that video_id is the YouTube video ID of the live stream, and provides an example with a specific ID. This adds necessary meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the live chat ID for a currently streaming video, and explains it is required for fetching chat messages. It distinguishes from siblings like get_live_chat_messages and is_live by noting the ID's purpose and suggesting to check is_live first.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: it should be used for live streams to obtain the chat ID, and suggests using is_live() first to verify the video is broadcasting. It also notes that it raises an error if the video is not live or chat is disabled, implicitly indicating when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_live_chat_messagesA
Get recent live chat messages from a streaming video.
Fetches live chat messages with pagination support for efficient polling.
Use the returned next_page_token in subsequent calls to get only new messages.
Cached for 30 seconds for near real-time monitoring.
Args:
video_id: YouTube video ID of the live stream.
max_results: Maximum messages to return (1-2000, default 200).
page_token: Pagination token from previous call (None for first call).
Returns:
Dictionary with:
- video_id: YouTube video ID
- messages: List of messages with author, text, published_at, author_channel_id
- total_returned: Number of messages in this response
- next_page_token: Token for next page (None if no more)
- polling_interval_millis: YouTube's recommended polling interval
Example:
>>> # First call - get latest messages
>>> result = get_live_chat_messages("dQw4w9WgXcQ", max_results=50)
>>> print(f"Got {result['total_returned']} messages")
>>>
>>> # Second call - get only new messages since first call
>>> result2 = get_live_chat_messages(
... "dQw4w9WgXcQ",
... max_results=50,
... page_token=result["next_page_token"]
... )
Note:
- Costs 1 quota unit per request
- Cached for 30 seconds in youtube.comments namespace
- Polling Pattern:
1. First call: No page_token → Get latest messages + next_page_token
2. Store next_page_token
3. Subsequent calls: Pass page_token → Get only NEW messages
4. Repeat step 3 every 30-60 seconds for continuous monitoring
- MCP Limitation: Agent must manually call this tool repeatedly to see new messagesCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| page_token | No | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses caching (30 seconds), quota cost, and the MCP limitation. However, the generic 'Caching Behavior' block at the end introduces ref_id concepts that do not apply to this tool's paramaters or output, potentially misleading agents.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is overly long with redundant sections. The generic caching boilerplate at the end is unnecessary and not specific to this tool. While structured with headings, the extraneous text hurts conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (described in Returns) and the description covers usage, examples, and notes. However, the confusing generic caching section detracts from completeness, and the absence of output schema details in JSON may leave some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's 'Args' section provides clear, detailed explanations for all three parameters (video_id, max_results, page_token) with defaults and usage context, fully compensating for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get recent live chat messages from a streaming video' with a specific verb and resource. It distinguishes from siblings like 'get_live_chat_id' and 'get_video_comments' by focusing on live chat messages with pagination.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the polling pattern, cost, caching, and when to use page_token. It provides a detailed step-by-step note on the polling cycle. However, it does not explicitly mention when not to use this tool or alternatives for other chat-related data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trace_infoA
Get information about the current Langfuse trace and context.
Returns metadata about Langfuse tracing status and current context values for debugging.
Returns: Dict with Langfuse configuration and current context.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. Describes return data but does not explicitly state it is read-only or non-destructive. Could mention no side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short, front-loaded description with no extraneous words. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with output schema, description is complete. It states purpose and return type, fitting its simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters in input schema, schema coverage 100%. Baseline score 4 as per rule for 0 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it gets information about Langfuse trace and context, with specific verb and resource. Differentiates from sibling tools which are mostly admin or YouTube-related.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Implied usage for debugging tracing, but no explicit when-to-use or when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transcript_chunkA
Get a chunk of transcript entries for pagination.
Retrieves a subset of transcript entries for large transcripts.
Useful for iterating through transcripts entry-by-entry.
Cached permanently as transcript content doesn't change.
Args:
video_id: YouTube video ID (e.g., "dQw4w9WgXcQ")
start_index: Starting entry index (0-based, default: 0)
chunk_size: Number of entries to return (default: 50)
language: Language code (e.g., "en"). If empty, uses first available
Returns:
TranscriptChunk dictionary with:
- video_id, language, start_index, chunk_size
- entries: List of transcript entries in this chunk
- total_entries: Total entries in full transcript
- has_more: Whether more entries available after this chunk
Example:
>>> chunk = get_transcript_chunk("nLwbNhSxLd4", start_index=0, chunk_size=10)
>>> print(len(chunk["entries"]))
10
>>> print(chunk["has_more"])
True
>>> # Get next chunk
>>> chunk2 = get_transcript_chunk("nLwbNhSxLd4", start_index=10, chunk_size=10)
Note:
- Uses no YouTube API quota
- Cached permanently in youtube.content namespace
- Use for iterating through large transcriptsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | ||
| video_id | Yes | ||
| chunk_size | No | ||
| start_index | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and excels by disclosing key behaviors: caching ('Cached permanently'), no API quota usage, and the return structure including pagination details. It also notes that transcript content does not change, justifying the caching.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear lead sentence, parameter docs, return format, example, and notes. However, the generic 'Caching Behavior' section adds verbosity; it could be more concise without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description still adds valuable context about the return fields (e.g., 'has_more'), pagination pattern, caching, and usage for large transcripts. It is complete for a pagination tool with 4 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description compensates fully by explaining each parameter with examples ('video_id' example), defaults, and behavior ('language' defaults to first available). It also details the return fields, adding significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a 'chunk' of transcript entries for pagination. This distinguishes it from siblings like 'get_full_transcript' and 'get_video_transcript_preview' by focusing on iterative access over large transcripts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says it is 'useful for iterating through transcripts entry-by-entry' and 'for large transcripts', providing clear context for when to use it. However, it does not explicitly mention when not to use it or name alternatives like 'get_full_transcript' for full retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_commentsA
Get top comments for a YouTube video with engagement metrics.
Retrieves top-level comments (no replies) sorted by relevance.
Comments are cached for 5 minutes. Returns empty list if comments
are disabled for the video.
Args:
video_id: YouTube video ID (e.g., "dQw4w9WgXcQ")
max_results: Maximum comments to return (1-100, default: 20)
Returns:
Dictionary with video_id, comments list, and total_returned.
Each comment includes author, text, like_count, published_at.
Example:
>>> comments = get_video_comments("nLwbNhSxLd4", max_results=10)
>>> print(comments["comments"][0]["author"])
Note:
- Costs 1 quota unit per request
- Cached for 5 minutes in youtube.comments namespace
- Returns empty list if comments disabled (not an error)Caching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully covers behavioral aspects: caching for 5 minutes, quota cost of 1 unit, empty list return when comments disabled, and reference IDs. The generic caching boilerplate adds context about the caching system, but is not tool-specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (Args, Returns, Example, Note). However, it includes a lengthy generic caching block repeated across tools, which reduces conciseness. The specific part is concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers parameters, output structure (dictionary with comments list and fields), caching, and quota. It does not mention error handling for invalid video_id, but overall completeness is high given the presence of an output schema (not shown but described).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage, but the description adds full semantics: video_id format with example, max_results range (1-100) and default (20). This is superior to a typical cryptic schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving top-level comments for a specific YouTube video with engagement metrics, sorted by relevance. It explicitly distinguishes from sibling tools like semantic_search_comments by specifying top-level comments only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use (getting comments for a video), what is returned (top-level, no replies), and caching behavior. It lacks explicit exclusion criteria or references to alternative tools for replies, but the specificity is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_detailsA
Get detailed information about a YouTube video.
Retrieves comprehensive video metadata including title, description,
statistics (views, likes, comments), duration, tags, and channel info.
Cached for 24 hours to minimize API quota usage.
Args:
video_id: YouTube video ID (from URL or search results, e.g., "dQw4w9WgXcQ")
Returns:
Video details dictionary with:
- title, description, video_id, url, thumbnail
- view_count, like_count, comment_count
- duration (ISO 8601 format like "PT15M30S")
- tags, channel_title, published_at
Example:
>>> details = _get_video_details("nLwbNhSxLd4")
>>> print(details["title"])
"Full NixOS Guide"
Note:
- Costs 1 quota unit per request (100x cheaper than search)
- Cached for 24h in youtube.api namespace
- Use after search to get full detailsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses caching (24h), quota cost (1 unit), and retrieval behavior. No contradictions with annotations (none provided). However, the generic caching behavior section may introduce ambiguity about ref_id usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded main description is concise, but the appended caching behavior section is verbose and generic, adding unnecessary length. Could be trimmed to focus on tool-specific details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all essential aspects: purpose, parameters, return fields, quota, caching, and usage order. Output schema exists, so detailed return format is appropriate. Slightly less complete on edge cases like auth or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds significant meaning beyond schema: explains video_id format (from URL/search), provides example, and clarifies usage context. Schema coverage is 0% but description fully compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Get detailed information about a YouTube video' and lists specific metadata. Distinguishes from search with quota cost comparison and usage order.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises 'Use after search to get full details' and notes caching and quota. Does not list alternative tools or specific when-not-to-use scenarios, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_transcript_previewA
Get a preview of a YouTube video transcript.
Retrieves the first N characters of a video transcript for quick preview.
Useful for deciding if you need the full transcript.
Cached permanently as transcript content doesn't change.
Args:
video_id: YouTube video ID (e.g., "dQw4w9WgXcQ")
language: Language code (e.g., "en"). If empty, uses first available
max_chars: Maximum characters to return (default: 2000)
Returns:
TranscriptPreview dictionary with:
- video_id, language, preview text
- total_length: Total characters in full transcript
- is_truncated: Whether preview is truncated
Example:
>>> preview = get_video_transcript_preview("nLwbNhSxLd4", max_chars=500)
>>> print(preview["preview"][:50])
"Welcome to this NixOS tutorial..."
Note:
- Uses no YouTube API quota
- Cached permanently in youtube.content namespace
- Use list_available_transcripts first to see language optionsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | ||
| video_id | Yes | ||
| max_chars | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes caching behavior (permanent, no quota), return structure (TranscriptPreview dictionary), and includes example. The generic caching boilerplate at the end is not specific to this tool but doesn't contradict.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Main description is clear and structured, but the appended generic caching behavior block is long and not tool-specific, reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and description covers inputs, outputs, caching, quota, and includes examples, it is complete for an AI agent to use effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters (video_id, language, max_chars) are explained with examples and default behaviors, adding significant value beyond the schema with 0% description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves a preview (first N characters) of a YouTube video transcript. Distinguishes from siblings like get_full_transcript and list_available_transcripts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Useful for deciding if you need the full transcript' and 'Use list_available_transcripts first to see language options'. Also notes permanent caching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check server health status.
Returns: Health status information including Langfuse tracing status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool returns health status information including Langfuse tracing status. With no annotations provided, the description carries the full burden, and it sufficiently describes the read-only nature of the operation. It does not mention side effects because there are none expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no redundant information. Every word adds value, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple health check with no parameters and an existing output schema, the description is complete. It provides all necessary context without needing to explain return values or additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are no parameters, so the baseline is 4. The description does not need to add anything beyond the schema, which already covers 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks server health status. It uses a specific verb and resource, and the purpose distinguishes it from sibling tools which are focused on admin, search, and video operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context for using this tool is clear: to check health status. While no alternatives or when-not-to-use are explicitly mentioned, the simplicity and zero parameters make it self-explanatory. A slightly lower score because there is no mention of alternatives, but it remains adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
index_channel_transcriptsA
Pre-index all video transcripts from a YouTube channel.
This is an optional tool for pre-warming the semantic search index. You don't need to call this before searching - semantic_search_transcripts automatically indexes missing videos. Use this only if you want to explicitly prepare a channel's content for faster first searches.
Args: channel_id: YouTube channel ID (e.g., "UCuAXFkgsw1L7xaCfnd5JJOw"). max_videos: Maximum number of videos to index (default: 50). language: Preferred transcript language code (default: "en"). force_reindex: If True, re-index videos even if already indexed.
Returns: Dictionary with indexing results: - indexed_count: Number of videos successfully indexed - chunk_count: Total chunks created - skipped_count: Videos skipped (already indexed or no transcript) - error_count: Number of failed videos - errors: List of error messages - video_ids: List of indexed video IDs
Note: - Indexing 50 videos takes ~1-2 minutes - Uses ~1 API quota unit per video (transcripts are free) - Subsequent semantic searches on this channel will be fast
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | en | |
| channel_id | Yes | ||
| max_videos | No | ||
| force_reindex | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description discloses time estimates (1-2 min for 50 videos), API quota usage (1 unit per video), and benefits (fast subsequent searches). Also details return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with clear sections (Args, Returns, Note). Front-loaded with purpose. No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and the presence of an output schema, the description covers all essential aspects: purpose, usage context, parameters, return values, behavioral notes, and limitations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description includes a docstring with explanations for each parameter (channel_id, max_videos, language, force_reindex) including examples and defaults, adding meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it pre-indexes video transcripts from a YouTube channel for pre-warming the semantic search index. It distinguishes itself from sibling tools like semantic_search_transcripts by noting it's optional and for faster first searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use (pre-warming) and when not to use (not needed before searching). References alternative (semantic_search_transcripts) and provides context for faster searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
is_liveA
Check if a YouTube video is currently live.
Queries the YouTube Data API to determine if a video is currently
broadcasting live. Returns live status with viewer count and timing information.
Cached for 30 seconds since live status changes quickly.
Args:
video_id: YouTube video ID to check (e.g., "dQw4w9WgXcQ").
Returns:
Dictionary with:
- video_id: YouTube video ID
- is_live: Boolean indicating if video is currently live
- viewer_count: Current concurrent viewers (None if not live)
- scheduled_start_time: ISO 8601 scheduled start time (None if not scheduled)
- actual_start_time: ISO 8601 actual start time (None if not started)
- active_live_chat_id: Live chat ID (None if no chat or not live)
Example:
>>> status = is_live("dQw4w9WgXcQ")
>>> if status["is_live"]:
... print(f"Live now with {status['viewer_count']} viewers!")
Note:
- Costs 1 quota unit per request
- Cached for 30 seconds in youtube.api namespace
- Use search_live_videos() to find live streamsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses caching (30 seconds), quota cost (1 unit), and return fields. As a read-only check, no side effects are implied. Without annotations, this is fairly transparent, though could explicitly state read-only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Core content is good, but appended generic caching/ref_id boilerplate adds unnecessary length. Could be more concise by removing system-wide notes specific to the server context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, parameter, return format, example, caching, and alternative tool. Missing error handling scenarios and prerequisites (e.g., API key), but for a simple check, this is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Adds significant meaning beyond schema: provides description and example for video_id ('YouTube video ID to check, e.g., dQw4w9WgXcQ'). This fully compensates for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it checks if a YouTube video is currently live, uses specific verb and resource, and distinguishes from sibling tools like search_live_videos which find live streams.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context for when to use (checking a specific video's live status) and mentions alternative search_live_videos(). Lacks explicit when-not-to-use, but overall guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_transcriptsA
List all available transcript languages for a YouTube video.
Discovers which transcript languages are available for a video,
including both manual and auto-generated transcripts.
Cached permanently as available transcripts don't change.
Args:
video_id: YouTube video ID (from URL or search, e.g., "dQw4w9WgXcQ")
Returns:
AvailableTranscripts dictionary with:
- video_id: The video ID
- available_languages: List of language codes (e.g., ["en", "es", "fr"])
- transcript_info: Detailed info for each (language, is_generated, etc.)
Example:
>>> transcripts = list_available_transcripts("nLwbNhSxLd4")
>>> print(transcripts["available_languages"])
["en", "de", "es"]
Note:
- Uses no YouTube API quota (third-party transcript API)
- Cached permanently in youtube.content namespace
- Call this first before requesting specific transcriptCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description covers key behaviors: permanent caching, no YouTube API quota, and the return type structure. It does not mention potential errors (e.g., invalid video ID) but overall provides good behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with sections, example, and notes. However, the caching boilerplate (ref_id, pagination) appears generic and may not apply to this small-result tool, adding slight verbosity. Otherwise concise and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (1 param) and presence of output schema, the description covers purpose, usage order, caching, and quota. It could mention error handling but is largely sufficient for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'video_id' is fully explained with an example value ('dQw4w9WgXcQ') and context (from URL or search), adding meaning beyond the schema's bare type definition. Schema coverage is 0% but description compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists available transcript languages for a YouTube video, with specific verbs ('list', 'discovers') and resource ('transcript languages'). It distinguishes itself from siblings like 'get_full_transcript' by focusing on discovery and availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises calling this tool first before requesting a specific transcript, and explains caching and quota benefits. However, it does not explicitly state when not to use it or mention alternatives, leaving some implicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_test_contextB
Reset test context to default demo values.
Returns: Reset context state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It states it resets to default values and returns 'Reset context state', but does not disclose side effects, prerequisites, or what the return value entails. Minimal behavioral insight.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences with no extraneous information. The structure is front-loaded with the main action. Could be slightly more efficient but is acceptable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite low complexity, the description lacks completeness. It does not explain when to reset, whether it affects other contexts, or detail the output (though an output schema exists). The return mention ('Reset context state') is vague. Sibling context suggests this is part of a test management flow, but no integration hints are given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters (100% coverage), so baseline is 3. The description adds no parameter info beyond the empty schema, but with zero parameters, no additional clarification is necessary. Score 4 for appropriate simplicity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resets test context to default demo values, with a specific verb and target. It distinguishes from siblings like set_test_context by implying a revert operation, though not explicitly naming alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus siblings (set_test_context, enable_test_context). No exclusions or prerequisites mentioned. Usage is only implied by the action description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_channelsA
Search for YouTube channels by query string.
Searches YouTube and returns channel results with names, descriptions,
thumbnails, and URLs. Results are cached for 6 hours to minimize
API quota usage.
Args:
query: Search query (e.g., "Vimjoyer", "NixOS channels").
max_results: Maximum results to return (1-50, default 5).
Returns:
List of channel results with channel_id, title, description,
url, thumbnail, and published_at.
Example:
>>> results = _search_channels("vimjoyer", 5)
>>> print(results[0]["title"])
Note:
- Search costs 100 quota units per request
- Results cached for 6 hours in youtube.search namespace
- Use get_cached_result() to paginate large result setsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully discloses behavioral traits: results cached for 6 hours, search costs 100 quota units per request, pagination via ref_id, and caching namespace. This exceeds expectations for transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main description is clear, but the later section about caching behavior and ref input compatibility appears generic and verbose, making the overall text longer than necessary. It could be more concise without losing essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the two parameters, the presence of an output schema (not shown but indicated), and no annotations, the description covers purpose, parameters, caching, quota, pagination, and output format. It is complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains 'query' with examples like 'Vimjoyer', and 'max_results' with range (1-50) and default (5). The description adds meaningful context beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for YouTube channels by query string.' and specifies the returned fields (names, descriptions, thumbnails, URLs). It distinguishes from sibling search tools like search_videos or search_live_videos by focusing on channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description includes an example, mentions caching duration, quota cost, and how to paginate using get_cached_result. It does not explicitly mention when to avoid this tool (e.g., if exact channel info is needed via get_channel_info), but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_live_videosA
Search for currently live YouTube videos.
Searches for videos that are currently streaming live, filtering results
to only active broadcasts. Results are cached for 6 hours.
Args:
query: Search query (e.g., "gaming live", "news live now").
max_results: Maximum results to return (1-50, default 5).
Returns:
List of live video results with video_id, title, description, url,
thumbnail, channel_title, and published_at.
Example:
>>> results = search_live_videos("gaming", max_results=10)
>>> print(results[0]["title"])
'Live Gaming Stream - Fortnite'
Note:
- Search costs 100 quota units per request
- Results cached for 6 hours in youtube.search namespace
- Use is_live() to check if a specific video is currently live
- Use get_live_chat_messages() to monitor chatCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: results are cached for 6 hours, search costs 100 quota units, and the caching namespace. It also mentions reference ID handling and preview sizes. However, some caching details appear generic and may not be tool-specific.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description includes a clear structured intro, Args, Returns, Example, and Note. However, it appends a large block of generic caching behavior text that is not specific to this tool, reducing conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, parameters, return format (with output schema present), caching, quota, and related tools. It is complete for a simple tool with two parameters, though some cached behavior text may be extraneous.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's Args section adds meaning: query includes example queries, max_results explains range and default. Both parameters are well-explained beyond the schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search for currently live YouTube videos.' It specifies filtering to active broadcasts, uses a clear verb+resource format, and distinguishes from sibling tools like 'search_videos' by emphasizing live-only results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when to use the tool, including examples and notes about caching and quota costs. It mentions related tools ('is_live' to check specific videos, 'get_live_chat_messages' for chat monitoring), but does not explicitly state when not to use it or compare directly with 'search_videos'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_videosA
Search for YouTube videos by query string.
Searches YouTube and returns video results with titles, descriptions,
thumbnails, channels, and URLs. Results are cached for 6 hours to
minimize API quota usage.
Args:
query: Search query (e.g., "NixOS tutorials", "vimjoyer nix").
max_results: Maximum results to return (1-50, default 5).
Returns:
List of video results with video_id, title, description, url,
thumbnail, channel_title, and published_at.
Example:
>>> results = _search_videos("vimjoyer garbage collection", 10)
>>> print(results[0]["title"])
Note:
- Search costs 100 quota units per request
- Results cached for 6 hours in youtube.search namespace
- Use get_cached_result() to paginate large result setsCaching Behavior:
Parameters that accept reference strings can accept a
ref_idfrom a previous tool callLarge results return ref_id + preview; use get_cached_result to paginate
All responses include ref_id for future reference
Ref input compatibility: Support depends on the tool's input schema/validation. Some strictly typed parameters may reject string ref_ids before resolution.
Full retrieval: Use get_cached_result(ref_id, full=True) to get the complete value.
Preview Size: server default. Override per-call with get_cached_result(ref_id, max_size=...).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses caching, quota cost, and result fields, but includes a generic 'Caching Behavior' section that references ref_id and pagination mechanisms not present in the input schema. This introduces confusion and potential contradictions, reducing transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose, but includes a lengthy, generic 'Caching Behavior' section that is likely copied and not specific to this tool. This adds unnecessary verbosity and redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, and the description explains return fields, caching, and quota costs. However, the generic caching section detracts from completeness by adding irrelevant details about ref_id and pagination that do not apply to this tool's parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by providing clear, example-rich explanations for both parameters: query and max_results, including default and allowed range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'search' and the resource 'YouTube videos', and distinguishes itself from siblings like search_live_videos and semantic_search_transcripts by focusing on standard video search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context about caching and quota costs, but does not explicitly guide when to use this tool versus alternatives like search_channels or semantic_search_all. Usage is implied rather than explicitly differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_search_allA
Search across all content types (transcripts and comments).
Performs unified semantic search over both video transcripts and comments. Automatically indexes any missing content before searching.
Args: query: Natural language search query (e.g., "Nix garbage collection"). content_types: List of content types to search: ["transcript", "comment"]. If None, searches all types. channel_ids: Optional list of YouTube channel IDs to scope the search. video_ids: Optional list of specific video IDs to scope the search. k: Number of results to return (default: 10). language: Preferred transcript language code (default: "en"). max_comments_per_video: Maximum comments to index per video (default: 100). max_videos_per_channel: Maximum videos to fetch per channel (default: 50). min_score: Optional minimum similarity score threshold (lower is better).
Returns: Dictionary with search results including: - query: The original search query - results: List of matches with content_type field indicating source - total_results: Number of results returned - indexing_stats: Statistics for both transcripts and comments - content_types_searched: List of content types that were searched
Note: - Results are sorted by relevance score across all content types - Each result includes content_type field ("transcript" or "comment") - Transcript results include timestamp_url, comment results include author
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| query | Yes | ||
| language | No | en | |
| min_score | No | ||
| video_ids | No | ||
| channel_ids | No | ||
| content_types | No | ||
| max_comments_per_video | No | ||
| max_videos_per_channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the automatic indexing side effect and describes return format. It does not mention permission needs or rate limits, but for a search tool this is acceptable. It could be more explicit about resource usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections and front-loaded purpose. It is longer than necessary but every sentence adds value. Could be slightly more concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 parameters and an output schema, the description covers all parameters and explains return structure. It also mentions auto-indexing. It is complete but could include more on sorting behavior or examples.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description must add meaning. The Args section provides clear explanations for each parameter (e.g., query as 'Natural language search query', content_types as list of types), which fully compensates for the lack of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search across all content types (transcripts and comments)' and 'unified semantic search', using specific verbs and resource. It distinguishes from siblings like semantic_search_transcripts and semantic_search_comments by being the combined version.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains it searches all content types and auto-indexes, and provides parameter examples. However, it lacks explicit guidance on when to use this tool vs the single-type semantic search tools (e.g., 'if you want both, use this; if only one, use the specific one').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_search_commentsA
Search comments using natural language with automatic indexing.
Performs semantic similarity search over video comments. Automatically indexes any missing comments before searching, providing a seamless experience without requiring explicit indexing calls.
Args: query: Natural language search query (e.g., "questions about flakes"). channel_ids: Optional list of YouTube channel IDs to scope the search. video_ids: Optional list of specific video IDs to scope the search. k: Number of results to return (default: 10). max_comments_per_video: Maximum comments to index per video (default: 100). max_videos_per_channel: Maximum videos to fetch per channel (default: 50). min_score: Optional minimum similarity score threshold (lower is better).
Returns: Dictionary with search results including: - query: The original search query - results: List of matches with video info, text, author, like_count, scores - total_results: Number of results returned - indexing_stats: Statistics about auto-indexing performed - scope: Description of search scope applied
Note: - First search on new content will be slower due to indexing - Subsequent searches are fast (already indexed) - If neither channel_ids nor video_ids provided, searches all indexed comments
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| query | Yes | ||
| min_score | No | ||
| video_ids | No | ||
| channel_ids | No | ||
| max_comments_per_video | No | ||
| max_videos_per_channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description fully discloses auto-indexing, performance characteristics (first search slower), and scoping. Transparent about the process.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with Args, Returns, Note sections. Slightly lengthy but front-loaded with summary. Minor redundancy (e.g., automatic indexing mentioned twice).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all 7 parameters, output structure, and important notes. Complete given the tool's complexity and presence of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description explains each parameter in detail with examples and defaults. Adds meaning beyond schema (e.g., 'Natural language search query', scoping).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it performs semantic similarity search over video comments with automatic indexing. Differentiates from sibling tools like semantic_search_transcripts by specifying 'comments'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides when to use (searching comments) and notes scoping behavior with channel_ids/video_ids. Does not explicitly state when not to use, but context with siblings implies it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_search_transcriptsA
Search transcripts using natural language with automatic indexing.
Performs semantic similarity search over video transcripts. Automatically indexes any missing transcripts before searching, providing a seamless experience without requiring explicit indexing calls.
Args: query: Natural language search query (e.g., "Nix garbage collection generations"). channel_ids: Optional list of YouTube channel IDs to scope the search. Videos from these channels will be auto-indexed if not already indexed. video_ids: Optional list of specific video IDs to scope the search. These videos will be auto-indexed if not already indexed. k: Number of results to return (default: 10). language: Preferred transcript language code (default: "en"). max_videos_per_channel: Maximum videos to fetch per channel (default: 50). min_score: Optional minimum similarity score threshold (lower is better).
Returns: Dictionary with search results including: - query: The original search query - results: List of matches with video info, text, timestamps, and scores - total_results: Number of results returned - indexing_stats: Statistics about auto-indexing performed - scope: Description of search scope applied
Note: - First search on new content will be slower due to indexing (~1-2 min for 50 videos) - Subsequent searches are fast (already indexed) - If neither channel_ids nor video_ids provided, searches all indexed content - Results include timestamp URLs for direct playback at matching segments
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| query | Yes | ||
| language | No | en | |
| min_score | No | ||
| video_ids | No | ||
| channel_ids | No | ||
| max_videos_per_channel | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears full responsibility for behavioral disclosure. It reveals auto-indexing, performance characteristics (slower first search), and scope details. It does not discuss permission requirements or potential side effects beyond indexing, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear headline, functional description, parameter documentation, return value summary, and notes. Every sentence adds value, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (7 params, auto-indexing, multiple scope options) and the presence of an output schema (which excuses full return value specification), the description covers all essential aspects: purpose, parameters, behavior, performance, and scope. No critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description includes a detailed Args section with explanations and examples for all 7 parameters, adding significant meaning beyond the schema definitions (e.g., query example, default values, optionality).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it searches transcripts using natural language with semantic similarity, and distinguishes it from sibling tools like semantic_search_all and semantic_search_comments by specifying the scope (video transcripts) and automatic indexing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage: when to use (natural language search over video transcripts), performance expectations (first search slower), and scope behavior (if no channel_ids/video_ids, searches all indexed content). However, it does not explicitly exclude alternatives or state when not to use this tool versus sibling search tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_test_contextA
Set test context values for Langfuse attribution demos.
Changes here affect what user_id, session_id, and metadata are sent to Langfuse traces. Use this to test filtering by different users or sessions in the Langfuse dashboard.
Args: user_id: User identity (e.g., "alice", "bob"). org_id: Organization identity (e.g., "acme", "globex"). session_id: Session identifier for grouping traces. agent_id: Agent identity (e.g., "claude", "gpt4").
Returns: Updated context state and example of Langfuse attributes.
| Name | Required | Description | Default |
|---|---|---|---|
| org_id | No | ||
| user_id | No | ||
| agent_id | No | ||
| session_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains that changes affect trace attributes and returns updated context state. However, it does not clarify whether the context is overwritten entirely or merged, nor its persistence or scope. Adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose, followed by a compact Args section and Returns. It is well-structured for an agent, though slightly verbose with examples. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 4 optional parameters, an output schema, and sibling tools (enable, reset), the description covers the tool's role in the test context flow. It omits prerequisites (e.g., whether enable_test_context must be called first) but is otherwise complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description compensates by describing each parameter (user_id, org_id, session_id, agent_id) with examples. This adds meaning beyond the schema's null/string types. However, the descriptions are embedded in prose rather than a dedicated parameter doc.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool sets test context values for Langfuse attribution demos and identifies the specific attributes affected (user_id, session_id, metadata). It clearly distinguishes from siblings like reset_test_context and enable_test_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'Use this to test filtering by different users or sessions in the Langfuse dashboard.' It implies when to use it but does not explicitly state when not to use it or mention alternatives beyond implied sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
warmup_semantic_searchA
Pre-load the embedding model and vector store for semantic search.
Call this before your first semantic search to avoid timeout. Downloads and initializes the Nomic embedding model (~270MB) and creates the vector store connection.
The warmup process:
Downloads the embedding model (if not cached)
Loads the model into memory
Runs a test embedding to warm up inference
Initializes the vector store connection
Returns: Dictionary with warmup status: - status: "ready" if successful - model: Name of the embedding model loaded - dimensionality: Embedding dimensions configured - inference_mode: How embeddings are computed (local/remote) - test_embedding_size: Size of test embedding (confirms model works) - warmup_time_seconds: Time taken to warm up
Note: - First call downloads ~270MB model (takes 30-60 seconds) - Subsequent calls are instant (model cached on disk) - Model stays in memory for fast inference after warmup
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It thoroughly discloses the warmup process (download, load, test embedding, init vector store), mentions model size (~270MB), time estimates (30-60 seconds), caching behavior, and memory persistence. Output fields are fully described, leaving no behavioral ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections (main purpose, process steps, return values, notes). Every sentence adds value, and the information is front-loaded. There is no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and a detailed output schema, the description is complete. It explains why to use it, what happens during execution, and what the return values mean. It addresses performance implications and caching, making it fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so baseline is 4. The description does not need to add additional parameter information, and it appropriately focuses on the tool's behavior and return values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: pre-loading the embedding model and vector store for semantic search. It uses specific verbs ('Pre-load', 'Downloads and initializes') and distinguishes itself from sibling semantic search tools by being a setup step to avoid timeouts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to call this before the first semantic search to avoid timeout, providing clear usage context. It does not explicitly state when not to use, but the context strongly implies it is only needed as a one-time warmup, making the guidance adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
31 tool updates
v0.0.4- First observed
admin_clear_namespace - First observed
admin_delete_reference - First observed
admin_get_cache_stats - First observed
admin_get_reference_info - First observed
admin_list_references - First observed
delete_indexed_video - First observed
enable_test_context - First observed
get_cached_result - First observed
get_channel_info - First observed
get_full_transcript - First observed
get_indexed_videos - First observed
get_live_chat_id - First observed
get_live_chat_messages - First observed
get_trace_info - First observed
get_transcript_chunk - First observed
get_video_comments - First observed
get_video_details - First observed
get_video_transcript_preview - First observed
health_check - First observed
index_channel_transcripts - First observed
is_live - First observed
list_available_transcripts - First observed
reset_test_context - First observed
search_channels - First observed
search_live_videos - First observed
search_videos - First observed
semantic_search_all - First observed
semantic_search_comments - First observed
semantic_search_transcripts - First observed
set_test_context - First observed
warmup_semantic_search
TDQS
Scored across 31 tools
Each tool has a clearly distinct purpose. Transcript-related tools (get_full_transcript, get_transcript_chunk, get_video_transcript_preview) are differentiated by scope and use case. Semantic search tools are separated by content type. Admin and cache tools are prefixed and clearly separated from user-facing tools. No two tools appear to do the same thing.
All tool names follow a consistent snake_case convention with a verb_noun pattern (e.g., get_channel_info, search_videos, index_channel_transcripts). Even tools like health_check and is_live fit the pattern. No mixing of camelCase or other styles.
31 tools is somewhat high, but each tool serves a distinct and necessary function for a feature-rich YouTube MCP server. The count covers search, details, transcripts, comments, live streaming, semantic search, caching, admin, and testing utilities. A few tools like admin tools could be considered optional, but they are well-integrated.
The tool surface thoroughly covers read operations and semantic search for YouTube content. Missing are write operations (posting comments, etc.) and nested replies for comments, but these may be out of scope. For the stated purpose, the set is nearly complete, with only minor gaps like playlist retrieval or reply threads.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
MCP server for Google Veo AI video generation
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables interaction with the YouTube Data API, allowing users to search videos, get video and channel details, analyze trends, and fetch video transcripts.-
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that provides YouTube data access without API keys or quotas. It enables agents to search videos, retrieve transcripts and metadata, and perform full-text search across cached content for AI context retrieval.3 npm-
- FlicenseNot gradedqualityBmaintenanceMCP server for YouTube that provides tools to fetch video metadata and transcripts, enabling natural language queries about YouTube videos.2-
- AlicenseNot gradedqualityCmaintenanceA comprehensive MCP server providing YouTube transcript retrieval, video search, channel browsing, playlist extraction, and upload monitoring for AI agents.10MIT