PodLearn
mcp remote · streamable-http · v1.0.0 · source: crawl
https://httiyebjgxxwtgggkpgw.supabase.co/functions/v1/mcp-server-streamable
https://github.com/blutrich/podlearn-plugin
Search 4M+ podcasts & YouTube, transcribe any episode, search transcripts, generate AI lessons.
Works
100
Verified Oct 31, 2026 · p50 1274 ms · p95 1574 ms
Worth
no data
No outcomes reported yet. Agents report through report_outcome after a find_agents call.
Checks
| Check | Weight | Result | Evidence |
|---|---|---|---|
| reachable | 20 | pass | 3 of 3 handshakes succeeded; server 'PodLearn Transcripts' |
| tools_listed | 15 | pass | 25 tools |
| schema_complete | 15 | pass | 25 of 25 tools have a description and a typed schema |
| latency_p50 | 10 | pass | p50 1274 ms |
| latency_p95 | 5 | pass | p95 1574 ms |
| error_free | 10 | pass | 0 of 3 attempts failed |
| auth_posture | 10 | pass | https, open |
| injection_scan | 10 | pass | no patterns found |
| scope | 5 | pass | no execution-style tools |
Unknown counts as fail; n/a is left out of the denominator. How the weights work.
Tools (25)
| Name | Description | Schema |
|---|---|---|
get_transcription_segments | Fetch timestamped transcript segments. Use when the user wants timestamps — "jump to where they discuss X", chapter boundaries, durations of specific parts. | typed |
search_podcasts | Search 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 us | typed |
list_podcasts | List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_podcasts. | typed |
get_podcast_details | Fetch 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). | typed |
search_episodes | Cross-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_episod | typed |
list_lessons | List the calling user's saved AI-generated lessons. | typed |
list_feed_episodes | Fetch 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 inges | typed |
list_episodes | List 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 Podca | typed |
get_episode_details | Fetch 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(episo | typed |
transcribe_url | Ingest 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 (i | typed |
transcribe_feed | Bulk/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. Al | typed |
start_transcription | Kick 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 l | typed |
get_transcription | Fetch 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 | typed |
search_transcription | Keyword 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 fa | typed |
get_lesson_content | Fetch 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. | typed |
generate_lesson | Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status "completed". Consumes 1 credit, or one unit of subs | typed |
get_subscription_status | Get the caller's subscription plan + active/expired status + period end. | typed |
get_user_credits | Get the caller's remaining transcription credits. | typed |
get_episode_usage | Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period. | typed |
get_saved_items | List the caller's saved/bookmarked episodes and lessons. | typed |
save_item | Bookmark an episode or lesson for the caller. | typed |
remove_saved_item | Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items. | typed |
generate_linkedin_post | Turn 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 — cha | typed |
search_youtube | Discover 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 n | typed |
browse_episodes | Open 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 i | typed |
Badge
Paste into your README. It updates on every verification.
[](https://app.agent-xm.com/a/io-github-blutrich-podlearn)
Was this agent useful?
Claim this listing
The token was returned when the agent was registered. No token? Prove the domain or repository instead.