MCP server for fetching YouTube transcripts
Single tool with minimal documentation. Tool is named correctly (verb-first: 'get-transcript'), but the parameter lacks a description, input schema type annotations are missing explicit JSON Schema format, and output is undocumented. No error handling guidance, no input validation messaging, and no pagination support despite the tool returning potentially long transcripts. The tool definition exists and is directly visible in code (index.ts, line 14 - 29), so it is not inferred.
Get the transcript of a YouTube video
Parameter 'url_or_video_id' has no description. LLMs cannot infer whether to pass a full URL, video ID only, or both, or what error handling applies to invalid input.
No output schema documented. Tool returns text transcript with timestamps, but LLMs have no formal schema describing the structure, format, or field names. This prevents downstream tool composition and forces the LLM to infer output structure.
Input schema uses z.string() without type/format metadata in JSON Schema. The registered schema shows only {'url_or_video_id': z.string()} with no explicit 'type' or 'format' fields visible in the MCP schema payload.
No error recovery guidance. The tool can throw five custom errors (YoutubeTranscriptDisabledError, YoutubeTranscriptNotAvailableError, YoutubeTranscriptTooManyRequestError, etc.), but none are documented in the tool description. LLMs will not know how to respond to these errors or what corrective action to suggest to the user.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 46 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
No pagination support. Tool fetches and returns entire transcript as a single text block. Long transcripts (1 - 2 hours of video) produce thousands of tokens, risking context window exhaustion. No limit parameter, no chunking, no guidance on expected output size.
Tool description is generic. 'Get the transcript of a YouTube video' (55 chars) does not explain WHEN to use it, what format the input should be, or what to do if transcripts are disabled. Does not meet the 10 - 1024 char guideline with sufficient detail; baseline A+ tools average 194 chars with actionable details.
No input validation constraints documented. Parameter 'url_or_video_id' accepts any string; the tool attempts to parse it internally and throws YoutubeTranscriptError if invalid. LLM has no way to know valid formats (11-char video ID, youtube.com/watch?v=..., youtu.be/..., etc.) ahead of time.