summarize_transcript
Extract transcripts from YouTube videos and generate summaries using custom instructions or default prompts. Supports multiple languages and transcript formats for flexible content analysis.
Instructions
Fetch a YouTube video's transcript and return it with summarization instructions.
The LLM client should use the returned instructions and transcript to produce a summary.
Args: url: YouTube video URL or video ID prompt: Custom summarization instructions. If omitted, a default summary prompt is used. languages: Preferred languages in priority order (e.g. ["en", "de"]). Defaults to English.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| prompt | No | ||
| languages | No |
Implementation Reference
- main.py:123-162 (handler)The summarize_transcript tool handler decorated with @mcp.tool(). It fetches a YouTube video transcript, extracts metadata (language, type, video ID), and returns formatted output with instructions, metadata, and the transcript text for the LLM to summarize.@mcp.tool() def summarize_transcript( url: str, prompt: str | None = None, languages: list[str] | None = None, ) -> str: """Fetch a YouTube video's transcript and return it with summarization instructions. The LLM client should use the returned instructions and transcript to produce a summary. Args: url: YouTube video URL or video ID prompt: Custom summarization instructions. If omitted, a default summary prompt is used. languages: Preferred languages in priority order (e.g. ["en", "de"]). Defaults to English. """ try: video_id = extract_video_id(url) except ValueError as e: return f"Error: {e}" langs = languages or ["en"] try: transcript = api.fetch(video_id, languages=langs) text = TextFormatter().format_transcript(transcript) instructions = prompt or DEFAULT_SUMMARY_PROMPT language = transcript.language language_code = transcript.language_code is_generated = transcript.is_generated return ( f"[INSTRUCTIONS]\n{instructions}\n\n" f"[METADATA]\n" f"Video ID: {video_id}\n" f"Language: {language} ({language_code})\n" f"Type: {'auto-generated' if is_generated else 'manual'}\n\n" f"[TRANSCRIPT]\n{text}" ) except Exception as e: return _handle_transcript_error(e, video_id, langs)
- main.py:123-123 (registration)Registration of the summarize_transcript tool using the @mcp.tool() decorator from FastMCP framework.@mcp.tool()
- main.py:25-28 (helper)DEFAULT_SUMMARY_PROMPT constant - default summarization instructions used when no custom prompt is provided to the summarize_transcript tool.DEFAULT_SUMMARY_PROMPT = ( "Summarize the following YouTube video transcript. " "Provide a concise overview of the main topics, key points, and conclusions." )
- main.py:37-47 (helper)extract_video_id helper function - parses YouTube video URLs or bare IDs to extract the 11-character video ID used by summarize_transcript.def extract_video_id(url_or_id: str) -> str: """Extract a YouTube video ID from a URL or bare ID string.""" url_or_id = url_or_id.strip() if BARE_ID_REGEX.match(url_or_id): return url_or_id match = VIDEO_ID_REGEX.search(url_or_id) if match: return match.group(1) raise ValueError( f"Could not extract a YouTube video ID from: {url_or_id}" )
- main.py:58-88 (helper)_handle_transcript_error helper function - converts youtube_transcript_api exceptions into user-friendly error messages used by summarize_transcript.def _handle_transcript_error(e: Exception, video_id: str, languages: list[str] | None = None) -> str: """Convert youtube_transcript_api exceptions into user-friendly error strings.""" from youtube_transcript_api import ( AgeRestricted, InvalidVideoId, IpBlocked, NoTranscriptFound, RequestBlocked, TranscriptsDisabled, VideoUnavailable, ) if isinstance(e, TranscriptsDisabled): return f"Error: Transcripts are disabled for video '{video_id}'." if isinstance(e, NoTranscriptFound): lang_str = ", ".join(languages) if languages else "any" return ( f"Error: No transcript found for video '{video_id}' " f"in language(s): {lang_str}. Use list_transcripts to see available languages." ) if isinstance(e, VideoUnavailable): return f"Error: Video '{video_id}' is unavailable." if isinstance(e, InvalidVideoId): return f"Error: '{video_id}' is not a valid YouTube video ID." if isinstance(e, AgeRestricted): return f"Error: Video '{video_id}' is age-restricted and cannot be accessed." if isinstance(e, IpBlocked): return "Error: YouTube is blocking requests from this IP address." if isinstance(e, RequestBlocked): return "Error: The request to YouTube was blocked." return f"Error fetching transcript for '{video_id}': {e}"