MCP server for YouTube data collection and analysis, providing tools to extract transcripts, search videos, retrieve channel information, and collect comments
The server defines 4 tools with reasonable naming conventions (all verb-based: get_, search_) and present descriptions. However, critical gaps in schema completeness, parameter documentation, and error handling guidance significantly reduce quality. Input schemas are visible in the provided code, but output schemas are not documented, only return type annotations in docstrings. Parameter descriptions exist but are minimal (averaging ~60 chars). Error handling is present (try/except blocks) but returns generic empty strings/lists/dicts without actionable recovery guidance. No tool annotations (readOnlyHint, destructiveHint) are visible. The schema format appears correct (JSON Schema with types) but output structure is not formally declared. This server is functional but falls short of production-grade tool design.
YouTube 동영상 URL로부터 채널 정보와 영상 목록을 가져옵니다.
유튜브 영상 댓글을 수집합니다.
유튜브 영상 URL에서 비디오 ID를 추출하고 해당 영상의 자막을 가져옵니다.
유튜브에서 특정 키워드로 동영상을 검색하고 세부 정보를 가져옵니다.
Output schemas not formally documented. Return types are inferred from docstring type hints (str, list, dict) but structured field definitions are absent. LLMs cannot reliably extract fields from undocumented responses.
Error handling returns generic empty values (empty string, empty list, empty dict) with only print() logging. No actionable recovery guidance for the LLM. Errors like 'Invalid order parameter' or 'API rate limit exceeded' are silent.
Parameter 'order' accepts string values but no enum constraint is declared. Tools document valid values in docstrings (e.g., 'relevance, date, viewCount, rating, title, videoCount') but this is not enforced in schema. LLMs can hallucinate invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
No tool annotations (readOnlyHint, idempotentHint, destructiveHint) are present. All tools are READ_ONLY by design but this is not declared in the tool schema, forcing LLMs to infer safety from descriptions.
Parameter descriptions are minimal. E.g., 'languages' is described as 'Try language codes in descending priority order' but lacks guidance on valid ISO 639-1 codes or what happens when none are available.
Field naming inconsistency across responses. search_youtube_videos returns 'viewCount', 'likeCount', 'channelName' (camelCase) while get_channel_info returns 'channelTitle' and 'subscriberCount' (different camelCase patterns). Inconsistent naming forces LLMs to reason about field mappings.
No pagination support. get_youtube_comments defaults to max_results=10 but provides no next_cursor or offset mechanism for retrieving additional comments. Large result sets could exhaust context.
API key exposed as environment variable YOUTUBE_API_KEY, correctly not a parameter. However, no documentation of secret setup or validation of API key presence at initialization.