Generate LinkedIn post drafts from YouTube videos
The LinkedIn Post Generator defines 6 tools with explicit Zod schemas and descriptions. Tool naming is action-oriented (set_, check_, extract_, summarize_, generate_) which follows patterns well. Schemas are present and properly typed using Zod with enums, string constraints, and optional fields. However, several parameter descriptions lack actionable context and constraint details. Output schemas are not documented, responses are JSON-stringified but lack field-level documentation. Error handling exists but is generic. The server demonstrates competent schema construction but falls short of production-grade definition quality due to incomplete parameter guidance and undocumented response structures.
Check the status of your API keys
Extract transcript from a YouTube video
Generate a LinkedIn post draft from a video summary
Set your API keys for OpenAI and YouTube (optional)
Summarize a video transcript
Generate a LinkedIn post draft directly from a YouTube video URL
Output schemas are not documented. All tools return JSON-stringified responses, but the caller has no spec for what fields to expect (e.g., does extract_transcript return {success, transcript} or {transcript, metadata, duration}?). LLMs cannot plan chaining without knowing what data they'll receive.
Parameter descriptions lack actionable constraints and format guidance. For example, openaiApiKey description says 'Your OpenAI API key' but doesn't specify format (sk-...), length, or what happens on invalid key. Descriptions should state: 'OpenAI API key, format: sk-<40+ alphanumeric chars>. Invalid keys will cause tools to fail with authentication error.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 11 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Tool dependencies are not explicitly documented. set_api_keys must be called before other tools, but this prerequisite is only mentioned in error handling. Descriptions should state: 'Requires OpenAI API key to be set via set_api_keys() first.' Dependencies guide agent planning and prevent wasted failed calls.
Error messages are generic and do not guide recovery. Error response is {success: false, error: error.message}, if OpenAI key is missing, the response is 'OpenAI API key not set. Please use the set_api_keys tool first.' This is acceptable but doesn't include the invalid value or explain why it failed. Critical errors like API rate limits or network timeouts are not distinguished from recoverable errors.
Parameter descriptions are vague on enum choices. For tone in summarize_transcript, the description says 'Tone of the summary' but doesn't explain when to use 'educational' vs 'inspirational' vs 'professional' vs 'conversational'. LLMs must guess the semantic difference, increasing wrong selections. Add: 'educational: fact-based and structured (e.g., tutorials, how-tos); inspirational: motivational and emotional (e.g., success stories); professional: business-focused and credible (default for B2B); conversational: friendly and relatable (for social engagement).'
youtube_to_linkedin_post duplicates parameters unnecessarily. It accepts both 'tone' (for post) and 'summaryTone' (for transcript), which is confusing. Either compose this tool from individual calls, or clarify in the description why two tone parameters exist and how they interact.