Model Context Protocol server for querying podcast transcripts via Claude Desktop. Uses Cloudflare Workers OAuth Provider for authentication. Provides semantic search across transcripts, episode details, podcast comparisons, and personal memory layer.
Podgest MCP has well-structured tool definitions with clear naming (verb_noun pattern), comprehensive descriptions (avg 150+ chars), and complete JSON schemas with typed parameters. All 12 tools are explicitly registered with input schemas and descriptions. However, output schemas are not documented, error handling guidance is minimal, and some parameter descriptions lack constraint details (ranges, enums, formats). Tool composition is strong, each tool has a single responsibility and clear chaining via IDs. Security is sound (no secrets in params, auth via Bearer token). Missing: per-tool error recovery hints, output schema documentation, and validation constraint details in descriptions.
Find how different podcasts covered the same topic. Returns contrasting perspectives, grouped by each episode's real show name (aggregator feeds are resolved to the underlying shows).
Delete a saved memory by ID.
Get the script/transcript of a Podgest daily digest episode. If no date is specified, returns the latest digest.
Get detailed information about a specific episode including summary, topics, and link to full transcript.
Get the full transcript text for a specific podcast episode. Returns the complete transcript content directly.
List all saved memories, optionally filtered by namespace.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields without knowing response structure. E.g., search_podcasts returns 'relevant excerpts with source attribution' but field names, types, and pagination structure are not specified.
Parameter constraints lack specificity. 'limit' parameters state 'default: 5, max: 20' but no minimum or type validation rules. 'days_back' has no range constraints. Descriptions should include format rules (e.g., 'integer, 1 - 365') to guide LLM input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
List all podcast subscriptions. A subscription may be an aggregator feed (e.g. a ListenNotes playlist) that bundles many different shows into one RSS feed - these are marked is_aggregator=true and include shows_included listing the real shows inside. Treat those shows as if the user subscribed to each individually; other tools already resolve episodes to their real show names.
Get links to listen to a full podcast episode. Returns iOS app deep links (open Spotify/Apple Podcasts directly without browser) plus web fallbacks and direct audio URL.
Semantically search saved memories and return the most relevant ones with similarity scores. Optionally restrict to a namespace (e.g. 'podcasts', 'trading').
Get the most recent episodes across all subscribed podcasts. podcast_name is always the episode's real show name, even when the episode arrived via an aggregator feed.
Save a memory (note, fact, or insight) for later semantic recall. Memories are organized into freeform namespaces (suggested: 'podcasts', 'trading'; default: 'general'). Returns the new memory's id.
Semantic search across all podcast transcripts. Returns relevant excerpts with source attribution (podcast_name is the episode's real show name, even for episodes that arrived via an aggregator feed).
Error handling lacks recovery guidance. No tool description explains what to do if a search returns no results, an episode_id is invalid, or a memory_id does not exist. Descriptions should include 'If X fails, try Y' hints.
Destructive tool 'forget' lacks confirmation or dry-run pattern. Deleting a memory is irreversible; no description warns the LLM or suggests a confirmation step before execution.
Tool composition: 'list_podcasts' returns aggregator metadata but does not explain how to use it with other tools. Description should clarify that aggregator feeds are resolved by other tools, reducing need for manual filtering.