MCP Server showcasing demos from BiznagaFest 2025 conference talk on AI with MCP Servers, featuring YouTube video search, channel search with elicitation, and AI-powered video title generation using sampling.
This server has critical definition quality gaps across all three tools. While tool names follow verb_noun convention (search_video, search_channel, generate_video_title), the parameter descriptions are minimal, schemas lack proper JSON Schema validation, and there is no documented output structure. The descriptions themselves are basic (10-50 chars) and do not explain WHEN to use each tool or WHAT is returned. Parameter types are declared in the code but the input schema object shown uses raw JS types ('type': 'string') rather than proper JSON Schema with validation constraints. No output schemas are documented. Error handling is present in the code (logger.trace/debug) but no recovery guidance is returned to the LLM. The sampling-based tool (generate_video_title) uses deprecated sampling pattern without explanation. Overall, these are minimal proof-of-concept definitions that would not pass production code review.
Genera un título para un video de YouTube usando sampling (modelos del cliente).
Busca canales en YouTube basados en una consulta dada.
Busca videos en YouTube basados en una consulta dada.
No output schemas documented. Tools return results from YouTube API but LLM has no formal description of returned fields, structure, or type. Agents cannot plan downstream operations or extract specific data reliably.
Minimal parameter descriptions. 'La consulta no puede estar vacía' (query cannot be empty) is a constraint, not a description. Missing: what the query searches for, expected format, examples of valid queries. 'Número máximo de resultados (1-50, opcional)' is a constraint summary, not actionable guidance for the LLM.
Tool descriptions are too short (10-50 chars). 'Busca videos en YouTube basados en una consulta dada' lacks context: WHEN to call this vs search_channel? What does it return? Are results paginated? No answer to any of these, forcing LLM to guess.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 41 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Semantic confusion: generate_video_title accepts 'stack' parameter (tools/frameworks) but description says it 'generates a title for a YouTube video using sampling'. Relationship between stack and title generation is unexplained. Is this a code example titleizer? A video about a tech stack?
Deprecated sampling pattern in use. generate_video_title description states 'using sampling (modelos del cliente)', relies on deprecated server-initiated Sampling (removed from spec as of 2026-07-28). Should integrate directly with LLM provider API instead.
Schemas use raw JS object syntax ({query: {type: 'string'}, ...}) instead of proper JSON Schema. No $schema declaration, no validation constraints beyond string type, no format specifiers. Cannot be parsed by schema validators or properly enforced by client libraries.
No error recovery guidance in tool output. Code logs errors but does not return actionable messages to the LLM. E.g., if YouTube API key is invalid, the error should guide the agent: 'YouTube API key is missing or invalid. Verify YOUTUBE_API_KEY environment variable is set.'
No pagination guidance. maxResults parameter accepts 1-50 but tools do not document whether they support offset/cursor, whether results are paginated in responses, or what a 'total count' looks like. Large result sets could blow context window without proper pagination handling.