Automatically extracts subtitles, captures screenshots at timestamps, and generates professional study notes for any YouTube video lecture.
Single tool with a lengthy description but significant schema and parameter documentation gaps. The tool name 'process_youtube_lecture' is action-oriented and clear, but the input schema lacks formal type constraints, enums, and detailed parameter descriptions needed for LLM-safe invocation. Output schema is not documented. Error handling is minimal, no recovery guidance or actionable error messages visible in the code. The implementation handles complex logic (subtitle parsing, screenshot capture, note generation) but the tool interface does not expose this complexity in a way that enables safe agent composition.
Process a YouTube lecture video: download subtitles, capture screenshots at specified timestamps, and generate Obsidian-formatted study notes with transcript.
Input schema lacks type constraints and enums. The 'timestamps' parameter is an array of strings but does not document the MM:SS or HH:MM:SS format constraint formally, only in the description text. The 'url' parameter accepts 'YouTube video URL or video ID' but does not define a regex pattern or validation rules. LLMs will pass invalid formats.
Parameters lack descriptions or have minimal descriptions. 'obsidian_vault' has a short description but 'day_number' is described only as 'Day number for organizing lecture notes (e.g., 1, 2, 3)', does not explain range (1 - 365?), or what happens if out of range. 'url' description is acceptable but does not mention that bare video IDs are supported despite extract_video_id() accepting them.
Output schema is completely undocumented. The tool generates Obsidian notes and captures screenshots but the response structure is not defined in the tool schema. LLMs cannot determine what fields to expect or what downstream operations are possible. Code shows the tool returns text or error but no structured output spec.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 48 | 2026-07-28+ | v2 |
Error handling does not guide recovery. Errors like 'Failed to get video info', 'No subtitles found', and 'Could not extract video ID' are raised but do not include actionable next steps or the invalid value that triggered the error. An LLM receiving 'No subtitles found. stderr: ...' cannot determine whether to retry with a different URL, suggest a workaround, or ask the user.
No idempotency guarantee documented. The tool downloads subtitles, captures screenshots, and writes to the Obsidian vault. If retried on partial failure, it may create duplicate notes or overwrite existing files. No mention of how the tool handles retries or whether operations are safe to repeat.
File system access is not gated. The tool writes directly to 'obsidian_vault' (defaulting to C:\Users\YourUsername\ObsidianVault) without permission checks or validation. If the server is invoked by an untrusted agent, it can write arbitrary files to the specified directory. No audit trail logged.
External command execution (yt-dlp, ffmpeg) lacks timeout and resource limits. Processes called via subprocess.run() with no explicit timeout can hang indefinitely if a service is slow or unresponsive. An agent retry loop could spawn dozens of zombie processes.