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 分

    請在儲存庫或註冊中心條目中宣告授權條款。