PodLearn

io.github.blutrich由 GitHub 账号 blutrich 发布v1.1.0更新于 Oct 24, 2026

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

已验证Streamable HTTP可网页运行网页搜索与抓取知识与记忆媒体与设计

概览

AI 生成的概览

PodLearn 可搜索播客与 YouTube、转写单集、检索转写文本,并据此生成 AI 课程笔记。

可以做什么
  • 搜索和浏览播客、单集与 YouTube 视频,并可解析 Spotify 或 Apple Podcasts 链接
  • 获取播客、单集与订阅源详情,列出 PodcastIndex 上游订阅源中的单集
  • 转写单个音频链接、库内单集,或批量转写整个订阅源
  • 读取转写全文、在单集转写内检索关键词,并获取带时间戳的分段
  • 基于已完成的转写生成结构化 AI 课程,并把课程转成 LinkedIn 分享帖
  • 管理收藏的单集与课程,查看订阅方案、剩余额度和使用情况
适用场景
适合让助手把冗长的访谈、演讲或讲座变成可读的转写稿和结构化笔记,定位某个话题被讨论的具体位置,或一次性批量处理一整季播客而无需亲自收听。
运行要求
远程 Streamable HTTP 端点 podlearn.ai。需要 PodLearn 账号:交互式客户端通过浏览器 OAuth 登录,无浏览器客户端需在 Authorization 请求头中提供个人令牌。需要网络访问。
安装前请注意
转写和课程生成会消耗 PodLearn 额度(初始赠送 2 个);读取和检索已有转写免费。OAuth 登录可授予读写权限,服务器能够保存或永久删除收藏项。个人令牌以 bearer 凭据形式发送,不应放入 URL。

安装

在 SourceWeft 中

  1. 打开 控制台中的 PodLearn,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.blutrich%2Fpodlearn/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

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

README

🎧 PodLearn for Claude Code

Stop listening. Start learning.

The podcast & video knowledge engine, right inside Claude Code. Drop a link. Get a verbatim transcript, a searchable archive, and an AI lesson in seconds.

[Claude Code plugin] [MCP included] [Free to start] [License: AGPL-3.0]


Some of the best thinking on the planet is locked inside hours of audio you'll never have time for. PodLearn unlocks it. Hand Claude any podcast or YouTube URL and it transcribes the whole thing (yes, even long talks with no captions), makes every word searchable, and distills the ideas into a structured lesson. No tab-switching, no copy-paste, no "I'll get to it later."

One install adds the PodLearn skill and MCP server to Claude Code. The skill handles the routing; the MCP does the work. You just talk.

✨ Why people use it

  • ⏱️ Hours → minutes. A 2-hour interview becomes a transcript + lesson you skim in five.
  • 🔎 Find the exact moment. Full-text search across every transcript, with citations. "Where did they talk about pricing?" jumps you straight there.
  • ▶️ YouTube that actually works. Paste any video, captions or not. Conference talks, lectures, channel deep-dives, all transcribed natively.
  • 📚 Bulk a whole season. transcribe_feed ingests an entire podcast feed in one shot, not episode-by-episode.
  • 🧠 Lessons, not just text. Auto-generated key takeaways and structured notes you can act on.
  • 🤖 Agent-native. It's a real MCP server, so every call composes with the rest of your Claude workflow (turn a lesson into a LinkedIn post, feed quotes into a doc, whatever).

💬 What you can ask

"What podcasts do you have about AI agents?" "Transcribe this and make me a lesson: ‹youtube or podcast URL›" "Find the best quotes about pricing from ‹episode›" "Transcribe the last 10 episodes of ‹podcast› and summarize the themes." "Turn that lesson into a LinkedIn post."

⚡ Install (60 seconds)

1. Have a PodLearn account (free, 2 credits to try) at podlearn.ai. No token needed: you sign in once in your browser.

2. Add the marketplace — in Claude Code (run this on its own, wait for confirmation):

/plugin marketplace add blutrich/podlearn-plugin

3. Install the plugin — then run:

/plugin install podlearn@podlearn

⚠️ Run them one at a time — they're two separate slash commands. Pasting both lines at once makes Claude treat the second as part of the first.

4. Restart Claude Code (or claude reload).

5. Sign in. Run /mcp, pick podlearn, choose Authenticate, and approve PodLearn in the browser. Approve both read and write if you want Claude to transcribe and save things for you (it still asks before spending credits). Then start asking.

That's it. The plugin ships the skill and the MCP, so there's no separate claude mcp add step and nothing to wire up by hand.

📦 What's inside

Skill (podlearn)Routes your intent through the MCP tools so you never think about which one to call.
MCP serversearch_podcasts · search_youtube · search_episodes · list_feed_episodes · transcribe_url · transcribe_feed (bulk/season) · get_transcription · search_transcription · generate_lesson · generate_linkedin_post · and more.

🔌 Just the MCP server (without the plugin)

The plugin already bundles the server, so most people don't need this. But if you want the MCP on its own — in Claude Desktop, Cursor, ChatGPT, or any other MCP client, or in Claude Code without the skill — add it directly.

Claude app (web, desktop, mobile): Settings → Connectors → Add custom connector → paste https://podlearn.ai/mcp → Connect, and sign in.

Claude Code:

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

Then /mcp → podlearn → Authenticate.

Codex:

bash
codex mcp add podlearn --url https://podlearn.ai/mcpcodex mcp login podlearn --scopes mcp:read,mcp:write

Any MCP client — point it at the Streamable HTTP endpoint and sign in with OAuth:

FieldValue
TransportStreamable HTTP (http)
URLhttps://podlearn.ai/mcp
AuthOAuth (sign in with your PodLearn account)

Headless client that can't open a browser? Create a personal token in Settings → API Tokens and send it as the Authorization: Bearer … header. Never put it in the URL: tokens in the query string are ignored, and calls will hang waiting for a sign-in. Full setup guide: podlearn.ai/mcp-docs.

🔄 Manage

/plugin marketplace update podlearn      # pull the latest/plugin uninstall podlearn@podlearn      # remove the plugin/plugin marketplace remove podlearn      # remove the marketplace

🔐 Notes

  • Your account, your permissions. The MCP signs in with OAuth; you choose read-only or read + write in the browser. Auth error or "insufficient scope"? Run /mcp → podlearn → re-authenticate. To get write access after a read-only sign-in, remove and re-add the server first.
  • Upgrading from 1.0.x? The old token prompt is gone. Update the marketplace, reinstall, restart, then sign in with /mcp. You can revoke the old pl_mcp_… token in Settings → API Tokens.
  • Transparent pricing. Reading and searching transcripts already in your library is free. Paid actions (transcribe_url, transcribe_feed, generate_lesson) spend PodLearn credits, and the skill confirms the cost before charging. Start with 2 free credits; top up or subscribe at podlearn.ai.

🌐 Also available

PodLearn runs as a web app at podlearn.ai and as an MCP server for Claude Desktop, ChatGPT, Cursor, and any MCP-compatible client. This plugin is the fastest way to use it from Claude Code.

📄 License

AGPL-3.0 — © 2026 Ofer Blutrich. Built on the PodLearn platform.

来源:README.md,提交 6950c05

工具

25

search_podcasts

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 user names a podcast/host but you don't have its id.

输入参数query必填

list_podcasts

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.

输入参数limitoffsetcategory

get_podcast_details

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).

输入参数podcast_id必填

search_episodes

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_episodes instead. `status: "transcribed"` filters to ready-to-read; `status: "untranscribed"` to available-to-transcribe.

输入参数limitquery必填offsetstatus

list_feed_episodes

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 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.

输入参数maxsincebeforefeed_id必填

list_episodes

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 PodcastIndex listings use list_feed_episodes.

输入参数limitoffsetstatuspodcast_id必填

get_episode_details

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(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.

输入参数episode_id必填

transcribe_url

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 (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".

输入参数title必填feed_idlanguageaudio_url必填podcast_idpodcast_name

transcribe_feed

Transcribe feed (bulk)

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. Already-transcribed episodes are skipped free. COSTS 1 credit per newly enqueued episode (or subscription quota) — CONFIRM the cost with the user first. Enqueue-and-poll: returns each enqueued episode_id; poll get_episode_details until transcription_status is "completed".

输入参数maxsincebeforefeed_id必填

start_transcription

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 linkage automatically — no need to pass podcast context. For audio not yet in the library, use transcribe_url. COSTS 1 CREDIT (or subscription quota).

输入参数episode_id必填

get_transcription

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 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.

输入参数offsetmax_charsepisode_id必填

search_transcription

Search transcript

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 faster + cheaper on context.

输入参数query必填episode_id必填

get_transcription_segments

Transcript segments

Fetch timestamped transcript segments. Use when the user wants timestamps — "jump to where they discuss X", chapter boundaries, durations of specific parts.

输入参数end_timeepisode_id必填start_time

list_lessons

List lessons

List the calling user's saved AI-generated lessons.

输入参数limitoffsetepisode_id

get_lesson_content

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.

输入参数lesson_id必填

generate_lesson

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 subscription quota, on first generation for an episode; subsequent calls return the cached lesson at no cost.

输入参数episode_id必填

get_subscription_status

Subscription status

Get the caller's subscription plan + active/expired status + period end.

无需输入参数。

get_user_credits

User credits

Get the caller's remaining transcription credits.

无需输入参数。

get_episode_usage

Episode usage

Get the caller's episode-access usage stats — how many episodes they've transcribed/read this billing period.

输入参数limitoffset

get_saved_items

Saved items

List the caller's saved/bookmarked episodes and lessons.

输入参数limitoffset

save_item

Save item

Bookmark an episode or lesson for the caller.

输入参数item_id必填item_type必填

remove_saved_item

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.

输入参数saved_item_id必填

generate_linkedin_post

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 — chain after generate_lesson if needed.

输入参数lesson_idepisode_id

search_youtube

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 nothing (much long-form content is YouTube-first). NO COST: pure discovery. Returns rows with a ready-to-transcribe `url`; to ingest one, confirm cost and call transcribe_url(url, title).

输入参数maxquery必填

browse_episodes

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 is returned. Optional query filters by title/host.

输入参数limitquery

版本历史

2
  1. v1.1.0最新Oct 18, 2026
  2. v1.0.0Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。