An MCP server for extracting YouTube video transcripts
Single tool with reasonable naming and clear parameter structure. Tool name 'get_transcript' follows verb_noun convention appropriately. Schema is visible and typed with Zod validation. However, descriptions are minimal (well under production baseline of 194 chars for tool descriptions and 72 chars for params), missing critical context about when/why to use the tool, and output structure is not formally documented. Error handling exists but lacks recovery guidance. No tool annotations present.
YouTube video URL or ID
Tool description is only 24 characters ('YouTube video URL or ID'), far below the 194-char baseline and insufficient for LLM selection logic. Does not answer WHAT the tool does, WHEN to use it, or what it returns.
Parameter 'lang' has minimal description ('Language code for transcript (e.g., 'ko', 'en')') lacking format specification or constraint documentation. Should specify valid language codes, range, or reference documentation.
Output schema not formally documented. Return structure is visible in code (text content with metadata fields: videoId, language, timestamp, charCount) but not declared in tool registration or description. LLM must infer structure from execution.
Error responses lack recovery guidance. Code returns '{type: "text", text: `Error: ${message}`}' with isError flag, but does not guide the LLM on what to do next or how to correct the input. Should specify: is the error retryable? User-fixable? What should they try?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 66 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite this being a read-only operation. Tool is idempotent and read-only but not formally declared.