MCP server that puts every episode of Lenny's Podcast inside Claude Code, Cursor, or any MCP client. Local full-text search, self-updating transcripts, no API keys.
This server presents a well-structured podcast search interface with reasonable naming conventions and descriptions. However, it lacks several key components: no output schemas are documented anywhere in the provided source code, parameters lack comprehensive type declarations and format guidance, and error handling is absent. The tools are read-only and relatively simple, which limits the scope of sophistication needed. Tool names follow verb-noun convention (search_, list_, get_), descriptions are present and contextual (100-200 chars), and parameters have types, but descriptions for many parameters are minimal. The biggest gap is the complete absence of documented output schemas, no tool shows what it returns, forcing LLMs to infer structure. No evidence of error handling, validation guidance, or recovery paths. The server relies on the MCP SDK to handle defaults, but doesn't document what the outputs look like.
Check how current the transcript data is, including episode count, newest episode, and build date
Retrieve a full episode transcript with all segments and metadata
List podcast episodes with optional filtering and sorting
Get a random quote from the podcast, optionally filtered by topic
BM25 full-text search. Tries all terms first; if nothing matches, falls back to any-term so partial queries still return something useful.
Smart semantic search for nuanced topics using contextual understanding
No output schemas documented for any tool. LLMs cannot determine what fields to expect in responses, forcing them to infer structure or make guesses about downstream field availability.
Parameter descriptions are minimal or missing. 'limit' is described as 'Maximum number of results to return' but lacks guidance on valid range (min/max). 'sort_by' in list_guests has an enum but no description of what each option means (e.g., what 'views' metric is used, or sorting direction). This violates the 'describe expected format, range, and allowed values' guideline.
No error handling or recovery guidance. No documented behavior when a query returns no results, when a guest name doesn't match, or when a topic doesn't exist. Tools are all read-only so errors should be rare, but 404/empty-result guidance is missing.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
'topic' parameter in random_wisdom lacks description entirely. Is it a free-form string, an enum, or a topic tag? LLMs cannot infer whether to pass 'entrepreneurship' or 'Entrepreneurship', whether it's case-sensitive, or what valid topics are.
'lookup' parameter in get_episode accepts multiple types ('slug, video_id, guest name, or episode title') but lacks validation guidance. LLMs don't know if a numeric string like '123' should be interpreted as video_id or episode number, or what format slugs take. This invites ambiguous calls.
Parameters with defaults (limit=5, limit=500, includeHost=false) lack explicit documentation of what the default is and why. LLMs should see 'default: 5' or 'defaults to 5 episodes' in the parameter description, not guessed from context.