Skip to main content

PodLearn

io.github.blutrich/podlearnVersion 1.1.0

Search 4M+ podcasts & YouTube, transcribe any episode, search transcripts, generate AI lessons.

Status

Responds508 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
Last checked
Nov 14, 2026, 14:46 UTC
Latency
508 ms
Remotes responding
1 of 1
Sign-in
No sign-in
Hosting
Hosted outside the EU (detected)
Registry data as of
Nov 14, 2026, 21:12 UTC

Data from the official MCP Registry, checked by run.zero. How we check

Connect

Streamable HTTP
https://podlearn.ai/mcpResponds508 ms
No sign-in

Claude Code

claude mcp add --transport http podlearn https://podlearn.ai/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: podlearn
Remote MCP server URL: https://podlearn.ai/mcp

Cursor

{
  "mcpServers": {
    "podlearn": {
      "url": "https://podlearn.ai/mcp"
    }
  }
}

VS Code

code --add-mcp '{"name":"podlearn","type":"http","url":"https://podlearn.ai/mcp"}'

Built your own server? run.zero hosts MCP servers on European infrastructure.

Host your own MCP server on run.zero

Tools

25 tools

Tools of PodLearn
Read-only
Idempotent
Open world
browse_episodesOpen an interactive episode picker (cards with show, title, and status) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; everywhere else a markdown table is returned. Optional query filters by title/host.NoYesNot declaredNot declared
generate_lessonGenerate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status "completed". Requires an active subscription or available credits; no credit is deducted. Subsequent calls for the same episode return the cached lesson.NoNoNot declaredNot declared
generate_linkedin_postTurn an already-generated lesson into a LinkedIn-ready share post. Pass lesson_id directly OR episode_id (uses the most recent lesson generated by the caller for that episode). Lesson must exist — chain after generate_lesson if needed.NoNoNot declaredNot declared
get_episode_detailsFetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to transcribe first: start_transcription(episode_id) for an in-library episode (inherits its existing show/artwork/feed linkage automatically) or transcribe_url(audio_url, title, feed_id, podcast_name) for a URL not yet in the library.NoYesNot declaredNot declared
get_episode_usageGet the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period.NoYesNot declaredNot declared
get_lesson_contentFetch the full body of one AI-generated lesson (title, summary, key takeaways, structured sections). Use to retrieve prior synthesis — for creating a NEW one call generate_lesson.NoYesNot declaredNot declared
get_podcast_detailsFetch full metadata for one podcast in the PodLearn library, including its episode count. The podcast must already be in the local DB (source=local in search_podcasts results).NoYesNot declaredNot declared
get_saved_itemsList the caller's saved/bookmarked episodes and lessons.NoYesNot declaredNot declared
get_subscription_statusGet the caller's subscription plan + active/expired status + period end.NoYesNot declaredNot declared
get_transcriptionFetch transcript text for a completed episode. PAGINATED — returns up to 120,000 characters per call (Claude.ai/Desktop caps a tool result at ~150k chars). Most transcripts fit in one call; only very long episodes page. If the response has `has_more: true`, call again with `offset: <next_offset>`. For focused look-up (a topic, quote, timestamp) prefer search_transcription.NoYesNot declaredNot declared
get_transcription_segmentsFetch timestamped transcript segments. Use when the user wants timestamps — "jump to where they discuss X", chapter boundaries, durations of specific parts.NoYesNot declaredNot declared
get_user_creditsGet the caller's remaining transcription credits.NoYesNot declaredNot declared
list_episodesList episodes already in the local DB for a specific podcast. Requires podcast_id (use search_podcasts first if you only have a name). For cross-podcast search use search_episodes; for canonical PodcastIndex listings use list_feed_episodes.NoYesNot declaredNot declared
list_feed_episodesFetch the canonical episode list for a podcast directly from PodcastIndex (the upstream RSS index). NO COST — pure discovery. Each episode is enriched with `in_library`, `episode_id` (if already ingested), and `transcription_status`. For episodes you want to ingest: call transcribe_url(audio_url, title, feed_id, podcast_name) — passing feed_id/podcast_name lands the episode under its real show. For episodes already in_library, use start_transcription(episode_id) instead.NoYesNot declaredNot declared
list_lessonsList the calling user's saved AI-generated lessons.NoYesNot declaredNot declared
list_podcastsList podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_podcasts.NoYesNot declaredNot declared
remove_saved_itemPermanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items.YesNoNot declaredNot declared
save_itemBookmark an episode or lesson for the caller.NoNoNot declaredNot declared
search_episodesCross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that aren't yet ingested, use list_feed_episodes instead. `status: "transcribed"` filters to ready-to-read; `status: "untranscribed"` to available-to-transcribe.NoYesNot declaredNot declared
search_podcastsSearch PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podcastindex|spotify`. First move when the user names a podcast/host but you don't have its id.NoYesNot declaredNot declared
search_transcriptionKeyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked about a specific topic — server does this faster + cheaper on context.NoYesNot declaredNot declared
search_youtubeDiscover YouTube videos by topic/keyword across all of YouTube. Use when the user wants to learn from a talk/interview/lecture and has no URL — especially when search_podcasts / search_episodes find nothing (much long-form content is YouTube-first). NO COST: pure discovery. Returns rows with a ready-to-transcribe `url`; ingesting one with transcribe_url(url, title) costs 1 credit.NoYesNot declaredNot declared
start_transcriptionKick off transcription on an episode ALREADY in the library. Use only when the episode row exists and transcription_status is not "completed". Inherits the episode's existing show, artwork, and feed linkage automatically — no need to pass podcast context. For audio not yet in the library, use transcribe_url. COSTS 1 CREDIT (or subscription quota).NoNoNot declaredNot declared
transcribe_feedBulk/season transcription — kick off transcription for up to `max` (cap 25) not-yet-transcribed episodes of a podcast feed in ONE call. Pass the `feed_id` from search_podcasts / list_feed_episodes. Already-transcribed episodes are skipped free. Costs 1 credit per newly enqueued episode (or one unit of subscription quota). Enqueue-and-poll: returns each enqueued episode_id; poll get_episode_details until transcription_status is "completed".NoNoNot declaredNot declared
transcribe_urlIngest and transcribe an EXTERNAL / arbitrary audio URL — a URL the user pasted, or audio not reachable through the index. Creates a STANDALONE episode row. If the episode is already in the library (it has an episode_id), prefer start_transcription(episode_id) instead — it inherits the episode's existing show, artwork, and feed linkage automatically. Consumes 1 transcription credit, or one unit of subscription quota; the credit is refunded automatically if transcription fails. Pass feed_id / podcast_name when you already know the parent show (e.g. from search_podcasts or list_feed_episodes) so the episode lands under its real show instead of appearing as unidentified "External audio". Returns the new episode_id. Transcription is asynchronous on the fallback path — poll get_episode_details until transcription_status is "completed".NoNoNot declaredNot declared

Details

Registry status
Active
Published
Oct 18, 2026
Updated
Oct 18, 2026
Categories (suggested)
Design and mediaMarketing and SEOSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
GDPR
Not declared

Are you the operator? Claim this listing