Skip to main content
Glama

whis-tube šŸŽ™ļøšŸ“¹

High-Fidelity YouTube Verbatim Transcription & Rapid Visual Keyframe Intelligence MCP Server

MIT License Python 3.10+ Groq Whisper Large V3 FastMCP

🌐 English | Bahasa Indonesia


whis-tube is a Python-based Model Context Protocol (MCP) server engineered specifically for AI Coding Agents (Claude Code, Cursor, Windsurf, OpenBot, Hermes). It combines lossless verbatim audio transcription via Groq Whisper Large V3 with blazing-fast HD (720p/1080p) visual keyframe extraction for ground-truth visual validation.


✨ Key Features

  • True Verbatim Audio Ground-Truth (No Auto-Captions): Fetches the original audio track (actively rejecting AI auto-dubbing), decodes once to FLAC 16 kHz mono using the SoX resampler, and transcribes every spoken word with timestamp accuracy.

  • Smart Silence-Detected Chunking (<25MB): Automatically detects pauses and silence intervals to slice long audio (1–3+ hours) into ~10-minute segments. Requests strictly remain under Groq's 25 MB payload limit.

  • Multi-Key Pool & 429 Failover: Rotates across multiple Groq API keys seamlessly. When an HTTP 429 rate limit is encountered, the server reads the retry-after header, flags the key for cooldown, and transparently dispatches remaining chunks to another available key without failing the task.

  • Rapid Visual Keyframe Extraction (HLS Range-Seek): Extracts crisp native 720p/1080p frames in 4–7 seconds on exact timestamps without downloading the entire video file.

  • Agent SOP Ready (SKILL.md): Includes comprehensive research methodology guidelines for AI agents, preventing lazy summaries and mandating inline visual verification for charts, slides, and technical formulas.


Related MCP server: YouTube Insights MCP Server

šŸ› ļø System Requirements

  • Python: >= 3.10

  • yt-dlp: Available in system PATH (yt-dlp --version)

  • ffmpeg & ffprobe: Available in system PATH (ffmpeg -version)

  • Groq API Key: Free tier keys available at console.groq.com


šŸš€ Quickstart (One Command via uv)

Run the MCP server directly without manual virtualenv management:

# Run the MCP server directly
uv run --directory . python -m whis_tube.server

Or install locally in editable mode:

uv pip install -e .
youtube-whisper

šŸ”Œ MCP Client Configuration

1. Claude Desktop / Claude Code / Cursor

Add the server entry to your MCP configuration file (e.g., claude_desktop_config.json or .mcp.json):

{
  "mcpServers": {
    "youtube-whisper": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/path/to/whis-tube",
        "python",
        "-m",
        "whis_tube.server"
      ],
      "env": {
        "GROQ_API_KEY": "gsk_your_key_here"
      }
    }
  }
}

If you maintain multiple free-tier Groq API keys to maximize hourly/daily quotas, store them in ~/.config/groq/keys.json:

{
  "keys": [
    "gsk_key1...",
    "gsk_key2...",
    "gsk_key3..."
  ]
}

The youtube-whisper server automatically detects this pool file, manages round-robin rotation, and tracks key cooldown periods automatically.


🧰 Available MCP Tools

Tool Name

Description

Arguments

transcribe_youtube

Downloads original audio, chunks at silence (<25MB), and transcribes verbatim into timestamped .md and structured _raw.json.

url (str), output_path (str, optional), language (str, optional)

extract_keyframe

Extracts native HD frames (720p / 1080p) at exact timestamps (HH:MM:SS) in 4–7 seconds via HLS seek.

url (str), timestamp (str), output_path (str, optional), resolution (int, default 720)

get_video_info

Retrieves concise metadata (title, channel, duration, live stream status).

url (str)

list_channel_videos

Generates a chronological catalog of channel uploads (excluding Shorts), ordered oldest to newest.

channel_url (str), limit (int, default 30), sort_order (str, oldest_first/newest_first)

check_groq_quota

Real-time health dashboard inspecting active Groq API keys, usage cooldowns, and pool readiness.

(none)


šŸ“‚ Repository Structure

whis-tube/
ā”œā”€ā”€ .mcp.json               # Default MCP client configuration
ā”œā”€ā”€ .env.example            # Environment variables template
ā”œā”€ā”€ pyproject.toml          # Package configuration & dependencies
ā”œā”€ā”€ SKILL.md                # AI Agent Research Methodology & SOP (English)
ā”œā”€ā”€ SKILL.id.md             # AI Agent Research Methodology & SOP (Indonesian)
ā”œā”€ā”€ README.md               # English Documentation
ā”œā”€ā”€ README.id.md            # Indonesian Documentation
└── src/
    └── whis_tube/
        ā”œā”€ā”€ __init__.py     # Package metadata
        ā”œā”€ā”€ __main__.py     # Module CLI entrypoint
        ā”œā”€ā”€ server.py       # FastMCP server & registered tool definitions
        ā”œā”€ā”€ audio.py        # yt-dlp, SoX FLAC encoding, silence detection & chunking
        ā”œā”€ā”€ groq_pool.py    # Multi-key Groq pool & automatic 429 failover
        ā”œā”€ā”€ visual.py       # HLS range-seek frame grabber
        └── utils.py        # Timestamp formatting & channel parser

šŸ“„ License

Distributed under the MIT License. Free for personal and commercial agent workflows.

Available Tools

5 tools
check_groq_quotaA

Inspect Groq API key pool status, active key counts, and cooldown timers.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden. It discloses the informational nature of the call and the categories of data returned (key counts, cooldown timers), implying a safe read, but it says nothing about permissions, whether cooldowns reflect per-key or global state, or how fresh the snapshot is.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every clause names a distinct piece of information the tool exposes. Nothing is wasted and nothing essential is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read tool with an output schema that documents the return shape, the description covers what the tool is and roughly what it reports. Only minor operational context (e.g., why cooldowns matter, staleness) is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify beyond the already-complete schema. Baseline 4 applies for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Inspect') plus a concrete resource set: Groq API key pool status, active key counts, and cooldown timers. An agent can immediately tell this is a read-only status check and, since the sibling tools are all YouTube/video utilities, there is little risk of confusion even without explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer it should call this before or when troubleshooting Groq-backed operations, but the description never says when to use it, when not to, or what to do with the result. There are no alternatives to disambiguate against, which limits the harm but also the value.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

extract_keyframeA

Extract a native 720p or 1080p HD keyframe at an exact timecode (HH:MM:SS) via HLS m3u8 range-seek without downloading full video bytes.

Args: url: YouTube video URL. timestamp: Exact timecode string ('HH:MM:SS' or 'MM:SS', e.g. '00:15:30'). output_path: Optional output path (.jpg) or folder. Defaults to './frames/<video_id>_.jpg'. resolution: Target resolution height in pixels (720 or 1080). Defaults to 720.

NameRequiredDescriptionDefault
urlYes
timestampYes
resolutionNo
output_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden and does well: it discloses the underlying HLS range-seek mechanism and explicitly notes that full video bytes are not downloaded, a real performance trait. Gaps remain on failure modes (live streams, unavailable resolutions, invalid timecodes) and whether existing output files are overwritten.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the capability and its key constraint, then a clean Args block. The mechanism clause is information-dense rather than padded; only minor redundancy in restating parameter names the schema already lists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters, an output schema (so return values need no explanation), and no annotations, the description supplies defaults, formats, and the not-downloading behavior an agent needs to choose this tool. Missing only edge-case behavior (invalid timecode, out-of-range timestamp, overwrite policy).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (bare titles only), so the description must compensate and largely does: it defines timestamp formats ('HH:MM:SS' or 'MM:SS' with an example), resolution valid values (720/1080), output_path as file or folder, and the concrete default filename pattern. It misses stating that url is a YouTube-specific URL constraint beyond the word 'YouTube'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Extract a native 720p or 1080p HD keyframe') plus the mechanism ('via HLS m3u8 range-seek without downloading full video bytes'), which clearly distinguishes it from siblings like transcribe_youtube and get_video_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the purpose (grab a frame at a timecode) but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as get_video_info for metadata-only needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_video_infoB

Fetch YouTube video metadata (title, channel, duration, upload date, live status).

Args: url: YouTube video URL.

NameRequiredDescriptionDefault
urlYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the burden; 'Fetch ... metadata' does imply a non-destructive read, and the output schema covers the return shape. It says nothing about invalid/non-video URLs, private or age-restricted videos, live-stream edge cases, or any rate limiting or auth, which are the real failure modes for a YouTube fetch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The payload is one front-loaded sentence enumerating exactly what is returned, with zero filler. The trailing 'Args: url: YouTube video URL' block is slightly redundant with the schema but does add the video-vs-channel qualifier.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with an output schema, this is close to sufficient — the return fields are named and the parameter is scoped. What is missing is disambiguation from the four siblings and any hint about error behavior, which an agent needs before deciding to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does document the single parameter and usefully narrows it to a 'YouTube video URL' (ruling out channel or playlist URLs), but it gives no accepted formats (watch?v=, youtu.be, shorts) or validation behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Fetch') and resource ('YouTube video metadata') and even enumerates the returned fields (title, channel, duration, upload date, live status). It implicitly separates itself from siblings like transcribe_youtube and list_channel_videos by returning metadata for a single video, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance: nothing states that this is for a single video rather than a channel, or that transcript text requires transcribe_youtube instead. The agent must infer the selection rule from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channel_videosA

Enumerate video uploads from a channel without downloading bytes. Excludes Shorts (<60s). Defaults to chronological oldest-to-newest order.

Args: channel_url: YouTube channel uploads URL (e.g. 'https://www.youtube.com/@channel/videos'). limit: Maximum number of videos to list (default: 30). sort_order: 'oldest_first' (recommended for research) or 'newest_first'.

NameRequiredDescriptionDefault
limitNo
sort_orderNooldest_first
channel_urlYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It usefully discloses that bytes are not downloaded and that Shorts under 60s are excluded, which are real behavioral traits. It says nothing about pagination, invalid-channel handling, rate limits, or whether the listing is a snapshot, which matters for a scraping-style tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two front-loaded sentences establish purpose, exclusion, and default ordering before the Args block. Every sentence carries information and nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value shape needn't be explained, and the parameter block covers all three inputs for a simple read tool. Only edge-case behavior (maximum limit, malformed URLs, pagination) is left unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the Args block compensates well: channel_url gets a concrete format example, limit gets a default, and sort_order gets both valid values plus a recommendation. It omits any cap on limit and does not clarify whether other URL forms (e.g. /shorts or /playlists) are accepted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource, 'Enumerate video uploads from a channel', and immediately scopes it with 'without downloading bytes' and the Shorts exclusion. That functionally separates it from transcribe_youtube, but no sibling is named explicitly, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'oldest_first' (recommended for research) hints at the intended context and the default is stated. There is no explicit statement of when to choose this over get_video_info or transcribe_youtube, and no when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_youtubeA

Download audio, apply silence-detected chunking (<25MB), and transcribe verbatim via Groq Whisper Large V3 with timestamped segment accuracy.

Args: url: YouTube video URL (standard watch, short link, or completed livestream archive). output_path: Optional output path or directory for transcript files (.md & raw.json). Defaults to './transcripts/<video_id>.md'. language: Optional language code (e.g. 'id', 'en', 'ja'). If omitted, auto-detected.

NameRequiredDescriptionDefault
urlYes
languageNo
output_pathNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it does meaningful work: it discloses the processing pipeline (audio download, silence-based chunking under 25MB), the transcription backend, verbatim output with timestamps, and that two files are written. It omits operational details such as required Groq credentials, expected runtime for long videos, and failure behavior on unavailable or region-locked videos, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The first sentence front-loads the whole pipeline, and the Args section is compact and scannable with one entry per parameter. It is slightly heavy in the opening clause (silence-detected chunking, <25MB, model name) but no sentence is wasted filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-step media tool with an output schema already documenting return values, the definition covers inputs, default locations, and output artifact types. The main remaining gaps are credential requirements and runtime/size expectations for long videos, which an agent would want before invoking a download-and-transcribe job.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and the Args block covers all three parameters: the accepted URL forms for url, the default path pattern and emitted file types for output_path, and the auto-detect fallback for language. It stops short of naming the exact language code format beyond examples, but the added meaning is substantial versus a bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb chain and resource: download audio, chunk it, transcribe verbatim with Groq Whisper Large V3, emitting timestamped segments. That is clearly distinct from siblings like extract_keyframe, get_video_info, list_channel_videos, and check_groq_quota, so an agent can identify the right tool without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the task described (give a URL, get a transcript), but there is no explicit statement of when to reach for this versus get_video_info or list_channel_videos, and no exclusions or prerequisites such as API key or quota checks. The .md and _raw.json outputs hint at the intended scope, but a routing hint to check_groq_quota or get_video_info would push this higher.

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.

  1. 5 tool updatesv0.1.0
    • First observedcheck_groq_quota
    • First observedextract_keyframe
    • First observedget_video_info
    • First observedlist_channel_videos
    • First observedtranscribe_youtube

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct operation: quota inspection, keyframe extraction, metadata fetch, channel enumeration, and transcription. There is no meaningful overlap between any pair, so an agent can select confidently.

Naming Consistency5/5

All five tools follow a clean verb_noun pattern (check_groq_quota, extract_keyframe, get_video_info, list_channel_videos, transcribe_youtube). No camelCase or style mixing.

Tool Count4/5

Five tools is a tight, focused set that matches the transcription-centric purpose well. Slightly lean, with check_groq_quota acting as an auxiliary helper rather than a core domain tool, but nothing feels out of place.

Completeness4/5

The surface covers the core lifecycle: discover videos (list_channel_videos), inspect them (get_video_info), transcribe (transcribe_youtube), and grab frames (extract_keyframe), plus quota management. Minor gaps like batch processing or caption export exist but agents can work around them by iterating.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Provides production-grade tools for YouTube channel resolution, video metadata extraction, transcripts, and playlist management. It features a quota-aware, AI-friendly design that supports structured searching and listing of public YouTube data.
    7
    2
    MIT
  • A
    license
    C
    quality
    B
    maintenance
    Enables AI agents to search, analyze, and extract insights from YouTube videos including transcripts, visual frames, and benchmarks without requiring API keys. Supports semantic search across playlists, sentiment analysis, and visual content indexing with automatic fallback chains for reliable access.
    41
    207 npm
    34
    MIT