MCP-compliant YouTube server for Cloud Run providing access to YouTube Data API v3 resources and operations
The YouTube MCP server demonstrates moderate definition quality with consistent naming patterns and comprehensive parameter schemas. All 22 tools follow a clear verb_noun naming convention (e.g., activities_list, channels_getChannel, videos_getStatistics) that aids discoverability. Parameter schemas are well-formed with proper type definitions (string, integer, array, boolean) and descriptions. However, tool descriptions are brief (10-30 characters on average), falling below the recommended 50-200 character range for LLM optimization. Description quality varies: some tools like 'search_list' (21 chars) and 'i18nLanguages_list' (10 chars) are too terse to guide LLM selection effectively. Output schemas are not documented in the provided source, making it impossible to verify what fields agents should expect from each tool. Error handling patterns and recovery guidance are not visible in the tool definitions. The Layer 1/2/3 architecture suggests composition is partially addressed, but tool chaining requirements (ensuring output IDs match input parameters) cannot be fully assessed from the available code snippets.
Public activity lookup for the documented Google Developers channel.
Public channel-section lookup for the documented Google Developers channel.
Normalized public detail lookup for the documented Google Developers channel.
Bounded public batch lookup without optional latest-upload fan-out.
Normalized public statistics lookup for the documented Google Developers channel.
Public channel lookup for the documented Google Developers channel.
Tool descriptions are consistently too brief (10-50 characters). Descriptions like 'Public activity lookup for the documented Google Developers channel.' (59 chars) and 'Public language-reference lookup requiring API-key read capability only.' (73 chars) lack context about WHEN to use the tool or its relationship to similar tools. LLMs cannot distinguish between 'channels_list' and 'channels_getChannel' based on current descriptions.
Output schemas are not documented for any tool. The provided source does not show what fields agents should expect from each tool's response. This forces LLMs to reason blindly about downstream tool inputs and risks context loss or failed chaining.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 62 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 25 | - | v1 |
Bounded public playlist lookup for the documented Google Developers channel.
Bounded public uploads-collection lookup for the documented Google Developers channel.
Public top-level comment-thread lookup for a documented public video.
Public reply lookup using one comment identifier from the approved thread fixture.
Public language-reference lookup requiring API-key read capability only.
Public content-region reference lookup requiring API-key read capability only.
Public uploads-playlist lookup for the documented Google Developers channel.
Normalized public uploads-playlist detail lookup for the documented channel fixture.
Bounded public uploads-playlist item lookup for the documented channel fixture.
Public playlist lookup for the documented Google Developers channel.
Bounded literal phrase search over the documented public uploads playlist.
Bounded public keyword search with no owner-scoped filters.
Public US video-category reference lookup.
Normalized public statistics lookup for the documented public video fixture.
Normalized public detail lookup for the documented public video fixture.
Public video lookup for a documented public video.
No error handling or recovery guidance visible in tool definitions. Tools provide no indication of retryable vs fatal errors, missing resource guidance (e.g., 'Channel not found. Try search_list() first'), or actionable error messages. This leaves agents unable to recover from failures gracefully.
Multiple tools operate on similar resources (e.g., channels_list vs channels_getChannel, playlists_list vs playlists_getPlaylist) but descriptions do not clarify the distinction. LLMs may conflate list (plural, discovery) with get (singular, detail), wasting tokens on wrong tool selection.
Parameters like 'part' (e.g., in activities_list, channels_list, channelSections_list) accept free-form comma-separated strings with vague descriptions ('Comma-separated list of one or more activity resource properties'). No enum of valid parts is provided, inviting invalid hallucinations from LLMs.
No pagination guidance or limits visible. Tools accepting 'maxResults' provide no min/max bounds or indication of default behavior. Tools like search_list could return thousands of items, blowing context windows without explicit limits and pagination tokens.