MCP server retrieving transcripts of YouTube videos
This server has 4 tools with reasonable naming (all start with action verbs: get_*) and complete input schemas. However, there are significant gaps in parameter descriptions and output documentation. Tool descriptions are adequate (50-150 chars) but parameter-level descriptions are sparse or missing. The server lacks explicit output schema documentation, making it unclear what fields LLMs should expect. Error handling is not visible in the provided code. All tools are READ_ONLY, reducing risk, but the server does not leverage pagination optimization patterns effectively despite supporting next_cursor.
Retrieves the available languages for the video.
Retrieves the transcript of a YouTube video with timestamps.
Retrieves the transcript of a YouTube video.
Retrieves the video information.
Missing output schema documentation. Tools define Pydantic BaseModel responses (Transcript, TimedTranscript, VideoInfo) but these schemas are not exposed to clients. LLMs cannot see what fields to expect in responses, forcing them to guess or hallucinate field names.
Sparse parameter descriptions. Parameters 'url', 'lang', 'next_cursor' have minimal or no descriptions explaining expected format, constraints, or usage. E.g., 'url' just says 'The URL of the YouTube video', no guidance on valid formats (watch?v=, youtu.be/, full URL, ID only?). 'lang' lacks examples or enum of supported values.
next_cursor parameter lacks documentation. It has a default of null but no description of how pagination works, what the cursor value means, or when to use it. LLMs won't understand this pattern without explicit guidance.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 43 | - | v1 |
No error handling guidance visible. The code does not show recovery hints or categorized error responses. LLMs will not know what to do if a video has no transcript, unsupported language, or invalid URL.
'lang' parameter design. Currently a free-form string with default 'en', but no enum of supported languages or guidance on how to discover them. get_available_languages exists to solve this, but the dependency relationship is not documented in get_transcript/get_timed_transcript descriptions.