{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_tcf9zgfwxunp","handle":"podlearn","url":"https://wellknown.network/agents/podlearn","links":{"self":"https://wellknown.network/agents/podlearn/record.json","html":"https://wellknown.network/agents/podlearn","markdown":"https://wellknown.network/agents/podlearn/record.md","api":"https://wellknown.network/api/v1/agents/podlearn","status":"https://wellknown.network/api/v1/agents/podlearn/status","claim":"https://wellknown.network/agents/podlearn/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/podlearn/claim.json","badge":"https://wellknown.network/agents/podlearn/badge.svg","openapi":"https://wellknown.network/openapi.json"},"ard":{"identifier":"urn:air:httiyebjgxxwtgggkpgw.supabase.co:server:podlearn","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"PodLearn","summary":"Search 4M+ podcasts & YouTube, transcribe any episode, search transcripts, generate AI lessons.","description":"Search 4M+ podcasts & YouTube, transcribe any episode, search transcripts, generate AI lessons.","publisher":{"name":"blutrich","url":null},"homepage":"https://podlearn.ai","repository":"https://github.com/blutrich/podlearn-plugin","version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://httiyebjgxxwtgggkpgw.supabase.co/functions/v1/mcp-server-streamable","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-07-10T17:08:55.680429Z","publishedAt":"2026-07-10T17:08:55.680429Z","registryName":"io.github.blutrich/podlearn"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"media.speech-recognition","name":"Speech Recognition","confidence":1,"provenance":"derived"},{"slug":"data.news","name":"News & Feeds","confidence":0.919,"provenance":"derived"},{"slug":"research.web","name":"Deep Web Research","confidence":0.54,"provenance":"derived"},{"slug":"content.social","name":"Social Media","confidence":0.525,"provenance":"derived"},{"slug":"content.writing","name":"Writing & Editing","confidence":0.51,"provenance":"derived"}],"categories":["content","data","media","research"]},"observed":{"status":"live","statusReason":"Responded 1h ago.","lastOkAt":"2026-09-08T05:23:10.407Z","lastProbedAt":"2026-09-08T05:23:10.407Z","statusComputedAt":"2026-09-08T05:38:36.284Z","reliability30d":{"probes":5,"successRate":1,"p50Ms":266},"latestObservations":[{"at":"2026-09-08T05:23:10.407Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":258,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-09-07T23:24:28.628Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":252,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-09-07T16:24:52.202Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":176,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-09-07T08:30:28.734Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":294,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-09-07T02:24:28.738Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":308,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-09-06T19:21:35.795Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":279,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-09-06T12:25:09.506Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":346,"error":null,"detail":{"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"toolCount":25,"serverName":"PodLearn Transcripts","capabilities":["tools","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"search_podcasts","description":"Search PodLearn library AND PodcastIndex.org (4M+ podcasts) by keyword. Also resolves Spotify/Apple Podcasts URLs. Returns rows tagged with `source: local|podca"},{"name":"list_podcasts","description":"List podcasts already in the PodLearn library, optionally filtered by category. Returns most-recently-added first. For discovery beyond the library use search_p"},{"name":"get_podcast_details","description":"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_po"},{"name":"search_episodes","description":"Cross-podcast episode search by title/description AND parent podcast name/author. Returns local episodes only — for podcasts discoverable on PodcastIndex that a"},{"name":"list_feed_episodes","description":"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_"},{"name":"list_episodes","description":"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 "},{"name":"get_episode_details","description":"Fetch full metadata for one episode including transcription_status and lesson_generation_status. Tells you whether get_transcription is ready or you need to tra"},{"name":"transcribe_url","description":"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 "},{"name":"transcribe_feed","description":"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 "},{"name":"start_transcription","description":"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 epis"},{"name":"get_transcription","description":"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"},{"name":"search_transcription","description":"Keyword search WITHIN a single episode's transcript. Returns matching chunks with surrounding context. Use instead of get_transcription when the user asked abou"},{"name":"get_transcription_segments","description":"Fetch timestamped transcript segments. Use when the user wants timestamps — \"jump to where they discuss X\", chapter boundaries, durations of specific parts."},{"name":"list_lessons","description":"List the calling user's saved AI-generated lessons."},{"name":"get_lesson_content","description":"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 ca"},{"name":"generate_lesson","description":"Generate a structured AI lesson (summary, key takeaways, sections) from a completed transcription. Requires the episode to have transcription_status \"completed\""},{"name":"get_subscription_status","description":"Get the caller's subscription plan + active/expired status + period end."},{"name":"get_user_credits","description":"Get the caller's remaining transcription credits."},{"name":"get_episode_usage","description":"Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period."},{"name":"get_saved_items","description":"List the caller's saved/bookmarked episodes and lessons."},{"name":"save_item","description":"Bookmark an episode or lesson for the caller."},{"name":"remove_saved_item","description":"Permanently remove a saved/bookmarked episode or lesson from the caller's collection. The saved_item_id comes from get_saved_items."},{"name":"generate_linkedin_post","description":"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 fo"},{"name":"search_youtube","description":"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 "},{"name":"browse_episodes","description":"Open an interactive episode picker (card grid with thumbnails) for the user to pick an episode to read. On hosts that render MCP Apps the grid is clickable; eve"}],"package":null},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.blutrich/podlearn","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.blutrich%2Fpodlearn","firstSeenAt":"2026-09-06T11:21:21.439Z","fetchedAt":"2026-09-06T11:21:21.439Z","normalizedAt":"2026-09-06T11:21:21.439Z"}]},"firstSeenAt":"2026-09-06T11:21:21.439Z","updatedAt":"2026-09-08T05:39:13.547Z"}