Model Context Protocol server that automates generating LinkedIn post drafts from YouTube videos
Server has 4 tools with basic schemas and descriptions, but significant gaps limit production readiness. Tool names lack clear action verbs (extract_transcript is acceptable, but generate_summary/generate_post are generic). Descriptions are present but brief (avg ~50 chars, below 194-char baseline). Parameter descriptions exist but lack actionable constraints, enums for tone/audience/voice are present but format/range guidance is sparse. No output schemas documented. Error handling and recovery guidance absent. Security concern: openai_api_key and youtube_api_key exposed as optional parameters (should use server-side injection). No tool annotations (readOnlyHint, etc.). Overall structure is functional but lacks production-grade polish.
Extract transcript from a YouTube video
Format the LinkedIn post for output
Generate a LinkedIn post from a video summary
Generate a summary from a video transcript
API keys exposed as tool parameters (openai_api_key, youtube_api_key). Credentials must never appear in tool params, use server-side secret injection via environment variables or vault. Agent traces log all parameters, leaking secrets into logs and prompt history.
No output schemas documented. LLMs cannot plan downstream calls or extract required fields without knowing response structure. Each tool must declare what fields it returns and their types.
Tool descriptions are too brief (avg ~45 chars, well below 194-char baseline). Lack context on WHEN to use each tool, prerequisites, and what it returns. E.g., 'Generate a summary from a video transcript' doesn't explain tone/audience impact or expected output length.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | <=2025-11-25 | v2 |
No error handling or recovery guidance. If extract_transcript fails (invalid URL, transcript unavailable), the tool provides no actionable next step. Error responses must tell the LLM what to do: 'Transcript not available. Try a different video or check the URL.'
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). All tools are read-only, but this is not declared. Clients cannot determine which tools are safe to retry or have side effects.